diff --git a/.github/workflows/create-merge-release-into-dev-pr.yml b/.github/workflows/create-merge-release-into-dev-pr.yml index 9f41f323cae5..2b95176e07e7 100644 --- a/.github/workflows/create-merge-release-into-dev-pr.yml +++ b/.github/workflows/create-merge-release-into-dev-pr.yml @@ -16,7 +16,7 @@ jobs: steps: - id: find_latest_release env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.OPENPROJECT_CI_GH_TOKEN }} GITHUB_REPOSITORY: ${{ github.repository }} run: | BRANCH=$(curl -H "Authorization: token $GITHUB_TOKEN" \ @@ -79,11 +79,19 @@ jobs: echo "Successfully merged $RELEASE_BRANCH into $BASE_BRANCH and pushed" else # Close all previous PRs with label - for pr_number in $(gh pr list --label create-merge-release-into-dev-pr --json number --jq='.[].number'); do - gh pr close "$pr_number" + pr_numbers=$(gh pr list --label create-merge-release-into-dev-pr --json number --jq='.[].number') + for pr_number in $pr_numbers; do + gh pr close "$pr_number" --delete-branch done - TEMP_BRANCH="$RELEASE_BRANCH-$(date "+%Y%m%d%H%M%S")" + pr_body=$( + echo 'Created by GitHub action' + for pr_number in $pr_numbers; do + echo "Replaces #$pr_number" + done + ) + + TEMP_BRANCH="merge-$RELEASE_BRANCH-$(date "+%Y%m%d%H%M%S")" git branch "$TEMP_BRANCH" "$RELEASE_BRANCH" @@ -93,10 +101,10 @@ jobs: --base "$BASE_BRANCH" \ --head "$TEMP_BRANCH" \ --title "Merge $RELEASE_BRANCH into $BASE_BRANCH" \ - --body 'Created by GitHub action' \ + --body "$pr_body" \ --label create-merge-release-into-dev-pr echo "Created a PR to merge $RELEASE_BRANCH ($TEMP_BRANCH) into $BASE_BRANCH" fi fi env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.OPENPROJECT_CI_GH_TOKEN }} diff --git a/.github/workflows/danger.yml b/.github/workflows/danger.yml index 8b30f3873e49..1d49b64e64ba 100644 --- a/.github/workflows/danger.yml +++ b/.github/workflows/danger.yml @@ -17,7 +17,7 @@ jobs: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 with: - ruby-version: '3.2.3' + ruby-version: '3.3.1' - uses: MeilCli/danger-action@v5 with: danger_file: 'Dangerfile' diff --git a/.github/workflows/test-core.yml b/.github/workflows/test-core.yml index ab812ead60bd..0f3251d781a0 100644 --- a/.github/workflows/test-core.yml +++ b/.github/workflows/test-core.yml @@ -44,9 +44,9 @@ jobs: uses: runs-on/cache@v4 with: path: cache/bundle - key: gem-${{ hashFiles('Gemfile.lock') }} + key: gem-${{ hashFiles('.ruby-version') }}-${{ hashFiles('Gemfile.lock') }} restore-keys: | - gem- + gem-${{ hashFiles('.ruby-version') }}- - name: Cache NPM uses: runs-on/cache@v4 with: diff --git a/.rubocop.yml b/.rubocop.yml index ba1a5d9139bb..c70f37c8780c 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,6 +1,7 @@ require: - rubocop-rails - rubocop-rspec + - rubocop-rspec_rails - ./lib_static/rubocop/cop/open_project/add_preview_for_view_component.rb - ./lib_static/rubocop/cop/open_project/no_do_end_block_with_rspec_capybara_matcher_in_expect.rb - ./lib_static/rubocop/cop/open_project/use_service_result_factory_methods.rb @@ -21,7 +22,7 @@ inherit_mode: - Exclude AllCops: - TargetRubyVersion: 3.2 + TargetRubyVersion: 3.3 # Enable any new cops in new versions by default NewCops: enable Exclude: diff --git a/.ruby-version b/.ruby-version index b347b11eac8a..bea438e9ade7 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.2.3 +3.3.1 diff --git a/Gemfile b/Gemfile index d4ca8bb65b84..f9f8b335961f 100644 --- a/Gemfile +++ b/Gemfile @@ -50,7 +50,7 @@ gem "doorkeeper", "~> 5.6.6" # Maintain our own omniauth due to relative URL root issues # see upstream PR: https://github.com/omniauth/omniauth/pull/903 gem "omniauth", git: "https://github.com/opf/omniauth", ref: "fe862f986b2e846e291784d2caa3d90a658c67f0" -gem "request_store", "~> 1.6.0" +gem "request_store", "~> 1.7.0" gem "warden", "~> 1.2" gem "warden-basic_auth", "~> 0.2.1" @@ -115,6 +115,8 @@ gem "ruby-duration", "~> 3.2.0" # released. gem "mail", "= 2.8.1" +gem "csv", "~> 3.3" + # provide compatible filesystem information for available storage gem "sys-filesystem", "~> 1.4.0", require: false @@ -138,7 +140,7 @@ gem "rack-attack", "~> 6.7.0" gem "secure_headers", "~> 6.5.0" # Browser detection for incompatibility checks -gem "browser", "~> 5.3.0" +gem "browser", "~> 6.0.0" # Providing health checks gem "okcomputer", "~> 1.18.1" @@ -157,10 +159,11 @@ gem "airbrake", "~> 13.0.0", require: false gem "md_to_pdf", git: "https://github.com/opf/md-to-pdf", ref: "8f14736a88ad0064d2a97be108fe7061ffbcee91" gem "prawn", "~> 2.4" +gem "ttfunk", "~> 1.7.0" # remove after https://github.com/prawnpdf/prawn/issues/1346 resolved. # prawn implicitly depends on matrix gem no longer in ruby core with 3.1 gem "matrix", "~> 0.4.2" -gem "meta-tags", "~> 2.20.0" +gem "meta-tags", "~> 2.21.0" gem "paper_trail", "~> 15.1.0" @@ -170,7 +173,7 @@ group :production do # we use dalli as standard memcache client # requires memcached 1.4+ gem "dalli", "~> 3.2.0" - gem "redis", "~> 5.1.0" + gem "redis", "~> 5.2.0" end gem "i18n-js", "~> 4.2.3" @@ -185,7 +188,7 @@ gem "rack-timeout", "~> 0.6.3", require: "rack/timeout/base" gem "nokogiri", "~> 1.16.0" -gem "carrierwave", "~> 1.3.1" +gem "carrierwave", "~> 1.3.4" gem "carrierwave_direct", "~> 2.1.0" gem "fog-aws" @@ -214,7 +217,7 @@ gem "appsignal", "~> 3.0", require: false gem "view_component" # Lookbook -gem "lookbook", "~> 2.2.1" +gem "lookbook", "~> 2.3.0" # Require factory_bot for usage with openproject plugins testing gem "factory_bot", "~> 6.4.0", require: false @@ -264,7 +267,7 @@ group :test do gem "capybara-screenshot", "~> 1.0.17" gem "cuprite", "~> 0.15.0" gem "selenium-devtools" - gem "selenium-webdriver", "~> 4.18.0" + gem "selenium-webdriver", "~> 4.20" gem "fuubar", "~> 2.5.0" gem "timecop", "~> 0.9.0" @@ -383,4 +386,4 @@ end gem "openproject-octicons", "~>19.10.0" gem "openproject-octicons_helper", "~>19.10.0" -gem "openproject-primer_view_components", "~>0.28.1" +gem "openproject-primer_view_components", "~>0.29.1" diff --git a/Gemfile.lock b/Gemfile.lock index 274a23ee0274..2eda3f308153 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -74,7 +74,7 @@ PATH remote: modules/avatars specs: openproject-avatars (1.0.0) - fastimage (~> 2.2.0) + fastimage (~> 2.3.0) gravatar_image_tag (~> 1.2.0) PATH @@ -206,7 +206,7 @@ PATH remote: modules/two_factor_authentication specs: openproject-two_factor_authentication (1.0.0) - aws-sdk-sns (~> 1.72.0) + aws-sdk-sns (~> 1.74.0) messagebird-rest (~> 1.4.2) rotp (~> 6.1) webauthn (~> 3.0) @@ -331,7 +331,7 @@ GEM airbrake-ruby (6.2.2) rbtree3 (~> 0.6) android_key_attestation (0.3.0) - appsignal (3.6.4) + appsignal (3.7.4) rack ast (2.4.2) attr_required (1.0.2) @@ -341,21 +341,21 @@ GEM activerecord (>= 4.0.0, < 7.2) awrence (1.2.1) aws-eventstream (1.3.0) - aws-partitions (1.907.0) - aws-sdk-core (3.191.6) + aws-partitions (1.925.0) + aws-sdk-core (3.194.2) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) aws-sigv4 (~> 1.8) jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.78.0) - aws-sdk-core (~> 3, >= 3.191.0) + aws-sdk-kms (1.80.0) + aws-sdk-core (~> 3, >= 3.193.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.146.1) - aws-sdk-core (~> 3, >= 3.191.0) + aws-sdk-s3 (1.149.1) + aws-sdk-core (~> 3, >= 3.194.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.8) - aws-sdk-sns (1.72.0) - aws-sdk-core (~> 3, >= 3.191.0) + aws-sdk-sns (1.74.0) + aws-sdk-core (~> 3, >= 3.193.0) aws-sigv4 (~> 1.1) aws-sigv4 (1.8.0) aws-eventstream (~> 1, >= 1.0.2) @@ -379,13 +379,13 @@ GEM erubi (~> 1.4) parser (>= 2.4) smart_properties - bigdecimal (3.1.7) + bigdecimal (3.1.8) bindata (2.5.0) bootsnap (1.18.3) msgpack (~> 1.2) brakeman (6.1.2) racc - browser (5.3.1) + browser (6.0.0) builder (3.2.4) byebug (11.1.3) capybara (3.40.0) @@ -400,11 +400,11 @@ GEM capybara-screenshot (1.0.26) capybara (>= 1.0, < 4) launchy - carrierwave (1.3.2) + carrierwave (1.3.4) activemodel (>= 4.0.0) activesupport (>= 4.0.0) mime-types (>= 1.16) - ssrf_filter (~> 1.0) + ssrf_filter (~> 1.0, < 1.1.0) carrierwave_direct (2.1.0) carrierwave (>= 1.0.0) fog-aws @@ -434,8 +434,9 @@ GEM bigdecimal rexml crass (1.0.6) - css_parser (1.16.0) + css_parser (1.17.1) addressable + csv (3.3.0) cuprite (0.15) capybara (~> 3.0) ferrum (~> 0.14.0) @@ -459,9 +460,9 @@ GEM representable (>= 3.1.1, < 4) doorkeeper (5.6.9) railties (>= 5) - dotenv (3.1.0) - dotenv-rails (3.1.0) - dotenv (= 3.1.0) + dotenv (3.1.2) + dotenv-rails (3.1.2) + dotenv (= 3.1.2) railties (>= 6.1) drb (2.2.1) dry-container (0.11.0) @@ -522,7 +523,7 @@ GEM faraday (>= 1, < 3) faraday-net_http (3.1.0) net-http - fastimage (2.2.7) + fastimage (2.3.1) ferrum (0.14) addressable (~> 2.5) concurrent-ruby (~> 1.1) @@ -549,8 +550,8 @@ GEM friendly_id (5.5.1) activerecord (>= 4.0.0) front_matter_parser (1.0.1) - fugit (1.10.1) - et-orbi (~> 1, >= 1.2.7) + fugit (1.11.0) + et-orbi (~> 1, >= 1.2.11) raabro (~> 1.4) fuubar (2.5.1) rspec-core (~> 3.0) @@ -578,7 +579,7 @@ GEM representable (~> 3.0) retriable (>= 2.0, < 4.a) rexml - google-apis-gmail_v1 (0.39.0) + google-apis-gmail_v1 (0.40.0) google-apis-core (>= 0.14.0, < 2.a) google-cloud-env (2.1.1) faraday (>= 1.0, < 3.a) @@ -614,17 +615,16 @@ GEM http-2-next (1.0.3) http_parser.rb (0.6.0) httpclient (2.8.3) - httpx (1.2.3) + httpx (1.2.4) http-2-next (>= 1.0.3) - i18n (1.14.4) + i18n (1.14.5) concurrent-ruby (~> 1.0) i18n-js (4.2.3) glob (>= 0.4.0) i18n - i18n-tasks (1.0.13) + i18n-tasks (1.0.14) activesupport (>= 4.0.2) ast (>= 2.1.0) - better_html (>= 1.0, < 3.0) erubi highline (>= 2.0.0) i18n @@ -638,8 +638,8 @@ GEM ice_nine (0.11.2) interception (0.5) io-console (0.7.2) - irb (1.12.0) - rdoc + irb (1.13.1) + rdoc (>= 4.0.0) reline (>= 0.4.2) iso8601 (0.13.0) jmespath (1.6.2) @@ -651,7 +651,7 @@ GEM bindata faraday (~> 2.0) faraday-follow_redirects - json-schema (4.2.0) + json-schema (4.3.0) addressable (>= 2.8) json_schemer (2.2.1) base64 @@ -667,10 +667,10 @@ GEM ladle (1.0.1) open4 (~> 1.0) language_server-protocol (3.17.0.3) - launchy (3.0.0) + launchy (3.0.1) addressable (~> 2.8) childprocess (~> 5.0) - lefthook (1.6.9) + lefthook (1.6.10) letter_opener (1.10.0) launchy (>= 2.2, < 4) letter_opener_web (2.0.0) @@ -693,7 +693,7 @@ GEM loofah (2.22.0) crass (~> 1.0.2) nokogiri (>= 1.12.0) - lookbook (2.2.2) + lookbook (2.3.0) activemodel css_parser htmlbeautifier (~> 1.3) @@ -714,15 +714,15 @@ GEM markly (0.10.0) matrix (0.4.2) messagebird-rest (1.4.2) - meta-tags (2.20.0) + meta-tags (2.21.0) actionpack (>= 6.0.0, < 7.2) - method_source (1.0.0) + method_source (1.1.0) mime-types (3.5.2) mime-types-data (~> 3.2015) mime-types-data (3.2024.0305) mini_magick (4.12.0) mini_mime (1.1.5) - mini_portile2 (2.8.5) + mini_portile2 (2.8.6) minitest (5.22.3) msgpack (1.7.2) multi_json (1.15.0) @@ -744,7 +744,7 @@ GEM net-smtp (0.5.0) net-protocol nio4r (2.7.1) - nokogiri (1.16.3) + nokogiri (1.16.4) mini_portile2 (~> 2.8.2) racc (~> 1.4) oj (3.16.3) @@ -772,7 +772,7 @@ GEM actionview openproject-octicons (= 19.10.0) railties - openproject-primer_view_components (0.28.1) + openproject-primer_view_components (0.29.1) actionview (>= 5.0.0) activesupport (>= 5.0.0) openproject-octicons (>= 19.9.0) @@ -788,12 +788,12 @@ GEM activerecord (>= 6.1) request_store (~> 1.4) parallel (1.24.0) - parallel_tests (4.6.1) + parallel_tests (4.7.1) parallel - parser (3.3.0.5) + parser (3.3.1.0) ast (~> 2.4.1) racc - pdf-core (0.10.0) + pdf-core (0.9.0) pdf-inspector (1.3.0) pdf-reader (>= 1.0, < 3.0.a) pdf-reader (2.12.0) @@ -807,10 +807,9 @@ GEM activesupport (> 2.2.1) nokogiri (~> 1.10, >= 1.10.4) rubyzip (>= 1.2.0) - prawn (2.5.0) - matrix (~> 0.4) - pdf-core (~> 0.10.0) - ttfunk (~> 1.8) + prawn (2.4.0) + pdf-core (~> 0.9.0) + ttfunk (~> 1.7) prawn-table (0.2.2) prawn (>= 1.3.0, < 3.0.0) pry (0.14.2) @@ -915,24 +914,24 @@ GEM rb-fsevent (0.11.2) rb-inotify (0.10.1) ffi (~> 1.0) - rb_sys (0.9.91) + rb_sys (0.9.97) rbtree3 (0.7.1) rdoc (6.6.3.1) psych (>= 4.0.0) recaptcha (5.16.0) redcarpet (3.6.0) - redis (5.1.0) - redis-client (>= 0.17.0) - redis-client (0.21.0) + redis (5.2.0) + redis-client (>= 0.22.0) + redis-client (0.22.1) connection_pool regexp_parser (2.9.0) - reline (0.5.0) + reline (0.5.6) io-console (~> 0.5) representable (3.2.0) declarative (< 0.1.0) trailblazer-option (>= 0.1.1, < 0.2.0) uber (< 0.2.0) - request_store (1.6.0) + request_store (1.7.0) rack (>= 1.4) responders (3.1.1) actionpack (>= 5.2) @@ -967,7 +966,7 @@ GEM rspec-retry (0.6.2) rspec-core (> 3.3) rspec-support (3.13.1) - rubocop (1.63.1) + rubocop (1.63.5) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) @@ -978,8 +977,8 @@ GEM rubocop-ast (>= 1.31.1, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 3.0) - rubocop-ast (1.31.2) - parser (>= 3.3.0.4) + rubocop-ast (1.31.3) + parser (>= 3.3.1.0) rubocop-capybara (2.20.0) rubocop (~> 1.41) rubocop-factory_bot (2.25.1) @@ -996,12 +995,12 @@ GEM rack (>= 1.1) rubocop (>= 1.33.0, < 2.0) rubocop-ast (>= 1.31.1, < 2.0) - rubocop-rspec (2.29.1) + rubocop-rspec (2.29.2) rubocop (~> 1.40) rubocop-capybara (~> 2.17) rubocop-factory_bot (~> 2.22) rubocop-rspec_rails (~> 2.28) - rubocop-rspec_rails (2.28.2) + rubocop-rspec_rails (2.28.3) rubocop (~> 1.40) ruby-duration (3.2.3) activesupport (>= 3.0.0) @@ -1024,9 +1023,9 @@ GEM crass (~> 1.0.2) nokogiri (>= 1.12.0) secure_headers (6.5.0) - selenium-devtools (0.123.0) + selenium-devtools (0.124.0) selenium-webdriver (~> 4.2) - selenium-webdriver (4.18.1) + selenium-webdriver (4.20.1) base64 (~> 0.2) rexml (~> 3.2, >= 3.2.5) rubyzip (>= 1.2.2, < 3.0) @@ -1040,13 +1039,13 @@ GEM faraday (>= 0.17.5, < 3.a) jwt (>= 1.5, < 3.0) multi_json (~> 1.10) - simpleidn (0.2.1) + simpleidn (0.2.2) unf (~> 0.1.4) smart_properties (1.17.0) spreadsheet (1.3.1) bigdecimal ruby-ole - spring (4.2.0) + spring (4.2.1) spring-commands-rspec (1.0.4) spring (>= 0.9.1) spring-commands-rubocop (0.4.0) @@ -1059,7 +1058,7 @@ GEM actionpack (>= 5.2) activesupport (>= 5.2) sprockets (>= 3.0.0) - ssrf_filter (1.1.2) + ssrf_filter (1.0.8) stackprof (0.2.26) store_attribute (1.2.0) activerecord (>= 6.0) @@ -1077,7 +1076,7 @@ GEM table_print (1.5.7) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) - test-prof (1.3.2) + test-prof (1.3.3) text-hyphen (1.5.0) thor (1.3.1) thread_safe (0.3.6) @@ -1088,8 +1087,7 @@ GEM openssl (> 2.0) openssl-signature_algorithm (~> 1.0) trailblazer-option (0.1.2) - ttfunk (1.8.0) - bigdecimal (~> 3.1) + ttfunk (1.7.0) turbo-rails (2.0.5) actionpack (>= 6.0.0) activejob (>= 6.0.0) @@ -1113,7 +1111,7 @@ GEM activemodel (>= 3.0.0) public_suffix vcr (6.2.0) - view_component (3.11.0) + view_component (3.12.1) activesupport (>= 5.2.0, < 8.0) concurrent-ruby (~> 1.0) method_source (~> 1.0) @@ -1178,12 +1176,12 @@ DEPENDENCIES bcrypt (~> 3.1.6) bootsnap (~> 1.18.0) brakeman (~> 6.1.0) - browser (~> 5.3.0) + browser (~> 6.0.0) budgets! capybara (~> 3.40.0) capybara-screenshot (~> 1.0.17) capybara_accessible_selectors! - carrierwave (~> 1.3.1) + carrierwave (~> 1.3.4) carrierwave_direct (~> 2.1.0) climate_control closure_tree (~> 7.4.0) @@ -1191,6 +1189,7 @@ DEPENDENCIES commonmarker (~> 1.0.3) compare-xml (~> 0.66) costs! + csv (~> 3.3) cuprite (~> 0.15.0) daemons dalli (~> 3.2.0) @@ -1234,11 +1233,11 @@ DEPENDENCIES letter_opener_web listen (~> 3.9.0) lograge (~> 0.14.0) - lookbook (~> 2.2.1) + lookbook (~> 2.3.0) mail (= 2.8.1) matrix (~> 0.4.2) md_to_pdf! - meta-tags (~> 2.20.0) + meta-tags (~> 2.21.0) mini_magick (~> 4.12.0) multi_json (~> 1.15.0) my_page! @@ -1268,7 +1267,7 @@ DEPENDENCIES openproject-octicons (~> 19.10.0) openproject-octicons_helper (~> 19.10.0) openproject-openid_connect! - openproject-primer_view_components (~> 0.28.1) + openproject-primer_view_components (~> 0.29.1) openproject-recaptcha! openproject-reporting! openproject-storages! @@ -1303,8 +1302,8 @@ DEPENDENCIES rails-controller-testing (~> 1.0.2) rails-i18n (~> 7.0.0) rdoc (>= 2.4.2) - redis (~> 5.1.0) - request_store (~> 1.6.0) + redis (~> 5.2.0) + request_store (~> 1.7.0) responders (~> 3.0) retriable (~> 3.1.1) rinku (~> 2.0.4) @@ -1325,7 +1324,7 @@ DEPENDENCIES sanitize (~> 6.1.0) secure_headers (~> 6.5.0) selenium-devtools - selenium-webdriver (~> 4.18.0) + selenium-webdriver (~> 4.20) semantic (~> 1.6.1) shoulda-context (~> 2.0) shoulda-matchers (~> 6.0) @@ -1343,6 +1342,7 @@ DEPENDENCIES table_print (~> 1.5.6) test-prof (~> 1.3.0) timecop (~> 0.9.0) + ttfunk (~> 1.7.0) turbo-rails (~> 2.0.0) turbo_tests! typed_dag (~> 2.0.2) @@ -1357,7 +1357,7 @@ DEPENDENCIES with_advisory_lock (~> 5.1.0) RUBY VERSION - ruby 3.2.3p157 + ruby 3.3.1p55 BUNDLED WITH - 2.5.5 + 2.5.10 diff --git a/app/components/_index.sass b/app/components/_index.sass index eca561ec0d4f..df5d51df72f6 100644 --- a/app/components/_index.sass +++ b/app/components/_index.sass @@ -4,3 +4,4 @@ @import "open_project/common/attribute_component" @import "filters_component" @import "projects/settings/project_custom_field_sections/index_component" +@import "projects/row_component" diff --git a/app/components/admin/attachments_settings_header_component.html.erb b/app/components/admin/attachments_settings_header_component.html.erb new file mode 100644 index 000000000000..52ccc429b460 --- /dev/null +++ b/app/components/admin/attachments_settings_header_component.html.erb @@ -0,0 +1,53 @@ +<%#-- copyright +OpenProject is an open source project management software. +Copyright (C) 2012-2024 the OpenProject GmbH + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License version 3. + +OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +Copyright (C) 2006-2013 Jean-Philippe Lang +Copyright (C) 2010-2013 the ChiliProject Team + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +See COPYRIGHT and LICENSE files for more details. + +++#%> + +<% helpers.html_title t(:label_administration), @title %> + +<%= render(Primer::OpenProject::PageHeader.new(border_bottom: 0)) do |header| %> + <% header.with_title { t(:"attributes.attachments") } %> + <% header.with_breadcrumbs([{ href: admin_index_path, text: t("label_administration") }, + { href: admin_settings_storages_path, text: t("project_module_storages") }, + t(:"attributes.attachments")]) %> +<% end %> + +<%= render(Primer::Alpha::TabNav.new(label: "label")) do |component| + component.with_tab(selected: @selected == 1, href: admin_settings_attachments_path) do |tab| + tab.with_text { t("settings.general") } + end + component.with_tab(selected: @selected == 2, href: admin_settings_virus_scanning_path) do |tab| + tab.with_icon(icon: :"op-enterprise-addons") unless EnterpriseToken.allows_to?("virus_scanning") + tab.with_text { t(:"settings.antivirus.title") } + end + if User.current.admin? && (EnterpriseToken.allows_to?(:virus_scanning) || Attachment.status_quarantined.any?) + component.with_tab(selected: @selected == 3, href: admin_quarantined_attachments_path) do |tab| + tab.with_text { t(:"antivirus_scan.quarantined_attachments.title") } + end + end +end +%> diff --git a/app/components/admin/attachments_settings_header_component.rb b/app/components/admin/attachments_settings_header_component.rb new file mode 100644 index 000000000000..f9a955648a2e --- /dev/null +++ b/app/components/admin/attachments_settings_header_component.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module Admin + class AttachmentsSettingsHeaderComponent < ApplicationComponent + def initialize(title:, selected:) + raise 'selected must 1, 2 or 3' if [1, 2, 3].exclude?(selected) + @title = title + @selected = selected + end + end +end diff --git a/app/components/admin/quarantined_attachments/index_page_header_component.html.erb b/app/components/admin/quarantined_attachments/index_page_header_component.html.erb deleted file mode 100644 index 994462d08155..000000000000 --- a/app/components/admin/quarantined_attachments/index_page_header_component.html.erb +++ /dev/null @@ -1,6 +0,0 @@ -<%= - render(Primer::OpenProject::PageHeader.new) do |header| - header.with_title { t('antivirus_scan.quarantined_attachments.title') } - header.with_breadcrumbs(breadcrumb_items) - end -%> diff --git a/app/components/admin/virus_scanning/index_page_header_component.html.erb b/app/components/admin/virus_scanning/index_page_header_component.html.erb deleted file mode 100644 index 44a4a26f3f3c..000000000000 --- a/app/components/admin/virus_scanning/index_page_header_component.html.erb +++ /dev/null @@ -1,6 +0,0 @@ -<%= render(Primer::OpenProject::PageHeader.new) do |header| %> - <% header.with_title do %> - <%= t('settings.antivirus.title') %> - <% end %> - <% header.with_breadcrumbs(breadcrumb_items)%> -<% end %> diff --git a/app/components/concerns/op_turbo/streamable.rb b/app/components/concerns/op_turbo/streamable.rb index d0d76118d96a..000bdc1088c8 100644 --- a/app/components/concerns/op_turbo/streamable.rb +++ b/app/components/concerns/op_turbo/streamable.rb @@ -43,7 +43,7 @@ def wrapper_key included do def render_as_turbo_stream(view_context:, action: :update) case action - when :update + when :update, :dialog @inner_html_only = true template = render_in(view_context) when :replace @@ -56,7 +56,7 @@ def render_as_turbo_stream(view_context:, action: :update) raise ArgumentError, "Unsupported action #{action}" end - unless wrapped? + if action != :dialog && !wrapped? raise MissingComponentWrapper, "Wrap your component in a `component_wrapper` block in order to use turbo-stream methods" end diff --git a/app/components/filters_component.html.erb b/app/components/filters_component.html.erb index f17e15685497..084613d8785d 100644 --- a/app/components/filters_component.html.erb +++ b/app/components/filters_component.html.erb @@ -1,5 +1,6 @@
@@ -9,7 +10,11 @@ 'action': 'filters#toggleDisplayFilters', 'test-selector': 'filter-component-toggle' })) do %> <%= t(:label_filter) %> - <%= render(Primer::Beta::Counter.new(count: filters_count, round: true, hide_if_zero: false, scheme: :default)) %> + <%= render(Primer::Beta::Counter.new(count: filters_count, + round: true, + hide_if_zero: false, + scheme: :default, + test_selector: "filters-button-counter" )) %> <% end %>
<% buttons.each do |button| %> @@ -31,8 +36,9 @@ data-action="filters#toggleDisplayFilters"> <%= t(:label_filter_plural) %>
    - <% each_filter do |filter, filter_active| %> + <% each_filter do |filter, filter_active, additional_options| %> <% filter_boolean = filter.is_a?(Queries::Filters::Shared::BooleanFilter) %> + <% autocomplete_filter = additional_options.key?(:autocomplete_options) %>
  • <% end %> <% value_visibility = operators_without_values.include?(selected_operator) ? 'hidden' : '' %> - <% if filter_boolean %> + <% if autocomplete_filter %> + <%= render partial: 'filters/autocomplete', + locals: { value_visibility: value_visibility, + filter: filter, + autocomplete_options: additional_options[:autocomplete_options] } %> + <% elsif filter_boolean %> <%= render partial: 'filters/boolean', locals: { value_visibility: value_visibility, filter: filter } %> diff --git a/app/components/filters_component.rb b/app/components/filters_component.rb index 0383665ba674..c35e9a3c5a2f 100644 --- a/app/components/filters_component.rb +++ b/app/components/filters_component.rb @@ -30,6 +30,7 @@ class FiltersComponent < ApplicationComponent options :query + options output_format: "params" renders_many :buttons, lambda { |**system_arguments| system_arguments[:ml] ||= 2 @@ -43,15 +44,11 @@ def show_filters_section? # Returns filters, active and inactive. # In case a filter is active, the active one will be preferred over the inactive one. def each_filter - allowed_filters.map do |filter| + allowed_filters.each do |filter| active_filter = query.find_active_filter(filter.name) - filter_active = active_filter.present? + additional_attributes = additional_filter_attributes(filter) - if filter_active - yield active_filter, filter_active - else - yield filter, filter_active - end + yield active_filter.presence || filter, active_filter.present?, additional_attributes end end @@ -61,6 +58,32 @@ def allowed_filters end def filters_count - query.filters.count + @filters_count ||= query.filters.count + end + + protected + + # With this method we can pass additional options for each type of filter into the frontend. This is especially + # useful when we want to pass options for the autocompleter components. + # + # When the method is overwritten in a subclass, the subclass should call super(filter) to get the default attributes. + # + # @param filter [QueryFilter] the filter for which we want to pass additional attributes + # @return [Hash] the additional attributes for the filter, that will be yielded in the each_filter method + def additional_filter_attributes(filter) + case filter + when Queries::Filters::Shared::ProjectFilter + { + autocomplete_options: { + component: "opce-project-autocompleter", + resource: "projects", + filters: [ + { name: "active", operator: "=", values: ["t"] } + ] + } + } + else + {} + end end end diff --git a/app/components/members/index_page_header_component.html.erb b/app/components/members/index_page_header_component.html.erb index 861806cdb5c1..d8742fbaff84 100644 --- a/app/components/members/index_page_header_component.html.erb +++ b/app/components/members/index_page_header_component.html.erb @@ -1,7 +1,7 @@ <%= render(Primer::OpenProject::PageHeader.new) do |header| header.with_title { page_title } - header.with_breadcrumbs(breadcrumb_items) + header.with_breadcrumbs(breadcrumb_items, selected_item_font_weight: current_breadcrumb_element == page_title ? :bold : :normal) header.with_action_button(scheme: :primary, mobile_icon: :plus, diff --git a/app/components/projects/configure_view_modal_component.html.erb b/app/components/projects/configure_view_modal_component.html.erb index f91e00c9e8b7..e07e57abb82e 100644 --- a/app/components/projects/configure_view_modal_component.html.erb +++ b/app/components/projects/configure_view_modal_component.html.erb @@ -4,36 +4,47 @@ # Hack to give the draggable autcompleter (ng-select) bound to the dialog # enough height to display all options. # This is necessary as long as ng-select does not support popovers. - style: "min-height: 430px")) do |d| %> + style: "min-height: 480px")) do |d| %> <% d.with_header(variant: :large, mb: 3) %> - - <%= render(Primer::Alpha::Dialog::Body.new(id: "op-draggable-autocomplete-container")) do %> + <%= render(Primer::Alpha::Dialog::Body.new) do %> <%= primer_form_with( url: projects_path, - id: COLUMN_FORM_ID, + id: QUERY_FORM_ID, method: :get, data: { controller: "params-from-query", 'application-target': "dynamic", - 'params-from-query-allowed-value': '["filters", "query_id", "page", "per_page", "sortBy"]' - }) do %> - <%= helpers.angular_component_tag 'opce-draggable-autocompleter', - inputs: { - options: helpers.projects_columns_options, - selected: selected_columns, - protected: helpers.protected_projects_columns_options, - name: COLUMN_HTML_NAME, - id: 'columns-select', - inputLabel: I18n.t(:'queries.configure_view.columns.input_label'), - inputPlaceholder: I18n.t(:'queries.configure_view.columns.input_placeholder'), - dragAreaLabel: I18n.t(:'queries.configure_view.columns.drag_area_label'), - appendToComponent: true - }%> + 'params-from-query-allowed-value': '["filters", "query_id", "page", "per_page"]' + }) do |form| %> + <%= render(Primer::Alpha::TabPanels.new(label: "label")) do |tab_panel| %> + <% tab_panel.with_tab(selected: true, id: "tab-selects") do |tab| %> + <% tab.with_text { I18n.t("label_columns") } %> + <% tab.with_panel do %> + <%= helpers.angular_component_tag 'opce-draggable-autocompleter', + inputs: { + options: helpers.projects_columns_options, + selected: selected_columns, + protected: helpers.protected_projects_columns_options, + name: COLUMN_HTML_NAME, + id: 'columns-select', + inputLabel: I18n.t(:'queries.configure_view.columns.input_label'), + inputPlaceholder: I18n.t(:'queries.configure_view.columns.input_placeholder'), + dragAreaLabel: I18n.t(:'queries.configure_view.columns.drag_area_label'), + appendToComponent: true + }%> + <% end %> + <% end %> + <% tab_panel.with_tab(id: "tab-selects") do |tab| %> + <% tab.with_text { I18n.t("label_sort") }%> + <% tab.with_panel do %> + <%= render(Queries::SortByComponent.new(query: query, selectable_columns:)) %> + <% end%> + <% end %> + <% end %> <% end %> <% end %> - <%= render(Primer::Alpha::Dialog::Footer.new) do %> <%= render(Primer::ButtonComponent.new(data: { "close-dialog-id": MODAL_ID })) { I18n.t(:button_cancel) } %> - <%= render(Primer::ButtonComponent.new(scheme: :primary, type: :submit, form: COLUMN_FORM_ID)) { I18n.t(:button_apply) } %> + <%= render(Primer::ButtonComponent.new(scheme: :primary, type: :submit, form: QUERY_FORM_ID)) { I18n.t(:button_apply) } %> <% end %> <% end %> diff --git a/app/components/projects/configure_view_modal_component.rb b/app/components/projects/configure_view_modal_component.rb index 5d1f93d83aae..8c68d1576293 100644 --- a/app/components/projects/configure_view_modal_component.rb +++ b/app/components/projects/configure_view_modal_component.rb @@ -30,11 +30,17 @@ class Projects::ConfigureViewModalComponent < ApplicationComponent MODAL_ID = "op-project-list-configure-dialog" - COLUMN_FORM_ID = "op-project-list-configure-columns-form" + QUERY_FORM_ID = "op-project-list-configure-query-form" COLUMN_HTML_NAME = "columns" options :query + def selectable_columns + @selectable_columns ||= [ + { id: :lft, name: I18n.t(:label_project_hierarchy) } + ] + helpers.projects_columns_options + end + def selected_columns @selected_columns ||= query .selects diff --git a/app/components/projects/disk_usage_information_component.html.erb b/app/components/projects/disk_usage_information_component.html.erb new file mode 100644 index 000000000000..eed9f4c860ed --- /dev/null +++ b/app/components/projects/disk_usage_information_component.html.erb @@ -0,0 +1,6 @@ +

    + <%= helpers.op_icon('icon-info1') %> + <%= t(:label_projects_disk_usage_information, + count: Project.count, + used_disk_space: number_to_human_size(Project.total_projects_size, precision: 2)) %> +

    diff --git a/app/components/projects/storage_information_component.rb b/app/components/projects/disk_usage_information_component.rb similarity index 95% rename from app/components/projects/storage_information_component.rb rename to app/components/projects/disk_usage_information_component.rb index e42c11bfa2f2..6a6984e64fe9 100644 --- a/app/components/projects/storage_information_component.rb +++ b/app/components/projects/disk_usage_information_component.rb @@ -28,7 +28,7 @@ # See COPYRIGHT and LICENSE files for more details. # ++ -class Projects::StorageInformationComponent < ApplicationComponent +class Projects::DiskUsageInformationComponent < ApplicationComponent options :current_user def render? diff --git a/app/components/projects/index_page_header_component.html.erb b/app/components/projects/index_page_header_component.html.erb index d1ddafbc2a9a..6d9c1e479e8c 100644 --- a/app/components/projects/index_page_header_component.html.erb +++ b/app/components/projects/index_page_header_component.html.erb @@ -1,26 +1,24 @@ -<%= - render(Primer::OpenProject::PageHeader.new) do |header| - if show_state? +<% if show_state? %> + <%= + render(Primer::OpenProject::PageHeader.new) do |header| header.with_title(data: { 'test-selector': 'project-query-name'}) { page_title } - header.with_breadcrumbs(breadcrumb_items) - - if query_saveable? - header.with_action_text { t('lists.can_be_saved_as') } + header.with_breadcrumbs(breadcrumb_items, selected_item_font_weight: current_breadcrumb_element == page_title ? :bold : :normal) - header.with_action_link(mobile_icon: nil, # Do not show on mobile as it is already part of the menu - mobile_label: nil, - href: new_projects_query_path, - data: { - controller: "params-from-query", - 'application-target': "dynamic", - 'params-from-query-allowed-value': '["filters", "columns"]' - }) do - render(Primer::Beta::Octicon.new(icon: "op-save", - align_self: :center, - "aria-label": I18n.t("button_save_as"), - mr: 1) - ) + content_tag(:span, t("button_save_as")) - end + if can_save? + header_save_action( + header:, + message: t("lists.can_be_saved"), + label: t("button_save"), + href: projects_query_path(query), + method: :patch + ) + elsif can_save_as? + header_save_action( + header:, + message: t("lists.can_be_saved_as"), + label: t("button_save_as"), + href: new_projects_query_path + ) end header.with_action_menu(menu_arguments: { @@ -51,20 +49,12 @@ item.with_leading_visual_icon(icon: 'tasklist') end - if query_saveable? - menu.with_item( - label: t('button_save_as'), - href: new_projects_query_path, - content_arguments: { - data: { - controller: "params-from-query", - 'application-target': "dynamic", - 'params-from-query-allowed-value': '["filters", "columns"]' - } - } - ) do |item| - item.with_leading_visual_icon(icon: :'op-save') - end + if can_save? + menu_save_item(menu:, label: t('button_save'), href: projects_query_path(query), method: :patch) + end + + if may_save_as? + menu_save_item(menu:, label: t('button_save_as'), href: new_projects_query_path) end menu.with_item( @@ -91,9 +81,15 @@ end end end + end + %> - - else + <%= render(Projects::ConfigureViewModalComponent.new(query:)) %> + <%= render(Projects::DeleteListModalComponent.new(query:)) if query.persisted? %> + <%= render(Projects::ExportListModalComponent.new(query:)) %> +<% else %> + <%= + render(Primer::OpenProject::PageHeader.new) do |header| header.with_title(data: { 'test-selector': 'project-query-name'}) do primer_form_with(model: query, url: projects_queries_path, @@ -101,7 +97,7 @@ data: { controller: "params-from-query", 'application-target': "dynamic", - 'params-from-query-allowed-value': '["filters", "columns"]' + 'params-from-query-allowed-value': '["filters", "columns", "query_id", "sortBy"]' }, id: 'project-save-form') do |f| render(Queries::Projects::Create.new(f)) @@ -109,11 +105,5 @@ end header.with_breadcrumbs(breadcrumb_items) end - end -%> - -<% if show_state? %> - <%= render(Projects::ConfigureViewModalComponent.new(query:)) %> - <%= render(Projects::DeleteListModalComponent.new(query:)) if query.persisted? %> - <%= render(Projects::ExportListModalComponent.new(query:)) %> + %> <% end %> diff --git a/app/components/projects/index_page_header_component.rb b/app/components/projects/index_page_header_component.rb index ebba3e8a5e4f..c49a6dc05405 100644 --- a/app/components/projects/index_page_header_component.rb +++ b/app/components/projects/index_page_header_component.rb @@ -69,9 +69,11 @@ def page_title query.name || t(:label_project_plural) end - def query_saveable? - current_user.logged? && query.name.blank? - end + def may_save_as? = current_user.logged? + + def can_save_as? = may_save_as? && query.changed? + + def can_save? = can_save_as? && query.persisted? && query.user == current_user def show_state? state == :show @@ -97,4 +99,46 @@ def current_breadcrumb_element page_title end end + + def header_save_action(header:, message:, label:, href:, method: nil) + header.with_action_text { message } + + header.with_action_link( + mobile_icon: nil, # Do not show on mobile as it is already part of the menu + mobile_label: nil, + href:, + data: { + method:, + controller: "params-from-query", + "application-target": "dynamic", + "params-from-query-allowed-value": '["filters", "columns", "sortBy", "query_id"]' + }.compact + ) do + render( + Primer::Beta::Octicon.new( + icon: "op-save", + align_self: :center, + "aria-label": label, + mr: 1 + ) + ) + content_tag(:span, label) + end + end + + def menu_save_item(menu:, label:, href:, method: nil) + menu.with_item( + label:, + href:, + content_arguments: { + data: { + method:, + controller: "params-from-query", + "application-target": "dynamic", + "params-from-query-allowed-value": '["filters", "columns", "sortBy", "query_id"]' + }.compact + } + ) do |item| + item.with_leading_visual_icon(icon: :"op-save") + end + end end diff --git a/app/components/projects/projects_filters_component.rb b/app/components/projects/projects_filters_component.rb index 6ffc4af774a3..450e2545aa77 100644 --- a/app/components/projects/projects_filters_component.rb +++ b/app/components/projects/projects_filters_component.rb @@ -47,7 +47,8 @@ def allowed_filter?(filter) Queries::Projects::Filters::CreatedAtFilter, Queries::Projects::Filters::LatestActivityAtFilter, Queries::Projects::Filters::NameAndIdentifierFilter, - Queries::Projects::Filters::TypeFilter + Queries::Projects::Filters::TypeFilter, + Queries::Projects::Filters::FavoredFilter ] allowlist << Queries::Filters::Shared::CustomFields::Base if EnterpriseToken.allows_to?(:custom_fields_in_projects_list) diff --git a/app/components/projects/row_component.rb b/app/components/projects/row_component.rb index d395e3111a3d..6dd80c99c2cd 100644 --- a/app/components/projects/row_component.rb +++ b/app/components/projects/row_component.rb @@ -29,6 +29,8 @@ #++ module Projects class RowComponent < ::RowComponent + delegate :favored_project_ids, to: :table + def project model.first end @@ -42,6 +44,27 @@ def hierarchy "" end + def favored + render(Primer::Beta::IconButton.new( + icon: currently_favored? ? "star-fill" : "star", + scheme: :invisible, + mobile_icon: currently_favored? ? "star-fill" : "star", + size: :medium, + tag: :a, + tooltip_direction: :e, + href: helpers.build_favorite_path(project, format: :html), + data: { method: currently_favored? ? :delete : :post }, + classes: currently_favored? ? "op-primer--star-icon " : "op-project-row-component--favorite", + label: currently_favored? ? I18n.t(:button_unfavorite) : I18n.t(:button_favorite), + aria: { label: currently_favored? ? I18n.t(:button_unfavorite) : I18n.t(:button_favorite) }, + test_selector: 'project-list-favorite-button' + )) + end + + def currently_favored? + @currently_favored ||= favored_project_ids.include?(project.id) + end + def column_value(column) if custom_field_column?(column) custom_field_column(column) @@ -138,13 +161,17 @@ def public end def row_css_class - classes = %w[basics context-menu--reveal] + classes = %w[basics context-menu--reveal op-project-row-component] classes << project_css_classes classes << row_css_level_classes classes.join(" ") end + def row_css_id + "project-#{project.id}" + end + def row_css_level_classes if level > 0 "idnt idnt-#{level}" @@ -180,36 +207,29 @@ def additional_css_class(column) end def button_links - return [] if more_menu_items.empty? - - if more_menu_items.one? - more_menu_items.first => {label:, **button_options} - - [render(Primer::Beta::IconButton.new(**button_options, - size: :small, - tag: :a, - scheme: button_options[:scheme] == :default ? :invisible : button_options[:scheme], - "aria-label": label, - test_selector: "project-list-row--single-action"))] + if more_menu_items.empty? + [] else - [ - render(Primer::Alpha::ActionMenu.new(test_selector: "project-list-row--action-menu")) do |menu| - menu.with_show_button(scheme: :invisible, - size: :small, - icon: :"kebab-horizontal", - "aria-label": t(:label_open_menu), - tooltip_direction: :w) - more_menu_items.each do |action_options| - action_options => {scheme:, label:, icon:, **button_options} - menu.with_item(scheme:, - label:, - test_selector: "project-list-row--action-menu-item", - content_arguments: button_options) do |item| - item.with_leading_visual_icon(icon:) - end - end + [action_menu] + end + end + + def action_menu + render(Primer::Alpha::ActionMenu.new(test_selector: "project-list-row--action-menu")) do |menu| + menu.with_show_button(scheme: :invisible, + size: :small, + icon: :"kebab-horizontal", + "aria-label": t(:label_open_menu), + tooltip_direction: :w) + more_menu_items.each do |action_options| + action_options => { scheme:, label:, icon:, **button_options } + menu.with_item(scheme:, + label:, + test_selector: "project-list-row--action-menu-item", + content_arguments: button_options) do |item| + item.with_leading_visual_icon(icon:) end - ] + end end end @@ -217,12 +237,42 @@ def more_menu_items @more_menu_items ||= [more_menu_subproject_item, more_menu_settings_item, more_menu_activity_item, + more_menu_favorite_item, + more_menu_unfavorite_item, more_menu_archive_item, more_menu_unarchive_item, more_menu_copy_item, more_menu_delete_item].compact end + def more_menu_favorite_item + return if currently_favored? + + { + scheme: :default, + icon: "star", + href: helpers.build_favorite_path(project, format: :html), + data: { method: :post }, + label: I18n.t(:button_favorite), + aria: { label: I18n.t(:button_favorite) }, + } + end + + def more_menu_unfavorite_item + return unless currently_favored? + + { + scheme: :default, + icon: "star-fill", + size: :medium, + href: helpers.build_favorite_path(project, format: :html), + data: { method: :delete }, + classes: "op-primer--star-icon", + label: I18n.t(:button_unfavorite), + aria: { label: I18n.t(:button_unfavorite) }, + } + end + def more_menu_subproject_item if User.current.allowed_in_project?(:add_subprojects, project) { diff --git a/app/components/projects/row_component.sass b/app/components/projects/row_component.sass new file mode 100644 index 000000000000..aec8e467e332 --- /dev/null +++ b/app/components/projects/row_component.sass @@ -0,0 +1,6 @@ +.op-project-row-component + &--favorite + opacity: 0 + + &:hover &--favorite + opacity: 1 diff --git a/app/components/projects/storage_information_component.html.erb b/app/components/projects/storage_information_component.html.erb deleted file mode 100644 index 92a6c1658bce..000000000000 --- a/app/components/projects/storage_information_component.html.erb +++ /dev/null @@ -1,6 +0,0 @@ -

    - <%= helpers.op_icon('icon-info1') %> - <%= t(:label_projects_storage_information, - count: Project.count, - storage: number_to_human_size(Project.total_projects_size, precision: 2)) %> -

    diff --git a/app/components/projects/table_component.html.erb b/app/components/projects/table_component.html.erb index 728f841b1a77..1b95df7fbb5a 100644 --- a/app/components/projects/table_component.html.erb +++ b/app/components/projects/table_component.html.erb @@ -64,7 +64,11 @@ See COPYRIGHT and LICENSE files for more details.
    + <% if column.attribute == :favored %> + <%= render(Primer::Beta::Octicon.new(icon: "star-fill", color: :subtle, ml: 2, "aria-label": I18n.t(:label_favorite))) %> + <% else %> <%= column.caption %> + <% end %>
    diff --git a/app/components/projects/table_component.rb b/app/components/projects/table_component.rb index e065662df8cc..048288c7e559 100644 --- a/app/components/projects/table_component.rb +++ b/app/components/projects/table_component.rb @@ -153,6 +153,10 @@ def projects_with_level(projects, &) end end + def favored_project_ids + @favored_projects ||= Favorite.where(user: current_user, favored_type: 'Project').pluck(:favored_id) + end + def sorted_by_lft? query.orders.first&.attribute == :lft end diff --git a/app/components/queries/sort_by_component.html.erb b/app/components/queries/sort_by_component.html.erb new file mode 100644 index 000000000000..041fe0328bf2 --- /dev/null +++ b/app/components/queries/sort_by_component.html.erb @@ -0,0 +1,12 @@ +<%= render(Primer::Beta::Heading.new(tag: :h5)) { I18n.t('queries.configure_view.sort_by.automatic.heading') } %> +<%= render(Primer::Beta::Text.new(font_size: :small, color: :subtle)) { I18n.t('queries.configure_view.sort_by.automatic.description', plural: queried_model_name.plural) } %> +
    + <%= hidden_field_tag :sortBy, current_orders, data: { "sort-by-config-target" => "sortByField" } %> + <%= render(Primer::OpenProject::FlexLayout.new(data: { "sort-by-config-target" => "inputRowContainer" })) do |layout| %> + <% order_limit.times do |i| %> + <% layout.with_row(mt: 3, data: { "sort-by-config-target" => "inputRow" }) do %> + <%= render(Queries::SortByFieldComponent.new(order: query.orders[i], available_orders:, index: i)) %> + <% end %> + <% end %> + <% end %> +
    diff --git a/app/components/queries/sort_by_component.rb b/app/components/queries/sort_by_component.rb new file mode 100644 index 000000000000..ec442d5d0eda --- /dev/null +++ b/app/components/queries/sort_by_component.rb @@ -0,0 +1,57 @@ +# frozen_string_literal: true + +# -- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2010-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +# ++ + +class Queries::SortByComponent < ApplicationComponent + options :query + options :selectable_columns + + def current_orders + JSON.dump(query.orders.map { |order| [order.attribute, order.direction] }) + end + + def order_limit + 3 + end + + def queried_model_name + query.class.model.model_name + end + + def available_orders + @available_orders ||= begin + all_order_keys = ::Queries::Register.orders[query.class]&.map(&:key) + + # Keys from the order can be symbols, strings or regexes + selectable_columns.select do |column_option| + all_order_keys.any? { |order_key| order_key === column_option[:id] } + end + end + end +end diff --git a/app/components/queries/sort_by_field_component.html.erb b/app/components/queries/sort_by_field_component.html.erb new file mode 100644 index 000000000000..302d95bdeadc --- /dev/null +++ b/app/components/queries/sort_by_field_component.html.erb @@ -0,0 +1,14 @@ +<%= render(Primer::OpenProject::FlexLayout.new) do |flex| %> + <% flex.with_column(flex: 1) do %> + <%#- We are just using the classes of the primer component here, because when using the primer component, we cannot detach the input element from the form %> + <%#- The form="none" adds the input to a nonexistant form (as we do not have one with the ID="none" and thus the fields to not get appended to the query string %> + <%= select_tag 'sort_field', select_options, prompt: "-", form: "none", class: "FormControl-select FormControl-medium FormControl--fullWidth", data: { action: "change->sort-by-config#fieldChanged"} %> + <% end %> + <% flex.with_column do %> + <%= render(Primer::Alpha::SegmentedControl.new("aria-label": "Sort order", hide_labels: true, ml: 3)) do |sort_buttons| %> + <%#- The segmented control actions need to be included here as well as they do the visual styling of the currently selected option, just setting our action would remove their action %> + <% sort_buttons.with_item(icon: "sort-asc", label: "sort ascending", selected: order_asc?, data: { direction: 'asc', action: "click:segmented-control#select click->sort-by-config#fieldChanged"}) %> + <% sort_buttons.with_item(icon: "sort-desc", label: "sort descending", selected: order_desc?, data: { direction: 'desc', action: "click:segmented-control#select click->sort-by-config#fieldChanged"}) %> + <% end %> + <% end %> +<% end %> diff --git a/modules/meeting/app/components/meetings/add_button_component.rb b/app/components/queries/sort_by_field_component.rb similarity index 66% rename from modules/meeting/app/components/meetings/add_button_component.rb rename to app/components/queries/sort_by_field_component.rb index 7b5a3afbfe2a..a482d31078b7 100644 --- a/modules/meeting/app/components/meetings/add_button_component.rb +++ b/app/components/queries/sort_by_field_component.rb @@ -2,7 +2,7 @@ # -- copyright # OpenProject is an open source project management software. -# Copyright (C) 2023 the OpenProject GmbH +# Copyright (C) 2010-2024 the OpenProject GmbH # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License version 3. @@ -27,32 +27,28 @@ # # See COPYRIGHT and LICENSE files for more details. # ++ -# -module Meetings - class AddButtonComponent < ::AddButtonComponent - def render? - if current_project - User.current.allowed_in_project?(:create_meetings, current_project) - else - User.current.allowed_in_any_project?(:create_meetings) - end - end +class Queries::SortByFieldComponent < ApplicationComponent # rubocop:disable OpenProject/AddPreviewForViewComponent + options :order, + :available_orders, + :index - def dynamic_path - polymorphic_path([:new, current_project, :meeting]) - end + def select_options + options_for_select( + available_orders.map { |order| [order[:name], order[:id]] }, + order&.attribute + ) + end - def id - "add-meeting-button" - end + def active? + order.present? && available_orders.any? { |o| order.attribute.to_sym == o[:id] } + end - def accessibility_label_text - I18n.t(:label_meeting_new) - end + def order_asc? + active? && order&.direction == :asc + end - def label_text - I18n.t(:label_meeting) - end + def order_desc? + active? && order&.direction == :desc end end diff --git a/app/contracts/projects/base_contract.rb b/app/contracts/projects/base_contract.rb index 7b0ec44ca038..a894a0e2ffe8 100644 --- a/app/contracts/projects/base_contract.rb +++ b/app/contracts/projects/base_contract.rb @@ -35,6 +35,7 @@ class BaseContract < ::ModelContract attribute :identifier attribute :description attribute :public + attribute :settings attribute :active do validate_active_present validate_changing_active diff --git a/app/contracts/queries/projects/project_queries/update_contract.rb b/app/contracts/queries/projects/project_queries/update_contract.rb new file mode 100644 index 000000000000..82e6479a9475 --- /dev/null +++ b/app/contracts/queries/projects/project_queries/update_contract.rb @@ -0,0 +1,31 @@ +# -- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2010-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +# ++ + +module Queries::Projects::ProjectQueries + class UpdateContract < BaseContract; end +end diff --git a/app/controllers/admin/attachments/quarantined_attachments_controller.rb b/app/controllers/admin/attachments/quarantined_attachments_controller.rb index c3fba094ea59..2a7c0b8594db 100644 --- a/app/controllers/admin/attachments/quarantined_attachments_controller.rb +++ b/app/controllers/admin/attachments/quarantined_attachments_controller.rb @@ -35,7 +35,7 @@ class QuarantinedAttachmentsController < ApplicationController before_action :find_attachment, only: %i[destroy] - menu_item :attachment_quarantine + menu_item :attachments def index; end diff --git a/app/controllers/admin/settings/attachments_settings_controller.rb b/app/controllers/admin/settings/attachments_settings_controller.rb index 5b2440de78b3..8ab3bb5e6f4b 100644 --- a/app/controllers/admin/settings/attachments_settings_controller.rb +++ b/app/controllers/admin/settings/attachments_settings_controller.rb @@ -28,10 +28,12 @@ module Admin::Settings class AttachmentsSettingsController < ::Admin::SettingsController - menu_item :attachments_settings + menu_item :attachments - def default_breadcrumb - t(:"attributes.attachments") + def default_breadcrumb; end + + def show_local_breadcrumb + false end def settings_params diff --git a/app/controllers/admin/settings/virus_scanning_settings_controller.rb b/app/controllers/admin/settings/virus_scanning_settings_controller.rb index 047391403b77..63dcf7cc92cc 100644 --- a/app/controllers/admin/settings/virus_scanning_settings_controller.rb +++ b/app/controllers/admin/settings/virus_scanning_settings_controller.rb @@ -28,7 +28,7 @@ module Admin::Settings class VirusScanningSettingsController < ::Admin::SettingsController - menu_item :virus_scanning_settings + menu_item :attachments before_action :require_ee before_action :check_clamav, only: %i[update], if: -> { scan_enabled? } @@ -36,6 +36,7 @@ class VirusScanningSettingsController < ::Admin::SettingsController def show_local_breadcrumb false end + def av_form selected = params.dig(:settings, :antivirus_scan_mode)&.to_sym || :disabled @@ -87,7 +88,7 @@ def success_callback(_call) def rescan_files flash[:notice] = t("settings.antivirus.remaining_rescanned_files", - file_count: t(:label_x_files, count: Attachment.status_uploaded.count)) + file_count: t(:label_x_files, count: Attachment.status_uploaded.count)) Attachment.status_uploaded.update_all(status: :rescan) job = Attachments::VirusRescanJob.perform_later diff --git a/app/controllers/concerns/op_turbo/component_stream.rb b/app/controllers/concerns/op_turbo/component_stream.rb index 625f98a978a6..4c1836f9f4e8 100644 --- a/app/controllers/concerns/op_turbo/component_stream.rb +++ b/app/controllers/concerns/op_turbo/component_stream.rb @@ -30,7 +30,7 @@ module OpTurbo module ComponentStream extend ActiveSupport::Concern - def respond_to_with_turbo_streams(status: :ok, &format_block) + def respond_to_with_turbo_streams(status: turbo_status, &format_block) respond_to do |format| format.turbo_stream do render turbo_stream: turbo_streams, status: @@ -54,7 +54,7 @@ def remove_via_turbo_stream(component:, status: :ok) end def modify_via_turbo_stream(component:, action:, status:) - @status = status + @turbo_status = status turbo_streams << component.render_as_turbo_stream( view_context:, action: @@ -77,8 +77,8 @@ def turbo_streams @turbo_streams ||= [] end - def status - @status ||= :ok + def turbo_status + @turbo_status ||= :ok end end end diff --git a/app/controllers/concerns/op_turbo/dialog_stream_helper.rb b/app/controllers/concerns/op_turbo/dialog_stream_helper.rb new file mode 100644 index 000000000000..429506530d35 --- /dev/null +++ b/app/controllers/concerns/op_turbo/dialog_stream_helper.rb @@ -0,0 +1,41 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module OpTurbo + module DialogStreamHelper + def respond_with_dialog(dialog_component, status: :ok, &format_block) + respond_to do |format| + format.turbo_stream do + render turbo_stream: dialog_component.render_as_turbo_stream(view_context:, action: :dialog), status: + end + + yield(format) if format_block + end + end + end +end diff --git a/app/controllers/favorites_controller.rb b/app/controllers/favorites_controller.rb new file mode 100644 index 000000000000..6f4cc9c089e3 --- /dev/null +++ b/app/controllers/favorites_controller.rb @@ -0,0 +1,62 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +class FavoritesController < ApplicationController + before_action :find_favored_by_object + before_action :require_login + + def favorite + if @favored.visible?(User.current) + set_favored(User.current, true) + else + render_403 + end + end + + def unfavorite + set_favored(User.current, false) + end + + private + + def find_favored_by_object + model_name = params[:object_type] + klass = ::OpenProject::Acts::Favorable::Registry.instance(model_name) + @favored = klass&.find(params[:object_id]) + render_404 unless @favored + end + + def set_favored(user, favored) + @favored.set_favored(user, favored:) + + respond_to do |format| + format.html { redirect_back(fallback_location: home_url, status: 303) } + format.json { head :no_content } + end + end +end diff --git a/app/controllers/homescreen_controller.rb b/app/controllers/homescreen_controller.rb index c4a3b1c53e57..c84ed013104a 100644 --- a/app/controllers/homescreen_controller.rb +++ b/app/controllers/homescreen_controller.rb @@ -33,6 +33,7 @@ class HomescreenController < ApplicationController def index @newest_projects = Project.visible.newest.take(3) + @favorite_projects = Project.visible.active.favored_by(User.current) @newest_users = User.active.newest.take(3) @news = News.latest(count: 3) @announcement = Announcement.active_and_current diff --git a/app/controllers/projects/queries_controller.rb b/app/controllers/projects/queries_controller.rb index b1e2d162eb79..a3a62aa642f7 100644 --- a/app/controllers/projects/queries_controller.rb +++ b/app/controllers/projects/queries_controller.rb @@ -31,8 +31,8 @@ class Projects::QueriesController < ApplicationController # No need for a more specific authorization check. That is carried out in the contracts. before_action :require_login - before_action :find_query, only: :destroy - before_action :load_query_or_deny_access, only: %i[new] + before_action :find_query, only: %i[update destroy] + before_action :build_query_or_deny_access, only: %i[new create] current_menu_item [:new, :create] do :projects @@ -46,12 +46,34 @@ def new def create call = Queries::Projects::ProjectQueries::CreateService - .new(user: current_user) + .new(from: @query, user: current_user) .call(permitted_query_params) if call.success? + flash[:notice] = I18n.t("lists.create.success") + redirect_to projects_path(query_id: call.result.id) else + flash[:error] = I18n.t("lists.create.failure", errors: call.errors.full_messages.join("\n")) + + render template: "/projects/index", + layout: "global", + locals: { query: call.result, state: :edit } + end + end + + def update + call = Queries::Projects::ProjectQueries::UpdateService + .new(user: current_user, model: @query) + .call(permitted_query_params) + + if call.success? + flash[:notice] = I18n.t("lists.update.success") + + redirect_to projects_path(query_id: call.result.id) + else + flash[:error] = I18n.t("lists.update.failure", errors: call.errors.full_messages.join("\n")) + render template: "/projects/index", layout: "global", locals: { query: call.result, state: :edit } diff --git a/app/controllers/projects/query_loading.rb b/app/controllers/projects/query_loading.rb index 071f41318b5f..1d0edfa44eac 100644 --- a/app/controllers/projects/query_loading.rb +++ b/app/controllers/projects/query_loading.rb @@ -29,23 +29,31 @@ module Projects module QueryLoading private + def load_query(duplicate:) + Queries::Projects::Factory.find(params[:query_id], + params: permitted_query_params, + user: current_user, + duplicate:) + end + def load_query_or_deny_access - @query = Queries::Projects::Factory.find(params[:query_id], - params: permitted_query_params, - user: current_user) + @query = load_query(duplicate: false) + + render_403 unless @query + end + + def build_query_or_deny_access + @query = load_query(duplicate: true) render_403 unless @query end def permitted_query_params - query_params = if params[:query] - params - .require(:query) - .permit(:name) - .to_h - else - {} - end + query_params = {} + + if params[:query] + query_params.merge!(params.require(:query).permit(:name)) + end query_params.merge!(Queries::ParamsParser.parse(params)) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 94e4281e5aef..a23acff93c7d 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -32,7 +32,7 @@ class ProjectsController < ApplicationController before_action :find_project, except: %i[index new] before_action :load_query_or_deny_access, only: %i[index] - before_action :authorize, only: %i[copy] + before_action :authorize, only: %i[copy deactivate_work_package_attachments] before_action :authorize_global, only: %i[new] before_action :require_admin, only: %i[destroy destroy_info] @@ -91,6 +91,11 @@ def destroy_info hide_project_in_layout end + def deactivate_work_package_attachments + @project.deactivate_work_package_attachments = params[:value] != "1" + @project.save + end + private def has_managed_project_folders?(project) diff --git a/app/controllers/watchers_controller.rb b/app/controllers/watchers_controller.rb index a02bf428ae25..af71ecb1556e 100644 --- a/app/controllers/watchers_controller.rb +++ b/app/controllers/watchers_controller.rb @@ -46,15 +46,10 @@ def unwatch private def find_watched_by_object - klass = params[:object_type].singularize.camelcase.constantize - - return false unless klass.respond_to?(:watched_by) and - klass.ancestors.include? Redmine::Acts::Watchable and - params[:object_id].to_s =~ /\A\d+\z/ - - unless @watched = klass.find(params[:object_id]) - render_404 - end + model_name = params[:object_type] + klass = ::OpenProject::Acts::Watchable::Registry.instance(model_name) + @watched = klass&.find(params[:object_id]) + render_404 unless @watched end def find_project diff --git a/app/controllers/work_packages_controller.rb b/app/controllers/work_packages_controller.rb index 8bbc4624afb4..ab209aadfa2b 100644 --- a/app/controllers/work_packages_controller.rb +++ b/app/controllers/work_packages_controller.rb @@ -37,6 +37,7 @@ class WorkPackagesController < ApplicationController before_action :authorize_on_work_package, :project, only: :show before_action :find_optional_project, + :check_allowed_export, :protect_from_unauthorized_export, only: :index before_action :load_and_validate_query, only: :index, unless: -> { request.format.html? } diff --git a/app/forms/projects/custom_fields/form.rb b/app/forms/projects/custom_fields/form.rb index 1508c068aae0..46704f690826 100644 --- a/app/forms/projects/custom_fields/form.rb +++ b/app/forms/projects/custom_fields/form.rb @@ -81,7 +81,7 @@ def single_value_custom_field_input(builder, custom_field) form_args = { custom_field:, object: @project, wrapper_id: @wrapper_id } case custom_field.field_format - when "string" + when "string", "link" CustomFields::Inputs::String.new(builder, **form_args) when "text" CustomFields::Inputs::Text.new(builder, **form_args) diff --git a/app/helpers/browser_helper.rb b/app/helpers/browser_helper.rb index 73e076d21111..b0532391694a 100644 --- a/app/helpers/browser_helper.rb +++ b/app/helpers/browser_helper.rb @@ -14,13 +14,13 @@ def unsupported_browser? # Older versions behind last ESR FF return true if browser.firefox? && version < 101 - # Chrome versions older than a year - return true if browser.chrome? && version < 109 + # Chrome/chromium based Edge based versions older than a year + return true if browser.chromium_based? && version < 109 # Older version of safari return true if browser.safari? && version < 16 - # Older version of EDGE + # Older version of non-chromium based Edge return true if browser.edge? && version < 109 false @@ -32,7 +32,7 @@ def unsupported_browser? # or mobile detection def browser_specific_classes [].tap do |classes| - classes << "-browser-chrome" if browser.chrome? + classes << "-browser-chrome" if browser.chrome? || browser.chromium_based? classes << "-browser-firefox" if browser.firefox? classes << "-browser-safari" if browser.safari? classes << "-browser-edge" if browser.edge? diff --git a/app/helpers/favorite_helper.rb b/app/helpers/favorite_helper.rb new file mode 100644 index 000000000000..e2a28188ae08 --- /dev/null +++ b/app/helpers/favorite_helper.rb @@ -0,0 +1,34 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module FavoriteHelper + # Call the path helper to create a favorite/unfavorite path + def build_favorite_path(object, **params) + favorite_path(object_type: object.model_name.route_key, object_id: object.id, **params) + end +end diff --git a/app/helpers/frontend_asset_helper.rb b/app/helpers/frontend_asset_helper.rb index 0aaf9a3c559f..2892e1880565 100644 --- a/app/helpers/frontend_asset_helper.rb +++ b/app/helpers/frontend_asset_helper.rb @@ -30,17 +30,13 @@ module FrontendAssetHelper CLI_DEFAULT_PROXY = 'http://localhost:4200'.freeze def self.assets_proxied? - ENV['OPENPROJECT_DISABLE_DEV_ASSET_PROXY'].blank? && !Rails.env.production? && cli_proxy? + ENV['OPENPROJECT_DISABLE_DEV_ASSET_PROXY'].blank? && !Rails.env.production? && cli_proxy.present? end def self.cli_proxy ENV.fetch('OPENPROJECT_CLI_PROXY', CLI_DEFAULT_PROXY) end - def self.cli_proxy? - cli_proxy.present? - end - ## # Include angular CLI frontend assets by either referencing a prod build, # or referencing the running CLI proxy that hosts the assets in memory. @@ -62,20 +58,26 @@ def include_spot_assets private - def angular_cli_asset(path) - URI.join(FrontendAssetHelper.cli_proxy, "assets/frontend/#{path}") + def lookup_frontend_asset(unhashed_file_name) + hashed_file_name = ::OpenProject::Assets.lookup_asset(unhashed_file_name) + frontend_asset_path(hashed_file_name) end - def frontend_asset_path(unhashed) - file_name = ::OpenProject::Assets.lookup_asset unhashed + def frontend_asset_path(file_name) "/assets/frontend/#{file_name}" end def variable_asset_path(path) if FrontendAssetHelper.assets_proxied? - angular_cli_asset(path) + File.join( + FrontendAssetHelper.cli_proxy, + Rails.application.config.relative_url_root, + frontend_asset_path(path) + ) else - frontend_asset_path(path) + # we do not need to take care about Rails.application.config.relative_url_root + # because in this case javascript|stylesheet_include_tag will add it automatically. + lookup_frontend_asset(path) end end end diff --git a/app/helpers/menus/projects_helper.rb b/app/helpers/menus/projects_helper.rb index 3baee90fb0ba..09a84b395ba4 100644 --- a/app/helpers/menus/projects_helper.rb +++ b/app/helpers/menus/projects_helper.rb @@ -44,11 +44,13 @@ def first_level_menu_items def static_filters [ query_menu_item(::Queries::Projects::Factory.static_query_active, selected: no_query_props?), + query_menu_item(::Queries::Projects::Factory.static_query_favored, + id: ::Queries::Projects::Factory::STATIC_FAVORED), query_menu_item(::Queries::Projects::Factory.static_query_my, id: ::Queries::Projects::Factory::STATIC_MY), query_menu_item(::Queries::Projects::Factory.static_query_archived, id: ::Queries::Projects::Factory::STATIC_ARCHIVED) - ] + ].compact end def static_status_filters diff --git a/app/helpers/work_packages_controller_helper.rb b/app/helpers/work_packages_controller_helper.rb index 55d1fa6335ce..9ba2df4975fd 100644 --- a/app/helpers/work_packages_controller_helper.rb +++ b/app/helpers/work_packages_controller_helper.rb @@ -34,6 +34,12 @@ def protect_from_unauthorized_export end end + def check_allowed_export + return unless params[:format] == "pdf" && params[:gantt] == "true" + + render_403 unless EnterpriseToken.allows_to?(:gantt_pdf_export) + end + def user_allowed_to_export? User.current.allowed_in_any_work_package?(:export_work_packages, in_project: @project) end diff --git a/app/models/application_record.rb b/app/models/application_record.rb index 989735200798..5015d2199eb6 100644 --- a/app/models/application_record.rb +++ b/app/models/application_record.rb @@ -1,4 +1,8 @@ + class ApplicationRecord < ActiveRecord::Base + include ::OpenProject::Acts::Watchable + include ::OpenProject::Acts::Favorable + self.abstract_class = true ## diff --git a/app/models/custom_actions/actions/assigned_to.rb b/app/models/custom_actions/actions/assigned_to.rb index c9de63d32671..cb07040dab17 100644 --- a/app/models/custom_actions/actions/assigned_to.rb +++ b/app/models/custom_actions/actions/assigned_to.rb @@ -36,7 +36,8 @@ def self.key def available_principles principal_class .not_locked - .select(:id, :firstname, :lastname, :type) + .select(:id, :type) + .select_for_name .ordered_by_name .map { |u| [u.id, u.name] } end diff --git a/app/models/custom_actions/actions/notify.rb b/app/models/custom_actions/actions/notify.rb index 96c20d56552a..ab750301e659 100644 --- a/app/models/custom_actions/actions/notify.rb +++ b/app/models/custom_actions/actions/notify.rb @@ -61,7 +61,8 @@ def multi_value? def principals Principal .not_locked - .select(:id, :firstname, :lastname, :type) + .select(:id, :type) + .select_for_name .ordered_by_name end end diff --git a/app/models/custom_actions/actions/responsible.rb b/app/models/custom_actions/actions/responsible.rb index 78c3efc83b17..521135ec3f98 100644 --- a/app/models/custom_actions/actions/responsible.rb +++ b/app/models/custom_actions/actions/responsible.rb @@ -32,7 +32,8 @@ class CustomActions::Actions::Responsible < CustomActions::Actions::Base def available_principles User .not_locked - .select(:id, :firstname, :lastname, :type) + .select(:id, :type) + .select_for_name .ordered_by_name .map { |u| [u.id, u.name] } end diff --git a/app/models/custom_field.rb b/app/models/custom_field.rb index 7b86c4c97c98..140ab414d3ac 100644 --- a/app/models/custom_field.rb +++ b/app/models/custom_field.rb @@ -184,7 +184,7 @@ def cast_value(value) return if value.blank? case field_format - when "string", "text", "list" + when "string", "text", "list", "link" value when "date" begin diff --git a/app/models/custom_value.rb b/app/models/custom_value.rb index 0e331d84f548..d3b55b63bb00 100644 --- a/app/models/custom_value.rb +++ b/app/models/custom_value.rb @@ -97,7 +97,7 @@ def validate_presence_of_required_value def validate_format_of_value if value.present? && custom_field.has_regexp? && !(value =~ Regexp.new(custom_field.regexp)) - errors.add(:value, :invalid) + errors.add(:value, :regex_match_failed, expression: custom_field.regexp) end rescue RegexpError => e errors.add(:base, :regex_invalid) diff --git a/app/models/custom_value/link_strategy.rb b/app/models/custom_value/link_strategy.rb new file mode 100644 index 000000000000..04975fb25fb7 --- /dev/null +++ b/app/models/custom_value/link_strategy.rb @@ -0,0 +1,49 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +class CustomValue::LinkStrategy < CustomValue::FormatStrategy + def typed_value + formatted_value + end + + def parse_value(val) + parsed_url(val)&.to_s + end + + def validate_type_of_value + unless parsed_url(value)&.absolute? + :invalid_url + end + end + + private + + def parsed_url(val) + Addressable::URI.heuristic_parse(val, scheme: "http") + end +end diff --git a/lib_static/plugins/acts_as_watchable/init.rb b/app/models/favorite.rb similarity index 85% rename from lib_static/plugins/acts_as_watchable/init.rb rename to app/models/favorite.rb index 0a2265a04afc..99907152df77 100644 --- a/lib_static/plugins/acts_as_watchable/init.rb +++ b/app/models/favorite.rb @@ -26,8 +26,10 @@ # See COPYRIGHT and LICENSE files for more details. #++ -# Include hook code here -require File.dirname(__FILE__) + "/lib/acts_as_watchable" -require File.dirname(__FILE__) + "/lib/acts_as_watchable/routes.rb" +class Favorite < ApplicationRecord + belongs_to :user + belongs_to :favored, polymorphic: true -ActiveRecord::Base.include Redmine::Acts::Watchable + validates :user, presence: true + validates :favored, presence: true +end diff --git a/app/models/group.rb b/app/models/group.rb index a1cb415fd930..b15997ae0c3d 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -58,6 +58,11 @@ class Group < Principal scopes :visible + # Columns required for formatting the group's name. + def self.columns_for_name(_formatter = nil) + [:lastname] + end + def to_s lastname end diff --git a/app/models/journal.rb b/app/models/journal.rb index 13e30211b337..fb5f3f329a38 100644 --- a/app/models/journal.rb +++ b/app/models/journal.rb @@ -30,8 +30,6 @@ class Journal < ApplicationRecord self.table_name = "journals" self.ignored_columns += ["activity_type"] - WorkingDayUpdate = Struct.new(:working_days, :non_working_days, keyword_init: true) - include ::JournalChanges include ::JournalFormatter include ::Acts::Journalized::FormatHooks diff --git a/app/models/journal/caused_by_progress_mode_changed_to_status_based.rb b/app/models/journal/caused_by_progress_mode_changed_to_status_based.rb new file mode 100644 index 000000000000..84a78eb674de --- /dev/null +++ b/app/models/journal/caused_by_progress_mode_changed_to_status_based.rb @@ -0,0 +1,33 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2023 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ +# +class Journal::CausedByProgressModeChangedToStatusBased < CauseOfChange::Base + def initialize + super("progress_mode_changed_to_status_based") + end +end diff --git a/app/models/journal/caused_by_status_p_complete_changed.rb b/app/models/journal/caused_by_status_p_complete_changed.rb new file mode 100644 index 000000000000..da648aca57d6 --- /dev/null +++ b/app/models/journal/caused_by_status_p_complete_changed.rb @@ -0,0 +1,39 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2023 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ +# +class Journal::CausedByStatusPCompleteChanged < CauseOfChange::Base + def initialize(status_name:, status_id:, status_p_complete_change:) + additional = { + "status_name" => status_name, + "status_id" => status_id, + "status_p_complete_change" => status_p_complete_change + } + + super("status_p_complete_changed", additional) + end +end diff --git a/app/models/journal/caused_by_system_update.rb b/app/models/journal/caused_by_system_update.rb new file mode 100644 index 000000000000..a3634fd4eb14 --- /dev/null +++ b/app/models/journal/caused_by_system_update.rb @@ -0,0 +1,36 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2023 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ +# +class Journal::CausedBySystemUpdate < CauseOfChange::Base + def initialize(feature:) + additional = { + "feature" => feature + } + super("system_update", additional) + end +end diff --git a/app/models/journal/caused_by_work_package_child_change.rb b/app/models/journal/caused_by_work_package_child_change.rb new file mode 100644 index 000000000000..0389aa4da3d5 --- /dev/null +++ b/app/models/journal/caused_by_work_package_child_change.rb @@ -0,0 +1,36 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2023 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ +# +class Journal::CausedByWorkPackageChildChange < CauseOfChange::Base + def initialize(work_package) + additional = { + "work_package_id" => work_package.id + } + super("work_package_children_changed_times", additional) + end +end diff --git a/app/models/journal/caused_by_work_package_parent_change.rb b/app/models/journal/caused_by_work_package_parent_change.rb new file mode 100644 index 000000000000..f76a8566284f --- /dev/null +++ b/app/models/journal/caused_by_work_package_parent_change.rb @@ -0,0 +1,36 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2023 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +class Journal::CausedByWorkPackageParentChange < CauseOfChange::Base + def initialize(work_package) + additional = { + "work_package_id" => work_package.id + } + super("work_package_parent_changed_times", additional) + end +end diff --git a/app/models/journal/caused_by_work_package_predecessor_change.rb b/app/models/journal/caused_by_work_package_predecessor_change.rb new file mode 100644 index 000000000000..7eada4e8c0bd --- /dev/null +++ b/app/models/journal/caused_by_work_package_predecessor_change.rb @@ -0,0 +1,36 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2023 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +class Journal::CausedByWorkPackagePredecessorChange < CauseOfChange::Base + def initialize(work_package) + additional = { + "work_package_id" => work_package.id + } + super("work_package_predecessor_changed_times", additional) + end +end diff --git a/app/models/journal/caused_by_work_package_related_change.rb b/app/models/journal/caused_by_work_package_related_change.rb new file mode 100644 index 000000000000..afa6257679d7 --- /dev/null +++ b/app/models/journal/caused_by_work_package_related_change.rb @@ -0,0 +1,36 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2023 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +class Journal::CausedByWorkPackageRelatedChange < CauseOfChange::Base + def initialize(work_package:) + additional = { + "work_package_id" => work_package.id + } + super("work_package_related_changed_times", additional) + end +end diff --git a/app/models/journal/caused_by_working_day_changes.rb b/app/models/journal/caused_by_working_day_changes.rb new file mode 100644 index 000000000000..98a4752eaab0 --- /dev/null +++ b/app/models/journal/caused_by_working_day_changes.rb @@ -0,0 +1,39 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2023 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +class Journal::CausedByWorkingDayChanges < CauseOfChange::Base + def initialize(working_days:, non_working_days:) + additional = { + "changed_days" => { + "working_days" => working_days, + "non_working_days" => non_working_days.transform_keys(&:iso8601) + } + } + super("working_days_changed", additional) + end +end diff --git a/app/models/placeholder_user.rb b/app/models/placeholder_user.rb index 57d06ec554a1..fc5c68585663 100644 --- a/app/models/placeholder_user.rb +++ b/app/models/placeholder_user.rb @@ -37,6 +37,11 @@ class PlaceholderUser < Principal scopes :visible + # Columns required for formatting the placeholder user's name. + def self.columns_for_name(_formatter = nil) + [:lastname] + end + def to_s lastname end diff --git a/app/models/principal.rb b/app/models/principal.rb index 1afda9a0e7a4..5e6b4bb3bedb 100644 --- a/app/models/principal.rb +++ b/app/models/principal.rb @@ -122,6 +122,18 @@ class Principal < ApplicationRecord before_create :set_default_empty_values + # Columns required for formatting the principal's name. + def self.columns_for_name(formatter = nil) + raise NotImplementedError, "Redefine in subclass" unless self == Principal + + [User, Group, PlaceholderUser].map { _1.columns_for_name(formatter) }.inject(:|) + end + + # Select columns for formatting the user's name. + def self.select_for_name(formatter = nil) + select(*columns_for_name(formatter)) + end + def name(_formatter = nil) to_s end diff --git a/app/models/project.rb b/app/models/project.rb index d92a7c22307e..e50879c90cb0 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -33,7 +33,6 @@ class Project < ApplicationRecord include Projects::Activity include Projects::Hierarchy include Projects::AncestorsFromRoot - include ::Scopes::Scoped include Projects::ActsAsCustomizablePatches @@ -90,6 +89,10 @@ class Project < ApplicationRecord has_many :project_storages, dependent: :destroy, class_name: 'Storages::ProjectStorage' has_many :storages, through: :project_storages + store_attribute :settings, :deactivate_work_package_attachments, :boolean + + acts_as_favorable + acts_as_customizable # partially overridden via Projects::ActsAsCustomizablePatches in order to support sections and # project-leval activation of custom fields diff --git a/app/models/projects/acts_as_customizable_patches.rb b/app/models/projects/acts_as_customizable_patches.rb index 29d6081e7739..f2a33c4e974d 100644 --- a/app/models/projects/acts_as_customizable_patches.rb +++ b/app/models/projects/acts_as_customizable_patches.rb @@ -49,8 +49,8 @@ module Projects::ActsAsCustomizablePatches before_create :reject_section_scoped_validation_for_creation before_create :build_missing_project_custom_field_project_mappings - after_create :disable_custom_fields_with_empty_values after_save :reset_section_scoped_validation, :set_query_available_custom_fields_to_project_level + after_save :disable_custom_fields_with_empty_values, if: :previously_new_record? def build_missing_project_custom_field_project_mappings # activate custom fields for this project (via mapping table) if values have been provided for custom_fields but no mapping exists @@ -98,9 +98,18 @@ def disable_custom_fields_with_empty_values # this hook is required as acts_as_customizable build custom values with their default value even if a blank value was provided in the project creation form # `build_missing_project_custom_field_project_mappings` will then activate the custom field although the user explicitly provided a blank value # in order to not patch `acts_as_customizable` further, we simply identify these custom values and deactivate the custom field + + # This callback should be an after_save callback, because the custom_values association has autosave + # and it has after_create callbacks in the model (CustomValue#activate_custom_field_in_customized_project). + # The after_create callback in the children objects are ran after the after_create callbacks on the parent. + # In order to make sure we execute this callback after the children's callbacks, the after_save hook must be used. custom_field_ids = project.custom_values.select { |cv| cv.value.blank? && !cv.required? }.pluck(:custom_field_id) - project_custom_field_project_mappings.where(custom_field_id: custom_field_ids).destroy_all + project_custom_field_project_mappings + .where(custom_field_id: custom_field_ids) + .or(project_custom_field_project_mappings + .where.not(custom_field_id: available_custom_fields.select(:id))) + .destroy_all end def with_all_available_custom_fields diff --git a/app/models/queries/base_query.rb b/app/models/queries/base_query.rb index e7c5b6bbc500..3debb96a0fc6 100644 --- a/app/models/queries/base_query.rb +++ b/app/models/queries/base_query.rb @@ -34,6 +34,7 @@ module Queries::BaseQuery include Queries::Selects::AvailableSelects include Queries::Orders::AvailableOrders include Queries::GroupBys::AvailableGroupBys + include Queries::ValidSubset include ActiveModel::Validations validate :filters_valid, @@ -88,11 +89,17 @@ def where(attribute, operator, values) filter.values = values filter.context = context + # Remove any previous instances of the same filter + remove_filter(filter.name) filters << filter self end + def remove_filter(name) + filters.delete(find_active_filter(name)) + end + def select(*select_values, add_not_existing: true) select_values.each do |select_value| select_column = select_for(select_value) diff --git a/app/models/queries/filters/base.rb b/app/models/queries/filters/base.rb index aea58102e7ec..86ce0e2f72ac 100644 --- a/app/models/queries/filters/base.rb +++ b/app/models/queries/filters/base.rb @@ -57,7 +57,7 @@ def initialize(name, options = {}) # Treat the constructor as private, as the filter MAY need to check # the options before accepting them as a filter. # - # Use +#create+ instead. + # Use +#create!+ instead. private_class_method :new ## diff --git a/app/models/queries/orders/base.rb b/app/models/queries/orders/base.rb index d1d3db84ca90..5aa34b199824 100644 --- a/app/models/queries/orders/base.rb +++ b/app/models/queries/orders/base.rb @@ -62,6 +62,10 @@ def name attribute end + def available? + true + end + private def order diff --git a/app/models/queries/orders/not_existing_order.rb b/app/models/queries/orders/not_existing_order.rb index e352cb24ecaf..07bba0c6917e 100644 --- a/app/models/queries/orders/not_existing_order.rb +++ b/app/models/queries/orders/not_existing_order.rb @@ -35,6 +35,10 @@ def self.key :inexistent end + def available? + false + end + private def always_false diff --git a/app/models/queries/projects.rb b/app/models/queries/projects.rb index 1e25ddb19ebe..0872e520d81b 100644 --- a/app/models/queries/projects.rb +++ b/app/models/queries/projects.rb @@ -46,6 +46,7 @@ module Queries::Projects filter Filters::ProjectStatusFilter filter Filters::UserActionFilter filter Filters::VisibleFilter + filter Filters::FavoredFilter order Orders::DefaultOrder order Orders::LatestActivityAtOrder @@ -61,5 +62,6 @@ module Queries::Projects select Selects::LatestActivityAt select Selects::RequiredDiskSpace select Selects::Status + select Selects::Favored end end diff --git a/app/models/queries/projects/factory.rb b/app/models/queries/projects/factory.rb index 45a764618208..7268b57ac770 100644 --- a/app/models/queries/projects/factory.rb +++ b/app/models/queries/projects/factory.rb @@ -29,14 +29,16 @@ class Queries::Projects::Factory STATIC_ACTIVE = "active".freeze STATIC_MY = "my".freeze + STATIC_FAVORED = "favored".freeze STATIC_ARCHIVED = "archived".freeze STATIC_ON_TRACK = "on_track".freeze STATIC_OFF_TRACK = "off_track".freeze STATIC_AT_RISK = "at_risk".freeze class << self - def find(id, params:, user:) - find_and_update_static_query(id, params, user) || find_and_update_persisted_query(id, params, user) + def find(id, params:, user:, duplicate: false) + find_static_query_and_set_attributes(id, params, user, duplicate:) || + find_persisted_query_and_set_attributes(id, params, user, duplicate:) end def static_query(id) @@ -45,6 +47,8 @@ def static_query(id) static_query_active when STATIC_MY static_query_my + when STATIC_FAVORED + static_query_favored when STATIC_ARCHIVED static_query_archived when STATIC_ON_TRACK @@ -68,6 +72,12 @@ def static_query_my end end + def static_query_favored + list_with(:"projects.lists.favored") do |query| + query.where("favored", "=", OpenProject::Database::DB_VALUE_TRUE) + end + end + def static_query_archived list_with(:"projects.lists.archived") do |query| query.where("active", "=", OpenProject::Database::DB_VALUE_FALSE) @@ -97,43 +107,51 @@ def static_query_status_at_risk def list_with(name) Queries::Projects::ProjectQuery.new(name: I18n.t(name)) do |query| query.order("lft" => "asc") - query.select(*(["name"] + Setting.enabled_projects_columns).uniq, add_not_existing: false) + query.select(*Setting.enabled_projects_columns, add_not_existing: false) yield query + + # This method is used to create static queries, so assume clean state after building + query.clear_changes_information end end - def find_and_update_static_query(id, params, user) + def find_static_query_and_set_attributes(id, params, user, duplicate:) query = static_query(id) return unless query + query = duplicate_query(query) if duplicate || params.any? + if params.any? - new_query(query, params, user) + set_query_attributes(query, params, user) else query end end - def find_and_update_persisted_query(id, params, user) + def find_persisted_query_and_set_attributes(id, params, user, duplicate:) query = Queries::Projects::ProjectQuery.where(user:).find_by(id:) return unless query + query.valid_subset! + query.clear_changes_information + + query = duplicate_query(query) if duplicate + if params.any? - update_query(query, params, user) + set_query_attributes(query, params, user) else query end end - def new_query(source_query, params, user) - update_query(Queries::Projects::ProjectQuery.new(source_query.attributes.slice("filters", "orders", "selects")), - params, - user) + def duplicate_query(query) + Queries::Projects::ProjectQuery.new(query.attributes.slice("filters", "orders", "selects")) end - def update_query(query, params, user) + def set_query_attributes(query, params, user) Queries::Projects::ProjectQueries::SetAttributesService .new(user:, model: query, diff --git a/app/models/queries/projects/filters/created_at_filter.rb b/app/models/queries/projects/filters/created_at_filter.rb index 7355b4595b4d..b956e63d1b57 100644 --- a/app/models/queries/projects/filters/created_at_filter.rb +++ b/app/models/queries/projects/filters/created_at_filter.rb @@ -30,4 +30,10 @@ class Queries::Projects::Filters::CreatedAtFilter < Queries::Projects::Filters:: def type :datetime_past end + + def available? + # The column is only available for admins. + # When the filter is used, one could get the same information as with the column. + User.current.admin? + end end diff --git a/app/models/queries/projects/filters/favored_filter.rb b/app/models/queries/projects/filters/favored_filter.rb new file mode 100644 index 000000000000..b7eb8e90b00a --- /dev/null +++ b/app/models/queries/projects/filters/favored_filter.rb @@ -0,0 +1,62 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +class Queries::Projects::Filters::FavoredFilter < Queries::Projects::Filters::ProjectFilter + include Queries::Filters::Shared::BooleanFilter + + def self.key + :favored + end + + def human_name + I18n.t(:label_favorite) + end + + def available? + User.current.logged? + end + + def scope + if values.first == OpenProject::Database::DB_VALUE_TRUE + super.where(id: favored_project_ids) + else + super.where.not(id: favored_project_ids) + end + end + + # Handled by scope + def where + "1=1" + end + + def favored_project_ids + Favorite + .where(favored_type: "Project", user_id: User.current.id) + .select(:favored_id) + end +end diff --git a/app/models/queries/projects/filters/type_filter.rb b/app/models/queries/projects/filters/type_filter.rb index f8874cbf26a0..e642d108d660 100644 --- a/app/models/queries/projects/filters/type_filter.rb +++ b/app/models/queries/projects/filters/type_filter.rb @@ -54,7 +54,7 @@ def self.key def type_strategy # Instead of getting the IDs of all the projects a user is allowed - # to see we only check that the value is an integer. Non valid ids + # to see we only check that the value is an integer. Non valid ids # will then simply create an empty result but will not cause any # harm. @type_strategy ||= ::Queries::Filters::Strategies::IntegerList.new(self) diff --git a/app/models/queries/projects/orders/custom_field_order.rb b/app/models/queries/projects/orders/custom_field_order.rb index 29fa1157c932..8e98698eef84 100644 --- a/app/models/queries/projects/orders/custom_field_order.rb +++ b/app/models/queries/projects/orders/custom_field_order.rb @@ -29,17 +29,27 @@ class Queries::Projects::Orders::CustomFieldOrder < Queries::Orders::Base self.model = Project.all + EXCLUDED_CUSTOM_FIELD_TYPES = %w(text) + KEY_FORMAT = /cf_(\d+)/ + validates :custom_field, presence: { message: I18n.t(:"activerecord.errors.messages.does_not_exist") } def self.key - /cf_(\d+)/ + valid_ids = RequestStore.fetch(:custom_sortable_project_custom_fields) do + ProjectCustomField.where.not(field_format: EXCLUDED_CUSTOM_FIELD_TYPES).visible.pluck(:id).join("|") + end + + /cf_(#{valid_ids})/ end def custom_field @custom_field ||= begin - id = self.class.key.match(attribute)[1] + id = KEY_FORMAT.match(attribute)[1] - ProjectCustomField.visible.find_by_id(id) + ProjectCustomField + .where.not(field_format: EXCLUDED_CUSTOM_FIELD_TYPES) + .visible + .find_by(id:) end end @@ -47,6 +57,10 @@ def scope super.select(custom_field.order_statements) end + def available? + custom_field.present? + end + private def order diff --git a/app/models/queries/projects/selects/favored.rb b/app/models/queries/projects/selects/favored.rb new file mode 100644 index 000000000000..c71446e49a64 --- /dev/null +++ b/app/models/queries/projects/selects/favored.rb @@ -0,0 +1,41 @@ +# -- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2010-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +# ++ + +class Queries::Projects::Selects::Favored < Queries::Selects::Base + def self.key + :favored + end + + def self.available? + true + end + + def caption + I18n.t(:label_favorite) + end +end diff --git a/app/models/queries/selects/not_existing_select.rb b/app/models/queries/selects/not_existing_select.rb index 2f1e5c3978a5..f5c6bd3c1a0c 100644 --- a/app/models/queries/selects/not_existing_select.rb +++ b/app/models/queries/selects/not_existing_select.rb @@ -39,6 +39,10 @@ def caption I18n.t("activerecord.errors.messages.does_not_exist") end + def available? + false + end + private def always_false diff --git a/app/models/queries/serialization/filters.rb b/app/models/queries/serialization/filters.rb index 6815939c79d5..5326f20ea840 100644 --- a/app/models/queries/serialization/filters.rb +++ b/app/models/queries/serialization/filters.rb @@ -34,7 +34,7 @@ def load(serialized_filter_hash) return [] if serialized_filter_hash.nil? serialized_filter_hash.map do |serialized_filter| - filter = filter_for(serialized_filter["attribute"], no_memoization: true) + filter = filter_for(serialized_filter["attribute"].to_sym, no_memoization: true) filter.operator = serialized_filter["operator"] filter.values = serialized_filter["values"] @@ -49,9 +49,9 @@ def dump(filters) def self.dump(filters) (filters || []).map do |filter| { - attribute: filter.field, - operator: filter.operator, - values: filter.values + "attribute" => filter.field.to_s, + "operator" => filter.operator, + "values" => filter.values } end end diff --git a/app/models/queries/serialization/hash.rb b/app/models/queries/serialization/hash.rb index d2e32a3bc6ce..8a7c9a9f548a 100644 --- a/app/models/queries/serialization/hash.rb +++ b/app/models/queries/serialization/hash.rb @@ -32,10 +32,10 @@ module Hash extend ActiveSupport::Concern class_methods do - def from_hash(hash) + def from_hash(hash) # rubocop:disable Metrics/AbcSize new(user: hash[:user]).tap do |query| query.add_filters hash[:filters] if hash[:filters].present? - query.order hash[:orders] if hash[:orders].present? + query.add_orders hash[:orders] if hash[:orders].present? query.group hash[:group_by] if hash[:group_by].present? query.select(*hash[:selects]) if hash[:selects].present? end @@ -45,7 +45,7 @@ def from_hash(hash) def to_hash { filters: filters.map { |f| { name: f.name, operator: f.operator, values: f.values } }, - orders: orders.to_h { |o| [o.attribute, o.direction] }, + orders: orders.map { |o| [o.attribute, o.direction] }, group_by: respond_to?(:group_by) ? group_by : nil, selects: selects.map(&:attribute), user: @@ -57,6 +57,16 @@ def add_filters(filters) where(f[:name], f[:operator], f[:values]) end end + + def add_orders(orders) + if orders.is_a?(::Hash) + order(orders) + elsif orders.is_a?(::Array) + orders.each { |o| order([o].to_h) } + else + raise ArgumentError, "Cannot add orders from #{orders.class}" + end + end end end end diff --git a/app/models/queries/serialization/orders.rb b/app/models/queries/serialization/orders.rb index 12b5d4db843f..17f11f75a60e 100644 --- a/app/models/queries/serialization/orders.rb +++ b/app/models/queries/serialization/orders.rb @@ -40,7 +40,9 @@ def load(serialized_orders) end def dump(orders) - orders.map { |o| { attribute: o.attribute, direction: o.direction } } + orders.map do |o| + { "attribute" => o.attribute.to_s, "direction" => o.direction.to_s } + end end def orders_register diff --git a/app/models/queries/serialization/selects.rb b/app/models/queries/serialization/selects.rb index 90da3e105fa6..8d092a7295fe 100644 --- a/app/models/queries/serialization/selects.rb +++ b/app/models/queries/serialization/selects.rb @@ -38,7 +38,7 @@ def load(serialized_selects) end def dump(selects) - selects.map(&:attribute) + selects.map { |s| s.attribute.to_s } end def registered_and_available diff --git a/app/components/admin/quarantined_attachments/index_page_header_component.rb b/app/models/queries/valid_subset.rb similarity index 69% rename from app/components/admin/quarantined_attachments/index_page_header_component.rb rename to app/models/queries/valid_subset.rb index ed0adf5629a5..ae2335939f48 100644 --- a/app/components/admin/quarantined_attachments/index_page_header_component.rb +++ b/app/models/queries/valid_subset.rb @@ -1,8 +1,6 @@ -# frozen_string_literal: true - # -- copyright # OpenProject is an open source project management software. -# Copyright (C) 2010-2023 the OpenProject GmbH +# Copyright (C) 2010-2024 the OpenProject GmbH # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License version 3. @@ -28,15 +26,30 @@ # See COPYRIGHT and LICENSE files for more details. # ++ -module Admin::QuarantinedAttachments - # rubocop:disable OpenProject/AddPreviewForViewComponent - class IndexPageHeaderComponent < ApplicationComponent - include ApplicationHelper +module Queries + module ValidSubset + extend ActiveSupport::Concern + + def valid_subset! + valid_filters_subset! + valid_selects_subset! + valid_orders_subset! + end + + private + + def valid_filters_subset! + filters.each(&:valid_values!).select! do |filter| + filter.available? && filter.valid? + end + end + + def valid_selects_subset! + selects.select!(&:available?) + end - def breadcrumb_items - [{ href: admin_index_path, text: t("label_administration") }, - { href: admin_settings_attachments_path, text: t("attributes.attachments") }, - t("antivirus_scan.quarantined_attachments.title")] + def valid_orders_subset! + orders.select!(&:available?) end end end diff --git a/app/models/setting/aliases.rb b/app/models/setting/aliases.rb index 848edd38ea2f..cc008cf2833d 100644 --- a/app/models/setting/aliases.rb +++ b/app/models/setting/aliases.rb @@ -39,5 +39,11 @@ def protocol "http" end end + + ## + # Host name without protocol + def host_without_protocol + Setting.host_name.split(":").first + end end end diff --git a/app/models/type/attribute_groups.rb b/app/models/type/attribute_groups.rb index 13315a7fd2f1..235baa21427e 100644 --- a/app/models/type/attribute_groups.rb +++ b/app/models/type/attribute_groups.rb @@ -43,10 +43,10 @@ module Type::AttributeGroups { assignee: :people, responsible: :people, - estimated_time: :estimates_and_time, - remaining_time: :estimates_and_time, - percentage_done: :estimates_and_time, - spent_time: :estimates_and_time, + estimated_time: :estimates_and_progress, + remaining_time: :estimates_and_progress, + percentage_done: :estimates_and_progress, + spent_time: :estimates_and_progress, priority: :details } end @@ -55,7 +55,7 @@ module Type::AttributeGroups mattr_accessor :default_groups do { people: :label_people, - estimates_and_time: :label_estimates_and_time, + estimates_and_progress: :label_estimates_and_progress, details: :label_details, other: :label_other, children: :"activerecord.attributes.work_package.children" @@ -117,7 +117,7 @@ def attribute_groups=(groups) # the default group map. def default_attribute_groups values = work_package_attributes_by_default_group_key - values.reject! { |k, _| k == :estimates_and_time } if is_milestone? + values.reject! { |k, _| k == :estimates_and_progress } if is_milestone? default_groups.keys.each_with_object([]) do |groupkey, array| members = values[groupkey] diff --git a/app/models/user.rb b/app/models/user.rb index d7cd19c38e7b..ca6f7e0e1924 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -262,8 +262,21 @@ def self.try_to_autologin(key) end end + # Columns required for formatting the user's name. + def self.columns_for_name(formatter = nil) + case formatter || Setting.user_format + when :firstname + [:firstname] + when :username + [:login] + else + %i[firstname lastname] + end + end + # Formats the user's name. def name(formatter = nil) + # Don't forget to check columns_for_name case formatter || Setting.user_format when :firstname_lastname then "#{firstname} #{lastname}" diff --git a/app/models/users/scopes/having_reminder_mail_to_send.rb b/app/models/users/scopes/having_reminder_mail_to_send.rb index 35ffcaede624..0b59bce243f4 100644 --- a/app/models/users/scopes/having_reminder_mail_to_send.rb +++ b/app/models/users/scopes/having_reminder_mail_to_send.rb @@ -31,13 +31,13 @@ module HavingReminderMailToSend extend ActiveSupport::Concern class_methods do - # Returns all users for which a reminder mails should be sent now. A user + # Returns all users for which a reminder mails should be sent. A user # will be included if: # - # * That user has an unread notification + # * That user has an unread notification that is not older than the latest_time value. # * The user hasn't been informed about the unread notification before # * The user has configured reminder mails to be within the time frame - # between the provided time and now. + # between the provided earliest_time and latest_time. # # This assumes that users only have full hours specified for the times # they desire to receive a reminder mail at. @@ -48,9 +48,14 @@ module HavingReminderMailToSend # Only the time part is used which is moved forward to the next quarter # hour (e.g. 2021-05-03 10:34:12+02:00 -> 08:45:00). This is done # because time zones always have a mod(15) == 0 minutes offset. Needs to - # be before the current time. - def having_reminder_mail_to_send(earliest_time) - local_times = local_times_from(earliest_time) + # be before the latest_time. + # @param [DateTime] latest_time The latest time to consider as a matching + # slot. + # + # Only the time part is used which is moved back to the last quarter hour + # less than the latest_time value. + def having_reminder_mail_to_send(earliest_time, latest_time) + local_times = local_times_from(earliest_time, latest_time) return none if local_times.empty? @@ -62,13 +67,15 @@ def having_reminder_mail_to_send(earliest_time) .joins(local_time_join(local_times)) subscriber_ids = Notification - .unsent_reminders_before(recipient: recipient_candidates, time: Time.current) + .unsent_reminders_before(recipient: recipient_candidates, time: latest_time) .group(:recipient_id) .select(:recipient_id) where(id: subscriber_ids) end + private + def local_time_join(local_times) # Joins the times local to the user preferences and then checks whether: # @@ -129,8 +136,8 @@ def local_time_join(local_times) SQL end - def local_times_from(earliest_time) - times = quarters_between_earliest_and_now(earliest_time) + def local_times_from(earliest_time, latest_time) + times = quarters_between_earliest_and_latest(earliest_time, latest_time) times_for_zones(times) end @@ -167,20 +174,21 @@ def build_local_times(times, zone) end end - def quarters_between_earliest_and_now(earliest_time) - latest_time = Time.current - raise ArgumentError if latest_time < earliest_time || (latest_time - earliest_time) > 1.day + def quarters_between_earliest_and_latest(earliest_time, latest_time) # rubocop:disable Metrics/AbcSize + raise ArgumentError, "#{latest_time} < #{earliest_time}" if latest_time < earliest_time + raise ArgumentError, "#{latest_time} - #{earliest_time} > 1 day" if (latest_time - earliest_time) > 1.day - quarters = ((latest_time - earliest_time) / 60 / 15).floor + # The first quarter is equal or greater to the earliest time + first_quarter = earliest_time.change(min: (earliest_time.min.to_f / 15).ceil * 15) + # The last quarter is the one smaller than the latest time. But needs to be at least equal to the first quarter. + last_quarter = [first_quarter, latest_time.change(min: latest_time.min / 15 * 15)].max - (1..quarters).each_with_object([next_quarter_hour(earliest_time)]) do |_, times| - times << (times.last + 15.minutes) + (first_quarter.to_i..last_quarter.to_i) + .step(15.minutes) + .map do |time| + Time.zone.at(time) end end - - def next_quarter_hour(time) - (time + (time.min % 15 == 0 ? 0.minutes : (15 - (time.min % 15)).minutes)) - end end end end diff --git a/app/models/work_package.rb b/app/models/work_package.rb index 6b6450db188b..b60f013478b4 100644 --- a/app/models/work_package.rb +++ b/app/models/work_package.rb @@ -82,8 +82,8 @@ class WorkPackage < ApplicationRecord scope :visible, ->(user = User.current) { allowed_to(user, :view_work_packages) } scope :in_status, ->(*args) do - where(status_id: (args.first.respond_to?(:id) ? args.first.id : args.first)) - end + where(status_id: (args.first.respond_to?(:id) ? args.first.id : args.first)) + end scope :for_projects, ->(projects) { where(project_id: projects) @@ -291,6 +291,7 @@ def overdue? def milestone? type&.is_milestone? end + alias_method :is_milestone?, :milestone? def done_ratio @@ -301,6 +302,14 @@ def done_ratio end end + def hide_attachments? + if project&.deactivate_work_package_attachments.nil? + !Setting.show_work_package_attachments + else + project&.deactivate_work_package_attachments? + end + end + def estimated_hours=(hours) converted_hours = (hours.is_a?(String) ? hours.to_hours : hours) write_attribute :estimated_hours, !!converted_hours ? converted_hours : hours @@ -503,11 +512,13 @@ def self.available_custom_fields_from_db(work_packages) .where(types: { id: work_packages.map(&:type_id).uniq })) .distinct end + private_class_method :available_custom_fields_from_db def self.available_custom_field_key(work_package) :"#work_package_custom_fields_#{work_package.project_id}_#{work_package.type_id}" end + private_class_method :available_custom_field_key def custom_field_cache_key @@ -540,7 +551,7 @@ def time_entry_blank?(attributes) key = "activity_id" id = attributes[key] - default_id = if id&.present? + default_id = if id.present? Enumeration.exists? id:, is_default: true, type: "TimeEntryActivity" else true @@ -556,6 +567,7 @@ def self.having_version_from_other_project " AND #{Version.table_name}.sharing <> 'system'" ) end + private_class_method :having_version_from_other_project # Update issues so their versions are not pointing to a @@ -575,6 +587,7 @@ def self.update_versions(conditions = nil) end end end + private_class_method :update_versions # Default assignment based on category @@ -640,6 +653,7 @@ def self.count_and_group_by(options) group by s.id, s.is_closed, j.id" ).to_a end + private_class_method :count_and_group_by def set_attachments_error_details diff --git a/app/models/work_package/pdf_export/common.rb b/app/models/work_package/pdf_export/common.rb index 3eea17cd6f17..77799797c3b6 100644 --- a/app/models/work_package/pdf_export/common.rb +++ b/app/models/work_package/pdf_export/common.rb @@ -285,6 +285,10 @@ def wants_report? options[:show_report] end + def wants_gantt? + options[:gantt] + end + def with_cover? false end diff --git a/app/models/work_package/pdf_export/gantt.rb b/app/models/work_package/pdf_export/gantt.rb new file mode 100644 index 000000000000..3545c7c70e9b --- /dev/null +++ b/app/models/work_package/pdf_export/gantt.rb @@ -0,0 +1,167 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +# How this works: +# The Gantt chart PDF export is built up of several components: +# - GanttBuilder: This is the main class that builds the Gantt chart. +# It is responsible for creating the pages, columns, rows, and shapes. +# - GanttBuilderMonths: This class is a subclass of GanttBuilder and is responsible for +# building the Gantt chart with months as the zoom level. +# - GanttBuilderDays: This class is a subclass of GanttBuilder and is responsible for +# building the Gantt chart with days as the zoom level. +# - GanttBuilderQuarters: This class is a subclass of GanttBuilder and is responsible for +# building the Gantt chart with quarters as the zoom level. +# - GanttPainter: This class is responsible for painting the Gantt chart. +# It paints the grid, header row, lines, bars, milestones, and rows. +# - Data classes: These classes are used to store the data that is used to build the Gantt chart. +# +# 1. Build the data classes, do the layout, measuring, etc. +# 2. Paint the Gantt chart into the PDF + +module WorkPackage::PDFExport::Gantt + GANTT_DAY_COLUMN_WIDTHS = [64, 32, 24, 18].freeze + GANTT_COLUMN_WIDTHS = [128, 64, 32, 24].freeze + GANTT_COLUMN_WIDTHS_NAMES = %w[very_wide wide medium narrow].freeze + GANTT_MODE_NAMES = %w[day month quarter].freeze + GANTT_MODE_DEFAULT = "day".freeze + GANTT_COLUMN_DEFAULT = "wide".freeze + + def write_work_packages_gantt!(work_packages, id_wp_meta_map) + wps = work_packages.select { |work_package| work_package.start_date || work_package.due_date } + return if wps.empty? + + mode = gantt_settings_mode + column_width = gantt_settings_column_width(mode) + write_gantt(mode, column_width, id_wp_meta_map, wps) + end + + private + + def gantt_settings_mode + mode = options[:gantt_mode] || GANTT_MODE_DEFAULT + mode = GANTT_MODE_DEFAULT if GANTT_MODE_NAMES.exclude?(mode) + mode.to_sym + end + + def gantt_settings_column_width(mode) + width_index = GANTT_COLUMN_WIDTHS_NAMES.find_index(options[:gantt_width] || GANTT_COLUMN_DEFAULT) + width_index = GANTT_COLUMN_WIDTHS_NAMES.find_index(GANTT_COLUMN_DEFAULT) if width_index.nil? + mode == :day ? GANTT_DAY_COLUMN_WIDTHS[width_index] : GANTT_COLUMN_WIDTHS[width_index] + end + + def gantt_builder(mode, column_width) + case mode + when :month + GanttBuilderMonths.new(pdf, heading, column_width) + when :quarter + GanttBuilderQuarters.new(pdf, heading, column_width) + else + # when :day + GanttBuilderDays.new(pdf, heading, column_width) + end + end + + def write_gantt(mode, column_width, id_wp_meta_map, work_packages) + builder = gantt_builder(mode, column_width) + pages = builder.build(work_packages, id_wp_meta_map, query) + pages = pages.filter { |page| page.columns.pluck(:work_packages).flatten.any? } if options[:filter_empty] + painter = GanttPainter.new(pdf) + painter.paint(pages) + end + + GanttDataPageGroup = Struct.new(:index, :entry_ids, :pages) do + def initialize(*args) + super(*args) + pages.each { |page| page.group = self } + end + end + + GanttDataPage = Struct.new(:index, :entry_ids, :header_cells, :rows, :columns, + :text_column, :width, :height, :header_row_height, :group, :lines) do + def initialize(*args) + super(*args) + rows.each { |row| row.page = self } + columns.each { |column| column.page = self } + self.lines = [] + end + + def add_line(left, right, top, bottom) + lines.push({ left:, right:, top:, bottom: }) + end + + def add_lines(new_lines) + new_lines.each { |line| add_line(line[0], line[1], line[2], line[3]) } + end + end + + GanttDataText = Data.define(:text, :left, :right, :top, :bottom, :font_size) do + def height = bottom - top + + def width = right - left + end + + GanttDataRow = Struct.new(:index, :entry_id, :shape, :text_lines, :left, :top, :height, :page) do + def bottom = top + height + end + + GanttDataColumn = Struct.new(:date, :left, :width, :entry_ids, :page) do + def right = left + width + end + + GanttDataLineInfo = Data.define(:page_group, :rows, :start_row, :finish_row) do + def start_left = start_row.shape.left + + def start_top = start_row.shape.top + (start_row.shape.height / 2) + + def finish_left = finish_row.shape.right + + def finish_top = finish_row.shape.top + (finish_row.shape.height / 2) + end + + GanttDataHeaderCell = Data.define(:text, :left, :right, :top, :bottom) do + def height = bottom - top + + def width = right - left + end + + GanttDataTextColumn = Data.define(:title, :left, :width, :top, :height, :padding_h, :padding_v) do + def right = left + width + + def bottom = top + height + end + + GanttDataEntry = Data.define(:id, :subject, :work_package) do + def group? = work_package.nil? + end + + GanttDataShape = Data.define(:type, :left, :width, :top, :height, :entry_id, :columns, :color) do + def right = left + width + + def bottom = top + height + end +end diff --git a/app/models/work_package/pdf_export/gantt/gantt_builder.rb b/app/models/work_package/pdf_export/gantt/gantt_builder.rb new file mode 100644 index 000000000000..9b643b408f47 --- /dev/null +++ b/app/models/work_package/pdf_export/gantt/gantt_builder.rb @@ -0,0 +1,919 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module WorkPackage::PDFExport::Gantt + class GanttBuilder + include Redmine::I18n + BAR_CELL_PADDING = 5.to_f + TEXT_CELL_PADDING_H = 3.to_f + TEXT_CELL_PADDING_V = 1.to_f + GANTT_ROW_HEIGHT = 20.to_f + DEFAULT_HEADER_ROW_HEIGHT = 30.to_f + DEFAULT_TEXT_COLUMN_DIVIDER = 4 + TEXT_COLUMN_MAX_WIDTH = 250.to_f + LINE_STEP = 5.to_f + + def initialize(pdf, title, column_width) + @pdf = pdf + @title = title + @column_width = column_width + @draw_gantt_lines = true + init_defaults + end + + def build(work_packages, id_wp_meta_map, query) + @all_work_packages = work_packages + @id_wp_meta_map = id_wp_meta_map + @query = query + dates = collect_column_dates(work_packages) + entries = build_gantt_entries(work_packages) + adjust_to_pages + page_groups = build_page_groups(entries, dates) + build_dep_lines(page_groups) if @draw_gantt_lines + page_groups.flat_map(&:pages) + end + + private + + # Builds the page groups + # @param [Array] entries + # @param [Array] dates + # @return [Array] + def build_page_groups(entries, dates) + page_groups = build_pages(entries, dates) + if page_groups[0].pages.length == 1 + # if there are not enough columns for even the first page of horizontal pages => distribute space to all columns + distribute_to_first_page(page_groups[0].pages.first.columns.length) + page_groups = build_pages(entries, dates) + end + page_groups + end + + # Create list of row entries for the gantt chart, including group placeholders + # @param [Array] work_packages + # @return [Array] + def build_gantt_entries(work_packages) + entries = work_packages.map { |work_package| GanttDataEntry.new(work_package.id, work_package.subject, work_package) } + entries = insert_work_package_group_placeholders(entries) if @query.grouped? + entries + end + + # Initializes the default values + def init_defaults + @header_row_height = DEFAULT_HEADER_ROW_HEIGHT.to_f + @text_column_width = [@pdf.bounds.width / DEFAULT_TEXT_COLUMN_DIVIDER, TEXT_COLUMN_MAX_WIDTH].min + @nr_columns = (@pdf.bounds.width / @column_width).floor + end + + # distribute empty spaces + def adjust_to_pages + # distribute empty space right to the default column widths + distribute_to_next_page_column + + # distribute empty space right on the first page to the first column + distribute_to_first_column + + # distribute empty space bottom to the first row + distribute_to_header_row + end + + # distribute empty space right to the default column widths + def distribute_to_next_page_column + gantt_columns_space_next_page = @pdf.bounds.width - (@nr_columns * @column_width) + @column_width += gantt_columns_space_next_page / @nr_columns + @nr_columns = (@pdf.bounds.width / @column_width).floor + end + + # distribute empty space right on the first horizontal page to the text column + def distribute_to_first_column + gantt_columns_width_first_page = @pdf.bounds.width - @text_column_width + @nr_columns_first_page = (gantt_columns_width_first_page / @column_width).floor + @text_column_width = @pdf.bounds.width - (@nr_columns_first_page * @column_width) + end + + # distribute empty space at bottom to the header row + def distribute_to_header_row + gant_rows_height = @pdf.bounds.height - @header_row_height + @rows_per_page = (gant_rows_height / GANTT_ROW_HEIGHT).floor + @header_row_height = @pdf.bounds.height - (@rows_per_page * GANTT_ROW_HEIGHT) + end + + # distribute space to all columns on first horizontal page + # if there are not enough columns for more horizontal pages + def distribute_to_first_page(nr_of_columns) + init_defaults + @column_width = (@pdf.bounds.width - @text_column_width) / nr_of_columns + @nr_columns_first_page = nr_of_columns + @nr_columns = nr_of_columns + end + + # if the query is grouped, insert placeholders "rows" for the group headers + # @param [Array] entries + # @return [Array] + def insert_work_package_group_placeholders(entries) + last_group = nil + result = [] + entries.each do |entry| + wp_group = @query.group_by_column.value(entry.work_package) + if last_group != wp_group + last_group = wp_group + result << GanttDataEntry.new("group_#{wp_group}", wp_group.to_s, nil) + end + result << entry + end + result + end + + # Builds all page groups for the given work packages + # @param [Array] entries + # @return [Array] + def build_pages(entries, dates) + vertical_pages_needed = (entries.size / @rows_per_page.to_f).ceil + horizontal_pages_needed = [((dates.size - @nr_columns_first_page) / @nr_columns.to_f).ceil, 0].max + 1 + build_vertical_pages(entries, dates, vertical_pages_needed, horizontal_pages_needed) + end + + # Builds all page groups for the given work packages and dates + # @param [Array] entries + # @param [Array] dates + # @param [Integer] vertical_pages_needed + # @param [Integer] horizontal_pages_needed + # @return [Array] + def build_vertical_pages(entries, dates, vertical_pages_needed, horizontal_pages_needed) + (0..vertical_pages_needed - 1).map do |v_index| + group_entries = entries.slice(v_index * @rows_per_page, @rows_per_page) + GanttDataPageGroup.new(v_index, group_entries.map(&:id), + build_horizontal_pages(group_entries, dates, horizontal_pages_needed)) + end + end + + # Builds pages for the given work packages and dates + # @param [Array] entries + # @param [Array] dates + # @param [Integer] horizontal_pages_needed + # @return [Array] + def build_horizontal_pages(entries, dates, horizontal_pages_needed) + result = [build_page(dates.slice(0, @nr_columns_first_page), 0, entries)] + (0..horizontal_pages_needed - 2).each do |index| + result << build_page( + dates.slice(@nr_columns_first_page + (index * @nr_columns), @nr_columns), + index + 1, entries + ) + end + result + end + + # Builds a page for the given dates and work packages + # @param [Array] dates + # @param [Integer] page_index + # @param [Array] entries + # @return [GanttDataPage] + def build_page(dates, page_index, entries) + left = (page_index == 0 ? @text_column_width : 0) + columns = build_columns(left, dates, entries) + GanttDataPage.new( + page_index, + entries.map(&:id), + build_header_cells(columns), + build_rows(columns, entries, page_index == 0), + columns, + build_text_column(page_index), + left + (dates.size * @column_width), + @header_row_height + (@rows_per_page * GANTT_ROW_HEIGHT), + @header_row_height + ) + end + + # Builds the gantt columns for the given dates + # @param [Float] left + # @param [Array] dates + # @param [Array] entries + # @return [Array] + def build_columns(left, dates, entries) + dates.each_with_index.map { |date, col_index| build_column(date, left + (col_index * @column_width), entries) } + end + + # Builds the gantt column for the given date + # @param [Date] date + # @param [Float] left + # @param [Array] entries + # @return [GanttDataColumn] + def build_column(date, left, entries) + work_packages = entries.reject(&:group?).map(&:work_package) + GanttDataColumn.new(date, left, @column_width, work_packages_on_date(date, work_packages).map(&:id)) + end + + # Builds the header cells for the given columns + # @param [Array] columns + # @return [Array] + def build_header_cells(columns) + parts = header_row_parts + height = @header_row_height / parts.length + result = parts.each_with_index.map do |part, index| + top = index * height + case part + when :years + build_header_cells_years(top, height, columns) + when :quarters + build_header_cells_quarters(top, height, columns) + when :months + build_header_cells_months(top, height, columns) + when :days + build_header_cells_days(top, height, columns) + else + [] + end + end + result.flatten + end + + # Builds the header cells for the given text spanning the given columns + # @param [String] text + # @param [Float] top + # @param [Float] height + # @param [Array] columns + # @return [GanttDataHeaderCell] + def build_header_cell(text, top, height, columns) + GanttDataHeaderCell.new(text, columns.first.left, columns.last.right, top, top + height) + end + + # Builds the header cells for the given columns + # @param [Array] columns + # @param [Float] top + # @param [Float] height + # @param [Proc] mapping_lambda - lambda to map the date to a column + # @param [Proc] compare_lambda - lambda to compare a date with the column date + # @param [Proc] title_lambda - lambda to get the title for the header cell + # @return [Array] + def build_header_cells_parts(columns, top, height, mapping_lambda, compare_lambda, title_lambda) + columns + .map { |column| mapping_lambda.call(column.date) } + .uniq + .map do |entry| + part_columns = columns.select { |column| compare_lambda.call(column.date, entry) } + build_header_cell(title_lambda.call(entry), top, height, part_columns) + end + end + + # Builds the year row header cells for the given columns + # @param [Float] top + # @param [Float] height + # @param [Array] columns + # @return [Array] + def build_header_cells_years(top, height, columns) + build_header_cells_parts(columns, top, height, + ->(date) { date.year }, + ->(date, year) { date.year == year }, + ->(year) { year.to_s }) + end + + # Builds the quarter row header cells for the given columns + # @param [Float] top + # @param [Float] height + # @param [Array] columns + # @return [Array] + def build_header_cells_quarters(top, height, columns) + build_header_cells_parts(columns, top, height, + ->(date) { [date.year, date.quarter] }, + ->(date, quarter_tuple) { + date.year == quarter_tuple[0] && date.quarter == quarter_tuple[1] + }, + ->(quarter_tuple) { "Q#{quarter_tuple[1]}" }) + end + + # Builds the month row header cells for the given columns + # @param [Float] top + # @param [Float] height + # @param [Array] columns + # @return [Array] + def build_header_cells_months(top, height, columns) + build_header_cells_parts(columns, top, height, + ->(date) { [date.year, date.month] }, + ->(date, month_tuple) { date.year == month_tuple[0] && date.month == month_tuple[1] }, + ->(month_tuple) { Date.new(month_tuple[0], month_tuple[1], 1).strftime("%b") }) + end + + # Builds the day row header cells for the given columns + # @param [Float] top + # @param [Float] height + # @param [Array] columns + # @return [Array] + def build_header_cells_days(top, height, columns) + columns.map { |column| build_header_cell(column.date.day.to_s, top, height, [column]) } + end + + # Builds dependency lines between the work packages + # @param [Array] page_groups + def build_dep_lines(page_groups) + @all_work_packages.each do |work_package| + work_package.relations.each do |relation| + target_work_package = relation.other_work_package(work_package) + next unless @all_work_packages.include?(target_work_package) + + if relation.to == work_package && relation.relation_type == Relation::TYPE_FOLLOWS + build_dep_line(work_package, target_work_package, page_groups) + end + if relation.from == work_package && relation.relation_type == Relation::TYPE_PRECEDES + build_dep_line(work_package, target_work_package, page_groups) + end + end + end + end + + # Builds a dependency line between the work packages + # @param [WorkPackage] work_package + # @param [WorkPackage] target_work_package + # @param [Array] page_groups + # @return [Array>] + def build_dep_line(work_package, target_work_package, page_groups) + line_source = collect_line_infos(work_package, page_groups) + line_target = collect_line_infos(target_work_package, page_groups) + if line_source.finish_row.page == line_target.start_row.page + build_same_page_dep_lines(line_source, line_target) + elsif line_source.page_group == line_target.page_group + build_multi_page_dep_line(line_source, line_target) + else + build_multi_group_dep_line(line_source, line_target, page_groups) + end + end + + # Builds the dependency line between two work packages on the same page + # @param [GanttDataLineInfo] source + # @param [GanttDataLineInfo] target + def build_same_page_dep_lines(source, target) + lines = if target.start_left - LINE_STEP <= source.finish_left + build_same_page_dep_lines_backward(source, target) + else + build_same_page_dep_lines_forward(source, target) + end + source.start_row.page.add_lines lines + end + + # Builds the dependency line between two work packages on the same page + # where the source work package is after or a the same x as the target work package + # @param [GanttDataLineInfo] source + # @param [GanttDataLineInfo] target + def build_same_page_dep_lines_backward(source, target) + source_row_bottom = source.finish_row.bottom + source_left = source.finish_left + source_top = source.finish_top + target_left = target.start_left + target_top = target.start_top + [ + [source_left, source_left + LINE_STEP, source_top, source_top], + [source_left + LINE_STEP, source_left + LINE_STEP, source_top, source_row_bottom], + [target_left - LINE_STEP, source_left + LINE_STEP, source_row_bottom, source_row_bottom], + [target_left - LINE_STEP, target_left - LINE_STEP, source_row_bottom, target_top], + [target_left - LINE_STEP, target_left, target_top, target_top] + ] + end + + # Builds the dependency line between two work packages on the same page + # where the source work package is before the target work package + def build_same_page_dep_lines_forward(source, target) + source_left = source.finish_left + source_top = source.finish_top + target_left = target.start_left + target_top = target.start_top + [ + [source_left, target_left - LINE_STEP, source_top, source_top], + [target_left - LINE_STEP, target_left - LINE_STEP, source_top, target_top], + [target_left - LINE_STEP, target_left, target_top, target_top] + ] + end + + # Builds the dependency line between two work packages on different horizontal pages + # @param [GanttDataLineInfo] source + # @param [GanttDataLineInfo] target + def build_multi_page_dep_line(source, target) + start_page_index = source.page_group.pages.index(source.finish_row.page) + finish_page_index = source.page_group.pages.index(target.start_row.page) + if start_page_index > finish_page_index + build_multi_page_dep_line_backward(source, target, start_page_index, finish_page_index) + else + build_multi_page_dep_line_forward(source, target, start_page_index, finish_page_index) + end + end + + # Builds the dependency line between two work packages on different horizontal pages + # where the source work package page is after the target work package page + # @param [GanttDataLineInfo] source + # @param [GanttDataLineInfo] target + # @param [Integer] start_page_index + # @param [Integer] finish_page_index + def build_multi_page_dep_line_backward(source, target, start_page_index, finish_page_index) + y = source.finish_row.bottom + build_multi_page_dep_line_backward_start(source, y) + build_multi_page_dep_line_middle(source, finish_page_index, start_page_index, y) + build_multi_page_dep_line_backward_end(target, y) + end + + # Builds the dependency line between two work packages on different horizontal pages + # draw line on the source work package page + # @param [GanttDataLineInfo] source + # @param [Float] top + def build_multi_page_dep_line_backward_start(source, top) + source.finish_row.page.add_lines( + [ + [source.finish_left, source.finish_left + LINE_STEP, source.finish_top, source.finish_top], + [source.finish_left + LINE_STEP, source.finish_left + LINE_STEP, source.finish_top, top], + [source.finish_row.left, source.finish_left + LINE_STEP, top, top] + ] + ) + end + + # Builds the dependency line between two work packages on different horizontal pages + # draw line on all pages between the source work package page and the target work package page + # @param [GanttDataLineInfo] source + # @param [Integer] start_page_index + # @param [Integer] finish_page_index + # @param [Float] top + def build_multi_page_dep_line_middle(source, start_page_index, finish_page_index, top) + ((start_page_index + 1)..(finish_page_index - 1)).each do |index| + page = source.page_group.pages[index] + page.add_line(page.columns.first.left, page.columns.last.right, top, top) + end + end + + # Builds the dependency line between two work packages on different horizontal pages + # draw line to the the target work package page + # @param [GanttDataLineInfo] target + # @param [Float] top + def build_multi_page_dep_line_backward_end(target, top) + left = target.start_left - LINE_STEP + target.start_row.page.add_lines( + [ + [left, target.start_row.page.columns.last.right, top, top], + [left, left, top, target.start_top], + [left, target.start_left, target.start_top, target.start_top] + ] + ) + end + + # Builds the dependency line between two work packages on different horizontal pages + # and the source work package page is before the target work package page + # @param [GanttDataLineInfo] source + # @param [GanttDataLineInfo] target + # @param [Integer] start_page_index + # @param [Integer] finish_page_index + def build_multi_page_dep_line_forward(source, target, start_page_index, finish_page_index) + build_multi_page_dep_line_forward_start(source) + build_multi_page_dep_line_middle(source, start_page_index, finish_page_index, source.finish_top) + build_multi_page_dep_line_forward_end(source, target) + end + + # Builds the dependency line between two work packages on different horizontal pages + # draw line on the source work package page + # @param [GanttDataLineInfo] source + def build_multi_page_dep_line_forward_start(source) + source.finish_row.page.add_line(source.finish_left, source.finish_row.page.columns.last.right, + source.finish_top, source.finish_top) + end + + # Builds the dependency line between two work packages on different horizontal pages + # draw line on the target work package page + # @param [GanttDataLineInfo] source + # @param [GanttDataLineInfo] target + def build_multi_page_dep_line_forward_end(source, target) + source_left = target.start_row.page.columns.first.left - LINE_STEP + source_top = source.finish_top + target_left = target.start_left + target_top = target.start_top + target.start_row.page.add_lines( + [ + [source_left, target_left - LINE_STEP, source_top, source_top], + [target_left - LINE_STEP, target_left - LINE_STEP, source_top, target_top], + [target_left - LINE_STEP, target_left, target_top, target_top] + ] + ) + end + + # Builds the dependency line between two work packages on different vertical (and maybe horizontal) pages + # @param [GanttDataLineInfo] source + # @param [GanttDataLineInfo] target + # @param [Array] page_groups + def build_multi_group_dep_line(source, target, page_groups) + start_page_index = source.page_group.pages.index(source.finish_row.page) + finish_page_index = target.page_group.pages.index(target.start_row.page) + if start_page_index == finish_page_index + build_multi_group_same_page_dep_line(source, target, start_page_index, page_groups) + elsif start_page_index > finish_page_index + build_multi_group_dep_line_backward(source, target, start_page_index, finish_page_index, page_groups) + else + build_multi_group_dep_line_forward(source, target, start_page_index, finish_page_index, page_groups) + end + end + + # Builds the dependency line between two work packages on different vertical but not horizontal pages + # @param [GanttDataLineInfo] source + # @param [GanttDataLineInfo] target + # @param [Integer] page_index + # @param [Array] page_groups + def build_multi_group_same_page_dep_line(source, target, page_index, page_groups) + build_multi_group_same_page_dep_lines_forward_start(source, target) + build_multi_group_dep_line_middle(source, target, page_index, page_groups) + build_multi_group_dep_line_group_end_end(target, target.start_left - LINE_STEP) + end + + # Builds the dependency line between two work packages on different vertical but not horizontal pages (start) + # @param [GanttDataLineInfo] source + # @param [GanttDataLineInfo] target + def build_multi_group_same_page_dep_lines_forward_start(source, target) + source_top = source.finish_top + target_left = target.start_left - LINE_STEP + source.finish_row.page.add_lines([ + [source.finish_left, target_left, source_top, source_top], + [target_left, target_left, source_top, source.finish_row.page.height] + ]) + end + + # Builds the dependency line between two work packages on different horizontal and vertical pages + # and the source work package page is before the target work package page + # @param [GanttDataLineInfo] source + # @param [GanttDataLineInfo] target + # @param [Integer] start_page_index + # @param [Integer] finish_page_index + # @param [Array] page_groups + def build_multi_group_dep_line_forward(source, target, + start_page_index, finish_page_index, page_groups) + build_multi_page_dep_line_forward_start(source) + build_multi_page_dep_line_middle(source, start_page_index, finish_page_index, source.finish_top) + build_multi_group_dep_line_group_end(source, target, finish_page_index, page_groups) + end + + # Builds the dependency line between two work packages on different horizontal and vertical pages + # and the source work package page is after the target work package page + # @param [GanttDataLineInfo] source + # @param [GanttDataLineInfo] target + # @param [Integer] start_page_index + # @param [Integer] finish_page_index + # @param [Array] page_groups + def build_multi_group_dep_line_backward(source, target, + start_page_index, finish_page_index, page_groups) + build_multi_page_dep_line_backward_start(source, source.finish_row.bottom) + build_multi_page_dep_line_middle(source, start_page_index, finish_page_index, source.finish_top) + build_multi_group_dep_line_group_end(source, target, finish_page_index, page_groups) + end + + # Builds the dependency line between two work packages on different vertical pages + # draw line on the target work package page + # @param [GanttDataLineInfo] source + # @param [GanttDataLineInfo] target + def build_multi_group_dep_line_group_end(source, target, finish_page_index, page_groups) + target_left = target.start_left - LINE_STEP + build_multi_group_dep_line_group_end_start(source, target_left, finish_page_index) + build_multi_group_dep_line_middle(source, target, finish_page_index, page_groups) + build_multi_group_dep_line_group_end_end(target, target_left) + end + + # Builds the dependency line between two work packages on different vertical pages + # draw line on the source work package page position + # @param [GanttDataLineInfo] source + # @param [Float] target_left + # @param [Integer] finish_page_index + def build_multi_group_dep_line_group_end_start(source, target_left, finish_page_index) + page = source.finish_row.page.group.pages[finish_page_index] + page.add_lines( + [ + [0, target_left, source.finish_top, source.finish_top], + [target_left, target_left, source.finish_top, page.height] + ] + ) + end + + # Builds the dependency line between two work packages on different vertical pages + # draw line on the target work package page position + # @param [GanttDataLineInfo] target + # @param [Float] target_left + def build_multi_group_dep_line_group_end_end(target, target_left) + target.start_row.page.add_lines( + [ + [target_left, target_left, target.finish_row.page.header_row_height, target.finish_top], + [target_left, target.start_left, target.finish_top, target.finish_top] + ] + ) + end + + # Builds the dependency line between two work packages on different vertical pages + # draw line between the source and target work package pages + # @param [GanttDataLineInfo] source + # @param [GanttDataLineInfo] target + def build_multi_group_dep_line_middle(source, target, page_index, page_groups) + start_group_index = page_groups.index(source.finish_row.page.group) + finish_group_index = page_groups.index(target.start_row.page.group) + start = [start_group_index, finish_group_index].min + finish = [start_group_index, finish_group_index].max + ((start + 1)..(finish - 1)).each do |index| + build_multi_group_dep_line_middle_for_group(page_groups[index], target, page_index) + end + end + + # Builds the dependency line between two work packages on different vertical pages + # draw line on groups between the source and target work package page groups + # @param [GanttDataPageGroup] group + # @param [GanttDataLineInfo] target + # @param [Integer] finish_page_index + def build_multi_group_dep_line_middle_for_group(group, target, finish_page_index) + page = group.pages[finish_page_index] + page.add_line(target.start_left - LINE_STEP, target.start_left - LINE_STEP, page.header_row_height, page.height) + end + + # Builds the text column data object if the page is first page of horizontal page group + # @param [Integer] page_index + def build_text_column(page_index) + if page_index == 0 + GanttDataTextColumn.new(@title, 0, @text_column_width, 0, GANTT_ROW_HEIGHT, + TEXT_CELL_PADDING_H, TEXT_CELL_PADDING_V) + end + end + + # Builds the gantt rows for the given columns and work packages + # @param [Array] columns + # @param [Array] entries + # @param [Boolean] with_text_column + # @return [Array] + def build_rows(columns, entries, with_text_column) + entries.each_with_index.map do |entry, row_index| + build_row(entry, row_index, columns, with_text_column) + end + end + + # Builds the gantt row for the given work package and columns + # @param [GanttDataEntry] entry + # @param [Integer] row_index + # @param [Array] columns + # @return [GanttDataRow] + def build_row(entry, row_index, columns, with_text_column) + paint_columns = columns.filter { |column| column.entry_ids.include?(entry.id) } + top = @header_row_height + (row_index * GANTT_ROW_HEIGHT) + shape = build_shape(top, paint_columns, entry.work_package) unless entry.group? || paint_columns.empty? + text_lines = with_text_column ? build_row_text_lines(entry, top) : [] + GanttDataRow.new(row_index, entry.id, shape, text_lines, 0, top, GANTT_ROW_HEIGHT) + end + + # Builds the text lines for the given work package + # @param [GanttDataEntry] entry + # @param [Float] top + # @return [Array] + def build_row_text_lines(entry, top) + left = TEXT_CELL_PADDING_H + right = left + @text_column_width - (TEXT_CELL_PADDING_H * 2) + return build_row_text_lines_group_row(entry, left, right, top) if entry.group? + + [build_row_text_lines_wp_info(entry, left, right, top), + build_row_text_lines_wp_title(entry, left, right, top)] + end + + # Builds the title line for the given work package entry + # @param [GanttDataEntry] entry + # @param [Float] left + # @param [Float] right + # @param [Float] top + # @return [GanttDataText] + def build_row_text_lines_wp_title(entry, left, right, top) + text_top = top + TEXT_CELL_PADDING_V + 4 + text_bottom = text_top + 16 + GanttDataText.new(entry.work_package.subject, left, right, text_top, text_bottom, 8) + end + + # Builds the group row text lines for the given group entry + # @param [GanttDataEntry] entry + # @param [Float] left + # @param [Float] right + # @param [Float] top + # @return [Array] + def build_row_text_lines_group_row(entry, left, right, top) + text_top = top + TEXT_CELL_PADDING_V + text_bottom = text_top + GANTT_ROW_HEIGHT - (TEXT_CELL_PADDING_V * 2) + [GanttDataText.new(entry.subject, left, right, text_top, text_bottom, 8)] + end + + # Builds the title line for the given work package entry + # @param [GanttDataEntry] entry + # @param [Float] left + # @param [Float] right + # @param [Float] top + # @return [GanttDataText] + def build_row_text_lines_wp_info(entry, left, right, top) + text_top = top + TEXT_CELL_PADDING_V + text_bottom = text_top + 8 + GanttDataText.new(work_package_info_line(entry.work_package), left, right, text_top, text_bottom, 6) + end + + # Returns the info text line for the given work package + # @param [WorkPackage] work_package + # @return [String] + def work_package_info_line(work_package) + "#{work_package.type} ##{work_package.id} • #{work_package.status} • #{work_package_info_line_date work_package}" + end + + def work_package_info_line_date(work_package) + if work_package.start_date == work_package.due_date + format_pdf_date(work_package.start_date) + else + "#{format_pdf_date(work_package.start_date)} - #{format_pdf_date(work_package.due_date)}" + end + end + + def format_pdf_date(date) + date.nil? ? "" : format_date(date) + end + + # Builds the shape for the given work package + # @param [Float] top + # @param [Array] paint_columns + # @param [WorkPackage] work_package + # @return [GanttDataShape] + def build_shape(top, paint_columns, work_package) + if work_package.milestone? + build_shape_milestone(top, paint_columns, work_package) + else + build_shape_bar(top, paint_columns, work_package) + end + end + + # Builds the bar shape for the given work package + # @param [Float] top + # @param [Array] paint_columns + # @param [WorkPackage] work_package + # @return [GanttDataShape] + def build_shape_bar(top, paint_columns, work_package) + left = paint_columns.first.left + x1, x2, y1, y2 = bar_layout(paint_columns, work_package) + GanttDataShape.new(:bar, left + x1, [x2 - x1, 0.1].max, top + y1, y2 - y1, + work_package.id, paint_columns, wp_type_color(work_package)) + end + + # Returns bounds for the bar shape + # @param [Array] paint_columns + # @param [WorkPackage] work_package + # @return [Array] x1, x2, y1, y2 + def bar_layout(paint_columns, work_package) + x1 = calc_start_offset(work_package, paint_columns.first.date) + x2 = paint_columns.last.right - paint_columns.first.left - + calc_end_offset(work_package, paint_columns.last.date) + [x1, x2, BAR_CELL_PADDING, GANTT_ROW_HEIGHT - BAR_CELL_PADDING] + end + + # Builds the milestone shape for the given work package + # @param [Float] top + # @param [Array] paint_columns + # @param [WorkPackage] work_package + # @return [GanttDataShape] + def build_shape_milestone(top, paint_columns, work_package) + left = paint_columns.first.left + x1, y1, diamond_size = milestone_layout(top, paint_columns, work_package) + GanttDataShape.new(:milestone, left + x1, diamond_size, y1, diamond_size, + work_package.id, paint_columns, wp_type_color(work_package)) + end + + # Returns bounds for the milestone shape + # @param [Float] top + # @param [Array] paint_columns + # @param [WorkPackage] work_package + # @return [Array] x1, y1, diamond_size + def milestone_layout(top, paint_columns, work_package) + diamond_size = ([@column_width, GANTT_ROW_HEIGHT].min / 3).to_f * 2 + x1 = if milestone_position_centered? + (@column_width - diamond_size) / 2 + else + calc_start_offset(work_package, paint_columns.first.date) + end + y1 = top + ((GANTT_ROW_HEIGHT - diamond_size) / 2) + [x1, y1, diamond_size] + end + + # Returns the start and finish rows of the given work package rows group (rows with shapes) + # @param [Array] rows + def collect_start_and_finish_rows(rows) + draw_rows = rows.reject { |row| row.shape.nil? } + start = draw_rows.max_by { |row| row.page.index } + finish = draw_rows.max_by { |row| row.page.index } + [start, finish] + end + + # Returns a helper object containing information about the line to be drawn + # @param [WorkPackage] work_package + # @param [Array] page_groups + def collect_line_infos(work_package, page_groups) + rows = collect_rows_by_work_package(work_package, page_groups) + start, finish = collect_start_and_finish_rows(rows) + GanttDataLineInfo.new(rows[0].page.group, rows, start, finish) + end + + # Builds the dates range for the given work packages + # @param [Array] work_packages + # @return [Array] + def collect_column_dates(work_packages) + wp_dates = collect_work_packages_dates(work_packages) + build_column_dates_range(wp_dates.first..wp_dates.last) + end + + # Collects the unique dates of the given work packages (start and/or due date) + # @param [Array] work_packages + # @return [Array] + def collect_work_packages_dates(work_packages) + work_packages.map do |work_package| + [work_package.start_date || work_package.due_date, work_package.due_date || work_package.start_date] + end.flatten.uniq.sort + end + + # Collects all rows for the given work package + # @param [WorkPackage] work_package + # @param [Array] page_groups + # @return [Array] + def collect_rows_by_work_package(work_package, page_groups) + page_groups.map do |page_group| + page_group.pages.map do |page| + page.rows.find { |r| r.entry_id == work_package.id } + end + end.flatten.compact + end + + # Get the shape color by work package type + # @param [WorkPackage] work_package + # @return [String] hexcode_in_prawn_format + def wp_type_color(work_package) + work_package.type&.color&.hexcode&.sub("#", "") || "000000" + end + + # get the dates of the work package with safety checks + def wp_dates(work_package) + start_date = work_package.start_date || work_package.due_date + end_date = work_package.due_date || work_package.start_date || Time.zone.today + [start_date, end_date].minmax + end + + # translates the work package dates to column dates + # will be overwritten by subclasses + # @param [Range] _range + # @return [Array] + def build_column_dates_range(_range) + [] # to be overwritten + end + + # defines which header row to be shown (years, quarters, months, days) + # will be overwritten by subclasses + def header_row_parts + [] # to be overwritten + end + + # for a column, get all work packages that are active on that date + # will be overwritten by subclasses + # @param [Date] _date + # @param [Array] _work_packages + # @return [Array] + def work_packages_on_date(_date, _work_packages) + [] # to be overwritten + end + + # milestones are centered in the cell only for day view + # will be overwritten by subclasses + def milestone_position_centered? + false # to be overwritten + end + + # Calculates the start offset of the work package in date column + # will be overwritten by subclasses + # @param [WorkPackage] _work_package + # @param [Date] _date + # @return [Float] + def calc_start_offset(_work_package, _date) + 0.0 # to be overwritten + end + + # Calculates the end offset of the work package in date column + # will be overwritten by subclasses + # @param [WorkPackage] _work_package + # @param [Date] _date + # @return [Float] + def calc_end_offset(_work_package, _date) + 0.0 # to be overwritten + end + end +end diff --git a/app/models/work_package/pdf_export/gantt/gantt_builder_days.rb b/app/models/work_package/pdf_export/gantt/gantt_builder_days.rb new file mode 100644 index 000000000000..ae94d2f3bba7 --- /dev/null +++ b/app/models/work_package/pdf_export/gantt/gantt_builder_days.rb @@ -0,0 +1,60 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module WorkPackage::PDFExport::Gantt + class GanttBuilderDays < GanttBuilder + def build_column_dates_range(range) + range.to_a + end + + def header_row_parts + %i[years months days] + end + + def work_packages_on_date(date, work_packages) + work_packages.select { |work_package| wp_on_day?(work_package, date) } + end + + def calc_start_offset(_work_package, _date) + 0.0 + end + + def calc_end_offset(_work_package, _date) + 0.0 + end + + def milestone_position_centered? + true + end + + def wp_on_day?(work_package, date) + start_date, end_date = wp_dates(work_package) + (start_date..end_date).cover?(date) + end + end +end diff --git a/app/models/work_package/pdf_export/gantt/gantt_builder_months.rb b/app/models/work_package/pdf_export/gantt/gantt_builder_months.rb new file mode 100644 index 000000000000..7e4ae3c339d5 --- /dev/null +++ b/app/models/work_package/pdf_export/gantt/gantt_builder_months.rb @@ -0,0 +1,71 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module WorkPackage::PDFExport::Gantt + class GanttBuilderMonths < GanttBuilder + def build_column_dates_range(range) + range + .map { |d| Date.new(d.year, d.month, -1) } + .uniq + end + + def header_row_parts + %i[years quarters months] + end + + def work_packages_on_date(date, work_packages) + work_packages.select { |work_package| wp_on_month?(work_package, date) } + end + + def calc_start_offset(work_package, date) + test_date = Date.new(date.year, date.month, 1) + start_date = work_package.start_date || work_package.due_date + return 0 if start_date <= test_date + + width_per_day = @column_width.to_f / date.end_of_month.day + day_in_month = start_date.day - 1 + day_in_month * width_per_day + end + + def calc_end_offset(work_package, date) + end_date = work_package.due_date || work_package.start_date + test_date = Date.new(date.year, date.month, -1) + return 0 if end_date >= test_date + + width_per_day = @column_width.to_f / test_date.day + day_in_month = end_date.day + @column_width - (day_in_month * width_per_day) + end + + def wp_on_month?(work_package, date) + start_date, end_date = wp_dates(work_package) + (Date.new(start_date.year, start_date.month, 1)..Date.new(end_date.year, end_date.month, -1)) + .cover?(date) + end + end +end diff --git a/app/models/work_package/pdf_export/gantt/gantt_builder_quarters.rb b/app/models/work_package/pdf_export/gantt/gantt_builder_quarters.rb new file mode 100644 index 000000000000..5942e85594c6 --- /dev/null +++ b/app/models/work_package/pdf_export/gantt/gantt_builder_quarters.rb @@ -0,0 +1,78 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module WorkPackage::PDFExport::Gantt + class GanttBuilderQuarters < GanttBuilder + def build_column_dates_range(range) + range + .map { |d| [d.year, d.quarter] } + .uniq + .map { |year, quarter| Date.new(year, quarter * 3, -1) } + end + + def header_row_parts + %i[years quarters] + end + + def work_packages_on_date(date, work_packages) + work_packages.select { |work_package| wp_on_quarter?(work_package, date) } + end + + def calc_start_offset(work_package, date) + start_date = work_package.start_date || work_package.due_date + return 0 if start_date <= date.beginning_of_quarter + + width_per_day = @column_width.to_f / days_of_quarter(date) + day_in_quarter = day_in_quarter(start_date) - 1 + day_in_quarter * width_per_day + end + + def calc_end_offset(work_package, date) + end_date = work_package.due_date || work_package.start_date + return 0 if end_date >= date.end_of_quarter + + width_per_day = @column_width.to_f / days_of_quarter(date) + day_in_quarter = day_in_quarter(end_date) + @column_width - (day_in_quarter * width_per_day) + end + + def day_in_quarter(date) + date.yday - date.beginning_of_quarter.yday + 1 + end + + def days_of_quarter(date) + (1..3).sum { |q| Date.new(date.year, (date.quarter * 3) - 3 + q, -1).day } + end + + def wp_on_quarter?(work_package, date) + start_date, end_date = wp_dates(work_package) + (start_date.beginning_of_quarter..end_date.end_of_quarter) + .cover?(date) + end + end +end diff --git a/app/models/work_package/pdf_export/gantt/gantt_painter.rb b/app/models/work_package/pdf_export/gantt/gantt_painter.rb new file mode 100644 index 000000000000..021cee0afb76 --- /dev/null +++ b/app/models/work_package/pdf_export/gantt/gantt_painter.rb @@ -0,0 +1,190 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module WorkPackage::PDFExport::Gantt + class GanttPainter + GANTT_GRID_COLOR = "9b9ea3".freeze + GANTT_LINE_COLOR = "2b8bd5".freeze + + def initialize(pdf) + @pdf = pdf + end + + def paint(pages) + paint_pages(pages) + end + + private + + def paint_pages(pages) + pages.each_with_index do |page, page_index| + paint_page(page) + # start a new page if not last + @pdf.start_new_page if page_index != pages.size - 1 + end + end + + def paint_page(page) + paint_grid(page) + paint_header_row(page) + paint_lines(page) + paint_rows(page) + end + + def paint_rows(page) + page.rows.each { |row| paint_row(row) } + end + + def paint_lines(page) + @pdf.stroke do + @pdf.line_width = 1 + @pdf.stroke_color GANTT_LINE_COLOR + page.lines.each { |line| paint_line(line[:left], line[:top], line[:right], line[:bottom]) } + end + end + + def grid_v(page) + page_height = page.height + [ + [0, page_height, 0], + [0, page_height, page.width], + page.text_column.nil? ? nil : [0, page_height, page.text_column.width], + page.columns.map { |column| [page.header_row_height, page_height, column.right] }, + page.header_cells.map { |cell| [cell.top, cell.bottom, cell.left] } + ] + end + + def grid_h(page) + page_width = page.width + text_column = page.text_column + [ + [0, page_width, page.height], + [0, page_width, page.rows.last.bottom], + text_column.nil? ? nil : [0, text_column.width, 0], + page.rows.map { |row| [0, page_width, row.top] }, + page.header_cells.map { |cell| [cell.left, cell.right, cell.top] } + ] + end + + def paint_grid_h(page) + grid_h(page).compact.flatten.each_slice(3) { |left, right, top| paint_line(left, top, right, top) } + end + + def paint_grid_v(page) + grid_v(page).compact.flatten.each_slice(3) { |top, bottom, left| paint_line(left, top, left, bottom) } + end + + def paint_grid(page) + @pdf.stroke do + @pdf.line_width = 0.5 + @pdf.stroke_color GANTT_GRID_COLOR + paint_grid_v(page) + paint_grid_h(page) + end + end + + def paint_row(row) + row.text_lines.each { |line| paint_row_text_line(line) } + unless row.shape.nil? + paint_shape(row.shape) + end + end + + def paint_header_row(page) + paint_header_text_column(page) unless page.text_column.nil? + page.header_cells.each { |cell| paint_header_column_cell(cell) } + end + + def paint_shape(shape) + if shape.type == :milestone + paint_diamond(shape.left, shape.top, shape.width, shape.height, shape.color) + else + paint_rect(shape.left, shape.top, shape.width, shape.height, shape.color) + end + end + + def paint_line(line_x1, line_y1, line_x2, line_y2) + @pdf.line @pdf.bounds.left + line_x1, @pdf.bounds.top - line_y1, + @pdf.bounds.left + line_x2, @pdf.bounds.top - line_y2 + end + + def paint_diamond(left, top, width, height, color) + half = width / 2 + current_color = @pdf.fill_color + @pdf.fill_color color + @pdf.fill_polygon *[[0, half], [half, 0], [width, half], [half, height]] + .map { |p| [@pdf.bounds.left + left + p[0], @pdf.bounds.top - top - p[1]] } + @pdf.fill_color = current_color + end + + def paint_rect(left, top, width, height, color) + current_color = @pdf.fill_color + @pdf.fill_color color + @pdf.fill_rectangle([@pdf.bounds.left + left, @pdf.bounds.top - top], width, height) + @pdf.fill_color = current_color + end + + def paint_header_text_column(page) + paint_text_box(page.text_column.title, page.text_column.padding_h, 0, + page.text_column.width - page.text_column.padding_h, page.header_row_height, + { size: 10, style: :bold }) + end + + def paint_header_column_cell(cell) + paint_text_box(cell.text, cell.left, cell.top, cell.width, cell.height, { size: 10, style: :bold, align: :center }) + end + + def paint_row_text_line(line) + paint_text_box(truncate_ellipsis(line.text, line.width, line.font_size), + line.left, line.top, line.width, line.height, { size: line.font_size }) + end + + def truncate_ellipsis(text, available_width, font_size) + return text if @pdf.width_of(text, { size: font_size }) <= available_width + + line = text.dup + while line.present? && (@pdf.width_of("#{line}...", { size: font_size }) > available_width) + line = line.chop + end + "#{line}..." + end + + def paint_text_box(text, left, top, width, height, additional_options = {}) + @pdf.text_box(text, + at: [@pdf.bounds.left + left, @pdf.bounds.top - top], + width:, + height: height - 1, + overflow: :shrink_to_fit, + min_font_size: 3, + valign: :center, + size: 8, + leading: 0, + **additional_options) + end + end +end diff --git a/app/models/work_package/pdf_export/page.rb b/app/models/work_package/pdf_export/page.rb index 868ea15d55f4..2d6a96f784f7 100644 --- a/app/models/work_package/pdf_export/page.rb +++ b/app/models/work_package/pdf_export/page.rb @@ -31,7 +31,7 @@ module WorkPackage::PDFExport::Page def configure_page_size!(layout) pdf.options[:page_layout] = layout - pdf.options[:page_size] = styles.page_size + pdf.options[:page_size] = options[:paper_size] || styles.page_size pdf.options[:top_margin] = styles.page_margin_top pdf.options[:left_margin] = styles.page_margin_left pdf.options[:bottom_margin] = styles.page_margin_bottom diff --git a/app/models/work_package/pdf_export/standard.yml b/app/models/work_package/pdf_export/standard.yml index ca9d808cf07b..9a514dbceba4 100644 --- a/app/models/work_package/pdf_export/standard.yml +++ b/app/models/work_package/pdf_export/standard.yml @@ -1,5 +1,5 @@ page: - page_size: "EXECUTIVE" + page_size: "A4" margin_top: 60 margin_bottom: 60 margin_left: 36 diff --git a/app/models/work_package/pdf_export/style.rb b/app/models/work_package/pdf_export/style.rb index c1efef8f07ba..f507fb344adb 100644 --- a/app/models/work_package/pdf_export/style.rb +++ b/app/models/work_package/pdf_export/style.rb @@ -38,7 +38,7 @@ def initialize(yml) end def page_size - @styles[:page_size] || "EXECUTIVE" + @styles[:page_size] || "A4" end def page_header_offset diff --git a/app/models/work_package/pdf_export/work_package_list_to_pdf.rb b/app/models/work_package/pdf_export/work_package_list_to_pdf.rb index c9bb203ab495..7de6d091f45a 100644 --- a/app/models/work_package/pdf_export/work_package_list_to_pdf.rb +++ b/app/models/work_package/pdf_export/work_package_list_to_pdf.rb @@ -47,6 +47,7 @@ class WorkPackage::PDFExport::WorkPackageListToPdf < WorkPackage::Exports::Query include WorkPackage::PDFExport::WorkPackageDetail include WorkPackage::PDFExport::TableOfContents include WorkPackage::PDFExport::Page + include WorkPackage::PDFExport::Gantt include WorkPackage::PDFExport::Style include WorkPackage::PDFExport::Cover @@ -106,10 +107,14 @@ def with_cover? def render_work_packages_pdfs(work_packages, filename) write_cover_page! if with_cover? - write_title! - write_work_packages_toc! work_packages, @id_wp_meta_map if wants_report? - write_work_packages_overview! work_packages unless wants_report? - write_work_packages_sums! work_packages if with_sums_table? && wants_report? + if wants_gantt? + write_work_packages_gantt! work_packages, @id_wp_meta_map + else + write_title! + write_work_packages_toc! work_packages, @id_wp_meta_map if wants_report? + write_work_packages_overview! work_packages unless wants_report? + write_work_packages_sums! work_packages if with_sums_table? && wants_report? + end if should_be_batched?(work_packages) render_batched(work_packages, filename) else diff --git a/app/seeders/standard.yml b/app/seeders/standard.yml index 94448e54fcee..ff624a687ba2 100644 --- a/app/seeders/standard.yml +++ b/app/seeders/standard.yml @@ -551,6 +551,21 @@ projects: - to: :follow_up_tasks type: follows schedule_manually: false + t_wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: t_name: Scrum project identifier: your-scrum-project diff --git a/app/services/authorization/enterprise_service.rb b/app/services/authorization/enterprise_service.rb index b8c92cd9957d..d6d373f693b6 100644 --- a/app/services/authorization/enterprise_service.rb +++ b/app/services/authorization/enterprise_service.rb @@ -49,6 +49,7 @@ class Authorization::EnterpriseService work_package_sharing one_drive_sharepoint_file_storage virus_scanning + gantt_pdf_export ).freeze def initialize(token) diff --git a/app/services/journals/create_service.rb b/app/services/journals/create_service.rb index 86e36fa9d17c..c617afae04a9 100644 --- a/app/services/journals/create_service.rb +++ b/app/services/journals/create_service.rb @@ -48,13 +48,9 @@ def initialize(journable, user) self.journable = journable end - def call(notes: "", cause: {}) - # JSON columns read from the database always have string keys. As we do not know what is passed in here, - # and we want to compare it to values read from the DB, we need to stringify the keys here as well - normalized_cause = cause.deep_stringify_keys - + def call(notes: "", cause: CauseOfChange::NoCause.new) Journal.transaction do - journal = create_journal(notes, normalized_cause) + journal = create_journal(notes, cause) if journal reload_journals @@ -270,28 +266,28 @@ def cleanup_predecessor_data(predecessor) def cleanup_predecessor_attachable(predecessor) cleanup_predecessor(predecessor, - 'attachable_journals', + "attachable_journals", :journal_id, :id) end def cleanup_predecessor_customizable(predecessor) cleanup_predecessor(predecessor, - 'customizable_journals', + "customizable_journals", :journal_id, :id) end def cleanup_predecessor_storable(predecessor) cleanup_predecessor(predecessor, - 'storages_file_links_journals', + "storages_file_links_journals", :journal_id, :id) end def cleanup_predecessor_agenda_itemable(predecessor) cleanup_predecessor(predecessor, - 'meeting_agenda_item_journals', + "meeting_agenda_item_journals", :journal_id, :id) end @@ -817,7 +813,7 @@ def data_changes_condition_sql SQL end - data_changes.join(' OR ') + data_changes.join(" OR ") end def only_on_changed_or_forced_condition_sql(predecessor, notes, cause) @@ -835,17 +831,17 @@ def only_on_changed_or_forced_condition_sql(predecessor, notes, cause) def data_sink_columns text_columns = text_column_names - (journable.journaled_columns_names - text_columns + text_columns).join(', ') + (journable.journaled_columns_names - text_columns + text_columns).join(", ") end def data_source_columns text_columns = text_column_names normalized_text_columns = text_columns.map { |column| normalize_newlines_sql(column) } - (journable.journaled_columns_names - text_columns + normalized_text_columns).join(', ') + (journable.journaled_columns_names - text_columns + normalized_text_columns).join(", ") end def journable_data_sql_addition - journable.class.aaj_options[:data_sql]&.call(journable) || '' + journable.class.aaj_options[:data_sql]&.call(journable) || "" end def text_column_names diff --git a/app/services/queries/projects/project_queries/create_service.rb b/app/services/queries/projects/project_queries/create_service.rb index d346bda2fa43..0aa6deea366c 100644 --- a/app/services/queries/projects/project_queries/create_service.rb +++ b/app/services/queries/projects/project_queries/create_service.rb @@ -26,4 +26,13 @@ # See COPYRIGHT and LICENSE files for more details. # ++ -class Queries::Projects::ProjectQueries::CreateService < BaseServices::Create; end +class Queries::Projects::ProjectQueries::CreateService < BaseServices::Create + def initialize(from: nil, **) + @from = from + super(**) + end + + def instance(_params) + @from || super + end +end diff --git a/app/services/queries/projects/project_queries/set_attributes_service.rb b/app/services/queries/projects/project_queries/set_attributes_service.rb index 8df3a0b28b24..9f8ce3acdae7 100644 --- a/app/services/queries/projects/project_queries/set_attributes_service.rb +++ b/app/services/queries/projects/project_queries/set_attributes_service.rb @@ -92,6 +92,6 @@ def set_select(selects) end def default_columns - (["name"] + Setting.enabled_projects_columns).uniq + (["favored", "name"] + Setting.enabled_projects_columns).uniq end end diff --git a/app/services/queries/projects/project_queries/update_service.rb b/app/services/queries/projects/project_queries/update_service.rb new file mode 100644 index 000000000000..15dd89fcef27 --- /dev/null +++ b/app/services/queries/projects/project_queries/update_service.rb @@ -0,0 +1,29 @@ +# -- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2010-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +# ++ + +class Queries::Projects::ProjectQueries::UpdateService < BaseServices::Update; end diff --git a/app/services/work_packages/set_schedule_service.rb b/app/services/work_packages/set_schedule_service.rb index 57a966818f5c..a27d13e680c8 100644 --- a/app/services/work_packages/set_schedule_service.rb +++ b/app/services/work_packages/set_schedule_service.rb @@ -185,32 +185,19 @@ def assign_cause_for_journaling(work_package, relation) if initiated_by.is_a?(WorkPackage) assign_cause_initiated_by_work_package(work_package, relation) - elsif initiated_by.is_a?(Journal::WorkingDayUpdate) - assign_cause_initiated_by_changed_working_days(work_package) + elsif initiated_by.is_a?(CauseOfChange::Base) + work_package.journal_cause = initiated_by end end def assign_cause_initiated_by_work_package(work_package, _relation) # For now we only track a generic cause, and not a specialized reason depending on the relation - # - # type_mapping = { - # parent: 'work_package_parent_changed_times', - # children: 'work_package_children_changed_times', - # predecessor: 'work_package_predecessor_changed_times', - # related: 'work_package_related_changed_times' - # } - # work_package.journal_cause = { "type" => type_mapping[relation], "work_package_id" => initiated_by.id } - - work_package.journal_cause = { - "type" => "work_package_related_changed_times", - "work_package_id" => initiated_by.id - } - end + # work_package.journal_cause = case relation + # when :parent then Journal::CausedByWorkPackageParentChange.new(initiated_by) + # when :children then Journal::CausedByWorkPackageChildChange.new(initiated_by) + # when :predecessor then Journal::CausedByWorkPackagePredecessorChange.new(initiated_by) + # end - def assign_cause_initiated_by_changed_working_days(work_package) - work_package.journal_cause = { - "type" => 'working_days_changed', - "changed_days" => initiated_by.to_h - } + work_package.journal_cause = Journal::CausedByWorkPackageRelatedChange.new(work_package: initiated_by) end end diff --git a/app/services/work_packages/update_service.rb b/app/services/work_packages/update_service.rb index d92165155202..7865485a1182 100644 --- a/app/services/work_packages/update_service.rb +++ b/app/services/work_packages/update_service.rb @@ -30,11 +30,11 @@ class WorkPackages::UpdateService < BaseServices::Update include ::WorkPackages::Shared::UpdateAncestors include Attachments::ReplaceAttachments - attr_accessor :cause_of_update + attr_accessor :cause_of_rescheduling - def initialize(user:, model:, contract_class: nil, contract_options: {}, cause_of_update: nil) + def initialize(user:, model:, contract_class: nil, contract_options: {}, cause_of_rescheduling: nil) super(user:, model:, contract_class:, contract_options:) - self.cause_of_update = cause_of_update || model + self.cause_of_rescheduling = cause_of_rescheduling || model end private @@ -135,7 +135,7 @@ def reschedule_former_siblings(work_package) def reschedule(work_package, work_packages) WorkPackages::SetScheduleService - .new(user:, work_package: work_packages, initiated_by: cause_of_update) + .new(user:, work_package: work_packages, initiated_by: cause_of_rescheduling) .call(work_package.saved_changes.keys.map(&:to_sym)) end diff --git a/app/views/account/_login.html.erb b/app/views/account/_login.html.erb index f14f204318f0..aabd685021b9 100644 --- a/app/views/account/_login.html.erb +++ b/app/views/account/_login.html.erb @@ -73,7 +73,7 @@ See COPYRIGHT and LICENSE files for more details.
-
diff --git a/app/views/versions/show.html.erb b/app/views/versions/show.html.erb index 345bad49aa1e..3ede750a3043 100644 --- a/app/views/versions/show.html.erb +++ b/app/views/versions/show.html.erb @@ -69,7 +69,7 @@ See COPYRIGHT and LICENSE files for more details. <% if @version.estimated_hours > 0 || User.current.allowed_in_project?(:view_time_entries, @project) %>
- <%= t(:label_estimates_and_time) %> + <%= t(:label_estimates_and_progress) %> diff --git a/app/views/warning_bar/_missing_wp_edit_role_workflows.html.erb b/app/views/warning_bar/_missing_wp_edit_role_workflows.html.erb index 832eef709562..64e90389af3e 100644 --- a/app/views/warning_bar/_missing_wp_edit_role_workflows.html.erb +++ b/app/views/warning_bar/_missing_wp_edit_role_workflows.html.erb @@ -1,9 +1,9 @@

- <%= t('work_packages.sharing.missing_workflow_waring.title') %>
+ <%= t('work_packages.sharing.missing_workflow_warning.title') %>
- <%= t('work_packages.sharing.missing_workflow_waring.message') %> - <%= link_to t('work_packages.sharing.missing_workflow_waring.link_message'), + <%= t('work_packages.sharing.missing_workflow_warning.message') %> + <%= link_to t('work_packages.sharing.missing_workflow_warning.link_message'), copy_workflows_path %>

diff --git a/app/workers/cron/quarter_hour_schedule_job.rb b/app/workers/cron/quarter_hour_schedule_job.rb new file mode 100644 index 000000000000..dc9b7b93b13f --- /dev/null +++ b/app/workers/cron/quarter_hour_schedule_job.rb @@ -0,0 +1,82 @@ +# -- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +# ++ + +module Cron::QuarterHourScheduleJob + extend ActiveSupport::Concern + + included do + include GoodJob::ActiveJobExtensions::Concurrency + + # With good_job and the limit of only allowing a single job to be enqueued and + # also a single job being performed at the same time we end up having + # up to two jobs that are not yet finished. + + good_job_control_concurrency_with( + enqueue_limit: 1, + perform_limit: 1 + ) + + # The job is scheduled to run every 15 minutes. If the job before takes longer + # than expected we retry two more times (at cron_at + 5 and cron_at + 15). Then the job is discarded. + # Once the job is discarded, the next job will be scheduled to run at the next quarter hour. + retry_on GoodJob::ActiveJobExtensions::Concurrency::ConcurrencyExceededError, + wait: 5.minutes, + attempts: 3 + end + + private + + def upper_boundary + @upper_boundary ||= good_job.cron_at + end + + def lower_boundary + @lower_boundary ||= begin + # The cron_key is used here to find the predecessor job. + # The job_class has been used before as a comparison but this fails in + # the SaaS environment where multiple tenants exist. The cron_key gets the + # tenant information prepended and is thus scoped to the tenant. + predecessor = GoodJob::Job + .succeeded + .where(cron_key: good_job.cron_key) + .where("cron_at < ?", upper_boundary) + .order(cron_at: :desc) + .first + + if predecessor + predecessor.cron_at + 15.minutes + else + upper_boundary + end + end + end + + def good_job + @good_job ||= GoodJob::Job.find(job_id) + end +end diff --git a/app/workers/notifications/schedule_date_alerts_notifications_job.rb b/app/workers/notifications/schedule_date_alerts_notifications_job.rb index 24230fe1d4d0..a2cd750e60de 100644 --- a/app/workers/notifications/schedule_date_alerts_notifications_job.rb +++ b/app/workers/notifications/schedule_date_alerts_notifications_job.rb @@ -28,32 +28,54 @@ module Notifications # Creates date alert jobs for users whose local time is 1:00 am. + # The job is scheduled to run every 15 minutes. class ScheduleDateAlertsNotificationsJob < ApplicationJob + include Cron::QuarterHourScheduleJob + def perform return unless EnterpriseToken.allows_to?(:date_alerts) - Service.new(times_from_scheduled_to_execution).call + Service.new(every_quater_hour_between_predecessor_cron_at_and_own_cron_at).call end - # Returns times from scheduled execution time to current time in 15 minutes - # steps. + # What cannot be controlled is the time at which a job is actually performed. + # A high load on the system can lead to a job being performed later than expected. # - # As scheduled execution time can be different from current time by more - # than 15 minutes when workers are busy, all times at 15 minutes interval - # between scheduled time and current time need to be considered to match - # with 1:00am in a time zone. - def times_from_scheduled_to_execution - time = scheduled_time - times = [] - begin - times << time - time += 15.minutes - end while time < Time.current - times - end - - def scheduled_time - job_scheduled_at.then { |t| t.change(min: t.min / 15 * 15) } + # It might also happen that due to some outage of the background workers, cron + # jobs are not enqueued as they should be. + # + # But we want to achieve even under these circumstances that date alerts are sent out + # for all the users even if we cannot guarantee that they are sent out at the time where we want it to happen + # which would be 1:00 am. At the same time we want to prevent date alerts being sent out multiple times. + # + # There are three scenarios to consider which mostly circle around the predecessor + # of the job that is currently run: + # * The predecessor ran successfully within the 15 minutes interval between it being scheduled and the current job + # having to run. If this is the case, then the current job will only have to handle only the point in time of + # its cron_at value. + # * The predecessor took longer to run than 15 minutes or was scheduled to run at a later time (because its) + # predecessor was delayed. This will potentially lead to the current job also being delayed. If this is the case, + # then the current job will have to handle all the 15 minute slots between its cron_at value and the cron_at value + # of its predecessor + 15 minutes. + # * There is no predecessor since it is the first job ever to run or for some reasons the GoodJob::Execution where + # salvaged. In this case there is no certainty as to what is the right choice which is why the cron_at value of + # the current job is again used as the sole point in time to consider. + # + # In other words, the current job will take the + # * cron_at value of the current job as the maximum time to consider. + # * Take the cron_at of the previous job + 15 minutes as the minimum time to consider. + # If no previous job exists, then the cron_at of the current job is the minimum. + # + # Using this pattern, between all the instances of this job, every time slot where there is the potential + # for 1:00 am local time are covered. The sole exception would be the case where previously finished jobs + # have been removed from the database and the current job took longer to start executing. This is for now + # an accepted shortcoming as the likelihood of this happening is considered to be very low. + def every_quater_hour_between_predecessor_cron_at_and_own_cron_at + (lower_boundary.to_i..upper_boundary.to_i) + .step(15.minutes) + .map do |time| + Time.zone.at(time) + end end end end diff --git a/app/workers/notifications/schedule_reminder_mails_job.rb b/app/workers/notifications/schedule_reminder_mails_job.rb index 969f04c1551d..3a393cc7f298 100644 --- a/app/workers/notifications/schedule_reminder_mails_job.rb +++ b/app/workers/notifications/schedule_reminder_mails_job.rb @@ -28,8 +28,12 @@ module Notifications class ScheduleReminderMailsJob < ApplicationJob + include Cron::QuarterHourScheduleJob + def perform - User.having_reminder_mail_to_send(job_scheduled_at) + return unless lower_boundary.present? && upper_boundary.present? + + User.having_reminder_mail_to_send(lower_boundary, upper_boundary) .pluck(:id) .each do |user_id| Mails::ReminderJob.perform_later(user_id) diff --git a/app/workers/work_packages/apply_working_days_change_job.rb b/app/workers/work_packages/apply_working_days_change_job.rb index bc362b92e69a..8b4f17992374 100644 --- a/app/workers/work_packages/apply_working_days_change_job.rb +++ b/app/workers/work_packages/apply_working_days_change_job.rb @@ -38,9 +38,9 @@ def perform(user_id:, previous_working_days:, previous_non_working_days:) user = User.find(user_id) User.execute_as user do - wd_update = Journal::WorkingDayUpdate.new( + wd_update = Journal::CausedByWorkingDayChanges.new( working_days: changed_days(previous_working_days), - non_working_days: changed_non_working_dates(previous_non_working_days).transform_keys(&:iso8601) + non_working_days: changed_non_working_dates(previous_non_working_days) ) updated_work_package_ids = collect_id_for_each(applicable_work_package(previous_working_days, @@ -56,14 +56,9 @@ def perform(user_id:, previous_working_days:, previous_non_working_days:) private - def apply_change_to_work_package(user, work_package, changed_working_days) - cause = { - "type" => "working_days_changed", - "changed_days" => changed_working_days.to_h - } - + def apply_change_to_work_package(user, work_package, cause) WorkPackages::UpdateService - .new(user:, model: work_package, contract_class: EmptyContract, cause_of_update: changed_working_days) + .new(user:, model: work_package, contract_class: EmptyContract, cause_of_rescheduling: cause) .call(duration: work_package.duration, journal_cause: cause) # trigger a recomputation of start and due date .all_results end diff --git a/config/application.rb b/config/application.rb index abcf69011f0b..ef213504f88e 100644 --- a/config/application.rb +++ b/config/application.rb @@ -124,6 +124,14 @@ class Application < Rails::Application # That directory contains configurations and patches to rails core functionality. config.autoload_once_paths << Rails.root.join('lib_static').to_s + # Configure the relative url root to be whatever the configuration is set to. + # This allows for setting the root either via config file or via environment variable. + # It must be called early enough. In our case in should be called earlier + # than `config.exceptions_app = routes`. Otherwise Rails.application.routes.url_helpers + # will not have configured prefix. + # Read https://github.com/rails/rails/issues/42243 for some details. + config.relative_url_root = OpenProject::Configuration['rails_relative_url_root'] + # Use our own error rendering for prettier error pages config.exceptions_app = routes @@ -138,7 +146,6 @@ class Application < Rails::Application # Add locales from crowdin translations to i18n config.i18n.load_path += Dir[Rails.root.join("config/locales/crowdin/*.{rb,yml}").to_s] config.i18n.default_locale = :en - # Fall back to default locale config.i18n.fallbacks = true @@ -208,9 +215,6 @@ class Application < Rails::Application # initialize variable for register plugin tests config.plugins_to_test_paths = [] - # Configure the relative url root to be whatever the configuration is set to. - # This allows for setting the root either via config file or via environment variable. - config.action_controller.relative_url_root = OpenProject::Configuration['rails_relative_url_root'] config.active_job.queue_adapter = :good_job diff --git a/config/constants/settings/definition.rb b/config/constants/settings/definition.rb index 3777da14c0d1..479ed4fa1e4d 100644 --- a/config/constants/settings/definition.rb +++ b/config/constants/settings/definition.rb @@ -424,7 +424,7 @@ class Definition default: false }, enabled_projects_columns: { - default: %w[project_status public created_at latest_activity_at required_disk_space], + default: %w[favored name project_status public created_at latest_activity_at required_disk_space], allowed: -> { Queries::Projects::ProjectQuery.new.available_selects.map { |s| s.attribute.to_s } } }, enabled_scm: { @@ -736,6 +736,12 @@ class Definition default: "", writable: false }, + show_work_package_attachments: { + description: "Show work package attachments by default.", + format: :boolean, + default: true, + writable: true + }, https: { description: "Set assumed connection security for the Rails processes", format: :boolean, @@ -761,14 +767,14 @@ class Definition default: 3 }, httpx_operation_timeout: { - description: '', + description: "", format: :float, writable: false, allowed: (0..), default: 10 }, httpx_request_timeout: { - description: '', + description: "", format: :float, writable: false, allowed: (0..), diff --git a/config/i18n-tasks-all-files.yml b/config/i18n-tasks-all-files.yml new file mode 100644 index 000000000000..a413111a90d7 --- /dev/null +++ b/config/i18n-tasks-all-files.yml @@ -0,0 +1,21 @@ +# i18n-tasks finds and manages missing and unused translations: https://github.com/glebm/i18n-tasks +# +# This configuration file is only used to check interpolations consistency with command +# `i18n-tasks check-consistent-interpolations --config config/i18n-tasks-all-files.yml` + +data: + # Locale files patterns where translations are read from: + read: + - config/locales/en.seeders.yml + - config/locales/en.yml + - config/locales/js-en.yml + - config/locales/crowdin/%{locale}.seeders.yml + - config/locales/crowdin/%{locale}.yml + - config/locales/crowdin/js-%{locale}.yml + - config/locales/generated/%{locale}.yml + - modules/*/config/locales/en.seeders.yml + - modules/*/config/locales/en.yml + - modules/*/config/locales/js-en.yml + - modules/*/config/locales/crowdin/%{locale}.seeders.yml + - modules/*/config/locales/crowdin/%{locale}.yml + - modules/*/config/locales/crowdin/js-%{locale}.yml diff --git a/config/initializers/01_enable_yjit.rb b/config/initializers/01_enable_yjit.rb new file mode 100644 index 000000000000..0649eea69be3 --- /dev/null +++ b/config/initializers/01_enable_yjit.rb @@ -0,0 +1,12 @@ +# Automatically enable YJIT if running Ruby 3.3 or newer, +# as it brings very sizeable performance improvements. +# Many users reported 15-25% improved latency. + +# If you are deploying to a memory-constrained environment, +# you may want to delete this file, but otherwise, it's free +# performance. +if defined? RubyVM::YJIT.enable + Rails.application.config.after_initialize do + RubyVM::YJIT.enable if ENV["OPENPROJECT_DISABLE__YJIT"] != "true" + end +end diff --git a/config/initializers/acts_as_favorable.rb b/config/initializers/acts_as_favorable.rb new file mode 100644 index 000000000000..9b17d8f8b487 --- /dev/null +++ b/config/initializers/acts_as_favorable.rb @@ -0,0 +1,8 @@ +# Be sure to restart your server when you modify this file. + +# For development and non-eager load mode, we need to register the acts_as_favorable models manually +# as no eager loading takes place +Rails.application.config.after_initialize do + OpenProject::Acts::Favorable::Registry + .add(Project) +end diff --git a/config/initializers/acts_as_watchable.rb b/config/initializers/acts_as_watchable.rb new file mode 100644 index 000000000000..03ef5dafada3 --- /dev/null +++ b/config/initializers/acts_as_watchable.rb @@ -0,0 +1,8 @@ +# Be sure to restart your server when you modify this file. + +# In development and non-eager loaded mode, we need to register the acts_as_watchable models manually +# as no eager loading takes place +Rails.application.config.after_initialize do + OpenProject::Acts::Watchable::Registry + .add(WorkPackage, Message, Forum, News, Meeting, Wiki, WikiPage) +end diff --git a/config/initializers/appsignal.rb b/config/initializers/appsignal.rb index 2b55b1951f69..7e20e55ed1eb 100644 --- a/config/initializers/appsignal.rb +++ b/config/initializers/appsignal.rb @@ -20,6 +20,9 @@ "ActionController::UnknownFormat", "ActiveJob::DeserializationError", "Net::SMTPServerBusy" + ], + ignore_logs: [ + "GET /health_check" ] } diff --git a/config/initializers/custom_field_format.rb b/config/initializers/custom_field_format.rb index 7e67798075cc..22ad44f96638 100644 --- a/config/initializers/custom_field_format.rb +++ b/config/initializers/custom_field_format.rb @@ -34,44 +34,50 @@ label: :label_text, order: 2, formatter: "CustomValue::FormattableStrategy") + fields.register OpenProject::CustomFieldFormat.new("link", + label: :label_link_url, + only: %w(WorkPackage Project), + order: 3, + formatter: "CustomValue::LinkStrategy") fields.register OpenProject::CustomFieldFormat.new("int", label: :label_integer, - order: 3, + order: 4, formatter: "CustomValue::IntStrategy") fields.register OpenProject::CustomFieldFormat.new("float", label: :label_float, - order: 4, + order: 5, formatter: "CustomValue::FloatStrategy") fields.register OpenProject::CustomFieldFormat.new("list", label: :label_list, - order: 5, + order: 6, formatter: "CustomValue::ListStrategy") fields.register OpenProject::CustomFieldFormat.new("date", label: :label_date, - order: 6, + order: 7, formatter: "CustomValue::DateStrategy") fields.register OpenProject::CustomFieldFormat.new("bool", label: :label_boolean, - order: 7, + order: 8, formatter: "CustomValue::BoolStrategy") fields.register OpenProject::CustomFieldFormat.new("user", label: Proc.new { User.model_name.human }, only: %w(WorkPackage TimeEntry Version Project), edit_as: "list", - order: 8, + order: 9, formatter: "CustomValue::UserStrategy") fields.register OpenProject::CustomFieldFormat.new("version", label: Proc.new { Version.model_name.human }, only: %w(WorkPackage TimeEntry Version Project), edit_as: "list", - order: 9, + order: 10, formatter: "CustomValue::VersionStrategy") # This is an internal formatter used as a fallback in case a value is not found. # Setting the label to nil in order to avoid it becoming available for selection as a custom value format. fields.register OpenProject::CustomFieldFormat.new("empty", label: nil, - order: 10, + order: 11, formatter: "CustomValue::EmptyStrategy") + end diff --git a/config/initializers/database_pool_size.rb b/config/initializers/database_pool_size.rb index f561765d1abb..19985ab3d052 100644 --- a/config/initializers/database_pool_size.rb +++ b/config/initializers/database_pool_size.rb @@ -31,7 +31,7 @@ # make sure we have enough connections in the pool for each thread and then some if pool_size && pool_size > ActiveRecord::Base.connection_pool.size - Rails.logger.debug { "Increasing database pool size to #{pool_size} to match max threads" } + Rails.logger.info { "Increasing database pool size to #{pool_size} to match max threads" } ActiveRecord::Base.establish_connection config.merge(pool: pool_size) end diff --git a/config/initializers/menus.rb b/config/initializers/menus.rb index da27d59089c5..c71ea9bea60d 100644 --- a/config/initializers/menus.rb +++ b/config/initializers/menus.rb @@ -374,34 +374,6 @@ icon: "help2", if: Proc.new { User.current.allowed_globally?(:edit_attribute_help_texts) } - menu.push :attachments, - { controller: "/admin/settings/attachments_settings", action: :show }, - caption: :"attributes.attachments", - icon: "attachment", - if: Proc.new { User.current.admin? } - - menu.push :attachments_settings, - { controller: "/admin/settings/attachments_settings", action: :show }, - if: Proc.new { User.current.admin? }, - caption: :label_setting_plural, - parent: :attachments - - menu.push :virus_scanning_settings, - { controller: "/admin/settings/virus_scanning_settings", action: :show }, - caption: :"settings.antivirus.title", - parent: :attachments, - enterprise_feature: "virus_scanning", - if: Proc.new { User.current.admin? } - - menu.push :attachment_quarantine, - { controller: "/admin/attachments/quarantined_attachments", action: :index }, - caption: :"antivirus_scan.quarantined_attachments.title", - parent: :attachments, - if: Proc.new { - User.current.admin? && - (EnterpriseToken.allows_to?(:virus_scanning) || Attachment.status_quarantined.any?) - } - menu.push :enumerations, { controller: "/enumerations" }, if: Proc.new { User.current.admin? }, diff --git a/config/initializers/permissions.rb b/config/initializers/permissions.rb index 4b3e6ae5d737..0f474ddcbb9d 100644 --- a/config/initializers/permissions.rb +++ b/config/initializers/permissions.rb @@ -95,6 +95,7 @@ { "projects/settings/general": %i[show], "projects/settings/storage": %i[show], + projects: %i[deactivate_work_package_attachments], "projects/templated": %i[create destroy], "projects/identifier": %i[show update] }, diff --git a/config/initializers/turbo_stream_actions.rb b/config/initializers/turbo_stream_actions.rb new file mode 100644 index 000000000000..22f8bacc9c7b --- /dev/null +++ b/config/initializers/turbo_stream_actions.rb @@ -0,0 +1,5 @@ +ActiveSupport.on_load :turbo_streams_tag_builder do + def dialog(&) + action(:dialog, nil, &) + end +end diff --git a/config/locales/crowdin/af.seeders.yml b/config/locales/crowdin/af.seeders.yml index 6416116fca15..20384aef8577 100644 --- a/config/locales/crowdin/af.seeders.yml +++ b/config/locales/crowdin/af.seeders.yml @@ -251,6 +251,21 @@ af: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/af.yml b/config/locales/crowdin/af.yml index 160def0573ea..78f5782864af 100644 --- a/config/locales/crowdin/af.yml +++ b/config/locales/crowdin/af.yml @@ -264,6 +264,7 @@ af: lists: active: "Active projects" my: "My projekte" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ af: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: There are currently no members part of this project. @@ -322,6 +330,7 @@ af: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Groepe" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -484,7 +493,7 @@ af: no_common_statuses_exists: "There is no status available for all selected work packages. Their status cannot be changed." unsupported_for_multiple_projects: "Bulk move/copy is not supported for work packages from multiple projects" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -782,6 +791,7 @@ af: not_an_iso_date: "is not a valid date. Required format: YYYY-MM-DD." not_same_project: "doesn't belong to the same project." odd: "must be odd." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "could not be validated with the associated regular expression." smaller_than_or_equal_to_max_length: "must be smaller than or equal to maximum length." taken: "has already been taken." @@ -1263,6 +1273,7 @@ af: button_edit: "Redigeer" button_edit_associated_wikipage: "Redigeer geassosieerde Wiki bladsy: %{page_title}" button_expand_all: "Vou almal uit" + button_favorite: "Add to favorites" button_filter: "Filtreer" button_generate: "Generate" button_list: "Lys" @@ -1290,6 +1301,7 @@ af: button_unarchive: "Deargiveer" button_uncheck_all: "Ontmerk almal" button_unlock: "Ontsluit" + button_unfavorite: "Remove from favorites" button_unwatch: "Hou op dophou" button_update: "Opdateer" button_upgrade: "Upgrade" @@ -1575,6 +1587,7 @@ af: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1722,17 +1735,6 @@ af: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "Nuus" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Accessibility" label_account: "Rekening" label_active: "Aktiewe" @@ -1913,7 +1915,7 @@ af: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Omgewing" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "is" label_everywhere: "everywhere" label_example: "Voorbeeld" @@ -1927,7 +1929,7 @@ af: label_expanded_click_to_collapse: "Expanded. Click to collapse" label_f_hour: "%{value} uur" label_f_hour_plural: "%{value} ure" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Toevoere" label_feeds_access_key: "RSS toegangsleutel" label_feeds_access_key_created_on: "RSS toegang sleutel %{value} gelede geskep" @@ -2000,6 +2002,7 @@ af: label_learn_more: "Learn more" label_less_or_equal: "<=" label_less_than_ago: "minder as dae gelede" + label_link_url: "Link (URL)" label_list: "Lys" label_loading: "Laai tans..." label_lock_user: "Lock user" @@ -2025,6 +2028,7 @@ af: label_membership_plural: "Memberships" lable_membership_added: "Member added" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2126,6 +2130,7 @@ af: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Total number of projects" label_project_copy_notifications: "Stuur e-pos kennisgewings gedurende die projek afskrif" label_project_latest: "Nuutste projekte" @@ -2140,7 +2145,7 @@ af: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projects using %{storage} disk storage" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "Bekyk alle projekte" label_project_show_details: "Toon projekdetails" label_project_hide_details: "Versteek projekdetails" @@ -2197,6 +2202,7 @@ af: label_setting_plural: "Instellings" label_system_settings: "System settings" label_show_completed_versions: "Show completed versions" + label_columns: "Kolomme" label_sort: "Rangskik" label_sort_by: "Sort by %{value}" label_sorted_by: "sorted by %{value}" @@ -2741,7 +2747,7 @@ af: member_of_group: "Assignee's group" name_or_identifier: "Naam of identifiseerder" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2886,6 +2892,7 @@ af: setting_app_subtitle: "Application subtitle" setting_app_title: "Application title" setting_attachment_max_size: "Attachment max. size" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Autofetch repository changes" @@ -2987,6 +2994,8 @@ af: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3223,6 +3232,10 @@ af: input_label: "Add columns" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Bykomende hulpbronne" getting_started: "Om te begin" @@ -3570,7 +3583,7 @@ af: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/ar.seeders.yml b/config/locales/crowdin/ar.seeders.yml index 96954dae869f..2f152fa43813 100644 --- a/config/locales/crowdin/ar.seeders.yml +++ b/config/locales/crowdin/ar.seeders.yml @@ -251,6 +251,21 @@ ar: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/ar.yml b/config/locales/crowdin/ar.yml index 665127fb9633..3d1f03a27a24 100644 --- a/config/locales/crowdin/ar.yml +++ b/config/locales/crowdin/ar.yml @@ -264,6 +264,7 @@ ar: lists: active: "Active projects" my: "مشاريعي" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ ar: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: لا يوجد حالياً قسم للأعضاء في هذا المشروع. @@ -322,6 +330,7 @@ ar: project_roles: "Project roles" wp_shares: "Work package shares" groups: "المجموعات" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -512,7 +521,7 @@ ar: no_common_statuses_exists: "There is no status available for all selected work packages. Their status cannot be changed." unsupported_for_multiple_projects: "حجم النقل أو النسخ غير مدعوم من أجل حزم العمل المكونة من عدة مشاريع" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -810,6 +819,7 @@ ar: not_an_iso_date: "ليس تاريخًا صالحًا. الشكل المطلوب: YYYY-MM-DD." not_same_project: "لا ينتمي إلى نفس المشروع." odd: "يجب أن يكون فردي." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "could not be validated with the associated regular expression." smaller_than_or_equal_to_max_length: "يجب أن يكون أصغر أو يساوي الطول الأعظم." taken: "قد اتخذت بالفعل." @@ -1323,6 +1333,7 @@ ar: button_edit: "تعديل" button_edit_associated_wikipage: "تعديل مرتبط بصفحة ويكيبيديا: %{page_title}" button_expand_all: "توسيع الجميع" + button_favorite: "Add to favorites" button_filter: "فلترة" button_generate: "أنتج" button_list: "القائمة" @@ -1350,6 +1361,7 @@ ar: button_unarchive: "إلغاء الأرشفة" button_uncheck_all: "إلغاء اختيار الكل" button_unlock: "فتح القفل" + button_unfavorite: "Remove from favorites" button_unwatch: "وقْف المشاهدة" button_update: "التحديث" button_upgrade: "Upgrade" @@ -1707,6 +1719,7 @@ ar: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1854,17 +1867,6 @@ ar: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "الأخبار" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Accessibility" label_account: "الحساب" label_active: "مفعّل" @@ -2045,7 +2047,7 @@ ar: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "بيئة" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "يكون" label_everywhere: "everywhere" label_example: "مثال" @@ -2059,7 +2061,7 @@ ar: label_expanded_click_to_collapse: "Expanded. Click to collapse" label_f_hour: "ساعة%{value}" label_f_hour_plural: "ساعات%{value}" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "التدفقات" label_feeds_access_key: "مفتاح الوصول ل RSS" label_feeds_access_key_created_on: "مفتاح الوصول إلى RSS التي تم إنشاؤها %{value} من قبل" @@ -2132,6 +2134,7 @@ ar: label_learn_more: "التعرف على المزيد" label_less_or_equal: "=>" label_less_than_ago: "أقل من أيام" + label_link_url: "Link (URL)" label_list: "القائمة" label_loading: "جاري التحميل..." label_lock_user: "Lock user" @@ -2157,6 +2160,7 @@ ar: label_membership_plural: "Memberships" lable_membership_added: "Member added" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2258,6 +2262,7 @@ ar: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "العدد الإجمالي للمشاريع" label_project_copy_notifications: "إرسال إشعارات البريد الالكتروني أثناء نسخ المشروع" label_project_latest: "أحدث المشاريع" @@ -2272,7 +2277,7 @@ ar: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "مشاريع%{count} باستخدام التخزين %{storage} على القرص" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "عرض جميع المشاريع" label_project_show_details: "Show project details" label_project_hide_details: "Hide project details" @@ -2329,6 +2334,7 @@ ar: label_setting_plural: "إعدادات" label_system_settings: "إعدادات النظام" label_show_completed_versions: "عرض الإصدارات المنجزة" + label_columns: "الأعمدة" label_sort: "فرز" label_sort_by: "ترتيب حسب %{value}" label_sorted_by: "مرتبة حسب %{value}" @@ -2881,7 +2887,7 @@ ar: member_of_group: "مجموعة الموكل إليه" name_or_identifier: "Name or identifier" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -3024,6 +3030,7 @@ ar: setting_app_subtitle: "العنوان الفرعي للتطبيق" setting_app_title: "عنوان التطبيق" setting_attachment_max_size: "الحد الأقصى لحجم المرفقات" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Autofetch repository changes" @@ -3125,6 +3132,8 @@ ar: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3361,6 +3370,10 @@ ar: input_label: "Add columns" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "مصادر إضافية" getting_started: "الشروع في البدء" @@ -3716,7 +3729,7 @@ ar: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/az.seeders.yml b/config/locales/crowdin/az.seeders.yml index 5a322720fe78..ba8635c16b5b 100644 --- a/config/locales/crowdin/az.seeders.yml +++ b/config/locales/crowdin/az.seeders.yml @@ -251,6 +251,21 @@ az: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/az.yml b/config/locales/crowdin/az.yml index 9c2436345b73..a0aed97c5c1f 100644 --- a/config/locales/crowdin/az.yml +++ b/config/locales/crowdin/az.yml @@ -264,6 +264,7 @@ az: lists: active: "Active projects" my: "My projects" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ az: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: There are currently no members part of this project. @@ -322,6 +330,7 @@ az: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Groups" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -484,7 +493,7 @@ az: no_common_statuses_exists: "There is no status available for all selected work packages. Their status cannot be changed." unsupported_for_multiple_projects: "Bulk move/copy is not supported for work packages from multiple projects" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -782,6 +791,7 @@ az: not_an_iso_date: "is not a valid date. Required format: YYYY-MM-DD." not_same_project: "doesn't belong to the same project." odd: "must be odd." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "could not be validated with the associated regular expression." smaller_than_or_equal_to_max_length: "must be smaller than or equal to maximum length." taken: "has already been taken." @@ -1263,6 +1273,7 @@ az: button_edit: "Düzəliş et" button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}" button_expand_all: "Hamısını genişləndir" + button_favorite: "Add to favorites" button_filter: "Filtr" button_generate: "Generate" button_list: "List" @@ -1290,6 +1301,7 @@ az: button_unarchive: "Unarchive" button_uncheck_all: "Uncheck all" button_unlock: "Unlock" + button_unfavorite: "Remove from favorites" button_unwatch: "Unwatch" button_update: "Yeniləmə" button_upgrade: "Upgrade" @@ -1575,6 +1587,7 @@ az: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1722,17 +1735,6 @@ az: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "News" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Accessibility" label_account: "Account" label_active: "Active" @@ -1913,7 +1915,7 @@ az: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Environment" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "is" label_everywhere: "everywhere" label_example: "Example" @@ -1927,7 +1929,7 @@ az: label_expanded_click_to_collapse: "Expanded. Click to collapse" label_f_hour: "%{value} hour" label_f_hour_plural: "%{value} hours" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Feeds" label_feeds_access_key: "RSS access key" label_feeds_access_key_created_on: "RSS access key created %{value} ago" @@ -2000,6 +2002,7 @@ az: label_learn_more: "Learn more" label_less_or_equal: "<=" label_less_than_ago: "less than days ago" + label_link_url: "Link (URL)" label_list: "List" label_loading: "Loading..." label_lock_user: "Lock user" @@ -2025,6 +2028,7 @@ az: label_membership_plural: "Memberships" lable_membership_added: "Member added" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2126,6 +2130,7 @@ az: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Total number of projects" label_project_copy_notifications: "Send email notifications during the project copy" label_project_latest: "Latest projects" @@ -2140,7 +2145,7 @@ az: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projects using %{storage} disk storage" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "View all projects" label_project_show_details: "Show project details" label_project_hide_details: "Hide project details" @@ -2197,6 +2202,7 @@ az: label_setting_plural: "Settings" label_system_settings: "System settings" label_show_completed_versions: "Show completed versions" + label_columns: "Columns" label_sort: "Sort" label_sort_by: "Sort by %{value}" label_sorted_by: "sorted by %{value}" @@ -2741,7 +2747,7 @@ az: member_of_group: "Assignee's group" name_or_identifier: "Name or identifier" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2886,6 +2892,7 @@ az: setting_app_subtitle: "Application subtitle" setting_app_title: "Application title" setting_attachment_max_size: "Attachment max. size" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Autofetch repository changes" @@ -2987,6 +2994,8 @@ az: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3223,6 +3232,10 @@ az: input_label: "Add columns" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Additional resources" getting_started: "Getting started" @@ -3570,7 +3583,7 @@ az: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/be.seeders.yml b/config/locales/crowdin/be.seeders.yml index c3dc961ae8ba..874d0a6def8f 100644 --- a/config/locales/crowdin/be.seeders.yml +++ b/config/locales/crowdin/be.seeders.yml @@ -251,6 +251,21 @@ be: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/be.yml b/config/locales/crowdin/be.yml index 2ab19533d174..cf4bb8bc9efc 100644 --- a/config/locales/crowdin/be.yml +++ b/config/locales/crowdin/be.yml @@ -264,6 +264,7 @@ be: lists: active: "Active projects" my: "My projects" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ be: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: There are currently no members part of this project. @@ -322,6 +330,7 @@ be: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Groups" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -498,7 +507,7 @@ be: no_common_statuses_exists: "There is no status available for all selected work packages. Their status cannot be changed." unsupported_for_multiple_projects: "Bulk move/copy is not supported for work packages from multiple projects" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -796,6 +805,7 @@ be: not_an_iso_date: "is not a valid date. Required format: YYYY-MM-DD." not_same_project: "doesn't belong to the same project." odd: "must be odd." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "could not be validated with the associated regular expression." smaller_than_or_equal_to_max_length: "must be smaller than or equal to maximum length." taken: "has already been taken." @@ -1293,6 +1303,7 @@ be: button_edit: "Рэдагаваць" button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}" button_expand_all: "Разгарнуць усё" + button_favorite: "Add to favorites" button_filter: "Фільтр" button_generate: "Generate" button_list: "List" @@ -1320,6 +1331,7 @@ be: button_unarchive: "Unarchive" button_uncheck_all: "Uncheck all" button_unlock: "Unlock" + button_unfavorite: "Remove from favorites" button_unwatch: "Unwatch" button_update: "Абнавіць" button_upgrade: "Upgrade" @@ -1641,6 +1653,7 @@ be: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1788,17 +1801,6 @@ be: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "News" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Accessibility" label_account: "Account" label_active: "Active" @@ -1979,7 +1981,7 @@ be: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Environment" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "is" label_everywhere: "everywhere" label_example: "Example" @@ -1993,7 +1995,7 @@ be: label_expanded_click_to_collapse: "Expanded. Click to collapse" label_f_hour: "%{value} hour" label_f_hour_plural: "%{value} hours" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Feeds" label_feeds_access_key: "RSS access key" label_feeds_access_key_created_on: "RSS access key created %{value} ago" @@ -2066,6 +2068,7 @@ be: label_learn_more: "Learn more" label_less_or_equal: "<=" label_less_than_ago: "less than days ago" + label_link_url: "Link (URL)" label_list: "List" label_loading: "Loading..." label_lock_user: "Lock user" @@ -2091,6 +2094,7 @@ be: label_membership_plural: "Memberships" lable_membership_added: "Member added" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2192,6 +2196,7 @@ be: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Total number of projects" label_project_copy_notifications: "Send email notifications during the project copy" label_project_latest: "Latest projects" @@ -2206,7 +2211,7 @@ be: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projects using %{storage} disk storage" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "View all projects" label_project_show_details: "Show project details" label_project_hide_details: "Hide project details" @@ -2263,6 +2268,7 @@ be: label_setting_plural: "Settings" label_system_settings: "System settings" label_show_completed_versions: "Show completed versions" + label_columns: "Columns" label_sort: "Sort" label_sort_by: "Sort by %{value}" label_sorted_by: "sorted by %{value}" @@ -2811,7 +2817,7 @@ be: member_of_group: "Assignee's group" name_or_identifier: "Name or identifier" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2956,6 +2962,7 @@ be: setting_app_subtitle: "Application subtitle" setting_app_title: "Application title" setting_attachment_max_size: "Attachment max. size" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Autofetch repository changes" @@ -3057,6 +3064,8 @@ be: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3293,6 +3302,10 @@ be: input_label: "Add columns" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Additional resources" getting_started: "Getting started" @@ -3644,7 +3657,7 @@ be: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/bg.seeders.yml b/config/locales/crowdin/bg.seeders.yml index 420a41cf1b11..ffd68835a64d 100644 --- a/config/locales/crowdin/bg.seeders.yml +++ b/config/locales/crowdin/bg.seeders.yml @@ -251,6 +251,21 @@ bg: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/bg.yml b/config/locales/crowdin/bg.yml index a8afd4869347..8c39db217939 100644 --- a/config/locales/crowdin/bg.yml +++ b/config/locales/crowdin/bg.yml @@ -264,6 +264,7 @@ bg: lists: active: "Active projects" my: "Моите проекти" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ bg: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: В момента има няма членове част от този проект. @@ -322,6 +330,7 @@ bg: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Групи" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -484,7 +493,7 @@ bg: no_common_statuses_exists: "There is no status available for all selected work packages. Their status cannot be changed." unsupported_for_multiple_projects: "Масово преместване/копиране не се поддържа за работни пакети от множество проекти" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -782,6 +791,7 @@ bg: not_an_iso_date: "не е валидна дата. Изискван формат: ГГГГ-ММ-ДД." not_same_project: "не принадлежат към един и същ проект." odd: "трябва да бъде нечетен." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "could not be validated with the associated regular expression." smaller_than_or_equal_to_max_length: "трябва да бъде по-малка от или равна на максималната дължина." taken: "вече съществува." @@ -1263,6 +1273,7 @@ bg: button_edit: "Редактиране" button_edit_associated_wikipage: "Редактиране на свързани Wiki страница: %{page_title}" button_expand_all: "Разгъване на всички" + button_favorite: "Add to favorites" button_filter: "Филтър" button_generate: "Генерирай" button_list: "Списък" @@ -1290,6 +1301,7 @@ bg: button_unarchive: "Разархивиране" button_uncheck_all: "Размаркирай всички" button_unlock: "Отключване" + button_unfavorite: "Remove from favorites" button_unwatch: "Спри наблюдение" button_update: "Обнови" button_upgrade: "Надграждане" @@ -1575,6 +1587,7 @@ bg: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1722,17 +1735,6 @@ bg: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "Новини" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Достъпност" label_account: "Акаунт" label_active: "Активен" @@ -1913,7 +1915,7 @@ bg: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Среда" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "е" label_everywhere: "навсякъде" label_example: "Пример" @@ -1927,7 +1929,7 @@ bg: label_expanded_click_to_collapse: "Expanded. Click to collapse" label_f_hour: "%{value} час" label_f_hour_plural: "%{value} часа" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Информационни канали" label_feeds_access_key: "RSS ключ за достъп" label_feeds_access_key_created_on: "RSS ключ за достъп създаден преди %{value}" @@ -2000,6 +2002,7 @@ bg: label_learn_more: "Научете повече" label_less_or_equal: "<=" label_less_than_ago: "по-скоро от няколко дни" + label_link_url: "Link (URL)" label_list: "Списък" label_loading: "Зареждане..." label_lock_user: "Заключване на потребител" @@ -2025,6 +2028,7 @@ bg: label_membership_plural: "Memberships" lable_membership_added: "Member added" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2126,6 +2130,7 @@ bg: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Общ брой на проектите" label_project_copy_notifications: "Изпраща имейл известия по време на копиране на проект" label_project_latest: "Последни проекти" @@ -2140,7 +2145,7 @@ bg: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} проекти с помощта на %{storage} диск за съхранение на данни" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "Покажи всички проекти" label_project_show_details: "Show project details" label_project_hide_details: "Hide project details" @@ -2197,6 +2202,7 @@ bg: label_setting_plural: "Настройки" label_system_settings: "Системни настройки" label_show_completed_versions: "Покажи завършени версии" + label_columns: "Колони" label_sort: "Сортиране" label_sort_by: "Sort by %{value}" label_sorted_by: "сортирани по %{value}" @@ -2741,7 +2747,7 @@ bg: member_of_group: "Assignee's group" name_or_identifier: "Name or identifier" only_subproject_id: "Само подпроект" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2886,6 +2892,7 @@ bg: setting_app_subtitle: "Application subtitle" setting_app_title: "Application title" setting_attachment_max_size: "Attachment max. size" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Autofetch repository changes" @@ -2987,6 +2994,8 @@ bg: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3223,6 +3232,10 @@ bg: input_label: "Add columns" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Допълнителни ресурси" getting_started: "Първи стъпки" @@ -3570,7 +3583,7 @@ bg: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/ca.seeders.yml b/config/locales/crowdin/ca.seeders.yml index 98c4d58c5d28..2874723f594c 100644 --- a/config/locales/crowdin/ca.seeders.yml +++ b/config/locales/crowdin/ca.seeders.yml @@ -251,6 +251,21 @@ ca: * [ ] Més cervesa item_4: subject: Final del projecte + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Projecte Scrum status_explanation: Totes les tasques estan planificades. Les persones involucrades saben les seves tasques. El sistema s'ha configurat per complet. diff --git a/config/locales/crowdin/ca.yml b/config/locales/crowdin/ca.yml index f828fdac7b4e..cf0a6cedd690 100644 --- a/config/locales/crowdin/ca.yml +++ b/config/locales/crowdin/ca.yml @@ -26,13 +26,13 @@ ca: no_results_title_text: No hi hagut activitat al projecte en aquesta finestra de temps. admin: plugins: - no_results_title_text: There are currently no plugins installed. - no_results_content_text: See our integrations and plugins page for more information. + no_results_title_text: Actualment no hi ha connectors disponibles. + no_results_content_text: Consulta la nostra pàgina d'integracions i connectors per obtenir més informació. custom_styles: color_theme: "Tema de color" color_theme_custom: "(Personalitzat)" colors: - primary-button-color: "Primary button" + primary-button-color: "Botó principal" accent-color: "Accent" header-bg-color: "Fons de capçalera" header-item-bg-hover-color: "Fons de capçalera en passar el ratolí" @@ -52,8 +52,8 @@ ca: enterprise_more_info: "Nota: el logotip utilitzat serà accessible públicament." manage_colors: "Edita les opcions de selecció de colors" instructions: - primary-button-color: "Strong accent color, used for the most important button on a screen." - accent-color: "Color for links and other decently highlighted elements." + primary-button-color: "Color d'accent fort, utilitzat per al botó més important de la pantalla." + accent-color: "Color per a enllaços i altres elements ben destacats." header-item-bg-hover-color: "Color de fons dels elements clicables de la capçalera quan el ratolí hi passa per damunt." header-item-font-color: "Color de lletra dels elements clicables de la capçalera." header-item-font-hover-color: "Color de lletra dels elements clicables de la capçalera quan el ratolí hi passa per damunt." @@ -88,16 +88,16 @@ ca: is_active: actualment mostrant is_inactive: no mostrats actualment antivirus_scan: - not_processed_yet_message: "Downloading is blocked, as file was not scanned for viruses yet. Please try again later." - quarantined_message: "A virus was detected in file '%{filename}'. It has been quarantined and is not available for download." - deleted_message: "A virus was detected in file '%{filename}'. The file has been deleted." - deleted_by_admin: "The quarantined file '%{filename}' has been deleted by an administrator." - overridden_by_admin: "The quarantine for file '%{filename}' has been removed by %{user}. The file can now be acccessed." + not_processed_yet_message: "La descàrrega està bloquejada, ja que el fitxer encara no s'ha analitzat per detectar virus. Si us plau, intenta-ho més tard." + quarantined_message: "S'ha detectat un virus al fitxer '%{filename}'. S'ha posat en quarantena i no es pot descarregar." + deleted_message: "S'ha detectat un virus al fitxer '%{filename}'. El fitxer s'ha suprimit." + deleted_by_admin: "Un administrador ha suprimit el fitxer en quarantena '%{filename}'." + overridden_by_admin: "La quarantena per al fitxer '%{filename}' ha estat eliminada per %{user}. Ja es pot accedir al fitxer." quarantined_attachments: - container: "Container" - delete: "Delete the quarantined file" - title: "Quarantined attachments" - error_cannot_act_self: "Cannot perform actions on your own uploaded files." + container: "Contenidor" + delete: "Suprimeix el fitxer en quarantena" + title: "Adjunts en quarantena" + error_cannot_act_self: "No es poden realitzar accions amb els vostres propis fitxers pujats." attribute_help_texts: note_public: "Tots els textos i imatges que afegeixis a aquest camp seran públicament visibles per a tots els usuaris que hagin iniciat sessió!" text_overview: "En aquesta vista pots crear texts d'ajuda personalitzats per la vista d'atributs. Una vegada definits, aquests texts es poden veure clicant la icona d'ajuda al costat de l'atribut pertinent." @@ -112,8 +112,8 @@ ca: ldap_auth_sources: ldap_error: "Error LDAP: %{error_message}" ldap_auth_failed: "No s'ha pogut autenticar en el servidor de LDAP." - sync_failed: "Failed to synchronize from LDAP: %{message}." - back_to_index: "Click here to go back to the list of connection." + sync_failed: "No s'ha pogut sincronitzar des de LDAP: %{message}." + back_to_index: "Fes clic aquí per tornar a la llista de connexions." technical_warning_html: | Aquest formulari LDAP requereix coneixement tècnic sobre la teva configuració LDAP / Directori actiu.
@@ -221,7 +221,7 @@ ca: concatenation: single: "o" global_search: - placeholder: "Search in %{app_title}" + placeholder: "Cerca a %{app_title}" overwritten_tabs: wiki_pages: "Wiki" messages: "Fòrum" @@ -259,10 +259,11 @@ ca: no_results_title_text: Actualment no hi ha projectes no_results_content_text: Crear un nou projecte lists: - active: "Active projects" + active: "Projectes actius" my: "Els meus projectes" - archived: "Archived projects" - my_private: "My private project lists" + favored: "Projectes preferits" + archived: "Projectes arxivats" + my_private: "Les meves llistes de projectes privats" new: placeholder: "New project list" delete_modal: @@ -301,7 +302,14 @@ ca: storage: no_results_title_text: No hi ha espai addicional de disc gravat consumit per aquest projecte. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: Actualment no hi ha cap membre que formi part d'aquest projecte. @@ -319,6 +327,7 @@ ca: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Grups" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -368,7 +377,7 @@ ca: token_value_warning: "Nota: Aquesta és la única vegada que veuràs aquest token, assegura't de copiar-lo ara." no_results_title_text: Actualment no hi ha cap token d'accés disponible. notice_api_token_revoked: "The API token has been deleted. To create a new token please use the link in the API section." - notice_rss_token_revoked: "The RSS token has been deleted. To create a new token please use the link in the RSS section." + notice_rss_token_revoked: "S'ha suprimit el token RSS. Per crear un token nou, utilitzeu l'enllaç de la secció RSS." notice_ical_token_revoked: 'El token d''iCalendar "%{token_name}" per al calendari "%{calendar_name}" en el projecte "%{project_name}" s''ha revocat. L''URL d''iCalendar amb aquest token és ara invàlida.' news: index: @@ -376,10 +385,10 @@ ca: no_results_content_text: Afegir una notícia users: autologins: - prompt: "Stay logged in for %{num_days}" + prompt: "Manté la sessió iniciada durant %{num_days}" sessions: - remembered_devices: "Remembered devices" - remembered_devices_caption: "A list of all devices that logged into this account using the 'Stay logged in' option." + remembered_devices: "Dispositius recordats" + remembered_devices_caption: "Una llista de tots els dispositius que han iniciat sessió en aquest compte mitjançant l'opció \"Mantenir la sessió iniciada\"." session_name: "%{browser_name}%{browser_version} en %{os_name}" browser: "Navegador" device: "Dispositiu / Sistema Operatiu" @@ -433,8 +442,8 @@ ca: no_results_title_text: Actualment no hi ha cap estat de paquet de treball. no_results_content_text: Afegir un nou estat themes: - light: "Light" - light_high_contrast: "Light high contrast" + light: "Clar" + light_high_contrast: "Clar alt contrast" types: index: no_results_title_text: Actualment no hi ha cap tipus. @@ -453,7 +462,7 @@ ca: El color seleccionat distingeix direfents tipus als diagrames Gantt o a les taules de paquets de treballs. Així doncs recomanem de fer servir un color fort. versions: overview: - work_packages_in_archived_projects: "The version is shared with archived projects which still have work packages assigned to this version. These are counted, but will not appear in the linked views." + work_packages_in_archived_projects: "La versió es comparteix amb projectes arxivats que encara tenen paquets de treball assignats a aquesta versió. Es comptabilitzen, però no apareixeran a les vistes enllaçades." no_results_title_text: Actualment no hi ha cap paquet de treball assignat a aquesta versió. wiki: page_not_editable_index: La pàgina sol·licitada no existeix (encara). Se t'ha redirigit a la pàgina índex de totes les pàgines wiki. @@ -480,7 +489,7 @@ ca: no_common_statuses_exists: "No hi ha estats disponibles per a tots els paquets de treball seleccionats. El seus estats no es poden canviar." unsupported_for_multiple_projects: "Moure o copiar en massa no està soportat per paquets de treball de múltiples projectes" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -526,7 +535,7 @@ ca: error_self_registration_disabled: > El registre d'usuaris està deshabilitat en aquest sistema. Demana a un administrador que et creï un compte. error_self_registration_limited_provider: > - User registration is limited for the Single sign-on provider '%{name}'. Please ask an administrator to activate the account for you or change the self registration limit for this provider. + El registre d'usuari està limitat per al proveïdor d'inici de sessió únic '%{name}'. Si us plau, demaneu a un administrador que us activi el compte o que canviï el límit d'autoregistre d'aquest proveïdor. login_with_auth_provider: "o inicia la sessió amb el teu compte" signup_with_auth_provider: "o registra't mitjançant" auth_source_login: Si us plau, entra com a %{login} per activar el teu compte. @@ -566,7 +575,7 @@ ca: custom_action: actions: "Accions" custom_field: - allow_non_open_versions: "Allow non-open versions" + allow_non_open_versions: "Permet versions no obertes" default_value: "Valor per defecte" editable: "Editable" field_format: "Format" @@ -594,7 +603,7 @@ ca: oauth_client: client: "ID de client" relation: - lag: "Lag" + lag: "Retard" from: "Paquet de treball" to: "Paquet de treball relacionat" status: @@ -661,7 +670,7 @@ ca: admin: "Administrador" auth_source: "Authentication source" ldap_auth_source: "Connexió LDAP" - identity_url: "Identity URL" + identity_url: "URL d'identitat" current_password: "Contrassenya actual" force_password_change: "Forçar el canvi de contrasenya en el proper inici de sessió" language: "Idioma" @@ -688,7 +697,7 @@ ca: planning_element_type_color: hexcode: Codi hexadecimal project_custom_field: - custom_field_section: Section + custom_field_section: Secció work_package: begin_insertion: "Inici de la inserció" begin_deletion: "Inici de la supressió" @@ -696,7 +705,7 @@ ca: derived_done_ratio: "Total % complete" derived_remaining_hours: "Total remaining work" derived_remaining_time: "Total remaining work" - done_ratio: "% Complete" + done_ratio: "% Complet" duration: "Duració" end_insertion: "Final de la inserció" end_deletion: "Final de la supressió" @@ -705,16 +714,16 @@ ca: title: "Dies laborals" false: "només dies laborables" true: "inclou dies no laborables" - notify: "Notify" #used in custom actions + notify: "Notifica" #used in custom actions parent: "Pare" parent_issue: "Pare" parent_work_package: "Pare" priority: "Prioritat" - progress: "% Complete" + progress: "% Complet" readonly: "Només lectura" - remaining_hours: "Remaining work" - remaining_time: "Remaining work" - shared_with_users: "Shared with" + remaining_hours: "Treball restant" + remaining_time: "Treball restant" + shared_with_users: "Compartit amb" schedule_manually: "Planificació manual" spent_hours: "Temps invertit" spent_time: "Temps invertit" @@ -778,6 +787,7 @@ ca: not_an_iso_date: "no és una data vàlida. Format requerit: AAAA-MM-DD." not_same_project: "no pertany al mateix projecte." odd: "ha de ser senar." + regex_match_failed: "no coincideix amb l'expressió regular %{expression}." regex_invalid: "no s'ha pogut validar amb l'expressió regular associada." smaller_than_or_equal_to_max_length: "ha de ser inferior o igual a la longitud màxima." taken: "ja s'està utilitzant." @@ -895,8 +905,8 @@ ca: forbidden: "La marca horària conté valors prohibits: %{values}" format: "%{message}" selects: - name_not_included: "The 'Name' column needs to be included" - nonexistent: "The column '%{column}' does not exist." + name_not_included: "S'ha d'incloure la columna \"Nom\"." + nonexistent: "La columna '%{column}' no existeix." format: "%{message}" group_by_hierarchies_exclusive: "és mútuament exclusiu amb el grup per \"%{group_by}\". No pots activar els dos." filters: @@ -953,7 +963,7 @@ ca: not_allowed_to_view: "no està permès veure aquest recurs." locked: "està bloquejat." wiki_page: - error_conflict: "The wiki page has been updated by someone else while you were editing it." + error_conflict: "La pàgina wiki ha estat actualitzada per algú més mentre l'estàs editant." attributes: slug: undeducible: "no pot ser deduït del títol \"%{title}\"." @@ -989,7 +999,7 @@ ca: only_same_project_categories_allowed: "La categoria d'un paquet de treball ha d'estar al mateix projecte que el paquet de treball." does_not_exist: "La categoria especificada no existeix." estimated_hours: - cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work." + cant_be_inferior_to_remaining_work: "No pot ser inferior al treball restant." must_be_set_when_remaining_work_is_set: "Required when Remaining work is set." only_values_greater_or_equal_zeroes_allowed: "Must be >= 0." format: "%{message}" @@ -1120,11 +1130,11 @@ ca: duration: added: "set to %{value}" added_html: "set to %{value}" - removed: "removed" + removed: "eliminat" updated: "canviat de %{old_value} a %{value}" updated_html: "changed from %{old_value} to %{value}" position: - updated: "reordered" + updated: "reordenat" work_package: updated: "canviat de %{old_value} a %{value}" updated_html: "changed from %{old_value} to %{value}" @@ -1162,7 +1172,7 @@ ca: derived_start_date: "Data d'inici derivada" display_sums: "Mostra les sumes" due_date: "Data final" - estimated_hours: "Work" + estimated_hours: "Treball" estimated_time: "Work" expires_at: "Caduca el" firstname: "Nom" @@ -1259,6 +1269,7 @@ ca: button_edit: "Editar" button_edit_associated_wikipage: "Editar pàgines Wiki associades: %{page_title}" button_expand_all: "Expandeix tot" + button_favorite: "Add to favorites" button_filter: "Filtre" button_generate: "Generar" button_list: "Llista" @@ -1286,6 +1297,7 @@ ca: button_unarchive: "Desarxivar" button_uncheck_all: "Desmarca-ho tot" button_unlock: "Desbloquejar" + button_unfavorite: "Remove from favorites" button_unwatch: "Deixa de Seguir" button_update: "Actualitza" button_upgrade: "Actualitza" @@ -1571,6 +1583,7 @@ ca: pdf_overview_table: "PDF - Taula" pdf_report_with_images: "PDF - Report amb imatges" pdf_report: "PDF - Report" + pdf_gantt: "PDF Gantt" image: omitted: "Imatge no exportada." units: @@ -1701,7 +1714,7 @@ ca: static_token_name: "RSS token" disabled_text: "RSS tokens are not enabled by the administrator. Please contact your administrator to use this feature." storages: - title: "File Storages" + title: "Emmagatzematges de fitxers" text_hint: "File Storage tokens connect this OpenProject instance with an external File Storage." empty_text_hint: "There is no storage access linked to your account." revoke_token: "Do you really want to remove this token? You will need to login again on %{storage}" @@ -1718,17 +1731,6 @@ ca: mentioned: "Has sigut mencionat a %{work_package}" responsible: "Has esdevingut responsable de %{work_package}" watched: "Estàs observant %{work_package}" - update_info_mail: - body: > - Estem encantats d'anunciar la publicació d'OpenProject 12.0. És una publicació rellevant que esperem que millori de forma significant la forma en què utilitzes OpenProject. - Des d'aquesta versió, s'introdueixen les notificacions dins de l'aplicació. Des d'ara, rebràs notificacions relacionades amb els paquets de treball directament a OpenProject. Pots marcar aquestes notificacions com a llegides, respondre comentaris o inclús modificar els atributs del paquet de treball sense sortir del centre de notificacions. - Això, també vol dir que a partir d'ara no farem servir més correus electrònics per a les notificacions. Pensem que el nou centre de notificacions és el lloc adequat per actuar sobre les notificacions. Tot i això, si decideixes que és rellevant per a tu continuar rebent correus electrònics pots configurar recordatoris diaris en les hores que tu indiquis. - Si us plau, verifica la teva configuració de notificacions per defecte i configura les teves preferències per a notificacions i correus electrònics recordatoris via la configuració del teu compte. Pots fer aquestes accions fent servir el botó de "Canviar notificacions de correus electrònics". - Esperem que trobis les notificacions dins l'aplicació útils i que aquests canvis millorin la teva productivitat. - Sincerament, L'equip d'OpenProject - body_header: "Versió 12.0 amb Centre de Notificacions" - body_subheader: "Notícies" - subject: "Canvis importants en les notificacions amb el llançament de 12.0" label_accessibility: "Accessibilitat" label_account: "Compte" label_active: "Actiu" @@ -1774,9 +1776,9 @@ ca: label_attachment_plural: "Fitxers adjunts" label_attribute: "Atribut" label_attribute_plural: "Atributs" - label_ldap_auth_source_new: "New LDAP connection" + label_ldap_auth_source_new: "Nova connexió LDAP" label_ldap_auth_source: "Connexió LDAP" - label_ldap_auth_source_plural: "LDAP connections" + label_ldap_auth_source_plural: "Connexions LDAP" label_attribute_expand_text: "The complete text for '%{attribute}'" label_authentication: "Autenticació" label_available_global_roles: "Available global roles" @@ -1825,7 +1827,7 @@ ca: label_check_uncheck_all_in_column: "Marca/desmarca tot a la columna" label_check_uncheck_all_in_row: "Marca/desmarca tot a la fila" label_child_element: "Element fill" - label_choices: "Choices" + label_choices: "Opcions" label_chronological_order: "Més antic primer" label_close_versions: "Tancar versions completades" label_closed_work_packages: "tancat" @@ -1909,12 +1911,12 @@ ca: label_enterprise_support: "Suport Enterprise" label_enterprise_addon: "Enterprise add-on" label_environment: "Entorn" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "és" label_everywhere: "a tot arreu" label_example: "Exemple" label_experimental: "Experimental" - label_i_am_member: "I am member" + label_i_am_member: "Sóc membre" label_ifc_viewer: "Ifc Viewer" label_ifc_model_plural: "Ifc Models" label_import: "Importació" @@ -1923,7 +1925,7 @@ ca: label_expanded_click_to_collapse: "Desplegat. Fes clic per col·lapsar" label_f_hour: "%{value} hora" label_f_hour_plural: "%{value} hores" - label_favoured: "Favoured" + label_favorite: "Preferit" label_feed_plural: "Canals" label_feeds_access_key: "Clau d'accés RSS" label_feeds_access_key_created_on: "Clau d'accés RSS creada fa %{value}" @@ -1996,6 +1998,7 @@ ca: label_learn_more: "Saber-ne més" label_less_or_equal: "<=" label_less_than_ago: "fa menys de" + label_link_url: "Link (URL)" label_list: "Llista" label_loading: "Carregant..." label_lock_user: "Bloqueja usuari" @@ -2021,6 +2024,7 @@ ca: label_membership_plural: "Memberships" lable_membership_added: "Membre afegit" lable_membership_updated: "Membre actualitzat" + label_menu: "Menú" label_menu_badge: pre_alpha: "pre-alfa" alpha: "alfa" @@ -2046,7 +2050,7 @@ ca: label_my_account: "El meu compte" label_my_activity: "La meva activitat" label_my_account_data: "Dades del meu compte" - label_my_avatar: "My avatar" + label_my_avatar: "El meu avatar" label_my_queries: "Les meves consultes personalitzades" label_name: "Nom" label_never: "Mai" @@ -2111,7 +2115,7 @@ ca: label_precedes: "precedeix" label_preferences: "Preferències" label_preview: "Previsualitzar" - label_preview_not_available: "Preview not available" + label_preview_not_available: "Previsualització no disponible" label_previous: "Anterior" label_previous_week: "Setmana anterior" label_principal_invite_via_email: " o convidar a nous usuaris per correu electrònic" @@ -2119,9 +2123,10 @@ ca: label_privacy_policy: "Privacitat de dades i política de seguretat" label_product_version: "Versió del producte" label_profile: "Perfil" - label_percent_complete: "% Complete" + label_percent_complete: "% Complet" label_project_activity: "Activitat del projecte" label_project_attribute_plural: "Atributs de projecte" + label_project_attribute_manage_link: "Gestionar els atributs del projecte" label_project_count: "Nombre total de projectes" label_project_copy_notifications: "Envia notificacions de correu electrònic durant la còpia del projecte" label_project_latest: "Últims projectes" @@ -2129,14 +2134,14 @@ ca: label_project_hierarchy: "Jerarquia de projectes" label_project_new: "Nou projecte" label_project_plural: "Projectes" - label_project_list_plural: "Project lists" + label_project_list_plural: "Llistes de projectes" label_project_attributes_plural: "Atributs de projecte" label_project_custom_field_plural: "Atributs de projecte" label_project_settings: "Configuració del projecte" label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projectes utilitzen %{storage} d'emmagatzematge a disc" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "Veure tots els projectes" label_project_show_details: "Mostra detalls del projecte" label_project_hide_details: "Amaga detalls del projecte" @@ -2193,6 +2198,7 @@ ca: label_setting_plural: "Configuració" label_system_settings: "Configuració del Sistema" label_show_completed_versions: "Mostra les versions acabades" + label_columns: "Columnes" label_sort: "Ordena" label_sort_by: "Ordenar per %{value}" label_sorted_by: "ordenats per %{value}" @@ -2330,8 +2336,8 @@ ca: zero: "sense projectes" label_x_files: one: "1 file" - other: "%{count} files" - zero: "no files" + other: "%{count} fitxers" + zero: "sense fitxers" label_yesterday: "ahir" label_zen_mode: "Zen mode" label_role_type: "Classe" @@ -2390,7 +2396,7 @@ ca: assigned: "Assignat" responsible: "Responsable" mentioned: "Mencionat" - shared: "Shared" + shared: "Compartida" subscribed: "tot" prefix: "Rebut a causa de la configuració de notificacions: %{reason}" date_alert_start_date: "Alerta per dates" @@ -2418,8 +2424,8 @@ ca: details: "For more details or to make any necessary amendments, you can visit your storage configuration" unhealthy: summary: "The status of your storage, %{storage_name}, is currently displaying as \"Error\". We've detected an issue that might require your attention." - error-details: "Error Details" - error-message: "Error Message" + error-details: "Detalls de l'error" + error-message: "Missatge d'error" error-occurred-on: "Occurred On" recommendation: "We recommend heading over to the storage configuration page to address this issue" unsubscribe: "If you would no longer like to receive these notifications, you can unsubscribe at any time. To unsubscribe, please follow the instructions on this page" @@ -2431,7 +2437,7 @@ ca: summary: "The problem with your %{storage_name} storage integration is now solved" unhealthy: subject: "Storage \"%{name}\" is unhealthy!" - since: "since" + since: "des de" summary: "There is a problem with your %{storage_name} storage integration" troubleshooting: text: "For more information, check file storages" @@ -2603,8 +2609,8 @@ ca: permission_add_work_package_attachments: "Afegir fitxers adjunts" permission_add_work_package_attachments_explanation: "Allows adding attachments without Edit work packages permission" permission_archive_project: "Arxiva el projecte" - permission_create_user: "Create users" - permission_manage_user: "Edit users" + permission_create_user: "Crea usuaris" + permission_manage_user: "Edita usuaris" permission_manage_placeholder_user: "Crea, edita i elimina usuaris de marcador de posició" permission_add_subprojects: "Crear subprojectes" permission_add_work_package_watchers: "Afegir observadors" @@ -2665,10 +2671,10 @@ ca: permission_select_project_modules: "Selecciona els mòduls del projecte" permission_share_work_packages: "Share work packages" permission_manage_types: "Seleccioneu tipus" - permission_view_project: "View projects" + permission_view_project: "Veure projectes" permission_view_changesets: "Veure les revisions del repositori a OpenProject" permission_view_commit_author_statistics: "Veure les estadístiques de commits de l'autor" - permission_view_dashboards: "View dashboards" + permission_view_dashboards: "Visualitza els taulers de control" permission_view_work_package_watchers: "Veure la llista d'observadors" permission_view_work_packages: "Veure els paquets de treball" permission_view_messages: "Visualitzar els missatges" @@ -2732,7 +2738,7 @@ ca: member_of_group: "Grup de l'assignat" name_or_identifier: "Nom o identificador" only_subproject_id: "Només subprojecte" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Incloent subprojectes" repositories: @@ -2875,6 +2881,7 @@ ca: setting_app_subtitle: "Subtítol de l'aplicació" setting_app_title: "Títol de l'aplicació" setting_attachment_max_size: "Mida màxima dels fitxers adjunts" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Recopliació automàtica de canvis en el repositori" @@ -2976,6 +2983,8 @@ ca: attachments: whitelist_text_html: > Defineix una llista vàlida d'extensions de fitxers i/o classes MIME per carregar fitxers.
Introdueïx extensions de fitxers (ex. %{ext_example}) o classes MIME (ex. %{mime_example}).
Deixa el camp buit per permetre qualsevol classe de fitxer. Es permeten múltiples valors (una línia per cada valor). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3212,6 +3221,10 @@ ca: input_label: "Afegir una columna" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Recursos addicionals" getting_started: "Primers passos" @@ -3559,7 +3572,7 @@ ca: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/ckb-IR.seeders.yml b/config/locales/crowdin/ckb-IR.seeders.yml index f0dfa4693081..01120382ba0f 100644 --- a/config/locales/crowdin/ckb-IR.seeders.yml +++ b/config/locales/crowdin/ckb-IR.seeders.yml @@ -251,6 +251,21 @@ ckb-IR: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/ckb-IR.yml b/config/locales/crowdin/ckb-IR.yml index 0b4fd7994c3d..958bb1720947 100644 --- a/config/locales/crowdin/ckb-IR.yml +++ b/config/locales/crowdin/ckb-IR.yml @@ -264,6 +264,7 @@ ckb-IR: lists: active: "Active projects" my: "My projects" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ ckb-IR: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: There are currently no members part of this project. @@ -322,6 +330,7 @@ ckb-IR: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Groups" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -484,7 +493,7 @@ ckb-IR: no_common_statuses_exists: "There is no status available for all selected work packages. Their status cannot be changed." unsupported_for_multiple_projects: "Bulk move/copy is not supported for work packages from multiple projects" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -782,6 +791,7 @@ ckb-IR: not_an_iso_date: "is not a valid date. Required format: YYYY-MM-DD." not_same_project: "doesn't belong to the same project." odd: "must be odd." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "could not be validated with the associated regular expression." smaller_than_or_equal_to_max_length: "must be smaller than or equal to maximum length." taken: "has already been taken." @@ -1263,6 +1273,7 @@ ckb-IR: button_edit: "Edit" button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}" button_expand_all: "Expand all" + button_favorite: "Add to favorites" button_filter: "Filter" button_generate: "Generate" button_list: "List" @@ -1290,6 +1301,7 @@ ckb-IR: button_unarchive: "Unarchive" button_uncheck_all: "Uncheck all" button_unlock: "Unlock" + button_unfavorite: "Remove from favorites" button_unwatch: "Unwatch" button_update: "Update" button_upgrade: "Upgrade" @@ -1575,6 +1587,7 @@ ckb-IR: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1722,17 +1735,6 @@ ckb-IR: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "News" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Accessibility" label_account: "Account" label_active: "Active" @@ -1913,7 +1915,7 @@ ckb-IR: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Environment" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "is" label_everywhere: "everywhere" label_example: "Example" @@ -1927,7 +1929,7 @@ ckb-IR: label_expanded_click_to_collapse: "Expanded. Click to collapse" label_f_hour: "%{value} hour" label_f_hour_plural: "%{value} hours" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Feeds" label_feeds_access_key: "RSS access key" label_feeds_access_key_created_on: "RSS access key created %{value} ago" @@ -2000,6 +2002,7 @@ ckb-IR: label_learn_more: "Learn more" label_less_or_equal: "<=" label_less_than_ago: "less than days ago" + label_link_url: "Link (URL)" label_list: "List" label_loading: "Loading..." label_lock_user: "Lock user" @@ -2025,6 +2028,7 @@ ckb-IR: label_membership_plural: "Memberships" lable_membership_added: "Member added" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2126,6 +2130,7 @@ ckb-IR: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Total number of projects" label_project_copy_notifications: "Send email notifications during the project copy" label_project_latest: "Latest projects" @@ -2140,7 +2145,7 @@ ckb-IR: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projects using %{storage} disk storage" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "View all projects" label_project_show_details: "Show project details" label_project_hide_details: "Hide project details" @@ -2197,6 +2202,7 @@ ckb-IR: label_setting_plural: "Settings" label_system_settings: "System settings" label_show_completed_versions: "Show completed versions" + label_columns: "Columns" label_sort: "Sort" label_sort_by: "Sort by %{value}" label_sorted_by: "sorted by %{value}" @@ -2741,7 +2747,7 @@ ckb-IR: member_of_group: "Assignee's group" name_or_identifier: "Name or identifier" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2886,6 +2892,7 @@ ckb-IR: setting_app_subtitle: "Application subtitle" setting_app_title: "Application title" setting_attachment_max_size: "Attachment max. size" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Autofetch repository changes" @@ -2987,6 +2994,8 @@ ckb-IR: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3223,6 +3232,10 @@ ckb-IR: input_label: "Add columns" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Additional resources" getting_started: "Getting started" @@ -3570,7 +3583,7 @@ ckb-IR: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/cs.seeders.yml b/config/locales/crowdin/cs.seeders.yml index 351f014539a3..119ae29205ef 100644 --- a/config/locales/crowdin/cs.seeders.yml +++ b/config/locales/crowdin/cs.seeders.yml @@ -237,6 +237,21 @@ cs: * [ ] Ještě více piva item_4: subject: Ukončení projektu + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Projekt Scrum status_explanation: Všechny úkoly a dílčí projekty probíhají podle harmonogramu. Zúčastněné osoby znají své úkoly. Systém je kompletně nastaven. diff --git a/config/locales/crowdin/cs.yml b/config/locales/crowdin/cs.yml index 25e86f234cd1..e1d32e3af8ee 100644 --- a/config/locales/crowdin/cs.yml +++ b/config/locales/crowdin/cs.yml @@ -264,6 +264,7 @@ cs: lists: active: "Aktivní projekty" my: "Moje projekty" + favored: "Oblíbené projekty" archived: "Archivované projekty" my_private: "soukromé seznamy projektů" new: @@ -290,10 +291,10 @@ cs: filter: label: "Search project attribute" actions: - label_enable_single: "Active in this project, click to disable" - label_disable_single: "Inactive in this project, click to enable" - label_enable_all: "Enable all" - label_disable_all: "Disable all" + label_enable_single: "Aktivní v tomto projektu, kliknutím vypnete" + label_disable_single: "Neaktivní v tomto projektu, klikněte pro povolení" + label_enable_all: "Povolit vše" + label_disable_all: "Zakázat vše" types: no_results_title_text: V současné době nejsou k dispozici žádné typy. form: @@ -304,7 +305,14 @@ cs: storage: no_results_title_text: Neexistuje žádné další diskové místo využívané tímto projektem. lists: - can_be_saved_as: "Úpravy lze uložit pouze v novém seznamu." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "Seznam upraven:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: Momentálně nejsou žádní členové součástí tohoto projektu. @@ -322,8 +330,9 @@ cs: project_roles: "Projektové role" wp_shares: "Sdílení pracovních balíčků" groups: "Skupiny" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: - title: "Remove member" + title: "Odebrat člena" will_remove_the_users_role: "This will remove the user’s role from this project." will_remove_the_groups_role: "This will remove the group role from this project." however_work_packages_shared_with_user_html: @@ -498,10 +507,10 @@ cs: no_common_statuses_exists: "Pro všechny vybrané pracovní balíčky není k dispozici žádný stav. Jejich stav nelze změnit." unsupported_for_multiple_projects: "Hromadný přesun/kopírování není podporováno pro pracovní balíčky z více projektů" sharing: - missing_workflow_waring: - title: "Pro sdílení pracovního balíčku chybí pracovní postup" - message: "Pro roli 'Pracovní balíček' není nastaven žádný pracovní postup. Bez pracovního postupu nemůže sdílení s uživatelem změnit stav pracovního balíčku. Pracovní toky mohou být zkopírovány. Vyberte typ zdroje (např. 'Úkol') a zdrojovou roli (např. 'Člen'). Pak vyberte cílové typy. Na začátku můžete vybrat všechny typy jako cíle. Nakonec vyberte roli 'Editor pracovních balíčků' jako cíl a stiskněte 'Kopírovat'. Poté, co jste tak vytvořili výchozí nastavení, vyladit pracovní postupy, jak to děláte pro každou jinou roli." - link_message: "Konfigurace pracovních postupů v administraci." + missing_workflow_warning: + title: "Workflow missing for work package sharing" + message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." + link_message: "Configure the workflows in the administration." summary: reports: category: @@ -796,6 +805,7 @@ cs: not_an_iso_date: "není platné datum. Požadovaný formát: RRRR-MM-DD." not_same_project: "nepatří do stejného projektu." odd: "musí být liché." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "nelze ověřit s přidruženým regulárním výrazem." smaller_than_or_equal_to_max_length: "musí být menší než nebo rovno maximální délce." taken: "je již použito." @@ -1009,7 +1019,7 @@ cs: estimated_hours: cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work." must_be_set_when_remaining_work_is_set: "Required when Remaining work is set." - only_values_greater_or_equal_zeroes_allowed: "Must be >= 0." + only_values_greater_or_equal_zeroes_allowed: "Musí být >= 0." format: "%{message}" remaining_hours: cant_exceed_work: "Cannot be higher than Work." @@ -1154,7 +1164,7 @@ cs: duration: added: "set to %{value}" added_html: "set to %{value}" - removed: "removed" + removed: "odstraněno" updated: "změněno z %{old_value} na %{value}" updated_html: "changed from %{old_value} to %{value}" position: @@ -1293,6 +1303,7 @@ cs: button_edit: "Upravit" button_edit_associated_wikipage: "Upravit přidruženou Wiki stránku: %{page_title}" button_expand_all: "Rozbalit vše" + button_favorite: "Přidat k oblíbeným" button_filter: "Filtr" button_generate: "Generovat" button_list: "Seznam" @@ -1320,6 +1331,7 @@ cs: button_unarchive: "Obnovit z archivu" button_uncheck_all: "Odznačit vše" button_unlock: "Odemknout" + button_unfavorite: "Odstranit z oblíbených" button_unwatch: "Přestat sledovat" button_update: "Aktualizovat" button_upgrade: "Upgradovat" @@ -1331,11 +1343,11 @@ cs: button_configure_menu_entry: "Konfigurace položky menu" button_delete_menu_entry: "Odstranit položku menu" button_view_shared_work_packages: "Zobrazit všechny sdílené pracovní balíčky" - button_manage_roles: "Manage roles" - button_remove_member: "Remove member" + button_manage_roles: "Správa rolí" + button_remove_member: "Odebrat člena" button_remove_member_and_shares: "Remove member and shares" button_revoke_work_package_shares: "Revoke work package shares" - button_revoke_access: "Revoke access" + button_revoke_access: "Odebrat přístup" button_revoke_all: "Revoke all" button_revoke_only: "Revoke only %{shared_role_name}" consent: @@ -1641,6 +1653,7 @@ cs: pdf_overview_table: "Tabulka PDF" pdf_report_with_images: "PDF report s obrázky" pdf_report: "PDF report" + pdf_gantt: "PDF Gantt" image: omitted: "Obrázek nebyl exportován." units: @@ -1788,17 +1801,6 @@ cs: mentioned: "Byli jste zmíněni v %{work_package}" responsible: "Stali jste se odpovědnými za %{work_package}" watched: "Sledujete %{work_package}" - update_info_mail: - body: > - Jsme rádi, že oznamujeme vydání OpenProject 12.0. Je to významná verze, která doufejme výrazně zlepší způsob, jakým používáte OpenProject. - Počínaje touto verzí přinášíme oznámení v aplikaci. Od nynějška budete dostávat upozornění na aktualizace pracovních balíčků přímo v OpenProject. Tato oznámení můžete označit jako přečtená, odpovědět na komentář nebo dokonce přímo upravit atributy pracovního balíčku, aniž byste opustili oznamovací centrum. - To také znamená, že již nebudeme používat e-maily pro oznámení. Myslíme si, že nové centrum oznámení je lepším místem pro prohlížení a jednání na základě těchto aktualizací. Nicméně, pokud chcete nadále dostávat aktualizace prostřednictvím e-mailu, můžete si vybrat denní připomenutí e-mailem v určitých okamžicích vašeho výběru. - Ujistěte se prosím, že jste si ověřili své nové výchozí nastavení oznámení a nastavte své předvolby pro upozornění a připomenutí e-mailem v nastavení vašeho účtu. Můžete to udělat pomocí tlačítka "Změnit nastavení e-mailu". - Doufáme, že najdete oznámení v aplikacích užitečná a že vás učiní ještě produktivnějšími. - S pozdravem, OpenProject tým - body_header: "Verze 12.0 s oznamovacím centrem" - body_subheader: "Novinky" - subject: "Důležité změny notifikací s vydáním 12.0" label_accessibility: "Přístupnost" label_account: "Účet" label_active: "Aktivní" @@ -1979,7 +1981,7 @@ cs: label_enterprise_support: "Podpora pro Enterprise edici" label_enterprise_addon: "Doplňky Enterprise Edice" label_environment: "Prostředí" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "je" label_everywhere: "všude" label_example: "Příklad" @@ -1993,7 +1995,7 @@ cs: label_expanded_click_to_collapse: "Rozbaleno. Klepnutím sbalte" label_f_hour: "%{value} hodina" label_f_hour_plural: "%{value} hodin" - label_favoured: "Oblíbené" + label_favorite: "Oblíbené" label_feed_plural: "Informační kanály (feedy)" label_feeds_access_key: "Přístupový klíč pro RSS" label_feeds_access_key_created_on: "Přístupový klíč pro RSS byl vytvořen před %{value}" @@ -2066,6 +2068,7 @@ cs: label_learn_more: "Více informací" label_less_or_equal: "<=" label_less_than_ago: "před méně jak (dny)" + label_link_url: "Odkaz URL" label_list: "Seznam" label_loading: "Načítání..." label_lock_user: "Uzamknout uživatele" @@ -2091,6 +2094,7 @@ cs: label_membership_plural: "Členství" lable_membership_added: "Člen přidán" lable_membership_updated: "Člen aktualizován" + label_menu: "Nabídka" label_menu_badge: pre_alpha: "pre-alpha" alpha: "Alfa" @@ -2181,7 +2185,7 @@ cs: label_precedes: "předchází" label_preferences: "Nastavení" label_preview: "Náhled" - label_preview_not_available: "Preview not available" + label_preview_not_available: "Náhled není k dispozici" label_previous: "Předchozí" label_previous_week: "Předchozí týden" label_principal_invite_via_email: " nebo pozvat nové uživatele e-mailem" @@ -2192,6 +2196,7 @@ cs: label_percent_complete: "% Dokončeno" label_project_activity: "Aktivita projektu" label_project_attribute_plural: "Atributy projektu" + label_project_attribute_manage_link: "Správa atributů produktu" label_project_count: "Celkový počet projektů" label_project_copy_notifications: "Během kopírování projektu odeslat notifikace e-mailem" label_project_latest: "Nejnovější projekty" @@ -2206,7 +2211,7 @@ cs: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "Úložiště souborů" label_project_storage_project_folder: "Úložiště souborů: Složky projektů" - label_projects_storage_information: "%{count} projekty používající úložiště disků %{storage}" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "Zobrazit všechny projekty - seznam" label_project_show_details: "Zobrazit detail projektu" label_project_hide_details: "Skrýt detail projektu" @@ -2263,6 +2268,7 @@ cs: label_setting_plural: "Nastavení" label_system_settings: "Nastavení systému" label_show_completed_versions: "Zobrazit dokončené verze" + label_columns: "Sloupce" label_sort: "Řadit" label_sort_by: "Seřadit podle %{value}" label_sorted_by: "seřazeno dle %{value}" @@ -2452,7 +2458,7 @@ cs: mentioned: "Byli jste zmíněni v komentáři" mentioned_by: "%{user} vás zmínil v komentáři" more_to_see: - one: "Existuje ještě %{count} pracovní balíček s notifikací." + one: "Existuje ještě 1 pracovní balíček s notifikací." few: "Existuje ještě %{count} pracovních balíčků s notifikacema." many: "Existuje ještě %{count} pracovních balíčků s notifikacema." other: "Existuje ještě %{count} pracovních balíčků s notifikacema." @@ -2810,7 +2816,7 @@ cs: member_of_group: "Řešitelova skupina" name_or_identifier: "Jméno nebo identifikátor" only_subproject_id: "Pouze podprojekt" - shared_with_user: "Sdíleno s uživatelem" + shared_with_user: "Shared with users" shared_with_me: "Sdílené se mnou" subproject_id: "Včetně podprojektu" repositories: @@ -2955,6 +2961,7 @@ cs: setting_app_subtitle: "Podtitulek aplikace" setting_app_title: "Název aplikace" setting_attachment_max_size: "Maximální velikost příloh" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Režim skenování" setting_antivirus_scan_action: "Akce s infikovaným souborem" setting_autofetch_changesets: "Automaticky načíst změny repozitáře" @@ -2994,7 +3001,7 @@ cs: setting_file_max_size_displayed: "Maximální velikost textových souborů zobrazených přímo na stránce" setting_host_name: "Název serveru" setting_invitation_expiration_days: "Platnost aktivačního e-mailu vyprší po" - setting_work_package_done_ratio: "Progress calculation" + setting_work_package_done_ratio: "Výpočet průběhu" setting_work_package_done_ratio_field: "Work-based" setting_work_package_done_ratio_status: "Status-based" setting_work_package_done_ratio_explanation_html: > @@ -3056,6 +3063,8 @@ cs: attachments: whitelist_text_html: > Definujte seznam platných přípon souborů a/nebo mime typů pro nahrané soubory.
Zadejte přípony souborů (např. %{ext_example}) nebo mime typy (např. ., %{mime_example}).
Ponechte prázdné pro nahrání jakéhokoli typu souboru. Povoleno více hodnot (jeden řádek pro každou hodnotu). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Antivirová kontrola" clamav_ping_failed: "Nepodařilo se připojit k ClamAV démonu. Zkontroluj konfiguraci a zkus to znovu." @@ -3105,8 +3114,8 @@ cs: passwords: "Hesla" project_attributes: heading: "Atributy projektu" - label_new_attribute: "Project attribute" - label_new_section: "Section" + label_new_attribute: "Atribut projektu" + label_new_section: "Sekce" label_edit_section: "Upravit název" label_section_actions: "Section actions" heading_description: "These project attributes appear in the overview page of each project. You can add new attributes, group them into sections and re-order them as you please. These attributes can be enabled or disabled but not re-ordered at a project level." @@ -3211,7 +3220,7 @@ cs: text_journal_deleted_subproject: "%{label} %{old}" text_journal_deleted_with_diff: "%{label} smazán (%{link})" text_journal_file_link_added: "%{label} odkaz na %{value} (%{storage}) přidán" - text_journal_file_link_deleted: "%{label} odkaz na %{value} (%{storage}) přidán" + text_journal_file_link_deleted: "%{label} odkaz na %{old} (%{storage}) přidán" text_journal_of: "%{label} %{value}" text_journal_set_to: "%{label} nastaven na %{value}" text_journal_set_with_diff: "%{label} nastaven (%{link})" @@ -3292,6 +3301,10 @@ cs: input_label: "Přidat sloupce" input_placeholder: "Vyberte sloupec" drag_area_label: "Správa a změna pořadí sloupců" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Další zdroje" getting_started: "Začínáme" @@ -3642,7 +3655,7 @@ cs: link: odkaz plugin_openproject_auth_plugins: name: "OpenProject Auth pluginy" - description: "Integrace poskytovatelů strategie OmniAuth pro ověřování v Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Přidá poskytovatele SAML OmniAuth do OpenProject" diff --git a/config/locales/crowdin/da.seeders.yml b/config/locales/crowdin/da.seeders.yml index 2a41ab35d83e..2aaa7199b842 100644 --- a/config/locales/crowdin/da.seeders.yml +++ b/config/locales/crowdin/da.seeders.yml @@ -251,6 +251,21 @@ da: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/da.yml b/config/locales/crowdin/da.yml index f4d6ac6739a9..6cde961f7f4e 100644 --- a/config/locales/crowdin/da.yml +++ b/config/locales/crowdin/da.yml @@ -262,6 +262,7 @@ da: lists: active: "Active projects" my: "Mine projekter" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -302,7 +303,14 @@ da: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: There are currently no members part of this project. @@ -320,6 +328,7 @@ da: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Grupper" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -482,7 +491,7 @@ da: no_common_statuses_exists: "There is no status available for all selected work packages. Their status cannot be changed." unsupported_for_multiple_projects: "Bulk move/copy is not supported for work packages from multiple projects" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -780,6 +789,7 @@ da: not_an_iso_date: "is not a valid date. Required format: YYYY-MM-DD." not_same_project: "hører ikke til samme projekt." odd: "skal være ulige." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "could not be validated with the associated regular expression." smaller_than_or_equal_to_max_length: "skal være mindre end eller lig den maksimale længde." taken: "er allerede taget." @@ -1261,6 +1271,7 @@ da: button_edit: "Rediger" button_edit_associated_wikipage: "Rediger tilknyttet wiki-side: %{page_title}" button_expand_all: "Fold alle ud" + button_favorite: "Add to favorites" button_filter: "Filter" button_generate: "Generér" button_list: "Liste" @@ -1288,6 +1299,7 @@ da: button_unarchive: "Udpak" button_uncheck_all: "Fjern alle markeringer" button_unlock: "Ophæv spærring" + button_unfavorite: "Remove from favorites" button_unwatch: "Stands tilsyn" button_update: "Opdater" button_upgrade: "Upgrade" @@ -1573,6 +1585,7 @@ da: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1720,17 +1733,6 @@ da: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "Nyheder" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Accessibility" label_account: "Konto" label_active: "Aktiv" @@ -1911,7 +1913,7 @@ da: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Miljø" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "er" label_everywhere: "everywhere" label_example: "Eksempel" @@ -1925,7 +1927,7 @@ da: label_expanded_click_to_collapse: "Expanded. Click to collapse" label_f_hour: "%{value} time" label_f_hour_plural: "%{value} timer" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Indlæg" label_feeds_access_key: "RSS adgangsnøgle" label_feeds_access_key_created_on: "RSS adgangsnøgle lavet for %{value} siden" @@ -1998,6 +2000,7 @@ da: label_learn_more: "Få mere at vide" label_less_or_equal: "<=" label_less_than_ago: "mindre end dage siden" + label_link_url: "Link (URL)" label_list: "Liste" label_loading: "Henter..." label_lock_user: "Lock user" @@ -2023,6 +2026,7 @@ da: label_membership_plural: "Memberships" lable_membership_added: "Medlem tilføjet" lable_membership_updated: "Medlem opdateret" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2124,6 +2128,7 @@ da: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Samlet antal projekter" label_project_copy_notifications: "Adviser via e-mail under kopiering af projekt" label_project_latest: "Seneste projekter" @@ -2138,7 +2143,7 @@ da: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projekter forbruger %{storage} disklagerplads" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "Se alle projekter" label_project_show_details: "Show project details" label_project_hide_details: "Hide project details" @@ -2195,6 +2200,7 @@ da: label_setting_plural: "Indstillinger" label_system_settings: "System settings" label_show_completed_versions: "Vis færdige versioner" + label_columns: "Kolonner" label_sort: "Sorter" label_sort_by: "Sorter efter %{value}" label_sorted_by: "er sorteret efter %{value}" @@ -2739,7 +2745,7 @@ da: member_of_group: "Tildeltes gruppe" name_or_identifier: "Name or identifier" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2882,6 +2888,7 @@ da: setting_app_subtitle: "Appens undertitel" setting_app_title: "Appens titel" setting_attachment_max_size: "Maksimal størrelse for vedhæftning" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Autohent repositorie-ændringer" @@ -2983,6 +2990,8 @@ da: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3219,6 +3228,10 @@ da: input_label: "Add columns" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Additional resources" getting_started: "Getting started" @@ -3566,7 +3579,7 @@ da: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/de.seeders.yml b/config/locales/crowdin/de.seeders.yml index 100b11d94f1c..ecbfc3c16a0c 100644 --- a/config/locales/crowdin/de.seeders.yml +++ b/config/locales/crowdin/de.seeders.yml @@ -251,6 +251,21 @@ de: * [ ] Noch mehr Bier item_4: subject: Projektende + wiki: | + _In diesem Wiki können Sie gemeinsam Seiten und Unterseiten erstellen und bearbeiten um ein Projekt-Wiki zu erstellen. + + **Sie können:** + + * Text und Bilder einfügen, auch durch Kopieren und Einfügen aus anderen Dokumenten + * Eine Seitenhierarchie mit übergeordneten Seiten erstellen + * Wiki-Seiten in das Projektmenü einbinden + * Makros verwenden, um z. B. Inhaltsverzeichnisse, Arbeitspaketlisten oder Gliederungspläne einzubindenz.B. Inhaltsverzeichnisse, Arbeitspaketlisten oder Gantt-Diagramme + * Wiki-Seiten in andere Textfelder einbinden, z.B. Projektübersichtsseite + * Links zu anderen Dokumenten einbinden + * Änderungshistorie anzeigen + * Als Markdown anzeigen + + Weitere Informationen: [https://www.openproject.org/de/docs/nutzungshandbuch/wiki/](https://www.openproject.org/de/docs/nutzungshandbuch/wiki/) scrum-project: name: Scrum-Projekt status_explanation: Alle Aufgaben sind im Zeitplan. Die Beteiligten kennen ihre Aufgaben. Das System ist komplett eingerichtet. diff --git a/config/locales/crowdin/de.yml b/config/locales/crowdin/de.yml index 5a70292b9f87..35a536e09531 100644 --- a/config/locales/crowdin/de.yml +++ b/config/locales/crowdin/de.yml @@ -261,6 +261,7 @@ de: lists: active: "Aktive Projekte" my: "Meine Projekte" + favored: "Favorisierte Projekte" archived: "Archivierte Projekte" my_private: "Meine privaten Projektlisten" new: @@ -301,7 +302,14 @@ de: storage: no_results_title_text: Durch dieses Projekt wird kein zusätzlicher erfasster Speicherplatz verbraucht. lists: - can_be_saved_as: "Die Änderungen können nur in einer neuen Liste gespeichert werden." + create: + success: "Die geänderte Liste wurde als neue Liste gespeichert" + failure: "Die geänderte Liste kann nicht gespeichert werden: %{errors}" + update: + success: "Die geänderte Liste wurde gespeichert" + failure: "Die geänderte Liste kann nicht gespeichert werden: %{errors}" + can_be_saved: "Liste geändert:" + can_be_saved_as: "Die Änderungen können nur in einer neuen Liste gespeichert werden:" members: index: no_results_title_text: Zur Zeit hat dieses Projekt keine Mitglieder. @@ -319,6 +327,7 @@ de: project_roles: "Projektrollen" wp_shares: "Arbeitspaket-Freigaben" groups: "Gruppen" + no_modify_on_shared: "Sie können die freigegebenen Mitgliedschaften derzeit nicht über die Mitgliederseite ändern oder entfernen. Verwenden Sie stattdessen bitte das Teilen-Fenster." delete_member_dialog: title: "Mitglied entfernen" will_remove_the_users_role: "Dadurch wird die Rolle des Benutzers aus diesem Projekt entfernt." @@ -479,7 +488,7 @@ de: no_common_statuses_exists: "Es gibt keine gemeinsamen Status für die ausgewählten Arbeitspakete. Ihr Status kann daher nicht verändert werden." unsupported_for_multiple_projects: "Verschieben / Kopieren nicht unterstützt für Arbeitspakete in verschiedenen Projekten" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Der Workflow für das Teilen von Arbeitspaketen fehlt" message: "Es ist kein Workflow für die Rolle ‚Work package editor‘ konfiguriert. Nur mit einem solchen Workflow können Benutzer, mit denen ein Arbeitspaket geteilt wurde, den Status des Arbeitspakets ändern. Workflows lassen sich einfach kopieren. Wählen Sie dazu einen Quell-Typ (z. B. ‚Task‘) und eine Quell-Rolle (z. B. 'Member') aus. Wählen Sie dann die Ziel-Typen aus. Als ersten Schritt können Sie alle Typen als Ziel-Typen auswählen. Danach wählen Sie die Ziel-Rolle ‚Work package editor‘ aus und drücken Sie auf den Knopf ‚Kopieren‘. Nachdem Sie hiermit eine Grundlage geschaffen haben, können Sie danach diese Workflows weiter anpassen, ganz genau wie Sie es für jede andere Rolle bereits getan haben." link_message: "Konfigurieren Sie die Workflows in der Administration." @@ -744,7 +753,7 @@ de: confirmation: "stimmt nicht mit %{attribute} überein." could_not_be_copied: "%{dependency} konnte nicht (vollständig) kopiert werden." does_not_exist: "existiert nicht." - error_enterprise_only: "ist nur in OpenProject Enterprise on-premises verfügbar" + error_enterprise_only: "%{action} ist nur in OpenProject Enterprise on-premises verfügbar" error_unauthorized: "kann nicht zugegriffen werden." error_readonly: "wurde versucht zu beschreiben, ist aber nicht beschreibbar." error_conflict: "Die Informationen wurde zwischenzeitlich durch andere Benutzer geändert." @@ -777,6 +786,7 @@ de: not_an_iso_date: "ist kein gültiges Datum - Erwartetes Format: YYY-MM-DD." not_same_project: "gehört nicht zum selben Projekt." odd: "muss ungerade sein." + regex_match_failed: "stimmt nicht mit dem regulären Ausdruck %{expression} überein." regex_invalid: "konnte nicht mit dem zugehörigen regulären Ausdruck überprüft werden." smaller_than_or_equal_to_max_length: "muss kleiner als oder gleich der maximalen Länge sein." taken: "ist bereits vergeben." @@ -1108,7 +1118,7 @@ de: parent_no_longer: "Nicht mehr Unterprojekt von" time_entry: hour: - one: "Eine Stunde" + one: "%{count} Stunde" other: "%{count} Stunden" hour_html: one: "%{count} Stunde" @@ -1258,6 +1268,7 @@ de: button_edit: "Bearbeiten" button_edit_associated_wikipage: "Zugehörige Wikiseite bearbeiten: %{page_title}" button_expand_all: "Alle ausklappen" + button_favorite: "Zu Favoriten hinzufügen" button_filter: "Filter" button_generate: "Generieren" button_list: "Liste" @@ -1285,6 +1296,7 @@ de: button_unarchive: "Entarchivieren" button_uncheck_all: "Alle abwählen" button_unlock: "Entsperren" + button_unfavorite: "Aus Favoriten entfernen" button_unwatch: "Nicht beobachten" button_update: "Aktualisieren" button_upgrade: "Upgraden" @@ -1570,6 +1582,7 @@ de: pdf_overview_table: "PDF-Tabelle" pdf_report_with_images: "PDF-Bericht mit Bildern" pdf_report: "PDF-Bericht" + pdf_gantt: "PDF Gantt" image: omitted: "Bild nicht exportiert." units: @@ -1652,7 +1665,7 @@ de: progress_calculation_adjusted: >- Die Fortschrittsberechnung wurde automatisch durch das Systemupdate angepasst. totals_removed_from_childless_work_packages: >- - Work and progress totals automatically removed for non-parent work packages with version update. This is a maintenance task and can be safely ignored. + Arbeits- und Fortschrittssummen werden bei der Versionsaktualisierung automatisch für nicht übergeordnete Arbeitspakete entfernt. Diese Änderung entstand durch ein Upgrade und kann ignoriert werden. links: configuration_guide: "Konfigurationsanleitung" get_in_touch: "Sie haben Fragen? Nehmen Sie Kontakt mit uns auf." @@ -1717,17 +1730,6 @@ de: mentioned: "Sie wurden in %{work_package} erwähnt" responsible: "Sie sind für %{work_package} verantwortlich" watched: "Du beobachtest %{work_package}" - update_info_mail: - body: > - Mit Spannung kündigen wir die Veröffentlichung von OpenProject 12.0 an. Es ist eine wichtige Aktualisierung, die Ihre Arbeit mit OpenProject erheblich verbessern wird. - In dieser Version führen wir eine Benachrichtigungszentrale ein. Von nun an erhalten Sie Benachrichtigungen für Aktualisierungen zu Arbeitspaketen direkt in OpenProject. Sie können diese Benachrichtigungen als gelesen markieren, auf einen Kommentar antworten und direkt die Attribute des Arbeitspakets ändern, ohne das Benachrichtigungszentrum zu verlassen. - Das bedeutet auch, dass wir weniger E-Mails für Benachrichtigungen verwenden. Das Benachrichtigungszentrum wird ein besserer Ort werden, um diese Updates anzusehen und zu bearbeiten. Wenn Sie dennoch weiterhin Updates per E-Mail erhalten möchten, können Sie zu wählbaren Zeiten E-Mail-Erinnerungen erhalten. - Sie können Ihre Einstellungen für Benachrichtigungen und E-Mail-Erinnerungen über Ihre Kontoeinstellungen festlegen oder diese unverändert lassen, um die Standardeinstellungen beizubehalten. Sie können dies über die Schaltfläche „E-Mail-Einstellungen ändern“ unten tun. - Wir hoffen, dass Sie das Benachrichtigungszentrum nützlich finden und dass es Ihre Arbeit mit OpenProject produktiver macht. - Mit freundlichen Grüßen Das OpenProject Team - body_header: "Version 12.0 mit Benachrichtigungszentrum" - body_subheader: "Neuigkeiten" - subject: "Wichtige Änderungen an Benachrichtigungen mit der Veröffentlichung von 12.0" label_accessibility: "Barrierefreiheit" label_account: "Konto" label_active: "Aktiv" @@ -1908,7 +1910,7 @@ de: label_enterprise_support: "Enterprise Support" label_enterprise_addon: "Enterprise Add-on" label_environment: "Umgebung" - label_estimates_and_time: "Schätzungen und Fortschritt" + label_estimates_and_progress: "Schätzungen und Fortschritt" label_equals: "ist" label_everywhere: "überall" label_example: "Beispiel" @@ -1922,7 +1924,7 @@ de: label_expanded_click_to_collapse: "Erweitert. Klicken Sie zum Ausblenden" label_f_hour: "%{value} Stunde" label_f_hour_plural: "%{value} Stunden" - label_favoured: "Favorisiert" + label_favorite: "Favorit" label_feed_plural: "Feeds" label_feeds_access_key: "RSS-Zugriffsschlüssel" label_feeds_access_key_created_on: "Atom-Zugriffsschlüssel vor %{value} erstellt" @@ -1995,6 +1997,7 @@ de: label_learn_more: "Mehr erfahren" label_less_or_equal: "<=" label_less_than_ago: "vor weniger als (Tage)" + label_link_url: "Link (URL)" label_list: "Liste" label_loading: "Lade..." label_lock_user: "Benutzer sperren" @@ -2020,6 +2023,7 @@ de: label_membership_plural: "Mitgliedschaften" lable_membership_added: "Mitglied hinzugefügt" lable_membership_updated: "Mitglied aktualisiert" + label_menu: "Menü" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2121,6 +2125,7 @@ de: label_percent_complete: "% abgeschlossen" label_project_activity: "Projektaktivität" label_project_attribute_plural: "Projekt-Attribute" + label_project_attribute_manage_link: "Projektattribute verwalten" label_project_count: "Gesamtzahl der Projekte" label_project_copy_notifications: "Sende Mailbenachrichtigungen beim Kopieren des Projekts." label_project_latest: "Neueste Projekte" @@ -2135,7 +2140,7 @@ de: label_project_attributes_settings: "Einstellungen für Projektattribute" label_project_storage_plural: "Dateispeicher" label_project_storage_project_folder: "Dateispeicher: Projektordner" - label_projects_storage_information: "%{count} Projekte verbrauchen insgesamt %{storage} Speicherplatz" + label_projects_disk_usage_information: "%{count} Projekte, die %{used_disk_space} Speicherplatz belegen" label_project_view_all: "Alle Projekte anzeigen" label_project_show_details: "Projektdetails anzeigen" label_project_hide_details: "Projektdetails verstecken" @@ -2192,6 +2197,7 @@ de: label_setting_plural: "Einstellungen" label_system_settings: "Systemkonfiguration" label_show_completed_versions: "Abgeschlossene Versionen anzeigen" + label_columns: "Spalten" label_sort: "Sortierung" label_sort_by: "Sortiere nach %{value}" label_sorted_by: "sortiert nach %{value}" @@ -2736,7 +2742,7 @@ de: member_of_group: "Gruppe der zugewiesenen Person" name_or_identifier: "Name oder Kennung" only_subproject_id: "Nur Unterprojekt" - shared_with_user: "Mit Benutzer geteilt" + shared_with_user: "Geteilt mit Benutzern" shared_with_me: "Mit mir geteilt" subproject_id: "Einschließlich Unterprojekt" repositories: @@ -2881,6 +2887,7 @@ de: setting_app_subtitle: "Applikations-Untertitel" setting_app_title: "Applikations-Titel" setting_attachment_max_size: "Max. Dateigröße" + setting_show_work_package_attachments: "Anhänge standardmäßig auf dem Tab Dateien anzeigen" setting_antivirus_scan_mode: "Scanmodus" setting_antivirus_scan_action: "Aktion für infizierte Datei" setting_autofetch_changesets: "Automatisches Abrufen von Projektarchiv-Änderungen" @@ -2982,6 +2989,8 @@ de: attachments: whitelist_text_html: > Legen Sie eine Liste gültiger Dateierweiterungen und/oder Mime-Typen für hochgeladene Dateien fest.
Dateierweiterungen (z. B. %{ext_example}) oder Mime-Typen (z. ., %{mime_example}).
Lassen Sie diese Liste leer, um das Hochladen beliebiger Dateitypen zu erlauben. Mehrere Werte erlaubt (eine Zeile pro Wert). + show_work_package_attachments: > + Wenn Sie diese Option deaktivieren, wird die Liste der Anhänge auf dem Dateien Tab von Arbeitspaketen für neue Projekte ausgeblendet. Die Dateien, die in der Beschreibung eines Arbeitspakets angehängt sind, werden weiterhin in den internen Speicher für Anhänge hochgeladen. antivirus: title: "Virenscan" clamav_ping_failed: "Die Verbindung zum ClamAV-Daemon konnte nicht hergestellt werden. Überprüfen Sie die Konfiguration und versuchen Sie es erneut." @@ -3218,6 +3227,10 @@ de: input_label: "Spalten hinzufügen" input_placeholder: "Spalte auswählen" drag_area_label: "Spalten verwalten und neu anordnen" + sort_by: + automatic: + heading: "Automatisch" + description: "Ordnen Sie %{plural} nach einem oder mehreren Sortierkriterien. Die vorherige Sortierung geht dabei verloren." top_menu: additional_resources: "Weitere Ressourcen" getting_started: "Erste Schritte" @@ -3564,7 +3577,7 @@ de: link: Link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration von externen Authentifizierungsanbietern in Openproject." + description: "Integration von externen Authentifizierungsanbietern in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign An" description: "Fügt den OmniAuth SAML-Anbieter zu OpenProject hinzu" diff --git a/config/locales/crowdin/el.seeders.yml b/config/locales/crowdin/el.seeders.yml index 651da3f1aacd..84f469a53fe9 100644 --- a/config/locales/crowdin/el.seeders.yml +++ b/config/locales/crowdin/el.seeders.yml @@ -251,6 +251,21 @@ el: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/el.yml b/config/locales/crowdin/el.yml index 252445839abe..5432d6581750 100644 --- a/config/locales/crowdin/el.yml +++ b/config/locales/crowdin/el.yml @@ -260,6 +260,7 @@ el: lists: active: "Active projects" my: "Τα έργα μου" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -300,7 +301,14 @@ el: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: Αυτή τη στιγμή δεν υπάρχουν μέλη που να αποτελούν μέρος αυτού του έργου. @@ -318,6 +326,7 @@ el: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Ομάδες" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -480,7 +489,7 @@ el: no_common_statuses_exists: "Δεν υπάρχει διαθέσιμη κατάσταση για όλα τα επιλεγμένα πακέτα εργασίας. Η κατάσταση τους δεν μπορεί να αλλάξει." unsupported_for_multiple_projects: "Η μαζική μετακίνηση/αντιγραφή δεν υποστηρίζεται για πακέτα εργασίας από πολλά έργα" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -778,6 +787,7 @@ el: not_an_iso_date: "δεν είναι έγκυρη ημερομηνία. Απαιτούμενη μορφοποίηση: ΕΕΕΕ-ΜΜ-ΗΗ." not_same_project: "δεν ανήκει στο ίδιο έργο." odd: "πρέπει να είναι μονός." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "δεν ήταν δυνατή η επικύρωση με τη συσχετιζόμενη κανονική έκφραση." smaller_than_or_equal_to_max_length: "πρέπει να είναι μικρότερο ή ίσο με το μέγιστο μήκος." taken: "έχει ήδη κατοχυρωθεί." @@ -1259,6 +1269,7 @@ el: button_edit: "Επεξεργασία" button_edit_associated_wikipage: "Επεξεργασία της συσχετιζόμενης σελίδας Wiki: %{page_title}" button_expand_all: "Ανάπτυξη όλων" + button_favorite: "Add to favorites" button_filter: "Φίλτρο" button_generate: "Παραγωγή" button_list: "Προβολή λίστας" @@ -1286,6 +1297,7 @@ el: button_unarchive: "Αναίρεση αρχειοθέτησης" button_uncheck_all: "Αποεπιλογή όλων" button_unlock: "Ξεκλείδωμα" + button_unfavorite: "Remove from favorites" button_unwatch: "Αναίρεση παρακολούθησης" button_update: "Ενημέρωση" button_upgrade: "Αναβάθμιση" @@ -1571,6 +1583,7 @@ el: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Η εικόνα δεν εξήχθη." units: @@ -1718,17 +1731,6 @@ el: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "Νέα" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Προσβασιμότητα" label_account: "Λογαριασμός" label_active: "Ενεργό" @@ -1909,7 +1911,7 @@ el: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Περιβάλλον" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "είναι" label_everywhere: "παντού" label_example: "Παράδειγμα" @@ -1923,7 +1925,7 @@ el: label_expanded_click_to_collapse: "Επεκταμένο. Πατήστε για σύμπτυξη" label_f_hour: "%{value} ώρα" label_f_hour_plural: "%{value} ώρες" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Τροφοδοσίες" label_feeds_access_key: "Κλειδί πρόσβασης RSS" label_feeds_access_key_created_on: "Tο κλειδί πρόσβασης RSS δημιουργήθηκε πριν από %{value}" @@ -1996,6 +1998,7 @@ el: label_learn_more: "Μάθετε περισσότερα" label_less_or_equal: "<=" label_less_than_ago: "σε λιγότερο από ημέρες πριν" + label_link_url: "Link (URL)" label_list: "Προβολή λίστας" label_loading: "Φόρτωση..." label_lock_user: "Κλείδωμα χρήστη" @@ -2021,6 +2024,7 @@ el: label_membership_plural: "Memberships" lable_membership_added: "Το μέλος προστέθηκε" lable_membership_updated: "Το μέλος ενημερώθηκε" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2122,6 +2126,7 @@ el: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Συνολικός αριθμός έργων" label_project_copy_notifications: "Αποστολή ειδοποιήσεων με email κατά την διάρκεια της αντιγραφής του έργου" label_project_latest: "Τελευταία έργα" @@ -2136,7 +2141,7 @@ el: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} έργα χρησιμοποιούν %{storage} από τον χώρο αποθήκευσης του δίσκου" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "Εμφάνιση όλων των έργων" label_project_show_details: "Εμφάνιση λεπτομερειών έργου" label_project_hide_details: "Απόκρυψη λεπτομερειών έργου" @@ -2193,6 +2198,7 @@ el: label_setting_plural: "Ρυθμίσεις" label_system_settings: "Ρυθμίσεις συστήματος" label_show_completed_versions: "Εμφάνιση ολοκληρωμένων εκδόσεων" + label_columns: "Στήλες" label_sort: "Ταξινόμηση" label_sort_by: "Ταξινόμηση κατά %{value}" label_sorted_by: "ταξινομημένα κατά %{value}" @@ -2736,7 +2742,7 @@ el: member_of_group: "Ομάδα ανάθεσης" name_or_identifier: "Όνομα ή αναγνωριστικό" only_subproject_id: "Μόνο υποέργο" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2881,6 +2887,7 @@ el: setting_app_subtitle: "Υπότιτλος εφαρμογής" setting_app_title: "Τίτλος εφαρμογής" setting_attachment_max_size: "Μέγιστο μέγεθος συνημμένων" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Αυτόματη ανάκτηση αλλαγών αποθετηρίου" @@ -2982,6 +2989,8 @@ el: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3218,6 +3227,10 @@ el: input_label: "Προσθέστε στήλη" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Επιπλέον πόροι" getting_started: "Ξεκινώντας" @@ -3564,7 +3577,7 @@ el: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/eo.seeders.yml b/config/locales/crowdin/eo.seeders.yml index 562d70ae8669..8b399a618bc9 100644 --- a/config/locales/crowdin/eo.seeders.yml +++ b/config/locales/crowdin/eo.seeders.yml @@ -251,6 +251,21 @@ eo: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/eo.yml b/config/locales/crowdin/eo.yml index a8528437ad2b..cbc7520bda41 100644 --- a/config/locales/crowdin/eo.yml +++ b/config/locales/crowdin/eo.yml @@ -264,6 +264,7 @@ eo: lists: active: "Active projects" my: "Miaj projektoj" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ eo: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: Nun estas neniu membro en la projekto. @@ -322,6 +330,7 @@ eo: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Grupoj" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -484,7 +493,7 @@ eo: no_common_statuses_exists: "There is no status available for all selected work packages. Their status cannot be changed." unsupported_for_multiple_projects: "Bulk move/copy is not supported for work packages from multiple projects" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -782,6 +791,7 @@ eo: not_an_iso_date: "Ĝi ne estas valida dato. Deviga datumo estas: JJJJ-MM-TT." not_same_project: "doesn't belong to the same project." odd: "devas esti nepara." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "could not be validated with the associated regular expression." smaller_than_or_equal_to_max_length: "must be smaller than or equal to maximum length." taken: "jam prenita." @@ -1263,6 +1273,7 @@ eo: button_edit: "Redakti" button_edit_associated_wikipage: "Redakti ligitan vikipaĝon: %{page_title}" button_expand_all: "Etendi ĉion" + button_favorite: "Add to favorites" button_filter: "Filtrilo" button_generate: "Krei" button_list: "Listo" @@ -1290,6 +1301,7 @@ eo: button_unarchive: "Elarkivigi" button_uncheck_all: "Malelekti ĉion" button_unlock: "Malŝlosi" + button_unfavorite: "Remove from favorites" button_unwatch: "Malatenti" button_update: "Ĝisdatigi" button_upgrade: "Ppromocii" @@ -1575,6 +1587,7 @@ eo: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Bildo ne eksportita." units: @@ -1722,17 +1735,6 @@ eo: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "Novaĵoj" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Alirebleco" label_account: "Konto" label_active: "Aktiva" @@ -1913,7 +1915,7 @@ eo: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Medio" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "estas" label_everywhere: "everywhere" label_example: "Ekzemplo" @@ -1927,7 +1929,7 @@ eo: label_expanded_click_to_collapse: "Etendita. Klaki por maletendi" label_f_hour: "%{value} horoj" label_f_hour_plural: "%{value} hours" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Feeds" label_feeds_access_key: "RSS access key" label_feeds_access_key_created_on: "RSS access key created %{value} ago" @@ -2000,6 +2002,7 @@ eo: label_learn_more: "Learn more" label_less_or_equal: "<=" label_less_than_ago: "less than days ago" + label_link_url: "Link (URL)" label_list: "Listo" label_loading: "Loading..." label_lock_user: "Lock user" @@ -2025,6 +2028,7 @@ eo: label_membership_plural: "Memberships" lable_membership_added: "Member added" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2126,6 +2130,7 @@ eo: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Totala kvanto da projektoj" label_project_copy_notifications: "Sendi retpoŝtajn sciigojn dum la projekta kopiado" label_project_latest: "Lastaj projektoj" @@ -2140,7 +2145,7 @@ eo: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projektoj uzas %{storage} da diskospaco" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "Vidi ĉiujn projektojn" label_project_show_details: "Montri projektajn detalojn" label_project_hide_details: "Kaŝi projektajn detalojn" @@ -2197,6 +2202,7 @@ eo: label_setting_plural: "Agordoj" label_system_settings: "System settings" label_show_completed_versions: "Show completed versions" + label_columns: "Kolumnoj" label_sort: "Ordigi" label_sort_by: "Sort by %{value}" label_sorted_by: "sorted by %{value}" @@ -2741,7 +2747,7 @@ eo: member_of_group: "Assignee's group" name_or_identifier: "Name or identifier" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2886,6 +2892,7 @@ eo: setting_app_subtitle: "Application subtitle" setting_app_title: "Application title" setting_attachment_max_size: "Attachment max. size" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Autofetch repository changes" @@ -2987,6 +2994,8 @@ eo: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3223,6 +3232,10 @@ eo: input_label: "Aldoni kolumnojn" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Additional resources" getting_started: "Getting started" @@ -3570,7 +3583,7 @@ eo: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/es.seeders.yml b/config/locales/crowdin/es.seeders.yml index c10006ae4207..772957209c0a 100644 --- a/config/locales/crowdin/es.seeders.yml +++ b/config/locales/crowdin/es.seeders.yml @@ -251,6 +251,21 @@ es: * [ ] Más cerveza item_4: subject: Fin del proyecto + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Proyecto Scrum status_explanation: Todas las tareas se ajustan al calendario. Las personas implicadas conocen sus tareas. El sistema está completamente configurado. diff --git a/config/locales/crowdin/es.yml b/config/locales/crowdin/es.yml index 47a20e3f95eb..7f64de7e7ab7 100644 --- a/config/locales/crowdin/es.yml +++ b/config/locales/crowdin/es.yml @@ -261,6 +261,7 @@ es: lists: active: "Proyectos activos" my: "Mis proyectos" + favored: "Proyectos favoritos" archived: "Proyectos archivados" my_private: "Mis listas de proyectos privados" new: @@ -301,7 +302,14 @@ es: storage: no_results_title_text: No se ha registrado el uso de espacio en disco adicional por este proyecto. lists: - can_be_saved_as: "Las modificaciones solo pueden guardarse en una lista nueva." + create: + success: "La lista modificada se ha guardado como una nueva lista" + failure: "La lista modificada no se puede guardar: %{errors}" + update: + success: "La lista modificada se ha guardado" + failure: "La lista modificada no se puede guardar: %{errors}" + can_be_saved: "Lista modificada:" + can_be_saved_as: "Las modificaciones solo pueden guardarse en una lista nueva:" members: index: no_results_title_text: Actualmente no hay miembros que formen parte de este proyecto. @@ -319,6 +327,7 @@ es: project_roles: "Roles de proyecto" wp_shares: "Comparticiones de paquete de trabajo" groups: "Grupos" + no_modify_on_shared: "Actualmente no puede modificar o eliminar membresías compartidas a través de la página de miembros. Utilice el diálogo para compartir para completar esta acción." delete_member_dialog: title: "Borrar miembro" will_remove_the_users_role: "Esto borrará el rol del usuario de este proyecto." @@ -481,7 +490,7 @@ es: no_common_statuses_exists: "No hay ningún estado disponible para todos los paquetes de trabajo seleccionados. Su estado no se puede cambiar." unsupported_for_multiple_projects: "Mover o copiar por lotes no esta soportado para paquetes de trabajo de múltiples proyectos" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Falta el flujo de trabajo para compartir paquetes de trabajo" message: "Ningún flujo de trabajo está configurado para el rol 'Editor de paquetes de trabajo'. Sin un flujo de trabajo, el usuario compartido no puede alterar el estado del paquete de trabajo. Los flujos de trabajo pueden ser copiados. Seleccione un tipo de base (por ejemplo, 'Tarea') y el rol de base (por ejemplo, 'Miembro'). Luego seleccione los tipos de destino. Para empezar, puede seleccionar todos los tipos como objetivos. Por último, seleccione el papel de \"Editor de paquetes de trabajo\" como objetivo y presione \"Copiar\". Después de haber creado así los valores predeterminados, ajuste los flujos de trabajo como lo hace para cualquier otro rol." link_message: "Configure un flujo de trabajo en la administración." @@ -779,6 +788,7 @@ es: not_an_iso_date: "no es una fecha válida. Requiere formato: AAAA-MM-DD." not_same_project: "no pertenecen a un mismo proyecto." odd: "debe ser impar." + regex_match_failed: "no coincide con la expresión regular %{expression}." regex_invalid: "no se pudo validar con la expresión regular asociada." smaller_than_or_equal_to_max_length: "Debe ser menor o igual que el tamaño maximo." taken: "Ya se ha tomado." @@ -1260,6 +1270,7 @@ es: button_edit: "Editar" button_edit_associated_wikipage: "Editar página Wiki asociada: %{page_title}" button_expand_all: "Expandir todos" + button_favorite: "Añadir a favoritos" button_filter: "Filtro" button_generate: "Generar" button_list: "Lista" @@ -1287,6 +1298,7 @@ es: button_unarchive: "Desarchivar" button_uncheck_all: "Deseleccionar todos" button_unlock: "Desbloquear" + button_unfavorite: "Eliminar de favoritos" button_unwatch: "No controlar más" button_update: "Actualizar" button_upgrade: "Mejorar" @@ -1572,6 +1584,7 @@ es: pdf_overview_table: "Tabla PDF" pdf_report_with_images: "Informe PDF con imágenes" pdf_report: "Informe PDF" + pdf_gantt: "PDF Gantt" image: omitted: "Imagen no exportada." units: @@ -1654,7 +1667,7 @@ es: progress_calculation_adjusted: >- Cálculo de progreso automático ajustado con la actualización de versión. totals_removed_from_childless_work_packages: >- - Work and progress totals automatically removed for non-parent work packages with version update. This is a maintenance task and can be safely ignored. + Los totales de trabajo y progreso se eliminan automáticamente para los paquetes de trabajo no padres con la actualización de la versión. Se trata de una tarea de mantenimiento y puede ignorarse con seguridad. links: configuration_guide: "Guía de configuración" get_in_touch: "¿Tiene alguna pregunta? Póngase en contacto con nosotros." @@ -1719,17 +1732,6 @@ es: mentioned: "Has sido mencionado en %{work_package}" responsible: "Ahora es responsable de %{work_package}" watched: "Estás viendo a %{work_package}" - update_info_mail: - body: > - Nos complace anunciar el lanzamiento de la versión OpenProject 12.0. Esta, es una nueva versión con muchos cambios que esperamos simplifiquen y mejoren en gran medida la forma en que usa OpenProject. - Para empezar, con esta versión introducimos las notificaciones dentro de la aplicación. Des de ahora, va a recibir notificaciones por actualizaciones en los paquetes de trabajo directamente en OpenProject. Puede marcar estas notificaciones como leídas, contestar a comentarios e incluso modificar los atributos de un paquete de trabajo sin salir del centro de notificaciones. - Esto también supone que no se van a usar más los correos electrónicos para este tipo de notificaciones. Creemos que el centro de notificaciones es el mejor sitio para ver y realizar cambios sobre estas actualizaciones. No obstante, si desea continuar recibiendo notificaciones vía correo electrónico, puede seleccionar recibir correos recordatorios diarios en horas concretas de su elección. - Por favor, asegúrese de validar sus nuevas configuraciones de notificaciones que se han reseteado por defecto y a posteriori puede crear y modificar sus preferencias tanto para las notificaciones dentro de la aplicación como para los recordatorios vía correo electrónico en la configuración de su cuenta. También puede hacer estos cambios usando el botón abajo "Cambiar configuración de correo electrónico". - Esperamos que las nuevas notificaciones dentro la aplicación le sean útiles y le ayuden a ser aún más productivo. - Sinceramente, El equipo de OpenProject - body_header: "Versión 12.0 con el Centro de notificaciones" - body_subheader: "Noticias" - subject: "Cambios importantes en las notificaciones con el lanzamiento de la versión 12.0" label_accessibility: "Accesibilidad" label_account: "Cuenta" label_active: "Activo" @@ -1910,7 +1912,7 @@ es: label_enterprise_support: "Soporte empresarial" label_enterprise_addon: "Extensión Enterprise" label_environment: "Entorno" - label_estimates_and_time: "Estimaciones y progreso" + label_estimates_and_progress: "Estimaciones y progreso" label_equals: "es" label_everywhere: "todo" label_example: "Ejemplo" @@ -1924,7 +1926,7 @@ es: label_expanded_click_to_collapse: "Expandido. Haga clic para contraer" label_f_hour: "%{value} hora" label_f_hour_plural: "%{value} horas" - label_favoured: "Favorito" + label_favorite: "Favorito" label_feed_plural: "Flujos" label_feeds_access_key: "Código de acceso RSS" label_feeds_access_key_created_on: "Código de acceso RSS creado hace %{value}" @@ -1997,6 +1999,7 @@ es: label_learn_more: "Más información" label_less_or_equal: "<=" label_less_than_ago: "menos que hace días" + label_link_url: "Enlace (URL)" label_list: "Lista" label_loading: "Cargando..." label_lock_user: "Bloquear usuario" @@ -2022,6 +2025,7 @@ es: label_membership_plural: "Afiliaciones" lable_membership_added: "Miembro añadido" lable_membership_updated: "Miembro actualizado" + label_menu: "Menú" label_menu_badge: pre_alpha: "pre-alfa" alpha: "alfa" @@ -2123,6 +2127,7 @@ es: label_percent_complete: "% compleado" label_project_activity: "Actividad del proyecto" label_project_attribute_plural: "Atributos del proyecto" + label_project_attribute_manage_link: "Administrar atributos del proyecto" label_project_count: "Número total de proyectos" label_project_copy_notifications: "Enviar notificaciones por correo electrónico durante la copia del proyecto" label_project_latest: "Últimos proyectos" @@ -2137,7 +2142,7 @@ es: label_project_attributes_settings: "Ajustes de los atributos del proyecto" label_project_storage_plural: "Almacenes de archivos" label_project_storage_project_folder: "Almacenes de archivos: Carpetas de proyectos" - label_projects_storage_information: "%{count} proyectos utilizando %{storage} de almacenamiento en disco" + label_projects_disk_usage_information: "%{count} proyectos utilizando %{used_disk_space} espacio de disco" label_project_view_all: "Ver todos los proyectos" label_project_show_details: "Mostrar los detalles del proyecto" label_project_hide_details: "Ocultar los detalles del proyecto" @@ -2194,6 +2199,7 @@ es: label_setting_plural: "Configuración" label_system_settings: "Ajustes de sistema" label_show_completed_versions: "Mostrar versiones terminadas" + label_columns: "Columnas" label_sort: "Ordenar" label_sort_by: "Ordenar por %{value}" label_sorted_by: "ordenados por %{value}" @@ -2737,7 +2743,7 @@ es: member_of_group: "Asignación de grupo" name_or_identifier: "Nombre o identificador" only_subproject_id: "Sólo subproyecto" - shared_with_user: "Compartido con usuario" + shared_with_user: "Compartido con usuarios" shared_with_me: "Compartido conmigo" subproject_id: "Incluyendo subproyecto" repositories: @@ -2882,6 +2888,7 @@ es: setting_app_subtitle: "Subtítulo de aplicación" setting_app_title: "Título de aplicación" setting_attachment_max_size: "Tamaño máximo de adjunto" + setting_show_work_package_attachments: "Mostrar archivos adjuntos en la pestaña de archivos por defecto" setting_antivirus_scan_mode: "Modo de escaneo" setting_antivirus_scan_action: "Acción del archivo infectado" setting_autofetch_changesets: "Recopilación automática de cambios del repositorio" @@ -2983,6 +2990,8 @@ es: attachments: whitelist_text_html: > Define una lista de extensiones de archivo válidas o tipos MIME para los archivos cargados.
Escriba las extensiones de archivo (por ejemplo, %{ext_example}) o tipos MIME (%{mime_example}).
Deje vacío este campo para que pueda cargarse cualquier tipo de archivo. Se permiten varios valores (una línea para cada valor). + show_work_package_attachments: > + Al desactivar esta opción se ocultará la lista de archivos adjuntos en la pestaña de archivos de los paquetes de trabajo para los nuevos proyectos. Los archivos adjuntos en la descripción de un paquete de trabajo seguirán cargándose en el almacenamiento interno de archivos adjuntos. antivirus: title: "Escaneado de virus" clamav_ping_failed: "Ha fallado la conexión con el daemon ClamAV. Vuelva a comprobar la configuración e inténtelo de nuevo." @@ -3219,6 +3228,10 @@ es: input_label: "Añadir columnas" input_placeholder: "Seleccionar una columna" drag_area_label: "Gestionar y reordenar columnas" + sort_by: + automatic: + heading: "Automático" + description: "Ordene la %{plural} por uno o varios criterios de clasificación. Perderá la ordenación anterior." top_menu: additional_resources: "Recursos Adicionales" getting_started: "Primeros pasos" @@ -3367,7 +3380,7 @@ es: non_working: "%{day} es ahora no laboral" dates: working: "%{date} es ahora laboral" - non_working: "%{day} es ahora no laboral" + non_working: "%{date} es ahora no laboral" nothing_to_preview: "Nada para previsualizar" api_v3: attributes: @@ -3565,7 +3578,7 @@ es: link: enlace plugin_openproject_auth_plugins: name: "Plugins Auth de OpenProject" - description: "Integración de los proveedores de estrategia de OmniAuth para la autentificación en Openproject." + description: "Integración de los proveedores de estrategia de OmniAuth para la autentificación en OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Inicio de sesión único" description: "Añade el proveedor OmniAuth SAML a OpenProject" diff --git a/config/locales/crowdin/et.seeders.yml b/config/locales/crowdin/et.seeders.yml index 27c3d269ed35..7208b68b2c8f 100644 --- a/config/locales/crowdin/et.seeders.yml +++ b/config/locales/crowdin/et.seeders.yml @@ -251,6 +251,21 @@ et: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/et.yml b/config/locales/crowdin/et.yml index 3e6f6fcf2c59..cdbaec98ac58 100644 --- a/config/locales/crowdin/et.yml +++ b/config/locales/crowdin/et.yml @@ -264,6 +264,7 @@ et: lists: active: "Active projects" my: "Minu projektid" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ et: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: There are currently no members part of this project. @@ -322,6 +330,7 @@ et: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Rühmad" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -484,7 +493,7 @@ et: no_common_statuses_exists: "There is no status available for all selected work packages. Their status cannot be changed." unsupported_for_multiple_projects: "Bulk move/copy is not supported for work packages from multiple projects" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -782,6 +791,7 @@ et: not_an_iso_date: "is not a valid date. Required format: YYYY-MM-DD." not_same_project: "doesn't belong to the same project." odd: "peab olema paaritu arv." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "could not be validated with the associated regular expression." smaller_than_or_equal_to_max_length: "must be smaller than or equal to maximum length." taken: "on juba kasutusel." @@ -1263,6 +1273,7 @@ et: button_edit: "Muuda" button_edit_associated_wikipage: "Muuda seotud vikilehte \"%{page_title}\"" button_expand_all: "Laienda kõik" + button_favorite: "Add to favorites" button_filter: "Filter" button_generate: "Genereeri" button_list: "Nimistu" @@ -1290,6 +1301,7 @@ et: button_unarchive: "Paki arhiiv lahti" button_uncheck_all: "Tühjenda valik" button_unlock: "Aktiveeri" + button_unfavorite: "Remove from favorites" button_unwatch: "Ära jälgi" button_update: "Uuenda" button_upgrade: "Uuenda" @@ -1397,7 +1409,7 @@ et: datetime: distance_in_words: about_x_hours: - one: "umbes %{count} tundi" + one: "umbes 1 tund" other: "umbes %{count} tundi" about_x_months: one: "umbes 1 kuu" @@ -1575,6 +1587,7 @@ et: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1722,17 +1735,6 @@ et: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "Uudised" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Accessibility" label_account: "Konto" label_active: "Aktiivne" @@ -1913,7 +1915,7 @@ et: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Keskkond" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "võrdub" label_everywhere: "everywhere" label_example: "Näide" @@ -1927,7 +1929,7 @@ et: label_expanded_click_to_collapse: "Expanded. Click to collapse" label_f_hour: "%{value} tund" label_f_hour_plural: "%{value} tundi" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Kanalid" label_feeds_access_key: "RSS kasutuse võti" label_feeds_access_key_created_on: "RSS kasutuse võti on loodud %{value} tagasi" @@ -2000,6 +2002,7 @@ et: label_learn_more: "Loe rohkem" label_less_or_equal: "<=" label_less_than_ago: "vähem kui päev tagasi" + label_link_url: "Link (URL)" label_list: "Nimistu" label_loading: "Laadimine..." label_lock_user: "Lock user" @@ -2025,6 +2028,7 @@ et: label_membership_plural: "Memberships" lable_membership_added: "Member added" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2126,6 +2130,7 @@ et: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Total number of projects" label_project_copy_notifications: "Saada e-postiga teateid projekti kopeerimise ajal" label_project_latest: "Viimased projektid" @@ -2140,7 +2145,7 @@ et: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projects using %{storage} disk storage" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "Vaata kõiki projekte" label_project_show_details: "Show project details" label_project_hide_details: "Hide project details" @@ -2197,6 +2202,7 @@ et: label_setting_plural: "Seaded" label_system_settings: "Süsteemiseaded" label_show_completed_versions: "Näita lõpetatud versioone" + label_columns: "Veerud" label_sort: "Sorteeri" label_sort_by: "Sorteeri %{value} järgi" label_sorted_by: "Sorteeritud %{value} järgi" @@ -2741,7 +2747,7 @@ et: member_of_group: "Omistatud rühmale" name_or_identifier: "Name or identifier" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2886,6 +2892,7 @@ et: setting_app_subtitle: "Rakenduse alamnimetus" setting_app_title: "Rakenduse nimetus" setting_attachment_max_size: "Manuste suurim lubatud suurus" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Autofetch repository changes" @@ -2987,6 +2994,8 @@ et: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3223,6 +3232,10 @@ et: input_label: "Add columns" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Additional resources" getting_started: "Getting started" @@ -3570,7 +3583,7 @@ et: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/eu.seeders.yml b/config/locales/crowdin/eu.seeders.yml index 58517e958143..5b61cee29cf1 100644 --- a/config/locales/crowdin/eu.seeders.yml +++ b/config/locales/crowdin/eu.seeders.yml @@ -251,6 +251,21 @@ eu: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/eu.yml b/config/locales/crowdin/eu.yml index f3334385d4d4..dfb4506b8730 100644 --- a/config/locales/crowdin/eu.yml +++ b/config/locales/crowdin/eu.yml @@ -264,6 +264,7 @@ eu: lists: active: "Active projects" my: "My projects" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ eu: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: There are currently no members part of this project. @@ -322,6 +330,7 @@ eu: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Groups" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -484,7 +493,7 @@ eu: no_common_statuses_exists: "There is no status available for all selected work packages. Their status cannot be changed." unsupported_for_multiple_projects: "Bulk move/copy is not supported for work packages from multiple projects" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -782,6 +791,7 @@ eu: not_an_iso_date: "is not a valid date. Required format: YYYY-MM-DD." not_same_project: "doesn't belong to the same project." odd: "must be odd." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "could not be validated with the associated regular expression." smaller_than_or_equal_to_max_length: "must be smaller than or equal to maximum length." taken: "has already been taken." @@ -1263,6 +1273,7 @@ eu: button_edit: "Edit" button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}" button_expand_all: "Expand all" + button_favorite: "Add to favorites" button_filter: "Filter" button_generate: "Generate" button_list: "List" @@ -1290,6 +1301,7 @@ eu: button_unarchive: "Unarchive" button_uncheck_all: "Uncheck all" button_unlock: "Unlock" + button_unfavorite: "Remove from favorites" button_unwatch: "Unwatch" button_update: "Update" button_upgrade: "Upgrade" @@ -1575,6 +1587,7 @@ eu: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1722,17 +1735,6 @@ eu: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "News" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Accessibility" label_account: "Account" label_active: "Active" @@ -1913,7 +1915,7 @@ eu: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Environment" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "is" label_everywhere: "everywhere" label_example: "Example" @@ -1927,7 +1929,7 @@ eu: label_expanded_click_to_collapse: "Expanded. Click to collapse" label_f_hour: "%{value} hour" label_f_hour_plural: "%{value} hours" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Feeds" label_feeds_access_key: "RSS access key" label_feeds_access_key_created_on: "RSS access key created %{value} ago" @@ -2000,6 +2002,7 @@ eu: label_learn_more: "Learn more" label_less_or_equal: "<=" label_less_than_ago: "less than days ago" + label_link_url: "Link (URL)" label_list: "List" label_loading: "Loading..." label_lock_user: "Lock user" @@ -2025,6 +2028,7 @@ eu: label_membership_plural: "Memberships" lable_membership_added: "Member added" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2126,6 +2130,7 @@ eu: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Total number of projects" label_project_copy_notifications: "Send email notifications during the project copy" label_project_latest: "Latest projects" @@ -2140,7 +2145,7 @@ eu: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projects using %{storage} disk storage" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "View all projects" label_project_show_details: "Show project details" label_project_hide_details: "Hide project details" @@ -2197,6 +2202,7 @@ eu: label_setting_plural: "Settings" label_system_settings: "System settings" label_show_completed_versions: "Show completed versions" + label_columns: "Columns" label_sort: "Sort" label_sort_by: "Sort by %{value}" label_sorted_by: "sorted by %{value}" @@ -2741,7 +2747,7 @@ eu: member_of_group: "Assignee's group" name_or_identifier: "Name or identifier" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2886,6 +2892,7 @@ eu: setting_app_subtitle: "Application subtitle" setting_app_title: "Application title" setting_attachment_max_size: "Attachment max. size" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Autofetch repository changes" @@ -2987,6 +2994,8 @@ eu: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3223,6 +3232,10 @@ eu: input_label: "Add columns" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Additional resources" getting_started: "Getting started" @@ -3570,7 +3583,7 @@ eu: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/fa.seeders.yml b/config/locales/crowdin/fa.seeders.yml index 56f90892b29e..8d503183f269 100644 --- a/config/locales/crowdin/fa.seeders.yml +++ b/config/locales/crowdin/fa.seeders.yml @@ -251,6 +251,21 @@ fa: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/fa.yml b/config/locales/crowdin/fa.yml index b894f25a2ada..4bee22dbe469 100644 --- a/config/locales/crowdin/fa.yml +++ b/config/locales/crowdin/fa.yml @@ -264,6 +264,7 @@ fa: lists: active: "Active projects" my: "پروژه‌های من" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ fa: storage: no_results_title_text: هیچ فضای دیسک ضبط شده اضافی مصرف شده توسط این پروژه وجود ندارد. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: There are currently no members part of this project. @@ -322,6 +330,7 @@ fa: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Groups" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -484,7 +493,7 @@ fa: no_common_statuses_exists: "There is no status available for all selected work packages. Their status cannot be changed." unsupported_for_multiple_projects: "Bulk move/copy is not supported for work packages from multiple projects" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -782,6 +791,7 @@ fa: not_an_iso_date: "is not a valid date. Required format: YYYY-MM-DD." not_same_project: "doesn't belong to the same project." odd: "must be odd." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "could not be validated with the associated regular expression." smaller_than_or_equal_to_max_length: "must be smaller than or equal to maximum length." taken: "has already been taken." @@ -1263,6 +1273,7 @@ fa: button_edit: "ویرایش" button_edit_associated_wikipage: "ویرایش صفحه ویکی مرتبط: %{page_title}" button_expand_all: "باز کردن همه" + button_favorite: "Add to favorites" button_filter: "فیلتر" button_generate: "Generate" button_list: "لیست" @@ -1290,6 +1301,7 @@ fa: button_unarchive: "خروج از آرشیو" button_uncheck_all: "لغو انتخاب همه" button_unlock: "باز کردن" + button_unfavorite: "Remove from favorites" button_unwatch: "عدم دنبال" button_update: "به روز رسانی" button_upgrade: "Upgrade" @@ -1575,6 +1587,7 @@ fa: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1722,17 +1735,6 @@ fa: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "News" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Accessibility" label_account: "حساب کاربری" label_active: "Active" @@ -1913,7 +1915,7 @@ fa: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Environment" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "is" label_everywhere: "everywhere" label_example: "Example" @@ -1927,7 +1929,7 @@ fa: label_expanded_click_to_collapse: "Expanded. Click to collapse" label_f_hour: "%{value} hour" label_f_hour_plural: "%{value} hours" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Feeds" label_feeds_access_key: "RSS access key" label_feeds_access_key_created_on: "RSS access key created %{value} ago" @@ -2000,6 +2002,7 @@ fa: label_learn_more: "Learn more" label_less_or_equal: "=>" label_less_than_ago: "less than days ago" + label_link_url: "Link (URL)" label_list: "لیست" label_loading: "Loading..." label_lock_user: "کاربر قفل شده" @@ -2025,6 +2028,7 @@ fa: label_membership_plural: "Memberships" lable_membership_added: "کاربر اضافه شد" lable_membership_updated: "اعضا بروزرسانی شدند." + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2126,6 +2130,7 @@ fa: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Total number of projects" label_project_copy_notifications: "Send email notifications during the project copy" label_project_latest: "Latest projects" @@ -2140,7 +2145,7 @@ fa: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projects using %{storage} disk storage" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "View all projects" label_project_show_details: "نمایش جزئیات پروژه" label_project_hide_details: "پنهان کردن جزئیات پروژه" @@ -2197,6 +2202,7 @@ fa: label_setting_plural: "تنظیمات" label_system_settings: "System settings" label_show_completed_versions: "Show completed versions" + label_columns: "ستون‌ها" label_sort: "مرتب‌سازی" label_sort_by: "Sort by %{value}" label_sorted_by: "sorted by %{value}" @@ -2741,7 +2747,7 @@ fa: member_of_group: "Assignee's group" name_or_identifier: "نام یا شناسه" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2886,6 +2892,7 @@ fa: setting_app_subtitle: "Application subtitle" setting_app_title: "Application title" setting_attachment_max_size: "Attachment max. size" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Autofetch repository changes" @@ -2987,6 +2994,8 @@ fa: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3223,6 +3232,10 @@ fa: input_label: "افزودن ستون ها" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Additional resources" getting_started: "Getting started" @@ -3570,7 +3583,7 @@ fa: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/fi.seeders.yml b/config/locales/crowdin/fi.seeders.yml index 5c502ff9b68d..91a8cfed4e13 100644 --- a/config/locales/crowdin/fi.seeders.yml +++ b/config/locales/crowdin/fi.seeders.yml @@ -251,6 +251,21 @@ fi: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/fi.yml b/config/locales/crowdin/fi.yml index 66077d405399..ccf00518993e 100644 --- a/config/locales/crowdin/fi.yml +++ b/config/locales/crowdin/fi.yml @@ -264,6 +264,7 @@ fi: lists: active: "Active projects" my: "Omat projektit" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ fi: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: Tähän projektiin ei kuulu yhtään henkilöä. @@ -322,6 +330,7 @@ fi: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Ryhmät" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -484,7 +493,7 @@ fi: no_common_statuses_exists: "Kaikkien valittujen tehtävien tilaa ei ole saatavilla. Niiden tilaa ei voi muuttaa." unsupported_for_multiple_projects: "Massasiirto tai -kopiointi ei ole sallittu eri projektien tehtäville" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -782,6 +791,7 @@ fi: not_an_iso_date: "ei ole kelvollinen päivämäärä. Vaadittava muoto: VVVV-KK-PP." not_same_project: "ei kuulu samaan projektiin." odd: "täytyy olla pariton." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "could not be validated with the associated regular expression." smaller_than_or_equal_to_max_length: "on oltava pienempi tai yhtä suuri kuin suurin sallittu pituus." taken: "on jo käytössä." @@ -1263,6 +1273,7 @@ fi: button_edit: "Muokkaa" button_edit_associated_wikipage: "Muokkaa liitettyä Wiki-sivua: %{page_title}" button_expand_all: "Laajenna kaikki" + button_favorite: "Add to favorites" button_filter: "Suodata" button_generate: "Luo" button_list: "Lista" @@ -1290,6 +1301,7 @@ fi: button_unarchive: "Palauta" button_uncheck_all: "Poista valinnat" button_unlock: "Poista lukitus" + button_unfavorite: "Remove from favorites" button_unwatch: "Älä seuraa" button_update: "Päivitä" button_upgrade: "Päivitä" @@ -1575,6 +1587,7 @@ fi: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1722,17 +1735,6 @@ fi: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "Uutiset" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Helppokäyttötoiminnot" label_account: "Käyttäjätili" label_active: "Aktiivinen" @@ -1913,7 +1915,7 @@ fi: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Ympäristö" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "on" label_everywhere: "kaikkialla" label_example: "Esimerkki" @@ -1927,7 +1929,7 @@ fi: label_expanded_click_to_collapse: "Expanded. Click to collapse" label_f_hour: "%{value} tunti" label_f_hour_plural: "%{value} tuntia" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Syötteet" label_feeds_access_key: "RSS avain" label_feeds_access_key_created_on: "RSS avain luotiin %{value} sitten" @@ -2000,6 +2002,7 @@ fi: label_learn_more: "Learn more" label_less_or_equal: "<=" label_less_than_ago: "vähemmän kuin päivää sitten" + label_link_url: "Link (URL)" label_list: "Lista" label_loading: "Lataa..." label_lock_user: "Lukitse käyttäjä" @@ -2025,6 +2028,7 @@ fi: label_membership_plural: "Memberships" lable_membership_added: "Member added" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2126,6 +2130,7 @@ fi: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Total number of projects" label_project_copy_notifications: "Lähetä sähköposti-ilmoituksia projektin kopioinnin aikana" label_project_latest: "Uusimmat projektit" @@ -2140,7 +2145,7 @@ fi: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projektia käyttää %{storage} tallennustilaa" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "Kaikki projektit" label_project_show_details: "Show project details" label_project_hide_details: "Hide project details" @@ -2197,6 +2202,7 @@ fi: label_setting_plural: "Asetukset" label_system_settings: "Järjestelmäasetukset" label_show_completed_versions: "Näytä valmiit versiot" + label_columns: "Sarakkeet" label_sort: "Järjestä" label_sort_by: "Lajittele %{value}" label_sorted_by: "lajitteluperuste %{value}" @@ -2741,7 +2747,7 @@ fi: member_of_group: "Työn suorittajan ryhmä" name_or_identifier: "Name or identifier" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2886,6 +2892,7 @@ fi: setting_app_subtitle: "Ohjelman alaotsikko" setting_app_title: "Ohjelman otsikko" setting_attachment_max_size: "Liitteen maksimikoko" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Automaattisten muutosjoukkojen haku" @@ -2987,6 +2994,8 @@ fi: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3223,6 +3232,10 @@ fi: input_label: "Lisää sarakkeita" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Lisäresurssit" getting_started: "Getting started" @@ -3570,7 +3583,7 @@ fi: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/fil.seeders.yml b/config/locales/crowdin/fil.seeders.yml index 40debdcfd221..f4ac7a4e7ad5 100644 --- a/config/locales/crowdin/fil.seeders.yml +++ b/config/locales/crowdin/fil.seeders.yml @@ -251,6 +251,21 @@ fil: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/fil.yml b/config/locales/crowdin/fil.yml index 621f7bdb4d92..8d8f62540d54 100644 --- a/config/locales/crowdin/fil.yml +++ b/config/locales/crowdin/fil.yml @@ -264,6 +264,7 @@ fil: lists: active: "Active projects" my: "Ang mga aking proyekto" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ fil: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: Sa kasalukuyan ay walang parte ng mga myembro sa proyektong ito. @@ -322,6 +330,7 @@ fil: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Mga grupo" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -484,7 +493,7 @@ fil: no_common_statuses_exists: "There is no status available for all selected work packages. Their status cannot be changed." unsupported_for_multiple_projects: "Ang bulk na paglipat/kopya ay hindi suportado sa mga work packages mula sa iba't ibang mga proyekto" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -782,6 +791,7 @@ fil: not_an_iso_date: "ay hindi balido ang petsa. Ang kinakailangan format: YYYY-MM-DD." not_same_project: "ay hindi nabibilang sa parehong proyekto." odd: "dapat ay kakaiba." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "hindi pwedeng mapatunayan sa nauugnay na mga regular na ekspresyon." smaller_than_or_equal_to_max_length: "dapat ay mas maliit kaysa o katumbas sa pinakamataas na haba." taken: "ay nakuha na." @@ -1263,6 +1273,7 @@ fil: button_edit: "I-edit" button_edit_associated_wikipage: "I-edit ang kaugnay ng Wiki na pahina: %{page_title}" button_expand_all: "Malakihin lahat" + button_favorite: "Add to favorites" button_filter: "Salain" button_generate: "Bumuo" button_list: "Listahan" @@ -1290,6 +1301,7 @@ fil: button_unarchive: "Tanggalin ang archive" button_uncheck_all: "I-uncheck lahat" button_unlock: "I-unlock" + button_unfavorite: "Remove from favorites" button_unwatch: "I-unwatch" button_update: "I-update" button_upgrade: "Upgrade" @@ -1575,6 +1587,7 @@ fil: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1722,17 +1735,6 @@ fil: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "Mga balita" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Aksibilidad" label_account: "Akawnt" label_active: "Aktibo" @@ -1913,7 +1915,7 @@ fil: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Kalikasan" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "ay" label_everywhere: "everywhere" label_example: "Halimbawa" @@ -1927,7 +1929,7 @@ fil: label_expanded_click_to_collapse: "Expanded. Click to collapse" label_f_hour: "%{value} oras" label_f_hour_plural: "%{value} mga oras" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Ang mga feed" label_feeds_access_key: "RSS access key" label_feeds_access_key_created_on: "RSS access key na nillikha %{value} nakalipas" @@ -2000,6 +2002,7 @@ fil: label_learn_more: "Matuto ng higit pa" label_less_or_equal: "<=" label_less_than_ago: "mas mababa kaysa sa mga araw na lumipas" + label_link_url: "Link (URL)" label_list: "Listahan" label_loading: "Naglo-load..." label_lock_user: "I-kandado ang gumagamit" @@ -2025,6 +2028,7 @@ fil: label_membership_plural: "Memberships" lable_membership_added: "Member added" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2126,6 +2130,7 @@ fil: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Kabuuang bilang ng mga proyekto" label_project_copy_notifications: "Magpadala ng mga email na abiso habang ang proyekto ay kinopya" label_project_latest: "Pinakamabagong proyekto" @@ -2140,7 +2145,7 @@ fil: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "Ang %{count} proyekto gamit ang %{storage} lalagyan ng disk" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "Tingnan lahat ang mga proyekto" label_project_show_details: "Ipakita ang mga detalye ng proyekto" label_project_hide_details: "Itago ang mga detalye ng proyekto" @@ -2197,6 +2202,7 @@ fil: label_setting_plural: "Mga setting" label_system_settings: "Mga setting ng system" label_show_completed_versions: "Ipakita ang mga kompletong bersyon" + label_columns: "Mga hanay" label_sort: "Ayusin" label_sort_by: "Ayusin sa %{value}" label_sorted_by: "inayos sa %{value}" @@ -2741,7 +2747,7 @@ fil: member_of_group: "Itinalagang grupo" name_or_identifier: "Pangalan o pagkakakilanlan" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2884,6 +2890,7 @@ fil: setting_app_subtitle: "Aplikasyong subtitle" setting_app_title: "Aplikasyong pamagat" setting_attachment_max_size: "Paglalakip ng mataas na laki" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "I-autofetch ang mga pagbabago ng respositoryo" @@ -2985,6 +2992,8 @@ fil: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3221,6 +3230,10 @@ fil: input_label: "Magdagdag ng hanay" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Karagdagang pinagkukunan" getting_started: "Pagsisimula" @@ -3568,7 +3581,7 @@ fil: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/fr.seeders.yml b/config/locales/crowdin/fr.seeders.yml index 9be6f62fefa4..f686a1d96010 100644 --- a/config/locales/crowdin/fr.seeders.yml +++ b/config/locales/crowdin/fr.seeders.yml @@ -251,6 +251,21 @@ fr: * [ ] Encore plus de bière item_4: subject: Fin du projet + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Projet Scrum status_explanation: Toutes les tâches sont en cours. Les personnes concernées connaissent leurs tâches. Le système est entièrement configuré. diff --git a/config/locales/crowdin/fr.yml b/config/locales/crowdin/fr.yml index 43e69a33b9c4..421a5ace61d0 100644 --- a/config/locales/crowdin/fr.yml +++ b/config/locales/crowdin/fr.yml @@ -264,6 +264,7 @@ fr: lists: active: "Projets actifs" my: "Mes projets" + favored: "Favorite projects" archived: "Projets archivés" my_private: "Mes listes de projets privés" new: @@ -304,7 +305,14 @@ fr: storage: no_results_title_text: Il n'y a pas d'espace disque supplémentaire utilisé par ce projet. lists: - can_be_saved_as: "Les modifications ne peuvent être enregistrées que dans une nouvelle liste." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: Aucun membre dans ce projet pour le moment. @@ -322,6 +330,7 @@ fr: project_roles: "Rôle du projet" wp_shares: "Partages du lot des travaux" groups: "Groupes" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Supprimer le membre" will_remove_the_users_role: "Cela supprimera le rôle de l'utilisateur dans ce projet." @@ -484,10 +493,10 @@ fr: no_common_statuses_exists: "Il n’y a pas de statut disponible pour tous les lots de travaux sélectionnés. Ce statut ne peut pas être changé." unsupported_for_multiple_projects: "Déplacer/copier en masse n'est pas supporté pour des lots de travaux provenant de plusieurs projets" sharing: - missing_workflow_waring: - title: "Flux de travail manquant pour le partage de lots de travaux" - message: "Aucun flux de travail n'est configuré pour le rôle 'Éditeur de lots de travaux'. Sans flux de travail, le partage avec l'utilisateur ne permet pas de modifier l'état du lot de travaux. Les flux de travail peuvent être copiés. Sélectionnez un type de source (par exemple 'Tâche') et un rôle de source (par exemple 'Membre'). Sélectionnez ensuite les types cibles. Pour commencer, vous pouvez sélectionner tous les types comme cibles. Enfin, sélectionnez le rôle 'Éditeur de lot de travaux' comme cible et cliquez sur 'Copier'. Après avoir ainsi créé les valeurs par défaut, affinez les flux de travail comme vous le faites pour tous les autres rôles." - link_message: "Configurez les flux de travail dans l'administration." + missing_workflow_warning: + title: "Workflow missing for work package sharing" + message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." + link_message: "Configure the workflows in the administration." summary: reports: category: @@ -782,6 +791,7 @@ fr: not_an_iso_date: "n’est pas une date valide. Format requis : AAAA-MM-JJ." not_same_project: "n'appartient pas au même projet." odd: "doit être impair." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "n’a pas pu être validé avec l’expression régulière associée." smaller_than_or_equal_to_max_length: "doit être inférieur ou égal à la longueur maximale." taken: "a déjà été pris." @@ -1263,6 +1273,7 @@ fr: button_edit: "Éditer" button_edit_associated_wikipage: "Éditer la page wiki associée : %{page_title}" button_expand_all: "Tout déplier" + button_favorite: "Add to favorites" button_filter: "Filtrer" button_generate: "Générer" button_list: "Liste" @@ -1290,6 +1301,7 @@ fr: button_unarchive: "Désarchiver" button_uncheck_all: "Tout désélectionner" button_unlock: "Déverrouiller" + button_unfavorite: "Remove from favorites" button_unwatch: "Ne plus suivre" button_update: "Mettre à jour" button_upgrade: "Mise à niveau" @@ -1575,6 +1587,7 @@ fr: pdf_overview_table: "Tableau PDF" pdf_report_with_images: "Rapport PDF avec images" pdf_report: "Rapport PDF" + pdf_gantt: "PDF Gantt" image: omitted: "Image non exportée." units: @@ -1722,17 +1735,6 @@ fr: mentioned: "Vous avez été mentionné dans %{work_package}" responsible: "Vous êtes devenu responsable de %{work_package}" watched: "Vous surveillez %{work_package}" - update_info_mail: - body: > - Nous sommes heureux d'annoncer la sortie d'OpenProject 12.0. Il s'agit d'une version majeure qui, nous l'espérons, améliorera considérablement la façon dont vous utilisez OpenProject. - A partir de cette version, nous lançons les notifications in-app. A partir de maintenant, vous recevrez des notifications pour les mises à jour des paquets de travail directement dans OpenProject. Vous pouvez marquer ces notifications comme lues, répondre à un commentaire, ou même modifier directement les attributs du paquet de travail sans quitter le centre de notification. - Cela signifie également que nous n'utiliserons plus les emails pour les notifications. Nous pensons que le nouveau centre de notification est un meilleur endroit pour voir et agir sur ces mises à jour. Néanmoins, si vous souhaitez continuer à recevoir des mises à jour par e-mail, vous pouvez choisir de recevoir des rappels quotidiens à des moments précis de votre choix. - Nous vous conseillons de vérifier vos nouveaux paramètres de notification par défaut et de définir vos préférences via les paramètres de votre compte. Vous pouvez le faire en cliquant sur le bouton "Modifier les paramètres de messagerie" ci-dessous. - Nous espérons que vous trouverez les notifications in-app utiles et qu'elles vous rendront encore plus productif. - Sincèrement, L'équipe OpenProject - body_header: "Version 12.0 avec centre de notifications" - body_subheader: "Actualités" - subject: "Modifications importantes des notifications avec la publication de 12.0" label_accessibility: "Accessibilité" label_account: "Compte" label_active: "Actif" @@ -1913,7 +1915,7 @@ fr: label_enterprise_support: "Assistance Enterprise" label_enterprise_addon: "add-on Enterprise" label_environment: "Environement" - label_estimates_and_time: "Estimations et progression" + label_estimates_and_progress: "Estimations et progression" label_equals: "est" label_everywhere: "partout" label_example: "Exemple" @@ -1927,7 +1929,7 @@ fr: label_expanded_click_to_collapse: "Déplié. Cliquez pour replier" label_f_hour: "%{value} heure" label_f_hour_plural: "%{value} heures" - label_favoured: "Favoris" + label_favorite: "Favori" label_feed_plural: "Fluxs" label_feeds_access_key: "Clé d'accès RSS" label_feeds_access_key_created_on: "Clé d'accès RSS créé il y a %{value}" @@ -2000,6 +2002,7 @@ fr: label_learn_more: "En savoir plus" label_less_or_equal: "<=" label_less_than_ago: "il y a moins de quelques jours" + label_link_url: "Link (URL)" label_list: "Liste" label_loading: "Chargement…" label_lock_user: "Verrouiller l’utilisateur" @@ -2025,6 +2028,7 @@ fr: label_membership_plural: "Adhésions" lable_membership_added: "Membre ajouté" lable_membership_updated: "Membre mis à jour" + label_menu: "Menu" label_menu_badge: pre_alpha: "pré-alpha" alpha: "alpha" @@ -2126,6 +2130,7 @@ fr: label_percent_complete: "% réalisé" label_project_activity: "Activité du projet" label_project_attribute_plural: "Attributs du projet" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Nombre total de projets" label_project_copy_notifications: "Notifier par courriel lors de la copie du projet" label_project_latest: "Derniers projets" @@ -2140,7 +2145,7 @@ fr: label_project_attributes_settings: "Paramètres des attributs du projet" label_project_storage_plural: "Espaces de stockage des fichiers" label_project_storage_project_folder: "Espaces de stockage des fichiers : dossiers du projet" - label_projects_storage_information: "%{count} projets utilisant %{storage} d'espace disque" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "Afficher tous les projets" label_project_show_details: "Afficher les détails du projet" label_project_hide_details: "Masquer les détails du projet" @@ -2197,6 +2202,7 @@ fr: label_setting_plural: "Paramètres" label_system_settings: "Paramètres système" label_show_completed_versions: "Afficher les versions terminées" + label_columns: "Colonnes" label_sort: "Trier" label_sort_by: "Trier par %{value}" label_sorted_by: "trié par %{value}" @@ -2741,7 +2747,7 @@ fr: member_of_group: "Groupe du Destinataire" name_or_identifier: "Nom ou identifiant" only_subproject_id: "Seulement le sous-projet" - shared_with_user: "Partagé avec l'utilisateur" + shared_with_user: "Shared with users" shared_with_me: "Partagés avec moi" subproject_id: "Inclure le sous-projet" repositories: @@ -2886,6 +2892,7 @@ fr: setting_app_subtitle: "Sous-titre de l'Application" setting_app_title: "Titre de l'Application" setting_attachment_max_size: "Taille maximale de la pièce jointe" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Mode analyse" setting_antivirus_scan_action: "Action sur le fichier infecté" setting_autofetch_changesets: "Rapatrier automatiquement les changements du dépôt" @@ -2987,6 +2994,8 @@ fr: attachments: whitelist_text_html: > Définissez une liste d'extensions de fichiers et/ou de types MIME valides pour les fichiers téléversés.
Entrez les extensions de fichier (par exemple, %{ext_example}) ou les types mime (par exemple, %{mime_example}).
Laissez vide pour permettre le téléversement de tout type de fichier. Plusieurs valeurs autorisées (une ligne pour chaque valeur). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Analyse de virus" clamav_ping_failed: "Échec de la connexion au démon ClamAV. Vérifiez à nouveau la configuration puis réessayez." @@ -3223,6 +3232,10 @@ fr: input_label: "Ajouter des colonnes" input_placeholder: "Sélectionner une colonne" drag_area_label: "Gérer et réorganiser les colonnes" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Ressources supplémentaires" getting_started: "Pour commencer" @@ -3569,7 +3582,7 @@ fr: link: lien plugin_openproject_auth_plugins: name: "Plugins d'authentification OpenProject" - description: "Intégration des fournisseurs de stratégie OmniAuth pour l'authentification dans Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / authentification unique" description: "Ajoute le fournisseur SAML OmniAuth à OpenProject" diff --git a/config/locales/crowdin/he.seeders.yml b/config/locales/crowdin/he.seeders.yml index 78ba11d7c54f..725510fc4397 100644 --- a/config/locales/crowdin/he.seeders.yml +++ b/config/locales/crowdin/he.seeders.yml @@ -251,6 +251,21 @@ he: * [ ] Even more beer item_4: subject: סיום הפרויקט + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/he.yml b/config/locales/crowdin/he.yml index 64d4cf68ccb8..57c94fa64680 100644 --- a/config/locales/crowdin/he.yml +++ b/config/locales/crowdin/he.yml @@ -264,6 +264,7 @@ he: lists: active: "Active projects" my: "הפרוייקטים שלי" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ he: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: There are currently no members part of this project. @@ -322,6 +330,7 @@ he: project_roles: "Project roles" wp_shares: "Work package shares" groups: "קבוצות" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -498,7 +507,7 @@ he: no_common_statuses_exists: "There is no status available for all selected work packages. Their status cannot be changed." unsupported_for_multiple_projects: "Bulk move/copy is not supported for work packages from multiple projects" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -796,6 +805,7 @@ he: not_an_iso_date: "is not a valid date. Required format: YYYY-MM-DD." not_same_project: "doesn't belong to the same project." odd: "must be odd." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "could not be validated with the associated regular expression." smaller_than_or_equal_to_max_length: "must be smaller than or equal to maximum length." taken: "has already been taken." @@ -1293,6 +1303,7 @@ he: button_edit: "עריכה" button_edit_associated_wikipage: "ערוך את דף הויקי הקשור: %{page_title}" button_expand_all: "הרחב הכל" + button_favorite: "Add to favorites" button_filter: "סינון" button_generate: "Generate" button_list: "רשימה" @@ -1320,6 +1331,7 @@ he: button_unarchive: "הסר מהארכיון" button_uncheck_all: "נקה הכל" button_unlock: "בטל נעילה" + button_unfavorite: "Remove from favorites" button_unwatch: "הספק מעקב" button_update: "עדכון" button_upgrade: "Upgrade" @@ -1641,6 +1653,7 @@ he: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1788,17 +1801,6 @@ he: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "חדשות" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Accessibility" label_account: "חשבון" label_active: "פעיל" @@ -1979,7 +1981,7 @@ he: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "סביבה" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "הינו" label_everywhere: "everywhere" label_example: "דוגמה" @@ -1993,7 +1995,7 @@ he: label_expanded_click_to_collapse: "Expanded. Click to collapse" label_f_hour: "%{value} hour" label_f_hour_plural: "%{value} hours" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Feeds" label_feeds_access_key: "RSS access key" label_feeds_access_key_created_on: "RSS access key created %{value} ago" @@ -2066,6 +2068,7 @@ he: label_learn_more: "למידע נוסף" label_less_or_equal: "<=" label_less_than_ago: "less than days ago" + label_link_url: "Link (URL)" label_list: "רשימה" label_loading: "טוען..." label_lock_user: "Lock user" @@ -2091,6 +2094,7 @@ he: label_membership_plural: "Memberships" lable_membership_added: "Member added" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2192,6 +2196,7 @@ he: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Total number of projects" label_project_copy_notifications: "Send email notifications during the project copy" label_project_latest: "Latest projects" @@ -2206,7 +2211,7 @@ he: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projects using %{storage} disk storage" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "הצג את כל הפרוייקטים" label_project_show_details: "Show project details" label_project_hide_details: "Hide project details" @@ -2263,6 +2268,7 @@ he: label_setting_plural: "הגדרות" label_system_settings: "System settings" label_show_completed_versions: "Show completed versions" + label_columns: "עמודות" label_sort: "מיין" label_sort_by: "Sort by %{value}" label_sorted_by: "sorted by %{value}" @@ -2811,7 +2817,7 @@ he: member_of_group: "Assignee's group" name_or_identifier: "Name or identifier" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2956,6 +2962,7 @@ he: setting_app_subtitle: "Application subtitle" setting_app_title: "Application title" setting_attachment_max_size: "Attachment max. size" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Autofetch repository changes" @@ -3057,6 +3064,8 @@ he: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3293,6 +3302,10 @@ he: input_label: "Add columns" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Additional resources" getting_started: "Getting started" @@ -3644,7 +3657,7 @@ he: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/hi.seeders.yml b/config/locales/crowdin/hi.seeders.yml index 313e814623b7..2f3fdc12d7a2 100644 --- a/config/locales/crowdin/hi.seeders.yml +++ b/config/locales/crowdin/hi.seeders.yml @@ -251,6 +251,21 @@ hi: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/hi.yml b/config/locales/crowdin/hi.yml index 8301d172a0cb..7d1d9dd04bf1 100644 --- a/config/locales/crowdin/hi.yml +++ b/config/locales/crowdin/hi.yml @@ -264,6 +264,7 @@ hi: lists: active: "Active projects" my: "My projects" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ hi: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: There are currently no members part of this project. @@ -322,6 +330,7 @@ hi: project_roles: "Project roles" wp_shares: "Work package shares" groups: "समूह" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -482,7 +491,7 @@ hi: no_common_statuses_exists: "सभी चयनित कार्य पैकेज के लिए कोई स्थिति उपलब्ध नहीं है । उनकी हैसियत नहीं बदली जा सकती ।" unsupported_for_multiple_projects: "Bulk move/copy is not supported for work packages from multiple projects" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -780,6 +789,7 @@ hi: not_an_iso_date: "is not a valid date. Required format: YYYY-MM-DD." not_same_project: "doesn't belong to the same project." odd: "must be odd." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "could not be validated with the associated regular expression." smaller_than_or_equal_to_max_length: "must be smaller than or equal to maximum length." taken: "has already been taken." @@ -1261,6 +1271,7 @@ hi: button_edit: "संपादित करें" button_edit_associated_wikipage: "संबद्ध विकी पृष्ठ संपादित करें: %{page_title}" button_expand_all: "सभी विस्तृत करें" + button_favorite: "Add to favorites" button_filter: "Filter" button_generate: "Generate" button_list: "सूची" @@ -1288,6 +1299,7 @@ hi: button_unarchive: "अपुरालेखित करें" button_uncheck_all: "सभी अचयनित करें" button_unlock: "अनलॉक करें" + button_unfavorite: "Remove from favorites" button_unwatch: "अनवॉच" button_update: "अद्यतन करें" button_upgrade: "Upgrade" @@ -1573,6 +1585,7 @@ hi: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1720,17 +1733,6 @@ hi: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "नया" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Accessibility" label_account: "खाता" label_active: "सक्रिय" @@ -1911,7 +1913,7 @@ hi: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Environment" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "is" label_everywhere: "everywhere" label_example: "Example" @@ -1925,7 +1927,7 @@ hi: label_expanded_click_to_collapse: "विस्तार. संक्षिप्त करने के लिए क्लिक करें" label_f_hour: "%{value} hour" label_f_hour_plural: "%{value} hours" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Feeds" label_feeds_access_key: "RSS पहुंच कुंजी" label_feeds_access_key_created_on: "RSS access key created %{value} ago" @@ -1998,6 +2000,7 @@ hi: label_learn_more: "Learn more" label_less_or_equal: "<=" label_less_than_ago: "less than days ago" + label_link_url: "Link (URL)" label_list: "सूची" label_loading: "Loading..." label_lock_user: "Lock user" @@ -2023,6 +2026,7 @@ hi: label_membership_plural: "Memberships" lable_membership_added: "Member added" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2124,6 +2128,7 @@ hi: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Total number of projects" label_project_copy_notifications: "प्रोजेक्ट प्रतिलिपी के दौरान ईमेल सूचनाएँ भेजें" label_project_latest: "नवीनतम परियोजनाएं" @@ -2138,7 +2143,7 @@ hi: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projects using %{storage} disk storage" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "सभी प्रोजेक्ट्स देखें" label_project_show_details: "Show project details" label_project_hide_details: "Hide project details" @@ -2195,6 +2200,7 @@ hi: label_setting_plural: "Settings" label_system_settings: "System settings" label_show_completed_versions: "Show completed versions" + label_columns: "स्तंभ" label_sort: "क्रम में लगायें" label_sort_by: "Sort by %{value}" label_sorted_by: "sorted by %{value}" @@ -2739,7 +2745,7 @@ hi: member_of_group: "Assignee's group" name_or_identifier: "Name or identifier" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2884,6 +2890,7 @@ hi: setting_app_subtitle: "Application subtitle" setting_app_title: "Application title" setting_attachment_max_size: "Attachment max. size" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Autofetch repository changes" @@ -2985,6 +2992,8 @@ hi: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3221,6 +3230,10 @@ hi: input_label: "Add columns" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Additional resources" getting_started: "Getting started" @@ -3568,7 +3581,7 @@ hi: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/hr.seeders.yml b/config/locales/crowdin/hr.seeders.yml index a0237f7be087..7e0fc2781802 100644 --- a/config/locales/crowdin/hr.seeders.yml +++ b/config/locales/crowdin/hr.seeders.yml @@ -251,6 +251,21 @@ hr: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/hr.yml b/config/locales/crowdin/hr.yml index 96ec350284c1..2c8da8e521f4 100644 --- a/config/locales/crowdin/hr.yml +++ b/config/locales/crowdin/hr.yml @@ -264,6 +264,7 @@ hr: lists: active: "Active projects" my: "Moji projekati" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ hr: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: Trenutno nema korisnika koji su dio ovog projekta. @@ -322,6 +330,7 @@ hr: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Grupe" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -491,7 +500,7 @@ hr: no_common_statuses_exists: "There is no status available for all selected work packages. Their status cannot be changed." unsupported_for_multiple_projects: "Masovno premještanje/kopiranje ne podržava radne pakete iz više projekata" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -789,6 +798,7 @@ hr: not_an_iso_date: "is not a valid date. Required format: YYYY-MM-DD." not_same_project: "ne pripada istom projektu." odd: "mora biti neparan." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "could not be validated with the associated regular expression." smaller_than_or_equal_to_max_length: "mora biti manje od ili jednako maksimalnom trajanju." taken: "već je zauzeto." @@ -1278,6 +1288,7 @@ hr: button_edit: "Uredi" button_edit_associated_wikipage: "Uredi pripadajuće Wiki stranice: %{page_title}" button_expand_all: "Proširi sve" + button_favorite: "Add to favorites" button_filter: "Filter" button_generate: "Generiraj" button_list: "Popis" @@ -1305,6 +1316,7 @@ hr: button_unarchive: "Nemoj arhivirati" button_uncheck_all: "Nemoj odabrati sve" button_unlock: "Otključaj" + button_unfavorite: "Remove from favorites" button_unwatch: "Ne nadgledaj više" button_update: "Ažuriraj" button_upgrade: "Ažuriraj" @@ -1608,6 +1620,7 @@ hr: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1755,17 +1768,6 @@ hr: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "Vijesti" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Accessibility" label_account: "Korisnički račun" label_active: "Aktivno" @@ -1946,7 +1948,7 @@ hr: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Okruženje" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "je" label_everywhere: "everywhere" label_example: "Primjer" @@ -1960,7 +1962,7 @@ hr: label_expanded_click_to_collapse: "Expanded. Click to collapse" label_f_hour: "%{value} sat" label_f_hour_plural: "%{value} sati" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Feeds" label_feeds_access_key: "RSS pristupni ključ" label_feeds_access_key_created_on: "RSS pristupni ključ kreiran %{value} prije" @@ -2033,6 +2035,7 @@ hr: label_learn_more: "Saznaj više" label_less_or_equal: "<=" label_less_than_ago: "manje od dana" + label_link_url: "Link (URL)" label_list: "Popis" label_loading: "Učitavanje..." label_lock_user: "Lock user" @@ -2058,6 +2061,7 @@ hr: label_membership_plural: "Memberships" lable_membership_added: "Member added" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2159,6 +2163,7 @@ hr: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Ukupan broj projekata" label_project_copy_notifications: "Slanje obavijesti e-mailom tijekom kopiranja projekta" label_project_latest: "Najnoviji projekti" @@ -2173,7 +2178,7 @@ hr: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projekt koristi %{storage} diskovnog prostora" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "Pogledaj sve projekte" label_project_show_details: "Prikaži detalje o projektu" label_project_hide_details: "Sakrij detalje o projektu" @@ -2230,6 +2235,7 @@ hr: label_setting_plural: "Postavke" label_system_settings: "Postavke sustava" label_show_completed_versions: "Prikažite završene verzije" + label_columns: "Stupci" label_sort: "Sortiraj" label_sort_by: "Sortiraj po %{value}" label_sorted_by: "sortirano po %{value}" @@ -2776,7 +2782,7 @@ hr: member_of_group: "Grupa opunomoćenog korisnika" name_or_identifier: "Ime ili identifikator" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2921,6 +2927,7 @@ hr: setting_app_subtitle: "Podnaslov aplikacije" setting_app_title: "Naslov aplikacije" setting_attachment_max_size: "Max. veličina privitka" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Automatski dohvati promjene na repozitoriju" @@ -3022,6 +3029,8 @@ hr: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3258,6 +3267,10 @@ hr: input_label: "Add columns" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Additional resources" getting_started: "Getting started" @@ -3607,7 +3620,7 @@ hr: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/hu.seeders.yml b/config/locales/crowdin/hu.seeders.yml index 7a5b096d23c3..60c58229cce6 100644 --- a/config/locales/crowdin/hu.seeders.yml +++ b/config/locales/crowdin/hu.seeders.yml @@ -251,6 +251,21 @@ hu: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: Minden feladat és alprojekt az ütemterv szerint halad. Az érintettek ismerik a feladataikat. A rendszer teljesen ki van építve. diff --git a/config/locales/crowdin/hu.yml b/config/locales/crowdin/hu.yml index 0f028c4f7115..024fedbdc6cd 100644 --- a/config/locales/crowdin/hu.yml +++ b/config/locales/crowdin/hu.yml @@ -263,6 +263,7 @@ hu: lists: active: "Aktív projektek" my: "Saját projekjeim" + favored: "Favorite projects" archived: "Archivált projektek" my_private: "Privát projektlistáim" new: @@ -303,7 +304,14 @@ hu: storage: no_results_title_text: "Ebben a projektben nincs további rögzített lemezterület.\n" lists: - can_be_saved_as: "A módosítások csak egy új listában menthetők el." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: Jelenleg egy tagja sincs a projektnek. @@ -321,6 +329,7 @@ hu: project_roles: "Projekt szerepkörök" wp_shares: "Munkacsomagok megosztása" groups: "Csoportok" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -481,7 +490,7 @@ hu: no_common_statuses_exists: "Az összes kiválasztott feladatcsoporthoz nincs elérhető állapot. Státuszuk nem változtatható meg." unsupported_for_multiple_projects: "Tömeges mozgatás/másolás nem támogatott a különböző projektekből származó feladatcsoportokhoz" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -779,13 +788,14 @@ hu: not_an_iso_date: "nem érvényes dátum. A szükséges formátum ÉÉÉÉ-HH-NN." not_same_project: "nem azonos projekthez tartozik." odd: "páratlan kell legyen." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "nem lehet a hozzárendelt reguláris kifejezéssel ellenőrizni." smaller_than_or_equal_to_max_length: "a maximális hossznak kisebbnek vagy egyenlőnek kell lennie." taken: "már foglalt." too_long: "túl hosszú (nem lehet több %{count} karakternél)." too_short: "túl rövid (legalább %{count} karakter kell legyen)." type_mismatch: "nem '%{type}' típusú." - type_mismatch_nested: "nem '%{type}' típusú az '%%{path}' elérési útvonalon." + type_mismatch_nested: "nem '%{type}' típusú az '%{path}' elérési útvonalon." unchangeable: "nem módosítható." unknown_property: "nem ismert tulajdonság.\n" unknown_property_nested: "ismeretlen '%{path}' elérési útvonal." @@ -1260,6 +1270,7 @@ hu: button_edit: "Szerkesztés" button_edit_associated_wikipage: "A hozzárendelt Wiki oldal: %{page_title} szerkesztése" button_expand_all: "Az összes kibontása" + button_favorite: "Add to favorites" button_filter: "Szűrő" button_generate: "Generálás" button_list: "Lista" @@ -1287,6 +1298,7 @@ hu: button_unarchive: "Nem archívált" button_uncheck_all: "Az összes kijelölés megszüntetése" button_unlock: "A zárolás feloldása" + button_unfavorite: "Remove from favorites" button_unwatch: "Megfigyelés leállítása" button_update: "Frissítés" button_upgrade: "Frissítés" @@ -1407,7 +1419,7 @@ hu: other: "majdnem %{count} éve" half_a_minute: "Fél perc" less_than_x_minutes: - one: "kevesebb, mint %{count} perc" + one: "kevesebb, mint 1 perc" other: "kevesebb, mint %{count} perce" less_than_x_seconds: one: "kevesebb, mint 1 másodperc" @@ -1572,6 +1584,7 @@ hu: pdf_overview_table: "PDF táblázat" pdf_report_with_images: "PDF jelentés képekkel" pdf_report: "PDF jelentés" + pdf_gantt: "PDF Gantt" image: omitted: "Kép nem került exportálásra." units: @@ -1719,17 +1732,6 @@ hu: mentioned: "Megemlítettek a %{work_package}-ban" responsible: "Ön lett a %{work_package} felelőse" watched: "Megfigyeled a %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Verzió 12.0 Notification Centerrel" - body_subheader: "Hírek" - subject: "Fontos változások az értesítésekben a 12.0 kiadásával" label_accessibility: "Kisegítő lehetőségek" label_account: "Felhasználói fiók" label_active: "aktív" @@ -1910,7 +1912,7 @@ hu: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Környezet" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "van" label_everywhere: "bárhol" label_example: "Példa" @@ -1924,7 +1926,7 @@ hu: label_expanded_click_to_collapse: "Kinyitva. Kattintson az összecsukáshoz" label_f_hour: "%{value} óra" label_f_hour_plural: "%{value} óra" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Hírek" label_feeds_access_key: "RSS hozzáférési kulcs" label_feeds_access_key_created_on: "RSS-hozzáférési kulcs készítette: %{value} ezelőtt " @@ -1997,6 +1999,7 @@ hu: label_learn_more: "További információ" label_less_or_equal: "<=" label_less_than_ago: "kevesebb, nappal ezelött" + label_link_url: "Link (URL)" label_list: "Lista" label_loading: "Betöltés..." label_lock_user: "Felhasználó zárolása" @@ -2022,6 +2025,7 @@ hu: label_membership_plural: "Memberships" lable_membership_added: "Felhasználó hozzáadva" lable_membership_updated: "Felhasználó frissítve" + label_menu: "Menu" label_menu_badge: pre_alpha: "alfa előtti" alpha: "alfa" @@ -2123,6 +2127,7 @@ hu: label_percent_complete: "%-ban kész" label_project_activity: "Project activity" label_project_attribute_plural: "Projekt attribútumok" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "A projektek teljes száma" label_project_copy_notifications: "E-mail értesítéseket küld a projekt másolás során" label_project_latest: "Legújabb projektek" @@ -2137,7 +2142,7 @@ hu: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{storage} lemezterületet %{count} projekt használja" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "Minden projekt megtekintése" label_project_show_details: "Projekt részleteinek megjelenítése" label_project_hide_details: "Projekt részleteinek elrejtése" @@ -2194,6 +2199,7 @@ hu: label_setting_plural: "Beállítások" label_system_settings: "Rendszerbeállítások" label_show_completed_versions: "Befejezett verziók megjelenítése" + label_columns: "Oszlopok" label_sort: "Rendez" label_sort_by: "Rendezés %{value} szerint" label_sorted_by: "rendezve %{value} szerint" @@ -2737,7 +2743,7 @@ hu: member_of_group: "Hozzárendelt csoport" name_or_identifier: "Név vagy azonosító" only_subproject_id: "Csak alprojekt" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Beleértve az alprojektet" repositories: @@ -2882,6 +2888,7 @@ hu: setting_app_subtitle: "Alkalmazás felirat" setting_app_title: "Alkalmazás címe" setting_attachment_max_size: "Melléklet max. méret" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Automatikus letöltés tároló változás" @@ -2983,6 +2990,8 @@ hu: attachments: whitelist_text_html: > Határozza meg a feltöltött fájlok érvényes fájlkiterjesztéseinek és/vagy mime típusainak listáját.
Adjon meg fájlkiterjesztéseket (pl. %{ext_example} ) vagy mime típusokat (pl. %{mime_example} ).
Hagyja üresen, ha bármilyen fájltípust szeretne feltölteni. Több érték megengedett (egy sor minden értékhez). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3219,6 +3228,10 @@ hu: input_label: "Oszlopok hozzáadása" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "További források" getting_started: "Kezdés" @@ -3566,7 +3579,7 @@ hu: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/id.seeders.yml b/config/locales/crowdin/id.seeders.yml index f9f7401367fb..35f64a672989 100644 --- a/config/locales/crowdin/id.seeders.yml +++ b/config/locales/crowdin/id.seeders.yml @@ -251,6 +251,21 @@ id: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/id.yml b/config/locales/crowdin/id.yml index a94bae702514..1cc8e2ce2e19 100644 --- a/config/locales/crowdin/id.yml +++ b/config/locales/crowdin/id.yml @@ -191,7 +191,7 @@ id: plural: "Tindakan khusus" new: "Tindakan kustom baru" edit: "Edit tindakan kustom %{name}" - execute: "Jalankan %{nama}" + execute: "Jalankan %{name}" upsale: title: "Tindakan khusus" description: "Tindakan kustom adalah pintasan sekali klik ke serangkaian tindakan yang ditentukan sebelumnya yang dapat Anda sediakan pada paket kerja tertentu berdasarkan status, peran, jenis, atau proyek." @@ -258,6 +258,7 @@ id: lists: active: "Active projects" my: "Project saya" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -298,7 +299,14 @@ id: storage: no_results_title_text: Tidak ada ruang disk terekam tambahan yang digunakan oleh proyek ini. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: There are currently no members part of this project. @@ -316,6 +324,7 @@ id: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Grup" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -470,7 +479,7 @@ id: no_common_statuses_exists: "Tidak ada status yang tersedia untuk semua paket pekerjaan yang dipilih. Status mereka tidak dapat diubah." unsupported_for_multiple_projects: "Bulk move/copy is not supported for work packages from multiple projects" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -768,6 +777,7 @@ id: not_an_iso_date: "is not a valid date. Required format: YYYY-MM-DD." not_same_project: "harus berasal dari proyek yang sama." odd: "harus ganjil." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "tidak dapat divalidasi dengan ekspresi reguler terkait." smaller_than_or_equal_to_max_length: "harus lebih kecil atau sama dengan panjang maksimum." taken: "sudah dipakai." @@ -807,7 +817,7 @@ id: empty: "Nilai (%{name}) tidak boleh kosong." inclusion: "nilai (%{name}) tidak disetel ke salah satu nilai yang diperbolehkan." not_logged_in: "Nilai (%{name}) tidak dapat disetel karena Anda belum masuk." - not_an_integer: "(%{nama}) bukan bilangan bulat." + not_an_integer: "(%{name}) bukan bilangan bulat." smaller_than_or_equal_to: "(%{name}) harus lebih kecil dari atau sama dengan %{count}." greater_than_or_equal_to: "(%{name}) harus lebih besar dari atau sama dengan %{count}." format: "%{message}" @@ -1241,6 +1251,7 @@ id: button_edit: "Edit" button_edit_associated_wikipage: "Edit Wiki terkait: %{page_title}" button_expand_all: "Buka semua" + button_favorite: "Add to favorites" button_filter: "Filter" button_generate: "Generate" button_list: "List" @@ -1268,6 +1279,7 @@ id: button_unarchive: "Batalkan arsip" button_uncheck_all: "Uncek semua" button_unlock: "Unlock" + button_unfavorite: "Remove from favorites" button_unwatch: "Unwatch" button_update: "Update" button_upgrade: "Tingkatkan" @@ -1535,6 +1547,7 @@ id: pdf_overview_table: "Tabel PDF" pdf_report_with_images: "Laporan PDF dengan gambar" pdf_report: "Laporan PDF" + pdf_gantt: "PDF Gantt" image: omitted: "Gambar tidak diekspor." units: @@ -1682,17 +1695,6 @@ id: mentioned: "Anda telah disebutkan di %{work_package}" responsible: "Anda telah bertanggung jawab atas %{work_package}" watched: "Anda sedang menonton %{work_package}" - update_info_mail: - body: > - Kami sangat senang mengumumkan rilis OpenProject 12.0. Ini adalah rilis utama yang diharapkan akan secara signifikan meningkatkan cara Anda menggunakan OpenProject. - Dimulai dengan rilis ini, kami memperkenalkan notifikasi dalam aplikasi. Mulai sekarang, Anda akan menerima pemberitahuan untuk pembaruan paket kerja langsung di OpenProject. Anda dapat menandai notifikasi ini sebagai telah dibaca, membalas komentar, atau bahkan langsung mengubah atribut paket kerja tanpa meninggalkan pusat notifikasi. - Ini juga berarti bahwa kami tidak akan lagi menggunakan email untuk pemberitahuan. Menurut kami, pusat notifikasi baru adalah tempat yang lebih baik untuk melihat dan menindaklanjuti pembaruan ini. Namun demikian, jika Anda ingin terus menerima pembaruan melalui email, Anda dapat memilih untuk menerima pengingat email setiap hari pada waktu tertentu yang Anda pilih. - Pastikan untuk memverifikasi pengaturan notifikasi default baru Anda, dan atur preferensi Anda untuk notifikasi dan pengingat email melalui pengaturan akun Anda. Anda dapat melakukannya melalui tombol "Ubah setelan email" di bawah. - Kami harap notifikasi dalam aplikasi bermanfaat dan membuat Anda semakin produktif. - Hormat kami, Tim OpenProject - body_header: "Versi 12.0 dengan Notification Center" - body_subheader: "News" - subject: "Perubahan penting pada notifikasi dengan rilis 12.0" label_accessibility: "Kemampuan akses" label_account: "Akun" label_active: "Aktif" @@ -1873,7 +1875,7 @@ id: label_enterprise_support: "Dukungan perusahaan" label_enterprise_addon: "Enterprise add-on" label_environment: "Environment" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "adalah" label_everywhere: "di mana pun" label_example: "Contoh" @@ -1887,7 +1889,7 @@ id: label_expanded_click_to_collapse: "Diperluas. Klik untuk menciutkan" label_f_hour: "%{value} jam" label_f_hour_plural: "%{value} jam" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Feed" label_feeds_access_key: "RSS access key" label_feeds_access_key_created_on: "RSS access key dibuat %{value} yang lalu" @@ -1960,6 +1962,7 @@ id: label_learn_more: "Pelajari lebih lanjut" label_less_or_equal: "<=" label_less_than_ago: "kemarin lusa" + label_link_url: "Link (URL)" label_list: "List" label_loading: "Loading..." label_lock_user: "Mengunci pengguna" @@ -1985,6 +1988,7 @@ id: label_membership_plural: "Memberships" lable_membership_added: "Anggota ditambahkan" lable_membership_updated: "Anggota diperbarui" + label_menu: "Menu" label_menu_badge: pre_alpha: "pra-alfa" alpha: "alfa" @@ -2086,6 +2090,7 @@ id: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Atribut proyek" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Jumlah proyek" label_project_copy_notifications: "Kirim email notifikasi selama meng-copy Project" label_project_latest: "Project terbaru" @@ -2100,7 +2105,7 @@ id: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} proyek menggunakan %{storage} dari storage" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "Lihat semua Project" label_project_show_details: "Tampilkan detail proyek" label_project_hide_details: "Sembunyikan detail proyek" @@ -2157,6 +2162,7 @@ id: label_setting_plural: "Pengaturan" label_system_settings: "System settings" label_show_completed_versions: "Tampilkan versi lengkap" + label_columns: "Kolom" label_sort: "Urutkan" label_sort_by: "Urutkan %{value}" label_sorted_by: "diurutkan berdasarkan %{value}" @@ -2697,7 +2703,7 @@ id: member_of_group: "Ditugaskan untuk Grup" name_or_identifier: "Nama atau pengenal" only_subproject_id: "Hanya subproyek" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Termasuk subproyek" repositories: @@ -2840,6 +2846,7 @@ id: setting_app_subtitle: "Subjudul aplikasi" setting_app_title: "Judul aplikasi" setting_attachment_max_size: "Ukuran lampiran maks." + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Ambil perubahan repository secara otomatis" @@ -2941,6 +2948,8 @@ id: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3177,6 +3186,10 @@ id: input_label: "Tambah kolom" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Additional resources" getting_started: "Getting started" @@ -3522,7 +3535,7 @@ id: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/it.seeders.yml b/config/locales/crowdin/it.seeders.yml index 1be7a8cd42b2..f493311efd14 100644 --- a/config/locales/crowdin/it.seeders.yml +++ b/config/locales/crowdin/it.seeders.yml @@ -251,6 +251,21 @@ it: * [ ] Altra birra item_4: subject: Fine del progetto + wiki: | + _In questa wiki puoi creare e modificare in modo collaborativo pagine e sottopagine per creare una wiki di progetto._ + + **Puoi:** + + * Inserire testo e immagini, anche con copia e incolla da altri documenti + * Creare una gerarchia di pagine con pagine principali + * Includere pagine wiki nel menu del progetto + * Utilizzare le macro per includere ad esempio: sommario, elenchi di macro-attività o diagrammi di Gantt + *Includere pagine wiki in altri campi di testo, ad esempio pagina di panoramica del progetto + * Includere link ad altri documenti + * Visualizzare la cronologia delle modifiche + * Visualizzare come Markdown + + Maggiori informazioni: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Progetto Scrum status_explanation: Tutti gli incarichi sono in programma. Le persone coinvolte conoscono i propri compiti. Il sistema è completamente configurato. diff --git a/config/locales/crowdin/it.yml b/config/locales/crowdin/it.yml index 5b91398e306a..79da08aab93d 100644 --- a/config/locales/crowdin/it.yml +++ b/config/locales/crowdin/it.yml @@ -261,6 +261,7 @@ it: lists: active: "Progetti attivi" my: "I miei progetti" + favored: "Progetti preferiti" archived: "Progetti archiviati" my_private: "I miei elenchi di progetti privati" new: @@ -301,7 +302,14 @@ it: storage: no_results_title_text: Nessuno spazio su disco registrato aggiuntivo consumato da questo progetto. lists: - can_be_saved_as: "Le modifiche possono essere salvate solo in un nuovo elenco." + create: + success: "L'elenco modificato è stato salvato come nuovo elenco" + failure: "L'elenco modificato non può essere salvato: %{errors}" + update: + success: "L'elenco modificato è stato salvato" + failure: "L'elenco modificato non può essere salvato: %{errors}" + can_be_saved: "Elenco modificato:" + can_be_saved_as: "Le modifiche possono essere salvate solo in un nuovo elenco:" members: index: no_results_title_text: Al momento non vi sono partecipanti a questo progetto. @@ -319,6 +327,7 @@ it: project_roles: "Ruoli del progetto" wp_shares: "Condivisioni della macro-attività" groups: "Gruppi" + no_modify_on_shared: "Al momento non è possibile modificare o rimuovere le iscrizioni condivise tramite la pagina dei membri. Utilizza invece la modalità di condivisione.\n" delete_member_dialog: title: "Rimuovi membro" will_remove_the_users_role: "Questa operazione rimuoverà il ruolo dell'utente da questo progetto." @@ -481,7 +490,7 @@ it: no_common_statuses_exists: "Nessuno stato disponibile per tutte le macro-attività selezionate. Non è possibile cambiare lo stato." unsupported_for_multiple_projects: "Il comando sposta/copia multiplo non è supportato per macroattività da più progetti" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Flusso di lavoro mancante per la condivisione di macro-attività" message: "Nessun flusso di lavoro è configurato per il ruolo \"Editor di macro-attività\". Senza un flusso di lavoro, la condivisione con l'utente non può alterare lo stato della macro-attività. I flussi di lavoro possono essere copiati. Seleziona un tipo di origine (ad esempio \"Attività\") e un ruolo di origine (ad esempio \"Membro\"). Quindi seleziona i tipi obiettivo. Per cominciare, potresti selezionare tutti i tipi come obiettivi. Infine, seleziona il ruolo \"Editor di macro-attività\" come destinazione e premi \"Copia\". Dopo aver creato le impostazioni predefinite, perfeziona i flussi di lavoro come fai per ogni altro ruolo." link_message: "Configura i flussi di lavoro nell'amministrazione." @@ -779,6 +788,7 @@ it: not_an_iso_date: "non è una data valida. Formato richiesto: AAAA-MM-GG." not_same_project: "non appartiene allo stesso progetto." odd: "deve essere dispari." + regex_match_failed: "non corrisponde all'espressione regolare %{expression}." regex_invalid: "non può essere convalidato con l'espressione regolare associata." smaller_than_or_equal_to_max_length: "deve essere minore o uguale alla lunghezza massima." taken: "è già stato usato." @@ -990,13 +1000,13 @@ it: only_same_project_categories_allowed: "La categoria di una macro-attività deve essere contenuta nel medesimo progetto della macro-attività." does_not_exist: "La categoria specificata non esiste." estimated_hours: - cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work." - must_be_set_when_remaining_work_is_set: "Required when Remaining work is set." - only_values_greater_or_equal_zeroes_allowed: "Must be >= 0." + cant_be_inferior_to_remaining_work: "Non può essere inferiore al Lavoro residuo." + must_be_set_when_remaining_work_is_set: "Obbligatorio quando si imposta Lavoro residuo." + only_values_greater_or_equal_zeroes_allowed: "Deve essere >=0." format: "%{message}" remaining_hours: - cant_exceed_work: "Cannot be higher than Work." - must_be_set_when_work_is_set: "Required when Work is set." + cant_exceed_work: "Non può essere superiore a Lavoro." + must_be_set_when_work_is_set: "Obbligatorio quando è impostato Lavoro." format: "%{message}" readonly_status: "La macro-attività è in uno stato di sola lettura perciò i suoi attributi non possono essere modificati." type: @@ -1260,6 +1270,7 @@ it: button_edit: "Modifica" button_edit_associated_wikipage: "Modifica pagina wiki associata: %{page_title}" button_expand_all: "Espandi tutto" + button_favorite: "Aggiunti ai preferiti" button_filter: "Filtro" button_generate: "Genera" button_list: "Elenca" @@ -1287,6 +1298,7 @@ it: button_unarchive: "Rimuovi dall'archivio" button_uncheck_all: "Deseleziona tutti" button_unlock: "Sblocca" + button_unfavorite: "Rimuovi dai preferiti" button_unwatch: "Smetti di Osservare" button_update: "Aggiorna" button_upgrade: "Aggiornamento" @@ -1496,7 +1508,7 @@ it: error_can_not_delete_entry: "Impossibile eliminare la voce" error_can_not_delete_custom_field: "Impossibile eliminare il campo personalizzato" error_can_not_delete_in_use_archived_undisclosed: "Esistono macro-attività anche nei progetti archiviati. È necessario chiedere a un amministratore di eseguire l'eliminazione per vedere quali progetti sono impattati." - error_can_not_delete_in_use_archived_work_packages: "Ci sono macro-attività anche nei progetti archiviati. Devi prima riattivare i seguenti progetti, prima di poter modificare l'attributo delle rispettive macro-attività: %%{archived_projects_urls}" + error_can_not_delete_in_use_archived_work_packages: "Ci sono macro-attività anche nei progetti archiviati. Devi prima riattivare i seguenti progetti, prima di poter modificare l'attributo delle rispettive macro-attività: %{archived_projects_urls}" error_can_not_delete_type: explanation: 'Questo tipo contiene macro-attività e non può essere eliminato. Puoi vedere tutte le macro-attività interessate in questa vista.' error_can_not_delete_standard_type: "Tipi standard non possono essere eliminati." @@ -1572,6 +1584,7 @@ it: pdf_overview_table: "Tabella PDF" pdf_report_with_images: "Rapporto PDF con immagini" pdf_report: "Rapporto PDF" + pdf_gantt: "Gantt in PDF" image: omitted: "Immagine non esportata." units: @@ -1650,11 +1663,11 @@ it: file_links_journal: > D'ora in poi, l'attività relativa ai collegamenti ai file (file archiviati in archivi esterni) verrà visualizzata qui nella scheda Attività. Di seguito trovi attività riguardanti link già esistenti: progress_calculation_adjusted_from_disabled_mode: >- - Progress calculation automatically set to work-based mode and adjusted with version update. + Il calcolo dei progressi è impostato automaticamente in modalità basata sul lavoro e modificato con l'aggiornamento della versione. progress_calculation_adjusted: >- - Progress calculation automatically adjusted with version update. + Il calcolo dei progressi è modificato con l'aggiornamento della versione. totals_removed_from_childless_work_packages: >- - Work and progress totals automatically removed for non-parent work packages with version update. This is a maintenance task and can be safely ignored. + I totali di lavoro e avanzamento vengono rimossi automaticamente per le macro-attività non principali con l'aggiornamento della versione. Questa è un'attività di manutenzione e può essere tranquillamente ignorata. links: configuration_guide: "Guida di configurazione" get_in_touch: "Hai dei dubbi? Mettiti in contatto con noi." @@ -1719,17 +1732,6 @@ it: mentioned: "Sei stato menzionato in %{work_package}" responsible: "Sei diventato responsabile per %{work_package}" watched: "Stai guardando il %{work_package}" - update_info_mail: - body: > - Siamo lieti di annunciare il rilascio di OpenProject 12.0. Si tratta di una versione importante che si spera migliorerà significativamente il modo in cui si utilizza OpenProject. - A partire da questa versione, stiamo introducendo le notifiche in-app. D'ora in poi, riceverai notifiche per gli aggiornamenti ai pacchetti di lavoro direttamente in OpenProject. È possibile contrassegnare queste notifiche come lette, rispondere a un commento o persino modificare direttamente gli attributi del pacchetto di lavoro senza uscire dal centro notifiche. - Ciò significa anche che non utilizzeremo più le e-mail per le notifiche. Riteniamo che il nuovo centro notifiche sia un posto migliore per visualizzare e agire in base a questi aggiornamenti. Tuttavia, se desideri continuare a ricevere aggiornamenti via e-mail, puoi scegliere di ricevere promemoria giornalieri via e-mail in momenti particolari di tua scelta. - Assicurati di verificare le nuove impostazioni di notifica predefinite e imposta le tue preferenze per le notifiche e i promemoria via e-mail tramite le impostazioni del tuo account. Puoi farlo tramite il pulsante "Modifica impostazioni e-mail" qui sotto. Ci auguriamo che tu trovi utili le notifiche in-app e che ti rendano ancora più produttivo. - Sinceramente - Il team di OpenProject - body_header: "Versione 12.0 con Centro Notifiche" - body_subheader: "Notizie" - subject: "Modifiche importanti alle notifiche con il rilascio della versione 12.0" label_accessibility: "Accessibilità" label_account: "Account" label_active: "Attivo" @@ -1910,7 +1912,7 @@ it: label_enterprise_support: "Supporto per Imprese" label_enterprise_addon: "Componente aggiuntivo Enterprise" label_environment: "Ambiente" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Stime e progressi" label_equals: "è" label_everywhere: "ovunque" label_example: "Esempio" @@ -1924,7 +1926,7 @@ it: label_expanded_click_to_collapse: "Espanso. Clicca per comprimere" label_f_hour: "%{value} ora" label_f_hour_plural: "%{value} ore" - label_favoured: "Preferito" + label_favorite: "Preferito" label_feed_plural: "Feed" label_feeds_access_key: "Chiave di accesso RSS" label_feeds_access_key_created_on: "Chiave di accesso RSS creato %{value} fa" @@ -1997,6 +1999,7 @@ it: label_learn_more: "Scopri di più" label_less_or_equal: "<=" label_less_than_ago: "meno di qualche giorno fa" + label_link_url: "Link (URL)" label_list: "Elenca" label_loading: "Caricamento..." label_lock_user: "Blocca utente" @@ -2022,6 +2025,7 @@ it: label_membership_plural: "Iscrizioni" lable_membership_added: "Membro aggiunto" lable_membership_updated: "Membro aggiornato" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2123,6 +2127,7 @@ it: label_percent_complete: "% completamento" label_project_activity: "Attività del progetto" label_project_attribute_plural: "Attributi del progetto" + label_project_attribute_manage_link: "Gestisci gli attributi del progetto" label_project_count: "Numero totale di progetti" label_project_copy_notifications: "Invia le email di notifica durante la copia del progetto" label_project_latest: "Ultimi progetti" @@ -2137,7 +2142,7 @@ it: label_project_attributes_settings: "Impostazioni degli attributi del progetto" label_project_storage_plural: "Archiviazione dei file" label_project_storage_project_folder: "Archiviazione dei file: cartelle di progetto" - label_projects_storage_information: "%{count} progetti per %{storage} di spazio di archiviazione su disco" + label_projects_disk_usage_information: "%{count} progetti occupano uno spazio su disco di %{used_disk_space}" label_project_view_all: "Vedi tutti i progetti" label_project_show_details: "Mostra dettagli progetto" label_project_hide_details: "Nascondi dettagli progetto" @@ -2194,6 +2199,7 @@ it: label_setting_plural: "Impostazioni" label_system_settings: "Impostazioni di sistema" label_show_completed_versions: "Visualizza le versioni completate" + label_columns: "Colonne" label_sort: "Ordina" label_sort_by: "Ordina per %{value}" label_sorted_by: "ordinati per %{value}" @@ -2738,7 +2744,7 @@ it: member_of_group: "Gruppo dell'incaricato" name_or_identifier: "Nome o identificativo" only_subproject_id: "Solo sottoprogetto" - shared_with_user: "Condivisa con l'utente" + shared_with_user: "Condiviso con gli utenti" shared_with_me: "Condivisi con me" subproject_id: "Sottoprogetto incluso" repositories: @@ -2883,6 +2889,7 @@ it: setting_app_subtitle: "Sottotitolo applicazione" setting_app_title: "Titolo applicazione" setting_attachment_max_size: "Dimensione max. dell'allegato" + setting_show_work_package_attachments: "Mostra gli allegati nella scheda File per impostazione predefinita" setting_antivirus_scan_mode: "Modalità di scansione" setting_antivirus_scan_action: "Azione sul file infetto" setting_autofetch_changesets: "Recupera automaticamente i cambiamenti dell'archivio di progetto" @@ -2984,6 +2991,8 @@ it: attachments: whitelist_text_html: > Definisci un elenco di estensioni di file valide e/o tipi MIME per i file caricati.
Inserisci le estensioni dei file (ad es. %{ext_example}) o i tipi MIME (ad es. %{mime_example}).
Lascia vuoto per consentire il caricamento di qualsiasi tipo di file. Sono consentiti più valori (una riga per ogni valore). + show_work_package_attachments: > + La disattivazione di questa opzione nasconderà l'elenco degli allegati nella scheda dei file delle macro-attività per i nuovi progetti. I file allegati nella descrizione di una macro-attività verranno comunque caricati nell'archivio interno degli allegati. antivirus: title: "Scansione antivirus" clamav_ping_failed: "Impossibile connettersi al daemon ClamAV. Ricontrolla la configurazione e riprova." @@ -3002,7 +3011,7 @@ it: Seleziona l'azione da eseguire per i file su cui è stato rilevato un virus:
  • %{quarantine_option}: Metti in quarantena il file, impedendo agli utenti di accedervi. Gli amministratori possono rivedere ed eliminare i file in quarantena nel pannello di controllo.
  • %{delete_option}: elimina il file immediatamente.
modes: clamav_socket_html: Inserisci la socket al daemon clamd, ad esempio %{example} - clamav_host_html: Immettere il nome host e la porta del daemon clamd separati dai due punti. Ad esempio, %{esempio} + clamav_host_html: Immettere il nome host e la porta del daemon clamd separati dai due punti. Ad esempio, %{example} description_html: > Seleziona la modalità in cui deve funzionare l'integrazione dello scanner antivirus.
  • %{disabled_option}: i file caricati non vengono sottoposti a scansione antivirus.
  • %{socket_option}: hai configurato un ClamAV sullo stesso server di OpenProject e il daemon di scansione clamd è in esecuzione in background
  • %{host_option}: invierai il file a un host di scansione antivirus esterno.
brute_force_prevention: "Blocco automatico degli utenti" @@ -3220,6 +3229,10 @@ it: input_label: "Aggiungi colonne" input_placeholder: "Seleziona una colonna" drag_area_label: "Gestisci e riordina colonne" + sort_by: + automatic: + heading: "Automatico" + description: "Ordina %{plural} in base a uno o più criteri di ordinamento. Perderai l'ordinamento precedente." top_menu: additional_resources: "Risorse aggiuntive" getting_started: "Per cominciare" @@ -3567,7 +3580,7 @@ it: link: link plugin_openproject_auth_plugins: name: "Plugin Autenticazione OpenProject" - description: "Integrazione dei fornitori di strategie OmniAuth per l'autenticazione in Openproject." + description: "Integrazione dei fornitori di strategie OmniAuth per l'autenticazione in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Aggiunge il provider OmniAuth SAML a OpenProject" diff --git a/config/locales/crowdin/ja.seeders.yml b/config/locales/crowdin/ja.seeders.yml index 3281fa65a4de..e8187b07c2de 100644 --- a/config/locales/crowdin/ja.seeders.yml +++ b/config/locales/crowdin/ja.seeders.yml @@ -251,6 +251,21 @@ ja: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/ja.yml b/config/locales/crowdin/ja.yml index 31433fada64f..a1549ae1af74 100644 --- a/config/locales/crowdin/ja.yml +++ b/config/locales/crowdin/ja.yml @@ -262,6 +262,7 @@ ja: lists: active: "Active projects" my: "参加しているプロジェクト" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -302,7 +303,14 @@ ja: storage: no_results_title_text: このプロジェクトによって使用される追加のディスク領域はありません。 lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: 現在、このプロジェクトのメンバーはいません。 @@ -320,6 +328,7 @@ ja: project_roles: "Project roles" wp_shares: "Work package shares" groups: "グループ" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -473,7 +482,7 @@ ja: no_common_statuses_exists: "選択されたすべてのワークパッケージに利用できるステータスはありません。 それらの状態は変更できません。" unsupported_for_multiple_projects: "複数のプロジェクトからのワークパッケージの一括移動 / コピーはサポートされていません" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -771,6 +780,7 @@ ja: not_an_iso_date: "は有効な日付ではありません。必要な形式: YYYY-MM-dd。" not_same_project: "は同じプロジェクトに属していません。" odd: "は奇数にしてください。" + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "関連付けられた正規表現を検証できませんでした。" smaller_than_or_equal_to_max_length: "は最大長さより以下でなければなりません。" taken: "は既に使用されています。" @@ -1244,6 +1254,7 @@ ja: button_edit: "編集" button_edit_associated_wikipage: "関係するWiki ページを編集: %{page_title}" button_expand_all: "全てを展開" + button_favorite: "Add to favorites" button_filter: "フィルタ" button_generate: "生成" button_list: "リスト" @@ -1271,6 +1282,7 @@ ja: button_unarchive: "アーカイブを解除" button_uncheck_all: "全てを選択解除" button_unlock: "ロックを解除" + button_unfavorite: "Remove from favorites" button_unwatch: "ウォッチしない" button_update: "更新" button_upgrade: "アップグレード" @@ -1538,6 +1550,7 @@ ja: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "画像はエクスポートされませんでした。" units: @@ -1685,17 +1698,6 @@ ja: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "ニュース" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "アクセシビリティ" label_account: "アカウント" label_active: "アクティブ" @@ -1876,7 +1878,7 @@ ja: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "環境" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "等しい" label_everywhere: "どこにでも" label_example: "例" @@ -1890,7 +1892,7 @@ ja: label_expanded_click_to_collapse: "拡大しました。クリックすると閉じます" label_f_hour: "%{value} 時間" label_f_hour_plural: "%{value} 時間" - label_favoured: "Favoured" + label_favorite: "お気に入り" label_feed_plural: "フィード" label_feeds_access_key: "RSSアクセスキー" label_feeds_access_key_created_on: "RSSアクセスキーが%{value}前に作成されました" @@ -1963,6 +1965,7 @@ ja: label_learn_more: "もっと詳しく" label_less_or_equal: "以下" label_less_than_ago: "今日より○日前以降" + label_link_url: "Link (URL)" label_list: "リスト" label_loading: "読み込み中..." label_lock_user: "ユーザーをロック" @@ -1988,6 +1991,7 @@ ja: label_membership_plural: "Memberships" lable_membership_added: "メンバーが追加されました" lable_membership_updated: "メンバーが更新されました" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2089,6 +2093,7 @@ ja: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "プロジェクトの合計数" label_project_copy_notifications: "プロジェクトのコピーの時、コピーした内容をメール通知する" label_project_latest: "最新のプロジェクト" @@ -2103,7 +2108,7 @@ ja: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} プロジェクトが %{storage} ディスクストレージを使用して います" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "全プロジェクトを表示" label_project_show_details: "プロジェクトの詳細を表示" label_project_hide_details: "プロジェクトの詳細を非表示" @@ -2160,6 +2165,7 @@ ja: label_setting_plural: "設定" label_system_settings: "システム設定" label_show_completed_versions: "終了したバージョンを表示" + label_columns: "列" label_sort: "並べ替え" label_sort_by: "%{value}で並べ替え" label_sorted_by: "%{value}で並べ替えている" @@ -2702,7 +2708,7 @@ ja: member_of_group: "担当者のグループ" name_or_identifier: "名前または ID" only_subproject_id: "サブプロジェクトのみ" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2847,6 +2853,7 @@ ja: setting_app_subtitle: "アプリケーションのサブタイトル" setting_app_title: "アプリケーションのタイトル" setting_attachment_max_size: "添付ファイルの最大サイズ" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "リポジトリの変更を自動取得" @@ -2948,6 +2955,8 @@ ja: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3184,6 +3193,10 @@ ja: input_label: "列を追加" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "追加リソース" getting_started: "はじめに" @@ -3528,7 +3541,7 @@ ja: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/js-af.yml b/config/locales/crowdin/js-af.yml index 9cdcb43a8171..17ffa103c4ef 100644 --- a/config/locales/crowdin/js-af.yml +++ b/config/locales/crowdin/js-af.yml @@ -330,6 +330,18 @@ af: years: "Years" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "nee" general_text_yes: "ja" general_text_No: "Nee" @@ -348,11 +360,10 @@ af: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ af: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "dae gelede" label_all: "alle" + label_all_uppercase: "All" label_all_work_packages: "all work packages" label_and: "and" label_ascending: "Stygende" @@ -419,6 +431,7 @@ af: label_expand_project_menu: "Expand project menu" label_export: "Export" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "Lêer" label_filesize: "Grootte" label_general: "Algemeen" @@ -1043,7 +1056,7 @@ af: sharing: share: "Share" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1269,6 +1282,9 @@ af: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Continue" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Projekte" diff --git a/config/locales/crowdin/js-ar.yml b/config/locales/crowdin/js-ar.yml index 1b0d4be7bcc8..df9f44114ae7 100644 --- a/config/locales/crowdin/js-ar.yml +++ b/config/locales/crowdin/js-ar.yml @@ -330,6 +330,18 @@ ar: years: "السنوات" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "لا" general_text_yes: "نعم" general_text_No: "لا" @@ -348,11 +360,10 @@ ar: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ ar: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "أيام مضت" label_all: "الكل" + label_all_uppercase: "الجميع" label_all_work_packages: "جميع مجموعات العمل" label_and: "و" label_ascending: "ترتيب تصاعدي" @@ -419,6 +431,7 @@ ar: label_expand_project_menu: "Expand project menu" label_export: "تصدير" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "ملف" label_filesize: "حجم" label_general: "عام" @@ -1047,7 +1060,7 @@ ar: sharing: share: "شارك" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1281,6 +1294,9 @@ ar: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Continue" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "المشاريع" diff --git a/config/locales/crowdin/js-az.yml b/config/locales/crowdin/js-az.yml index 616df6b757d4..b94399996b53 100644 --- a/config/locales/crowdin/js-az.yml +++ b/config/locales/crowdin/js-az.yml @@ -330,6 +330,18 @@ az: years: "Years" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "no" general_text_yes: "yes" general_text_No: "No" @@ -348,11 +360,10 @@ az: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ az: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "days ago" label_all: "all" + label_all_uppercase: "All" label_all_work_packages: "bütün iş paketləri" label_and: "and" label_ascending: "Ascending" @@ -419,6 +431,7 @@ az: label_expand_project_menu: "Expand project menu" label_export: "İxrac et" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "File" label_filesize: "Size" label_general: "General" @@ -1043,7 +1056,7 @@ az: sharing: share: "Paylaş" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1269,6 +1282,9 @@ az: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Davam" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Projects" diff --git a/config/locales/crowdin/js-be.yml b/config/locales/crowdin/js-be.yml index 1804fdb0de03..cd6446dfe3bb 100644 --- a/config/locales/crowdin/js-be.yml +++ b/config/locales/crowdin/js-be.yml @@ -330,6 +330,18 @@ be: years: "Years" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "no" general_text_yes: "yes" general_text_No: "No" @@ -348,11 +360,10 @@ be: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ be: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "days ago" label_all: "all" + label_all_uppercase: "All" label_all_work_packages: "all work packages" label_and: "and" label_ascending: "Ascending" @@ -419,6 +431,7 @@ be: label_expand_project_menu: "Expand project menu" label_export: "Export" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "File" label_filesize: "Памер" label_general: "Асноўныя" @@ -1045,7 +1058,7 @@ be: sharing: share: "Share" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1275,6 +1288,9 @@ be: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Continue" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Projects" diff --git a/config/locales/crowdin/js-bg.yml b/config/locales/crowdin/js-bg.yml index 3eceee7457a0..8abf8f41f6e0 100644 --- a/config/locales/crowdin/js-bg.yml +++ b/config/locales/crowdin/js-bg.yml @@ -330,6 +330,18 @@ bg: years: "Години" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "Не" general_text_yes: "Да" general_text_No: "Не" @@ -348,11 +360,10 @@ bg: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ bg: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "преди" label_all: "всички" + label_all_uppercase: "All" label_all_work_packages: "всички работни пакети" label_and: "и" label_ascending: "Възходящо" @@ -419,6 +431,7 @@ bg: label_expand_project_menu: "Expand project menu" label_export: "Експортиране" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "Файл" label_filesize: "Размер" label_general: "Общ" @@ -1043,7 +1056,7 @@ bg: sharing: share: "Споделяне" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1269,6 +1282,9 @@ bg: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Продължаване" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Проекти" diff --git a/config/locales/crowdin/js-ca.yml b/config/locales/crowdin/js-ca.yml index 3aa7082ba5db..e7e7b6f5c630 100644 --- a/config/locales/crowdin/js-ca.yml +++ b/config/locales/crowdin/js-ca.yml @@ -330,6 +330,18 @@ ca: years: "Anys" description: > Seleccioni el nivell inicial de zoom que s'ha de mostrar quan el zoom automàtic no estigui disponible. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "no" general_text_yes: "sí" general_text_No: "No" @@ -348,11 +360,10 @@ ca: learn_about: "Més informació sobre les noves funcions" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "S'ha produït un error en carregar les dades." @@ -378,6 +389,7 @@ ca: label_added_time_by: 'Afegit per %{author} el %{age}' label_ago: "dies abans" label_all: "tot" + label_all_uppercase: "Totes" label_all_work_packages: "tots els paquets de treball" label_and: "i" label_ascending: "Ascendent" @@ -419,6 +431,7 @@ ca: label_expand_project_menu: "Expandieix el menú de projecte" label_export: "Exportar" label_export_preparing: "S'està preparant l'exportació i serà descarregada aviat." + label_favorites: "Favorites" label_filename: "Fitxer" label_filesize: "Mida" label_general: "General" @@ -1043,7 +1056,7 @@ ca: sharing: share: "Compartir" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1269,6 +1282,9 @@ ca: placeholder: "L'usuari de marcador de posició ara pot ser utilitzat a %{project}. Per tant, ja pots planejar amb aquest usuari i assignar-li paquets de treball." group: "El grup és ara part de %{project}. Per tant, ja pots planejar amb aquest grup i assignar-li paquets de treball." next_button: "Continua" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Inclou projectes" title: "Projectes" diff --git a/config/locales/crowdin/js-ckb-IR.yml b/config/locales/crowdin/js-ckb-IR.yml index f1252eec7702..fcffae337bd4 100644 --- a/config/locales/crowdin/js-ckb-IR.yml +++ b/config/locales/crowdin/js-ckb-IR.yml @@ -330,6 +330,18 @@ ckb-IR: years: "Years" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "no" general_text_yes: "yes" general_text_No: "No" @@ -348,11 +360,10 @@ ckb-IR: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ ckb-IR: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "days ago" label_all: "all" + label_all_uppercase: "All" label_all_work_packages: "all work packages" label_and: "and" label_ascending: "Ascending" @@ -419,6 +431,7 @@ ckb-IR: label_expand_project_menu: "Expand project menu" label_export: "Export" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "File" label_filesize: "Size" label_general: "General" @@ -1043,7 +1056,7 @@ ckb-IR: sharing: share: "Share" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1269,6 +1282,9 @@ ckb-IR: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Continue" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Projects" diff --git a/config/locales/crowdin/js-cs.yml b/config/locales/crowdin/js-cs.yml index a0ec8b9f27cc..0e42b4e05065 100644 --- a/config/locales/crowdin/js-cs.yml +++ b/config/locales/crowdin/js-cs.yml @@ -329,6 +329,18 @@ cs: years: "Roky" description: > Vyberte počáteční úroveň přiblížení, která by se měla zobrazit, pokud není autozoom dostupný. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Střední" + wide: "Široké" + very_wide: "Velmi široký" + options: + date_zoom: "Přiblížení data" + paper_size: "Velikost papíru" + column_widths: "Šířka sloupce" general_text_no: "ne" general_text_yes: "ano" general_text_No: "Ne" @@ -347,11 +359,10 @@ cs: learn_about: "Další informace o nových funkcích" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Přihlásit kalendář k odběru" inital_setup_error_message: "Při načítání dat došlo k chybě." @@ -377,6 +388,7 @@ cs: label_added_time_by: 'Přidal %{author} v %{age}' label_ago: "dnů před" label_all: "vše" + label_all_uppercase: "Vše" label_all_work_packages: "všechny pracovní balíčky" label_and: "a" label_ascending: "Vzestupně" @@ -418,6 +430,7 @@ cs: label_expand_project_menu: "Rozbalit nabídku projektu" label_export: "Export" label_export_preparing: "Export je připraven a bude brzy k stažení." + label_favorites: "Oblíbené" label_filename: "Soubor" label_filesize: "Velikost" label_general: "Obecné" @@ -1044,7 +1057,7 @@ cs: sharing: share: "Sdílet" title: "Sdílet pracovní balíček" - show_all_users: "Zobrazit všechny sdílené uživatele" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} vybráno" selection: mixed: "Smíšená" @@ -1274,6 +1287,9 @@ cs: placeholder: "Zástupného uživatele lze nyní použít v %{project}. Mezitím již můžete plánovat s tímto uživatelem a přiřadit mu například pracovní balíčky." group: "Skupina je nyní součástí %{project}. Mezitím již můžete s touto skupinou plánovat a přiřadit například pracovní balíčky." next_button: "Pokračovat" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Zahrnout projekty" title: "Projekty" diff --git a/config/locales/crowdin/js-da.yml b/config/locales/crowdin/js-da.yml index 9fe709e05013..1e2066a9c1c6 100644 --- a/config/locales/crowdin/js-da.yml +++ b/config/locales/crowdin/js-da.yml @@ -329,6 +329,18 @@ da: years: "År" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "nej" general_text_yes: "ja" general_text_No: "Nej" @@ -347,11 +359,10 @@ da: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -377,6 +388,7 @@ da: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "dage siden" label_all: "alle" + label_all_uppercase: "All" label_all_work_packages: "alle arbejdspakker" label_and: "og" label_ascending: "Stigende" @@ -418,6 +430,7 @@ da: label_expand_project_menu: "Expand project menu" label_export: "Eksportér" label_export_preparing: "Eksporten er under forberedelse og vil blive hentet om lidt." + label_favorites: "Favorites" label_filename: "Fil" label_filesize: "Størrelse" label_general: "Generelle" @@ -1042,7 +1055,7 @@ da: sharing: share: "Del" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1268,6 +1281,9 @@ da: placeholder: "Pladsholderen kan nu bruges i %{project}. I mellemtiden kan du allerede planlægge med den pågældende bruger og tildele arbejdspakker for eksempel." group: "Gruppen er nu en del af %{project}. I mellemtiden kan du allerede planlægge med denne gruppe og tildele arbejdspakker for eksempel." next_button: "Fortsæt" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Projekter" diff --git a/config/locales/crowdin/js-de.yml b/config/locales/crowdin/js-de.yml index de43d0ca0f2b..a5d4c1e2b163 100644 --- a/config/locales/crowdin/js-de.yml +++ b/config/locales/crowdin/js-de.yml @@ -329,6 +329,18 @@ de: years: "Jahre" description: > Wählen Sie die Zoomstufe für das Gantt-Diagramm aus, wenn kein Autozoom aktiviert ist. + export: + title: "Gantt-Diagramm PDF-Optionen" + button_export: "Exportieren" + column_widths: + narrow: "Schmal" + medium: "Mittel" + wide: "Breit" + very_wide: "Sehr breit" + options: + date_zoom: "Datumszoom" + paper_size: "Papierformat" + column_widths: "Spaltenbreite" general_text_no: "nein" general_text_yes: "ja" general_text_No: "Nein" @@ -347,11 +359,10 @@ de: learn_about: "Erfahren Sie mehr über die neuen Funktionen" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/de/blog/openproject-14-0-release new_features_html: > - Die Version enthält verschiedene neue Funktionen und Verbesserungen:
  • Fortschrittsberechnung über Arbeitspaket-Hierarchien hinweg.
  • Strukturierte Verwaltung von Attributen auf der Projektübersichtsseite.
  • Optimierte Ansicht der benutzerdefinierten Felder in der Projektliste und der Projektübersicht.
  • Vereinheitlichte Seitenköpfe mit dem schlanken Primer-Design.
  • Weitere Verbesserungen an Besprechungen, wie dem Hochladen von Anhängen, setzen eines Referenten und Anzeige des Änderungsverlaufs.
  • Automatische Warnungen für defekte Dateispeicher und Kontrolle durch mehr Optionen.
  • Verwaltete Projektordner für OneDrive/SharePoint können beim Kopieren von Projekten mit kopiert werden.
  • Admins anfragen können, Freigaben für Arbeitspakete zu entfernen, wenn Sie eine Projektmitgliedschaft widerrufen.
  • 4- und 8-Wochen-Anzeigemodi im Teamplaner.
+ Die Version enthält verschiedene neue Funktionen und Verbesserungen:
  • PDF-Export der Gantt-Ansicht, z.B. zum Drucken (Enterprise Add-on)
  • Favorisierte Projekte
  • Abschnitte in Besprechungen
  • Anzeige von Besprechungen im Kalender auf "Meine Seite" und den Projektübersichtsseiten
  • Möglichkeit, Anhänge auf dem Dateien-Tab auszublenden
  • Benutzerdefinierte Felder vom Typ Link (URL)
ical_sharing_modal: title: "Kalender abonnieren" inital_setup_error_message: "Beim Abrufen der Daten ist ein Fehler aufgetreten." @@ -377,6 +388,7 @@ de: label_added_time_by: 'Hinzugefügt von %{author} am %{age}' label_ago: "Tage her" label_all: "alle" + label_all_uppercase: "Alle" label_all_work_packages: "alle Arbeitspakete" label_and: "und" label_ascending: "Aufsteigend" @@ -418,6 +430,7 @@ de: label_expand_project_menu: "Projektmenü aufklappen" label_export: "Exportieren" label_export_preparing: "Der Export wird vorbereitet und wird in Kürze heruntergeladen." + label_favorites: "Favoriten" label_filename: "Datei" label_filesize: "Größe" label_general: "Allgemein" @@ -1042,7 +1055,7 @@ de: sharing: share: "Teilen" title: "Arbeitspaket teilen" - show_all_users: "Alle Benutzer anzeigen, mit denen dieses Arbeitspaket geteilt wurde" + show_all_users: "Alle Benutzer anzeigen, für die das Arbeitspaket geteilt wurde" selected_count: "%{count} ausgewählt" selection: mixed: "Gemischt" @@ -1268,6 +1281,9 @@ de: placeholder: "Der Platzhalter kann jetzt in %{project} verwendet werden. In der Zwischenzeit können Sie bereits mit diesem Benutzer planen und beispielsweise Arbeitspakete zuweisen." group: "Die Gruppe ist nun %{project} zugewiesen. In der Zwischenzeit können Sie bereits mit dieser Gruppe planen und ihr zum Beispiel Arbeitspakete zuweisen." next_button: "Fortfahren" + favorite_projects: + no_results: "Sie haben keine favorisierten Projekte" + no_results_subtext: "Fügen Sie ein oder mehrere Projekte als Favorit in ihrer Übersicht oder in einer Projektliste hinzu." include_projects: toggle_title: "Enthaltene Projekte" title: "Projekte" diff --git a/config/locales/crowdin/js-el.yml b/config/locales/crowdin/js-el.yml index a1cd7dd55032..71210b0a776e 100644 --- a/config/locales/crowdin/js-el.yml +++ b/config/locales/crowdin/js-el.yml @@ -329,6 +329,18 @@ el: years: "Χρόνια" description: > Επιλέξτε το αρχικό επίπεδο μεγέθυνσης που θα πρέπει να εμφανίζεται όταν η αυτόματη μεγέθυνση δεν είναι διαθέσιμη. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "όχι" general_text_yes: "ναι" general_text_No: "Όχι" @@ -347,11 +359,10 @@ el: learn_about: "Μάθετε περισσότερα για τις νέες λειτουργίες" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -377,6 +388,7 @@ el: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "ημέρες πριν" label_all: "όλα" + label_all_uppercase: "Όλα" label_all_work_packages: "όλα τα πακέτα εργασίας" label_and: "και" label_ascending: "Αύξουσα" @@ -418,6 +430,7 @@ el: label_expand_project_menu: "Επέκταση του μενού έργου" label_export: "Εξαγωγή" label_export_preparing: "Η εξαγωγή προετοιμάζεται και θα κατεβεί σύντομα." + label_favorites: "Favorites" label_filename: "Aρχείο" label_filesize: "Μέγεθος" label_general: "Γενικά" @@ -1042,7 +1055,7 @@ el: sharing: share: "Share" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1268,6 +1281,9 @@ el: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "Η ομάδα είναι τώρα μέρος του %{project}. Εν τω μεταξύ, μπορείτε να προγραμματίσετε ήδη με αυτή την ομάδα και να αντιστοιχίσετε πακέτα εργασίας." next_button: "Συνέχεια" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Έργα" diff --git a/config/locales/crowdin/js-eo.yml b/config/locales/crowdin/js-eo.yml index f01e730bd499..f75a371a857d 100644 --- a/config/locales/crowdin/js-eo.yml +++ b/config/locales/crowdin/js-eo.yml @@ -330,6 +330,18 @@ eo: years: "Years" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "ne" general_text_yes: "jes" general_text_No: "Ne" @@ -348,11 +360,10 @@ eo: learn_about: "Lerni pli pri la novaj plibonigoj" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ eo: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "tagoj antaŭe" label_all: "ĉiuj" + label_all_uppercase: "Ĉiuj" label_all_work_packages: "ĉiuj laborpakaĵoj" label_and: "and" label_ascending: "Kreskante" @@ -419,6 +431,7 @@ eo: label_expand_project_menu: "Etendi projektan menuon" label_export: "Eksporti" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "Dosiero" label_filesize: "Dosiergrando" label_general: "General" @@ -1043,7 +1056,7 @@ eo: sharing: share: "Share" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1269,6 +1282,9 @@ eo: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Daŭrigi" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Projektoj" diff --git a/config/locales/crowdin/js-es.yml b/config/locales/crowdin/js-es.yml index 0245820c54d5..ba76e68a6259 100644 --- a/config/locales/crowdin/js-es.yml +++ b/config/locales/crowdin/js-es.yml @@ -330,6 +330,18 @@ es: years: "Años" description: > Seleccione el nivel de zoom inicial que debe mostrarse cuando el zoom automático no esté disponible. + export: + title: "Opciones PDF del diagrama de Gantt" + button_export: "Exportar" + column_widths: + narrow: "Estrecha" + medium: "Media" + wide: "Amplia" + very_wide: "Muy amplia" + options: + date_zoom: "Formato de fechas" + paper_size: "Tamaño del papel" + column_widths: "Anchos de columna" general_text_no: "no" general_text_yes: "sí" general_text_No: "No" @@ -348,11 +360,10 @@ es: learn_about: "Más información sobre las nuevas funciones" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - La versión contiene varias características nuevas y mejoras:
  • Implemente informes de progreso en todas las jerarquías de paquetes de trabajo.
  • Gestione los atributos del proyecto de forma estructurada en la página de descripción general del proyecto.
  • Vista simplificada de los campos personalizados en la lista de proyectos y en la descripción general del proyecto.
  • Encabezados de página unificados con el elegante diseño Primer.
  • Mejore las reuniones con nuevas funciones como la carga de archivos adjuntos, responsables e historial de reuniones.
  • Alertas automáticas para los almacenamientos de archivos poco saludables, y gane control con las opciones de alternancia.
  • Copie la carpeta de proyecto gestionada automáticamente para OneDrive/SharePoint al copiar proyectos.
  • Pida a los administradores que eliminen los recursos compartidos en los paquetes de trabajo al revocar la pertenencia a un proyecto.
  • Mejore la planificación con los modos de visualización de 4 y 8 semanas en el planificador de equipos.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Suscribirse al calendario" inital_setup_error_message: "Se ha producido un error al obtener los datos." @@ -378,6 +389,7 @@ es: label_added_time_by: 'Agregado por %{author} a las %{age}' label_ago: "días antes" label_all: "todos" + label_all_uppercase: "Todos" label_all_work_packages: "todos los paquetes de trabajo" label_and: "y" label_ascending: "Ascendente" @@ -419,6 +431,7 @@ es: label_expand_project_menu: "Expandir menú de proyecto" label_export: "Exportar" label_export_preparing: "La exportación se está preparando y se descargará en breve." + label_favorites: "Favoritos" label_filename: "Archivo" label_filesize: "Tamaño" label_general: "General" @@ -1043,7 +1056,7 @@ es: sharing: share: "Compartir" title: "Compartir paquete de trabajo" - show_all_users: "Mostrar todos los usuarios compartidos" + show_all_users: "Mostrar todos los usuarios con los que se ha compartido el paquete de trabajo" selected_count: "%{count} seleccionados" selection: mixed: "Mixto" @@ -1269,6 +1282,9 @@ es: placeholder: "El marcador de posición ya puede usarse en %{project}. Mientras tanto, puede crear planes con ese usuario y asignarle paquetes de trabajo." group: "El grupo ya forma parte de %{project}. Mientras tanto, puede crear planes con ese grupo y asignar paquetes de trabajo a este." next_button: "Continuar" + favorite_projects: + no_results: "No tiene proyectos favoritos" + no_results_subtext: "Añada uno o varios proyectos como favoritos a través del resumen del proyecto o en una lista de proyectos." include_projects: toggle_title: "Incluir proyectos" title: "Proyectos" diff --git a/config/locales/crowdin/js-et.yml b/config/locales/crowdin/js-et.yml index ea5e5c445978..8d9b6c7a918d 100644 --- a/config/locales/crowdin/js-et.yml +++ b/config/locales/crowdin/js-et.yml @@ -330,6 +330,18 @@ et: years: "Aastad" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "ei" general_text_yes: "jah" general_text_No: "Ei" @@ -348,11 +360,10 @@ et: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ et: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "päeva tagasi" label_all: "kõik" + label_all_uppercase: "Kõik" label_all_work_packages: "kõik teemad" label_and: "ja" label_ascending: "Kasvav" @@ -419,6 +431,7 @@ et: label_expand_project_menu: "Expand project menu" label_export: "Ekspordi" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "Manus" label_filesize: "Suurus" label_general: "Üldine" @@ -1043,7 +1056,7 @@ et: sharing: share: "Jaga" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1269,6 +1282,9 @@ et: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Jätka" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Projektid" diff --git a/config/locales/crowdin/js-eu.yml b/config/locales/crowdin/js-eu.yml index b51d0264b2cb..d239988ba5d6 100644 --- a/config/locales/crowdin/js-eu.yml +++ b/config/locales/crowdin/js-eu.yml @@ -330,6 +330,18 @@ eu: years: "Years" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "no" general_text_yes: "yes" general_text_No: "No" @@ -348,11 +360,10 @@ eu: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ eu: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "days ago" label_all: "all" + label_all_uppercase: "Denak" label_all_work_packages: "all work packages" label_and: "and" label_ascending: "Ascending" @@ -419,6 +431,7 @@ eu: label_expand_project_menu: "Expand project menu" label_export: "Export" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "File" label_filesize: "Size" label_general: "General" @@ -1043,7 +1056,7 @@ eu: sharing: share: "Share" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1269,6 +1282,9 @@ eu: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Continue" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Projects" diff --git a/config/locales/crowdin/js-fa.yml b/config/locales/crowdin/js-fa.yml index a8ba172e104e..19126998ee2f 100644 --- a/config/locales/crowdin/js-fa.yml +++ b/config/locales/crowdin/js-fa.yml @@ -330,6 +330,18 @@ fa: years: "Years" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "no" general_text_yes: "yes" general_text_No: "نه" @@ -348,11 +360,10 @@ fa: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ fa: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "days ago" label_all: "all" + label_all_uppercase: "همه" label_all_work_packages: "تمام بسته های کاری" label_and: "and" label_ascending: "Ascending" @@ -419,6 +431,7 @@ fa: label_expand_project_menu: "بازکردن منوی پروژه" label_export: "خروجی" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "فایل" label_filesize: "اندازه‌" label_general: "General" @@ -1043,7 +1056,7 @@ fa: sharing: share: "به اشتراک گذاری" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1269,6 +1282,9 @@ fa: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Continue" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "پروژه‌ها" diff --git a/config/locales/crowdin/js-fi.yml b/config/locales/crowdin/js-fi.yml index d16754d695c7..f59268e6d187 100644 --- a/config/locales/crowdin/js-fi.yml +++ b/config/locales/crowdin/js-fi.yml @@ -330,6 +330,18 @@ fi: years: "Vuotta" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "ei" general_text_yes: "kyllä" general_text_No: "Ei" @@ -348,11 +360,10 @@ fi: learn_about: "Lisätietoja uusista ominaisuuksista" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ fi: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "päiviä sitten" label_all: "kaikki" + label_all_uppercase: "Kaikki" label_all_work_packages: "kaikki tehtävät" label_and: "and" label_ascending: "Nouseva" @@ -419,6 +431,7 @@ fi: label_expand_project_menu: "Avaa projektivalikko" label_export: "Vie" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "Tiedosto" label_filesize: "Koko" label_general: "Yleinen" @@ -1043,7 +1056,7 @@ fi: sharing: share: "Jaa" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1269,6 +1282,9 @@ fi: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Jatka" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Projektit" diff --git a/config/locales/crowdin/js-fil.yml b/config/locales/crowdin/js-fil.yml index 986d8510da22..a7076c51b8ee 100644 --- a/config/locales/crowdin/js-fil.yml +++ b/config/locales/crowdin/js-fil.yml @@ -330,6 +330,18 @@ fil: years: "Mga taon" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "hindi" general_text_yes: "oo" general_text_No: "Hindi" @@ -348,11 +360,10 @@ fil: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ fil: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "ang mga araw nakalipas" label_all: "lahat" + label_all_uppercase: "All" label_all_work_packages: "lahat ng mga work package" label_and: "at" label_ascending: "Pataas" @@ -419,6 +431,7 @@ fil: label_expand_project_menu: "Expand project menu" label_export: "I-export" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "File" label_filesize: "Sukat" label_general: "Pangkalahatan" @@ -1043,7 +1056,7 @@ fil: sharing: share: "Ibahagi" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1269,6 +1282,9 @@ fil: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Magpatuloy" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Mga proyekto" diff --git a/config/locales/crowdin/js-fr.yml b/config/locales/crowdin/js-fr.yml index ab8ef7b52f78..54fa9ab763a7 100644 --- a/config/locales/crowdin/js-fr.yml +++ b/config/locales/crowdin/js-fr.yml @@ -330,6 +330,18 @@ fr: years: "Années" description: > Sélectionnez le niveau de zoom initial qui devrait être affiché lorsque le zoom automatique n'est pas disponible. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "non" general_text_yes: "oui" general_text_No: "Non" @@ -348,11 +360,10 @@ fr: learn_about: "En savoir plus sur les nouvelles fonctionnalités" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - Cette version contient plusieurs nouvelles fonctionnalités et améliorations :
  • Implémentation des rapports de progression dans toutes les hiérarchies de lots de travaux.
  • Gestion des attributs de projet de manière structurée sur la page d'aperçu du projet.
  • Affichage simplifié des champs personnalisés dans la liste et l'aperçu du projet.
  • En-têtes de page unifiés avec le design épuré de Primer.
  • Amélioration des réunions avec de nouvelles fonctionnalités telles que les téléchargements de pièces jointes, les responsables et l'historique de réunion.
  • Alertes automatiques pour les espaces de stockage de fichiers en mauvaise santé, et plus de contrôle avec des options d'activation/de désactivation de paramètres.
  • Copie du dossier de projet géré automatiquement pour OneDrive/SharePoint lors de la copie de projets.
  • Demande aux administrateurs de supprimer les partages des lots de travaux lors de la révocation de la participation à un projet.
  • Amélioration de la planification avec des modes d'affichage sur 4 et 8 semaines dans le planificateur de l'équipe.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "S'abonner au calendrier" inital_setup_error_message: "Une erreur est survenue lors de la récupération des données." @@ -378,6 +389,7 @@ fr: label_added_time_by: 'Ajouté par %{author} le %{age}' label_ago: "il y a" label_all: "tous" + label_all_uppercase: "Tout" label_all_work_packages: "tous les lots de travaux" label_and: "et" label_ascending: "Croissant" @@ -419,6 +431,7 @@ fr: label_expand_project_menu: "Déplier le menu du projet" label_export: "Exporter" label_export_preparing: "L'export est en cours de préparation et sera téléchargé sous peu." + label_favorites: "Favorites" label_filename: "Fichier" label_filesize: "Taille" label_general: "Général" @@ -1043,7 +1056,7 @@ fr: sharing: share: "Partager" title: "Partager le lot de travaux" - show_all_users: "Afficher tous les utilisateurs avec qui ce lot de travaux est partagé" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} sélectionné" selection: mixed: "Mixte" @@ -1269,6 +1282,9 @@ fr: placeholder: "Le utilisateur fictif peut maintenant être utilisé dans %{project}. En attendant, vous pouvez déjà planifier des taches avec cet utilisateur et l'assigner à des lots de travaux par exemple." group: "Le groupe fait maintenant partie du %{project}. Entre-temps, vous pouvez déjà planifier avec ce groupe et l'assigner des lots de travaux par exemple." next_button: "Continuer" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Inclure les projets" title: "Projets" diff --git a/config/locales/crowdin/js-he.yml b/config/locales/crowdin/js-he.yml index 981804e835fb..d51751fc3525 100644 --- a/config/locales/crowdin/js-he.yml +++ b/config/locales/crowdin/js-he.yml @@ -330,6 +330,18 @@ he: years: "Years" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "לא" general_text_yes: "כן" general_text_No: "לא" @@ -348,11 +360,10 @@ he: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ he: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "ימים לפני" label_all: "כל" + label_all_uppercase: "All" label_all_work_packages: "כל חבילות עבודה" label_and: "and" label_ascending: "סדר עולה" @@ -419,6 +431,7 @@ he: label_expand_project_menu: "Expand project menu" label_export: "ייצוא" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "קובץ" label_filesize: "גודל" label_general: "כללי" @@ -1045,7 +1058,7 @@ he: sharing: share: "שתף" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1275,6 +1288,9 @@ he: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Continue" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "פרויקטים" diff --git a/config/locales/crowdin/js-hi.yml b/config/locales/crowdin/js-hi.yml index 00708f0fe7a8..55ff1af67f42 100644 --- a/config/locales/crowdin/js-hi.yml +++ b/config/locales/crowdin/js-hi.yml @@ -330,6 +330,18 @@ hi: years: "Years" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "no" general_text_yes: "yes" general_text_No: "No" @@ -348,11 +360,10 @@ hi: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ hi: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "दिन पहले" label_all: "सभी" + label_all_uppercase: "All" label_all_work_packages: "समस्त कार्य पैकेज" label_and: "and" label_ascending: "आरोही" @@ -419,6 +431,7 @@ hi: label_expand_project_menu: "Expand project menu" label_export: "निर्यात" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "फ़ाइल" label_filesize: "आकार" label_general: "सामान्य" @@ -1043,7 +1056,7 @@ hi: sharing: share: "सांझा करें" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1269,6 +1282,9 @@ hi: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Continue" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Projects" diff --git a/config/locales/crowdin/js-hr.yml b/config/locales/crowdin/js-hr.yml index 6c26e5ee5502..f17b2e2cfddb 100644 --- a/config/locales/crowdin/js-hr.yml +++ b/config/locales/crowdin/js-hr.yml @@ -330,6 +330,18 @@ hr: years: "Godine" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "ne" general_text_yes: "da" general_text_No: "Ne" @@ -348,11 +360,10 @@ hr: learn_about: "Saznaj više o novim značajkama" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ hr: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "dana ranije" label_all: "sve" + label_all_uppercase: "Svi" label_all_work_packages: "svi radni paketi" label_and: "i" label_ascending: "Uzlazno" @@ -419,6 +431,7 @@ hr: label_expand_project_menu: "Expand project menu" label_export: "Izvezi" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "Datoteka" label_filesize: "Veličina" label_general: "Općenito" @@ -1044,7 +1057,7 @@ hr: sharing: share: "Podijeli" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1272,6 +1285,9 @@ hr: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Nastavi" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Projekti" diff --git a/config/locales/crowdin/js-hu.yml b/config/locales/crowdin/js-hu.yml index 77cb2cdad67a..f60a2493e0dd 100644 --- a/config/locales/crowdin/js-hu.yml +++ b/config/locales/crowdin/js-hu.yml @@ -330,6 +330,18 @@ hu: years: "Évek" description: > Válassza ki a megjelenítendő kezdeti nagyítási szintet, ha az automatikus nagyítás nem áll rendelkezésre. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "nem" general_text_yes: "igen" general_text_No: "Nem" @@ -348,11 +360,10 @@ hu: learn_about: "Tudjon meg többet az új funkciókról" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ hu: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "nappal ezelőtt" label_all: "mind" + label_all_uppercase: "Összes" label_all_work_packages: "minden feladatcsoport" label_and: "és" label_ascending: "Növekvő" @@ -419,6 +431,7 @@ hu: label_expand_project_menu: "Project menü kibontása" label_export: "Exportálás" label_export_preparing: "Az exportálás előkészítés alatt áll, és hamarosan letöltésre kerül." + label_favorites: "Favorites" label_filename: "File" label_filesize: "Méret" label_general: "Általános" @@ -1043,7 +1056,7 @@ hu: sharing: share: "Megosztás" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1269,6 +1282,9 @@ hu: placeholder: "A tesztfelhasználó mostantól használható a %{project}-ben. Eközben már tervezhetünk ezzel a felhasználóval, és például munkacsomagokat rendelhetünk hozzá." group: "A csoport mostantól a %{project} része. Eközben már tervezhet ezzel a csoporttal, és például munkacsomagokat rendelhet hozzá.\n" next_button: "Folytatás" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Projekteket tartalmaz" title: "Projektek" diff --git a/config/locales/crowdin/js-id.yml b/config/locales/crowdin/js-id.yml index 143a131dc51d..4fecf26ef4a8 100644 --- a/config/locales/crowdin/js-id.yml +++ b/config/locales/crowdin/js-id.yml @@ -330,6 +330,18 @@ id: years: "Tahun" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "no" general_text_yes: "yes" general_text_No: "No" @@ -348,11 +360,10 @@ id: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ id: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "hari yang lalu" label_all: "semua" + label_all_uppercase: "Semua" label_all_work_packages: "Semua paket kerja" label_and: "dan" label_ascending: "Askending" @@ -419,6 +431,7 @@ id: label_expand_project_menu: "Expand project menu" label_export: "Ekspor" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "File" label_filesize: "Size" label_general: "Umum" @@ -1042,7 +1055,7 @@ id: sharing: share: "Share" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1266,6 +1279,9 @@ id: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Lanjut" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Project" diff --git a/config/locales/crowdin/js-it.yml b/config/locales/crowdin/js-it.yml index ae9a5a1b54b8..c76981d3e5d9 100644 --- a/config/locales/crowdin/js-it.yml +++ b/config/locales/crowdin/js-it.yml @@ -330,6 +330,18 @@ it: years: "Anni" description: > Seleziona il livello di zoom iniziale da mostrare quando lo zoom automatico non è disponibile. + export: + title: "Opzioni del diagramma di Gantt in PDF" + button_export: "Esporta" + column_widths: + narrow: "Stretto" + medium: "Medio" + wide: "Ampio" + very_wide: "Molto ampio" + options: + date_zoom: "Zoom data" + paper_size: "Dimensione del foglio" + column_widths: "Larghezza colonne" general_text_no: "no" general_text_yes: "si" general_text_No: "No" @@ -348,11 +360,10 @@ it: learn_about: "Scopri di più sulle nuove funzionalità" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - Questa versione contiene diverse nuove funzionalità e miglioramenti:
  • Implementazione della segnalazione dell'avanzamento dei lavori attraverso le gerarchie dei pacchetti di lavoro.
  • Gestione degli attributi del progetto in modo strutturato nella pagina di panoramica del progetto.
  • Visualizzazione semplificata dei campi personalizzati nell'elenco dei progetti e nella panoramica dei progetti.
  • Intestazioni di pagina unificate con l'elegante design di Primer.
  • Miglioramento delle riunioni con nuove funzioni come il caricamento di allegati, la responsabilità e la cronologia delle riunioni.
  • Avvisi automatici per archivi di file non integri e ottenimento del controllo con le opzioni di attivazione/disattivazione.
  • Copia automatica della cartella di progetto per OneDrive/SharePoint quando si copiano i progetti.
  • Richiesta agli amministratori di rimuovere le condivisioni sulle macro-attività quando si revoca la partecipazione a un progetto.
  • Migliora la pianificazione con modalità di visualizzazione a 4 e 8 settimane nel pianificatore del team.
+ Questa versione contiene varie nuove funzionalità e miglioramenti:
  • Esportazione PDF della vista Gantt, ad es. per la stampa (componente aggiuntivo Enterprise)
  • Progetti preferiti
  • Sezioni nelle riunioni
  • Visualizzazione delle riunioni nelle pagine La mia pagina e Panoramica del progetto
  • Possibilità di nascondere gli allegati nella scheda File
  • Campi personalizzati di tipo Link (URL)
ical_sharing_modal: title: "Iscriviti al calendario" inital_setup_error_message: "Si è verificato un errore recuperando i dati." @@ -378,6 +389,7 @@ it: label_added_time_by: 'Aggiunto da %{author} alle %{age}' label_ago: "giorni fa" label_all: "tutti" + label_all_uppercase: "Tutti" label_all_work_packages: "tutte le macro-attività" label_and: "e" label_ascending: "Crescente" @@ -419,6 +431,7 @@ it: label_expand_project_menu: "Espandi il menù di progetto" label_export: "Esporta" label_export_preparing: "L'esportazione è in fase di preparazione e il download partirà a breve." + label_favorites: "Preferiti" label_filename: "File" label_filesize: "Dimensione" label_general: "Generale" @@ -1043,7 +1056,7 @@ it: sharing: share: "Condividi" title: "Condividi macro-attività" - show_all_users: "Mostra tutti gli utenti condivisi" + show_all_users: "Mostra tutti gli utenti con i quali la macro-attività è stata condivisa" selected_count: "%{count} selezionati" selection: mixed: "Misto" @@ -1269,6 +1282,9 @@ it: placeholder: "Il segnaposto è ora utilizzabile in %{project}. Nel mentre puoi ad esempio già pianificare con quell'utente e assegnare pacchetti di lavoro." group: "Il gruppo è ora parte di %{project}. Nel mentre puoi ad esempio già pianificare con quel gruppo e assegnare pacchetti di lavoro." next_button: "Continua" + favorite_projects: + no_results: "Non hai progetti preferiti" + no_results_subtext: "Aggiungi uno o più progetti come preferiti dalla rispettiva panoramica o da una lista di progetti." include_projects: toggle_title: "Includi progetti" title: "Progetti" diff --git a/config/locales/crowdin/js-ja.yml b/config/locales/crowdin/js-ja.yml index 7fc5c277a555..127fbd6cdb17 100644 --- a/config/locales/crowdin/js-ja.yml +++ b/config/locales/crowdin/js-ja.yml @@ -331,6 +331,18 @@ ja: years: " 年" description: > オートズームが使用できない場合に表示される初期ズームレベルを選択します。 + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "いいえ" general_text_yes: "はい" general_text_No: "いいえ" @@ -349,11 +361,10 @@ ja: learn_about: "新機能の詳細はこちら" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -379,6 +390,7 @@ ja: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "○日前" label_all: "全て" + label_all_uppercase: "全て" label_all_work_packages: "全ての作業項目" label_and: "及び" label_ascending: "昇順" @@ -420,6 +432,7 @@ ja: label_expand_project_menu: "プロジェクトメニューを展開" label_export: "外部出力" label_export_preparing: "エクスポートは準備中です。まもなくダウンロードされます。" + label_favorites: "Favorites" label_filename: "ファイル" label_filesize: "サイズ" label_general: "概要" @@ -1043,7 +1056,7 @@ ja: sharing: share: "共有" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1267,6 +1280,9 @@ ja: placeholder: "プレースホルダーを %{project} で使用できるようになりました。一方で、そのユーザを使って計画を立てたり、ワークパッケージを割り当てたりすることができます。" group: "グループは %{project} の一部になりました。一方で、そのグループを使って計画を立てたり、ワークパッケージを割り当てたりすることができます。" next_button: "続行" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "プロジェクト" diff --git a/config/locales/crowdin/js-ka.yml b/config/locales/crowdin/js-ka.yml index 81800dda124d..ed54fcb8ad5b 100644 --- a/config/locales/crowdin/js-ka.yml +++ b/config/locales/crowdin/js-ka.yml @@ -330,6 +330,18 @@ ka: years: "წელი" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "არა" general_text_yes: "დია" general_text_No: "არა" @@ -348,11 +360,10 @@ ka: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ ka: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "დღის წინ" label_all: "ყველა" + label_all_uppercase: "ყველა" label_all_work_packages: "all work packages" label_and: "და" label_ascending: "ზრდადობით" @@ -419,6 +431,7 @@ ka: label_expand_project_menu: "Expand project menu" label_export: "გატანა" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "ფაილი" label_filesize: "ზომა" label_general: "ზოგადი" @@ -1043,7 +1056,7 @@ ka: sharing: share: "გაზიარება" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "შერეული" @@ -1269,6 +1282,9 @@ ka: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "გაგრძელება" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "პროექტები" diff --git a/config/locales/crowdin/js-kk.yml b/config/locales/crowdin/js-kk.yml index 76ee68f60b0b..4da3c8f7f196 100644 --- a/config/locales/crowdin/js-kk.yml +++ b/config/locales/crowdin/js-kk.yml @@ -330,6 +330,18 @@ kk: years: "Years" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "no" general_text_yes: "yes" general_text_No: "No" @@ -348,11 +360,10 @@ kk: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ kk: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "days ago" label_all: "all" + label_all_uppercase: "All" label_all_work_packages: "all work packages" label_and: "and" label_ascending: "Ascending" @@ -419,6 +431,7 @@ kk: label_expand_project_menu: "Expand project menu" label_export: "Export" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "File" label_filesize: "Size" label_general: "General" @@ -1043,7 +1056,7 @@ kk: sharing: share: "Share" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1269,6 +1282,9 @@ kk: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Continue" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Projects" diff --git a/config/locales/crowdin/js-ko.yml b/config/locales/crowdin/js-ko.yml index ffe36ae13710..6daf50a18a88 100644 --- a/config/locales/crowdin/js-ko.yml +++ b/config/locales/crowdin/js-ko.yml @@ -330,6 +330,18 @@ ko: years: "년" description: > 자동 확대/축소를 사용할 수 없는 경우 표시되어야 하는 초기 확대/축소 수준을 선택하세요. + export: + title: "Gantt 차트 PDF 옵션" + button_export: "내보내기" + column_widths: + narrow: "좁음" + medium: "보통" + wide: "넓음" + very_wide: "매우 넓음" + options: + date_zoom: "날짜 확대/축소" + paper_size: "용지 크기" + column_widths: "열 너비" general_text_no: "아니요" general_text_yes: "예" general_text_No: "아니요" @@ -348,11 +360,10 @@ ko: learn_about: "새로운 기능에 대해 자세히 알아보기" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - 이 릴리스에는 다양한 새로운 기능과 개선 사항이 포함되어 있습니다:
  • 작업 패키지 계층 구조 전반에서 진행률 보고를 구현합니다.
  • 프로젝트 개요 페이지에서 프로젝트 특성을 체계적으로 관리합니다.
  • 프로젝트 목록과 프로젝트 개요에서 사용자 지정 필드의 보기가 간소화되었습니다.
  • 세련된 Primer 디자인을 갖춘 통합된 페이지 헤더가 있습니다.
  • 첨부 파일 업로드, 책임자, 미팅 기록과 같은 새로운 기능으로 미팅을 개선합니다.
  • 비정상적인 파일 저장소에 대한 자동 알림을 받고 토글 옵션으로 제어합니다.
  • 프로젝트를 복사할 때 OneDrive/SharePoint의 자동으로 관리되는 프로젝트 폴더를 복사합니다.
  • 프로젝트 멤버십을 취소할 때 작업 패키지의 공유를 제거하려면 관리자에게 요청합니다.
  • 팀 플래너에서 4주 및 8주 표시 모드로 계획을 개선합니다.
+ 이 릴리스에는 다양한 새로운 기능과 개선 사항이 포함되어 있습니다.
  • Gantt 보기의 PDF 내보내기(예: 인쇄용)(Enterprise 추가 기능)
  • 즐겨 찾는 프로젝트
  • 미팅의 섹션
  • 내 페이지 및 프로젝트 개요 페이지에 미팅 표시
  • 파일 탭에서 첨부 파일을 숨기는 기능
  • 링크(URL) 유형의 사용자 지정 필드
ical_sharing_modal: title: "캘린더 구독" inital_setup_error_message: "데이터를 가져오는 중에 오류가 발생했습니다." @@ -378,6 +389,7 @@ ko: label_added_time_by: '%{age}, %{author} 님이 추가함' label_ago: "일 전" label_all: "모두" + label_all_uppercase: "모두" label_all_work_packages: "모든 작업 패키지" label_and: "그리고" label_ascending: "오름차순" @@ -419,6 +431,7 @@ ko: label_expand_project_menu: "프로젝트 메뉴 확장" label_export: "내보내기" label_export_preparing: "가져오기 준비 중이며 곧 다운로드됩니다." + label_favorites: "즐겨찾기" label_filename: "파일" label_filesize: "크기" label_general: "일반" @@ -1042,7 +1055,7 @@ ko: sharing: share: "공유하기" title: "작업 패키지 공유" - show_all_users: "공유된 사용자 모두 표시" + show_all_users: "작업 패키지가 공유된 모든 사용자 표시" selected_count: "%{count}개 선택됨" selection: mixed: "혼합" @@ -1266,6 +1279,9 @@ ko: placeholder: "이제 %{project}에서 이 플레이스홀더를 사용할 수 있게 되었습니다. 한편 당신은 해당 사용자에 대한 계획을 세우거나 작업 패키지를 할당할 수 있습니다." group: "이제 이 그룹은 %{project}의 일부입니다. 한편 당신은 해당 사용자에 대한 계획을 세우거나 작업 패키지를 할당할 수 있습니다." next_button: "계속" + favorite_projects: + no_results: "즐겨 찾는 프로젝트가 없습니다" + no_results_subtext: "개요 또는 프로젝트 목록에서 하나 이상의 프로젝트를 즐겨찾기로 추가하세요." include_projects: toggle_title: "프로젝트 포함" title: "프로젝트" diff --git a/config/locales/crowdin/js-lt.yml b/config/locales/crowdin/js-lt.yml index 1b77947c025d..f860262f6cf6 100644 --- a/config/locales/crowdin/js-lt.yml +++ b/config/locales/crowdin/js-lt.yml @@ -330,6 +330,18 @@ lt: years: "Metai" description: > Pasirinkite pradinį pritraukimo lygį, kuris bus rodomas kai automatinis pritraukimas negalimas. + export: + title: "Ganto diagramos PDF parinktys" + button_export: "Eksportuoti" + column_widths: + narrow: "Siauras" + medium: "Vidutinis" + wide: "Platus" + very_wide: "Labai platus" + options: + date_zoom: "Datos priartinimas" + paper_size: "Popieriaus dydis" + column_widths: "Stulpelių pločiai" general_text_no: "ne" general_text_yes: "taip" general_text_No: "Ne" @@ -348,11 +360,10 @@ lt: learn_about: "Sužinokite daugiau apie naujas galimybes" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - Šioje laidoje yra keletas naujų savybių ir patobulinimų:
  • Darbo eigos skaičiavimas darbo paketų hierarchijoje.
  • Projekto atributų valdymas struktūriniu būdu projekto apžvalgos puslapyje.
  • Geresnis savo laukų vaizdas projektų sąraše ir projekto apžvalgoje.
  • Unifikuotos puslapių antraštės su gražiu Primer dizainu.
  • Pagerinti susitikimai su naujomis savybėmis, tokiomis kaip priedų įkėlimas, atsakingais asmenimis ir susitikimų istorija.
  • Automatiniai pranešimai apie nesveikas failų saugyklas, valdymas perjungiamomis parinktimis.
  • Automatiškai valdomų projekto aplankų kopijavimas OneDrive/SharePoint, kai kopijuojami projektai.
  • Administratorių prašymas išimti prieigą prie darbo paketų atšaukiant projekto narystę.
  • Pagerintas planavimas su 4 ir 8 savaičių vaizdo režimais komandos planavime.
+ Laidoje yra įvairių naujų funkcijų bei patobulinimų:
  • Ganto vaizdo PDF eksportas pavyzdžiui spausdinimui (Enterprise priedas)
  • Mėgstami projektai
  • Sekcijos susitikimuose
  • Susitikimų rodymas Mano puslapyje ir Projekto apžvalgos puslapyje
  • Galimybė paslėpti priedus Failų kortelėje
  • Nuorodos (URL) tipo savi laukai
ical_sharing_modal: title: "Prenumeruoti kalendorių" inital_setup_error_message: "Gaunant duomenis įvyko klaida." @@ -378,6 +389,7 @@ lt: label_added_time_by: 'Pridėjo %{author} %{age}' label_ago: "dienų prieš" label_all: "visi" + label_all_uppercase: "Visi" label_all_work_packages: "visi darbų paketai" label_and: "ir" label_ascending: "Didėjančia tvarka" @@ -419,6 +431,7 @@ lt: label_expand_project_menu: "Išskleisti projekto meniu" label_export: "Eksportuoti" label_export_preparing: "Eksportas ruošiamas ir greitai bus parsiųstas." + label_favorites: "Mėgstami" label_filename: "Failas" label_filesize: "Dydis" label_general: "Bendra" @@ -1045,7 +1058,7 @@ lt: sharing: share: "Dalintis" title: "Dalintis darbo paketu" - show_all_users: "Rodyti visus bendrinamus naudotojus" + show_all_users: "Rodyti visus naudotojus, su kuriais bendrinamas šis darbo paketas" selected_count: "%{count} pažymėta" selection: mixed: "Mišrus" @@ -1275,6 +1288,9 @@ lt: placeholder: "Statytinis naudotojas gali prisijungti ir pasiekti %{project}. Tuo pačiu, jūs jau galite planuoti darbus su šiuo naudotoju ir pavyzdžiui priskirti jam darbo užduotis." group: "Grupė jau tapo %{project} dalimi. Tuo pačiu, jūs jau galite planuoti darbus su šia grupe ir pavyzdžiui priskirti jai darbo užduotis." next_button: "Tęsti" + favorite_projects: + no_results: "Jūs neturite mėgstamų projektų" + no_results_subtext: "Pridėkite vieną ar kelis projektus kaip mėgiamus jų apžvalgoje ar projektų sąraše." include_projects: toggle_title: "Įtraukti projektus" title: "Projektai" diff --git a/config/locales/crowdin/js-lv.yml b/config/locales/crowdin/js-lv.yml index e721611cdf22..b0747160883b 100644 --- a/config/locales/crowdin/js-lv.yml +++ b/config/locales/crowdin/js-lv.yml @@ -330,6 +330,18 @@ lv: years: "Gads" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "no" general_text_yes: "yes" general_text_No: "Nē" @@ -348,11 +360,10 @@ lv: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ lv: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "days ago" label_all: "all" + label_all_uppercase: "Visi" label_all_work_packages: "visu darbu pakotnes" label_and: "and" label_ascending: "Ascending" @@ -419,6 +431,7 @@ lv: label_expand_project_menu: "Expand project menu" label_export: "Eksportēt" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "Fails" label_filesize: "Izmērs" label_general: "General" @@ -1044,7 +1057,7 @@ lv: sharing: share: "Koplietot" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1185,7 +1198,7 @@ lv: other: "%{count} h" zero: "0 h" day: - one: "%{count} dienas" + one: "1 dienas" other: "%{count} dienām" zero: "0 days" zen_mode: @@ -1272,6 +1285,9 @@ lv: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Continue" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Projekti" diff --git a/config/locales/crowdin/js-mn.yml b/config/locales/crowdin/js-mn.yml index b7872455d3d7..648d01a8f38a 100644 --- a/config/locales/crowdin/js-mn.yml +++ b/config/locales/crowdin/js-mn.yml @@ -330,6 +330,18 @@ mn: years: "Years" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "no" general_text_yes: "yes" general_text_No: "No" @@ -348,11 +360,10 @@ mn: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ mn: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "days ago" label_all: "all" + label_all_uppercase: "All" label_all_work_packages: "all work packages" label_and: "and" label_ascending: "Ascending" @@ -419,6 +431,7 @@ mn: label_expand_project_menu: "Expand project menu" label_export: "Export" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "File" label_filesize: "Size" label_general: "General" @@ -1043,7 +1056,7 @@ mn: sharing: share: "Share" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1269,6 +1282,9 @@ mn: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Continue" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Projects" diff --git a/config/locales/crowdin/js-ms.yml b/config/locales/crowdin/js-ms.yml index 9a9b7abc87f2..f644a3af2b13 100644 --- a/config/locales/crowdin/js-ms.yml +++ b/config/locales/crowdin/js-ms.yml @@ -22,7 +22,7 @@ ms: js: ajax: - hide: "Sembunyikan" + hide: "Sorokkan" loading: "Memuatkan..." updating: "Mengemas kini..." attachments: @@ -30,14 +30,14 @@ ms: delete_confirmation: | Adakah anda pasti anda ingin memadam fail ini? Tindakan ini tidak boleh dikembalikan. draggable_hint: | - Tarik ruang pengedit ke imej sebaris atau lampiran rujukan. Ruang pengedit yang ditutup akan dibuka sambil anda menariknya. - quarantined_hint: "Fail ini telah dikuarantin kerana virus ditemui. Ia tidak tersedia untuk dimuat turun." + Tarik ruang pengedit ke imej sebaris atau lampiran rujukan. Ruang pengedit yang ditutup akan dibuka semasa anda menariknya. + quarantined_hint: "Fail ini telah dikuarantin kerana virus telah ditemui. Ia tidak tersedia untuk dimuat turun." autocomplete_ng_select: add_tag: "Tambah item" clear_all: "Padam semua" loading: "Memuatkan..." not_found: "Tiada item ditemui" - type_to_search: "Taip untuk mencari" + type_to_search: "Taip untuk cari" autocomplete_select: placeholder: multi: 'Tambah "%{name}"' @@ -45,18 +45,18 @@ ms: remove: "Keluarkan %{name}" active: "%{name} %{label} aktif " backup: - attachments_disabled: Lampiran tidak akan dimasukkan kerana ia melebihi saiz kesuluruhan maksimum yang dibenarkan. Anda boleh mengubahnya melalui konfigurasi (memerlukan server untuk dimulakan semula). + attachments_disabled: Lampiran mungkin tidak akan disertakan kerana ia melebihi saiz maksimum keseluruhan yang dibenarkan. Anda boleh mengubah ini melalui konfigurasi (memerlukan server untuk dimulakan semula). info: > - Anda boleh meminta sokongan disini. Proses akan mengambil sedikit masa bergantung kepada jumlah data (terutamanya lampiran) anda ada. Anda akan menerima e-mel apabila ianya sedia. + Anda boleh mencetuskan sandaran disini. Proses tersebut akan mengambil sedikit masa bergantung kepada jumlah data (terutamanya lampiran) yang anda ada. Anda akan menerima e-mel apabila ianya telah disediakan. note: > - Sokongan baharu akan mengatasi mana-mana yang terdahulu. Hanya beberapa bilangan sokongan yang terhad boleh diminta mengikut hari. + Sandaran baharu akan mengatasi mana-mana yang terdahulu. Hanya beberapa bilangan sandaran yang terhad boleh diminta mengikut hari. last_backup: Sandaran terakhir - last_backup_from: Sokongan terakhir daripada - title: Sokongan OpenProject + last_backup_from: Sandaran terakhir daripada + title: Sandaran OpenProject options: Pilihan include_attachments: Sertakan lampiran download_backup: Muat turun sandaran - request_backup: Minta sokongan + request_backup: Minta sandaran close_popup_title: "Tutup pop timbul" close_filter_title: "Tutup penyaring" close_form_title: "Tutup borang" @@ -72,15 +72,15 @@ ms: button_confirm: "Sahkan" button_continue: "Seterusnya" button_copy: "Salin" - button_copy_to_clipboard: "Salin ke clipboard" - button_copy_link_to_clipboard: "Salin pautan ke clipboard" + button_copy_to_clipboard: "Salin ke papan klip" + button_copy_link_to_clipboard: "Salin pautan ke papan klip" button_copy_to_other_project: "Salin ke projek lain" - button_custom-fields: "Medan tersuai" + button_custom-fields: "Ruang tersuai" button_delete: "Padam" - button_delete_watcher: "Buang pemerhati" + button_delete_watcher: "Padam pemerhati" button_details_view: "Paparan butiran" button_duplicate: "Duplikasi" - button_edit: "Sunting" + button_edit: "Edit" button_filter: "Penyaring" button_collapse_all: "Sembunyikan semua" button_expand_all: "Kembangkan semua" @@ -92,13 +92,13 @@ ms: button_open_details: "Buka paparan butiran" button_close_details: "Tutup paparan butiran" button_open_fullscreen: "Buka paparan skrin penuh" - button_show_cards: "Tunjukkan paparan kad" - button_show_list: "Tunjukkan paparan senarai" - button_show_table: "Tunjukkan paparan jadual" - button_show_gantt: "Tunjukkan paparan Gantt" - button_show_fullscreen: "Tunjuk paparan skrin penuh" + button_show_cards: "Paparkan paparan kad" + button_show_list: "Paparkan paparan senarai" + button_show_table: "Paparkan paparan jadual" + button_show_gantt: "Paparkan paparan Gantt" + button_show_fullscreen: "Paparkan paparan skrin penuh" button_more_actions: "Tindakan lebih lanjut" - button_quote: "Sebut harga" + button_quote: "Petikan" button_save: "Simpan" button_settings: "Tetapan" button_uncheck_all: "Nyahtandakan semua" @@ -109,12 +109,12 @@ ms: card: add_new: "Tambah kad baharu" highlighting: - inline: "Serlahkan barisan:" + inline: "Sorotkan barisan:" entire_card_by: "Keseluruhan kad dengan" remove_from_list: "Keluarkan kad dari senarai" caption_rate_history: "Sejarah kadar" clipboard: - browser_error: "Pelayar anda tidak menyokong menyalin ke papan klip. Sila salin secara manual: %{content}" + browser_error: "Server anda tidak menyokong menyalin ke papan klip. Sila salin secara manual: %{content}" copied_successful: "Berjaya disalin ke papan klip!" chart: type: "Jenis carta" @@ -133,8 +133,8 @@ ms: dataset: "Set data %{number}" errors: could_not_load: "Data untuk paparkan graf tidak dapat dimuatkan. Kebenaran yang diperlukan mungkin kurang." - description_available_columns: "Lajur Tersedia" - description_current_position: "Anda di sini:" + description_available_columns: "Kolum Tersedia" + description_current_position: "Anda di sini: " description_select_work_package: "Pilih pakej kerja #%{id}" description_subwork_package: "Anak kepada pakej kerja #%{id}" editor: @@ -149,63 +149,63 @@ ms: error: "Tidak dapat kembangkan macro: %{message}" attribute_reference: macro_help_tooltip: "Bahagian teks ini sedang dihasilkan secara dinamik oleh makro." - not_found: "Sumber yang diminta tidak dapat dijumpai" + not_found: "Sumber yang diminta tidak dapat ditemui" invalid_attribute: "Atribut yang dipilih '%{name}' tidak wujud." child_pages: - button: "Pautkan ke halaman anak" + button: "Terpaut pada halaman anak" include_parent: "Termasuk induk" - text: "[Pengguna sementara] pautan ke halaman anak" + text: "[Placeholder] Pautan ke halaman anak" page: "Halaman wiki" this_page: "halaman ini" hint: | - Tinggalkan ruangan ini untuk senaraikan halaman-halaman anak daripada halaman semasa. Jika anda ingin merujuk ke halaman berbeza, sediakan tajuk atau slug. + Tinggalkan ruangan ini kosong untuk senaraikan halaman-halaman anak daripada halaman semasa. Jika anda ingin merujuk ke halaman berbeza, sediakan tajuk atau slug. code_block: - button: "Masukkan kod potongan" - title: "Masukkan / sunting snippet Code" + button: "Masukkan kod snippet" + title: "Masukkan / edit Kod snippet" language: "Bahasa pemformatan" - language_hint: "Masukkan pemformatan bahasa yang akan digunakan untuk penyerlahan (jika disokong)." + language_hint: "Masukkan pemformatan bahasa yang akan digunakan untuk penyorotan (jika disokong)." dropdown: - macros: "Macros" - chose_macro: "Pilih macro" + macros: "Makro-makro" + chose_macro: "Pilih makro" toc: "Jadual kandungan" - toolbar_help: "Klik untuk memilih widget dan tunjuk toolbar. Klik dua kali untuk sunting widget." + toolbar_help: "Klik untuk memilih widget dan tunjuk toolbar. Klik dua kali untuk edit widget" wiki_page_include: button: "Sertakan kandungan halaman wiki lain" - text: "[Pengguna sementara] Termasuk halaman wiki" + text: "[Placeholder] Termasuk halaman wiki" page: "Halaman wiki" not_set: "(Halaman belum ditetapkan lagi)" hint: | - Termasuk kandungan halaman wiki lain dengan menyatakan tajuk atau slugnya. + Sertakan kandungan halaman wiki lain dengan menyatakan tajuk atau slugnya. Anda boleh sertakan halaman wiki projek lain dengan mengasingkan mereka menggunakan kolon seperti contoh berikut. work_package_button: button: "Masukkan butang cipta pakej kerja" type: "Jenis pakej kerja " button_style: "Guna gaya butang" - button_style_hint: "Pilihan: Tanda untuk membuat macro muncul sebagai butang, bukan sebagai pautan." + button_style_hint: "Pilihan: Tanda untuk membuat makro muncul sebagai butang, bukan sebagai pautan." without_type: "Cipta pakej kerja" with_type: "Cipta pakej kerja (Jenis: %{typename})" embedded_table: - button: "Gabungkan rajah pakej kerja " - text: "[Sementara] Jadual pakej kerja yang tersemat" + button: "Sematkan jadual pakej kerja " + text: "[Placeholder] Jadual pakej kerja yang tersemat" embedded_calendar: - text: "[Sementara] Kalendar yang tersemat" + text: "[Placeholder] Kalendar yang tersemat" admin: type_form: - custom_field: "Medan tersuai" + custom_field: "Ruang tersuai" inactive: "Tidak aktif" - drag_to_activate: "Tarik medan dari sini untuk mengaktifkan mereka" + drag_to_activate: "Tarik ruangan dari sini untuk mengaktifkan mereka" add_group: "Tambah kumpulan atribut" add_table: "Tambah jadual pakej kerja yang berkaitan" - edit_query: "Sunting pertanyaan" + edit_query: "Edit pertanyaan" new_group: "Kumpulan baharu" reset_to_defaults: "Set semula ke default" enterprise: text_reprieve_days_left: "%{days} hari sehingga tamat tempoh kelonggaran" text_expired: "tamat tempoh" trial: - confirmation: "Konformasi alamat e-mel " + confirmation: "Pengesahan alamat e-mel " confirmation_info: > - Kami menghantar anda satu e-mel pada %{date} kepada %{email}. Sila semak peti masuk anda dan klik pautan konformasi yang disediakan untuk memulakan percubaan 14 hari anda. + Kami telah menghantar satu e-mel kepada anda pada %{date} kepada %{email}. Sila semak peti masuk anda dan klik pautan pengesahan yang disediakan untuk memulakan percubaan 14 hari anda. form: general_consent: > Saya bersetuju dengan syarat-syarat perkhidmatan dan polisi privasi. @@ -219,10 +219,10 @@ ms: label_starts_at: "Mula pada" label_expires_at: "Tamat tempoh pada" receive_newsletter: Saya ingin menerima surat berita OpenProject. - taken_domain: Hanya boleh satu percubaan aktif setiap domain. + taken_domain: Hanya boleh mempunyai satu percubaan aktif setiap domain. domain_mismatch: Permintaan nama hos semasa tidak sepadan dengan nama hos yang dikonfigurasikan. Sila semak tetapan sistem anda sekali lagi. taken_email: Setiap pengguna hanya boleh mencipta satu percubaan. - email_not_received: "Anda tidak menerima sebarang e-mel? Anda boleh menghantar semula e-mel dengan pautan di kanan." + email_not_received: "Anda tidak menerima sebarang e-mel? Anda boleh menghantar semula e-mel menggunakan pautan di sebelah kanan." try_another_email: "Atau cuba dengan alamat e-mel yang lain." next_steps: "Langkah seterusnya" resend_link: "Hantar semula" @@ -233,7 +233,7 @@ ms: status_confirmed: "disahkan" status_waiting: "e-mel dihantar - sedang menunggu pengesahan" test_ee: "Cuba edisi Enterprise 14 hari secara percuma" - quick_overview: "Dapatkan rumusan ringkas pengurusan projek dan kolaborasi kumpulan dengan OpenProject edisi Enterprise." + quick_overview: "Dapatkan gambaran keseluruhan ringkas pengurusan projek dan kolaborasi kumpulan dengan OpenProject edisi Enterprise." upsale: become_hero: "Jadilah wira!" enterprise_info_html: "%{feature_title} adalah tambahan Enterprise ." @@ -242,31 +242,31 @@ ms: description: "Apakah manfaat edisi Enterprise di premis?" high_security: "Fitur keselamatan" high_security_text: "Log masuk tunggal (SAML, OpenID Connect, CAS), kumpulan LDAP." - installation: "Bantuan pemasangan" + installation: "Sokongan pemasangan" installation_text: "Jurutera perisian berpengalaman membimbing anda melalui pemasangan lengkap dan proses persediaan dalam infrastruktur anda sendiri." premium_features: "Tambahan Enterprise" - premium_features_text: "Papan Agile, tema tersuai dan logo, graf, aliran kerja yang cerdas dengan tindakan tersuai, carian teks penuh untuk lampiran pakej kerja dan pelbagai pilihan medan tersuai." - professional_support: "Bantuan profesional" + premium_features_text: "Board Agile, tema tersuai dan logo, graf, aliran kerja yang cerdas dengan tindakan tersuai, carian teks penuh untuk lampiran pakej kerja dan pelbagai pilihan ruang tersuai." + professional_support: "Sokongan profesional" professional_support_text: "Dapatkan sokongan yang boleh dipercayai, sentuhan tinggi daripada jurutera sokongan kanan dengan pengetahuan pakar tentang menjalankan OpenProject dalam persekitaran perniagaan yang kritikal." button_start_trial: "Mulakan percubaan percuma" button_upgrade: "Naik taraf sekarang" button_contact_us: "Hubungi kami untuk demo" button_book_now: "Tempah sekarang" confidence: > - Kami memberikan keyakinan dalam perisian pengurusan projek kelas enterprise yang diuji dan disokong - dengan Sumber Terbuka dan minda yang terbuka + Kami memberikan keyakinan dalam perisian pengurusan projek kelas enterprise yang telah diuji dan disokong - dengan Sumber Terbuka dan minda yang terbuka. link_quote: "Dapatkan sebut harga" more_info: "Maklumat lanjut" text: > - OpenProject edisi Enterprise dibina di atas edisi Komuniti. Ia termasuk tambahan Enterprise dan bantuan profesional terutamanya ditujukan ke organisasi dengan lebih dari 10 pengguna yang menguruskan projek perniagaan kritikal dengan OpenProject. + OpenProject edisi Enterprise dibina di atas edisi Komuniti. Ia termasuk tambahan Enterprise dan bantuan profesional terutamanya ia ditujukan ke organisasi dengan lebih dari 10 pengguna yang menguruskan projek perniagaan kritikal dengan OpenProject. unlimited: "Tanpa had" - you_contribute: "Pemaju perlu membayar bil-bil mereka juga. Dengan menaik taraf ke edisi Enterprise, anda akan menyokong usaha komuniti sumber terbuka dan menyumbang ke pembangunan, penyelenggaraan dan penambahbaikan berterusan." + you_contribute: "Pembangun perlu membayar bil-bil mereka juga. Dengan menaik taraf ke edisi Enterprise, anda akan menyokong usaha komuniti sumber terbuka dan menyumbang ke pembangunan, penyelenggaraan dan penambahbaikan berterusan." working_days: calendar: empty_state_header: "Hari tidak bekerja" empty_state_description: 'Tiada hari tidak bekerja yang khusus ditentukan untuk tahun ini. Klik "+ Hari tidak bekerja" dibawah untuk menambah tarikh.' new_date: "(baharu)" add_non_working_day: "Hari tidak bekerja" - already_added_error: "Hari tidak bekerja untuk tarikh ini sudah ada. Hanya boleh satu hari tidak bekerja dicipta untuk tarikh yang unik." + already_added_error: "Hari tidak bekerja untuk tarikh ini sudah ada. Hanya boleh mempunyai satu hari tidak bekerja dicipta untuk setiap tarikh yang unik." change_button: "Simpan dan jadual semula" change_title: "Tukar hari bekerja" removed_title: "Anda akan mengeluarkan hari berikut dari senarai hari tidak bekerja:" @@ -287,10 +287,10 @@ ms: enumeration_doc_categories: "Kategori dokumen" enumeration_work_package_priorities: "Keutamaan pakej kerja" filter: - more_values_not_shown: "Terdapat %{total} lagi hasil, cari untuk menapis hasil." + more_values_not_shown: "Terdapat %{total} lagi hasil, cari untuk menyaring hasil." description: text_open_filter: "Buka penyaring ini dengan 'ALT' dan kekunci anak panah." - text_close_filter: "Untuk memilih satu kemasukan, tinggalkan fokus, contohnya dengan menekan enter. Untuk keluar tanpa penyaringan, pilih kemasukan pertama (kosong)." + text_close_filter: "Untuk memilih satu entri, tinggalkan fokus, contohnya dengan menekan enter. Untuk keluar tanpa penyaringan, pilih entri (kosong) pertama." noneElement: "(tiada)" time_zone_converted: two_values: "%{from} - %{to} dalam masa tempatan anda." @@ -313,16 +313,16 @@ ms: farRight: "Paling kanan" description: > Pilih atribut yang anda ingin tunjukkan dalam kedudukan berkaitan carta Gantt pada setiap masa. Ambil perhatian bahawa apabila hover di atas elemen, label tarikhnya akan ditunjukkan dan bukannya atribut ini. - button_activate: "Tunjukkan carta Gantt" + button_activate: "Paparkan carta Gantt" button_deactivate: "Sembunyikan carta Gantt" filter: noneSelection: "(tiada)" selection_mode: - notification: "Klik pada mana-mana pakej kerja yang ditekankan untuk cipta perhubungan. Tekan escape untuk batalkan." + notification: "Klik pada mana-mana pakej kerja yang disorotkan untuk cipta perhubungan. Tekan escape untuk batalkan." zoom: in: "Zum masuk" out: "Zum keluar" - auto: "Zum secara Auto" + auto: "Zum secara auto" days: "Hari" weeks: "Minggu" months: "Bulan" @@ -330,6 +330,18 @@ ms: years: "Tahun" description: > Pilih paras zum permulaan yang akan ditunjukkan apabila zum secara auto tidak tersedia. + export: + title: "Pilihan PDF carta Gantt" + button_export: "Eksport" + column_widths: + narrow: "Kecil" + medium: "Sederhana" + wide: "Luas" + very_wide: "Sangat luas" + options: + date_zoom: "Zum tarikh" + paper_size: "Saiz kertas" + column_widths: "Keluasan kolum" general_text_no: "tidak" general_text_yes: "ya" general_text_No: "Tidak" @@ -337,22 +349,21 @@ ms: hal: error: update_conflict_refresh: "Klik sini untuk muat semula sumber dan kemas kini versi yang terbaru." - edit_prohibited: "Penyuntingan %{attribute} disekat untuk sumber ini. Sama ada atribut ini diperolehi daripada hubungan (cth, anak) atau sebaliknya tidak boleh dikonfigurasikan." + edit_prohibited: "Mengedit %{attribute} disekat untuk sumber ini. Sama ada atribut ini diperolehi daripada hubungan (cth, anak) atau sebaliknya tidak boleh dikonfigurasikan." format: date: "%{attribute} bukan tarikh yang sah - dijangka TTTT-BB-HH." - general: "Ralat berlaku." + general: "Ralat telah berlaku." homescreen: blocks: new_features: - text_new_features: "Baca berkenaan ciri-ciri baharu dan kemas kini produk." - learn_about: "Ketahui lebih lanjut mengenai ciri-ciri baru." + text_new_features: "Baca berkenaan fitur-fitur baharu dan kemas kini produk." + learn_about: "Ketahui lebih lanjut mengenai fitur-fitur baharu." #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - Pelepasan ini mengandungi pelbagai ciri baru dan penambahbaikan:
  • Implementasi pelaporan kemajuan merentasi hierarki pakej kerja.
  • Menguruskan atribut projek secara berstruktur di laman gambaran keseluruhan projek.
  • Pandangan medan tersuai yang dipermudahkan dalam senarai projek dan gambaran keseluruhan projek.
  • Tajuk halaman yang bersatu dengan reka bentuk Primer yang lancar.
  • Meningkatkan mesyuarat dengan ciri-ciri baru seperti muat naik lampiran, bertanggungjawab, dan sejarah mesyuarat.
  • Pemberitahuan automatik untuk storan fail yang tidak sihat, dan mendapatkan kawalan dengan pilihan toggle.
  • Salin folder projek yang dikelola secara automatik untuk OneDrive/SharePoint semasa menyalin projek.
  • Minta pentadbir untuk mengeluarkan perkongsian pada pakej kerja apabila membatalkan keahlian projek.
  • Meningkatkan perancangan dengan mod paparan 4 dan 8 minggu dalam pelan pasukan.
+ Keluaran tersebut mengandungi pelbagai fitur baharu dan penambahbaikan:
  • eksport PDF paparan Gantt, cth. untuk mencetak (tambahan Enterprise)
  • Projek kegemaran
  • Bahagian dalam Mesyuarat
  • Paparkan mesyuarat di Halaman Saya dan halaman gambaran keseluruhan projek
  • Kemungkinan untuk sorokkan lampiran dalam tab Fail
  • Ruang tersuai jenis Pautan (URL)
ical_sharing_modal: title: "Langgan ke kalendar" inital_setup_error_message: "Ralat berlaku ketika sedang mengambil data." @@ -360,12 +371,12 @@ ms: warning: "Sila jangan kongsi URL ini dengan pengguna lain. Sesiapa sahaja yang mempunyai pautan ini akan boleh melihat butiran pakej kerja tanpa akaun atau kata laluan." token_name_label: "Dimanakah anda akan menggunakan ini?" token_name_placeholder: 'Taip nama, cth. "Telefon"' - token_name_description_text: 'Jika anda melanggan ke kalendar ini dari pelbagai peranti, nama ini akan membantu anda membezakan antara mereka dalam senarai token akses anda.' + token_name_description_text: 'Jika anda melanggan kalendar ini dari pelbagai peranti, nama ini akan membantu anda membezakan antara mereka dalam senarai token akses anda.' copy_url_label: "Salin URL" ical_generation_error_text: "Ralat berlaku semasa menjana URL kalendar." success_message: '"%{name}" URL berjaya disalin ke papan klip anda. Sisipkan ia dalam kalendar pelanggan anda untuk lengkapkan langganan.' label_activate: "Aktifkan" - label_assignee: "Wakil" + label_assignee: "Penerima tugasan" label_add_column_after: "Tambah kolum selepas" label_add_column_before: "Tambah kolum sebelum" label_add_columns: "Tambah kolum-kolum" @@ -378,17 +389,18 @@ ms: label_added_time_by: 'Ditambah oleh %{author} pada %{age}' label_ago: "hari yang lalu" label_all: "semua" + label_all_uppercase: "Semua" label_all_work_packages: "semua pakej kerja" label_and: "dan" label_ascending: "Menaik" label_author: "Pengarang: %{user}" label_avatar: "Avatar" label_between: "antara" - label_board: "Papan" + label_board: "Board" label_board_locked: "Terkunci" - label_board_plural: "Papan-papan" + label_board_plural: "Board" label_board_sticky: "Pelekat" - label_change: "Ubah " + label_change: "Tukar" label_create: "Cipta" label_create_work_package: "Cipta pakej kerja baharu" label_created_by: "Dicipta oleh" @@ -396,29 +408,30 @@ ms: label_date_with_format: "Masukkan %{date_attribute} menggunakan format berikut: %{format}" label_deactivate: "Nyahaktifkan" label_descending: "Menurun" - label_description: "Penerangan" + label_description: "Deskripsi" label_details: "Butiran" label_display: "Paparan" - label_cancel_comment: "Batal komen" + label_cancel_comment: "Batalkan komen" label_closed_work_packages: "ditutup" label_collapse: "Sembunyikan" label_collapsed: "disembunyikan" label_collapse_all: "Sembunyikan semua" label_comment: "Komen" label_committed_at: "%{committed_revision_link} pada %{date}" - label_committed_link: "Semakan yang dilakukan %{revision_identifier}" + label_committed_link: "semakan yang dilakukan %{revision_identifier}" label_contains: "mengandungi" label_created_on: "dicipta pada" - label_edit_comment: "Sunting komen ini" - label_edit_status: "Sunting status pakej kerja tersebut" + label_edit_comment: "Edit komen ini" + label_edit_status: "Edit status pakej kerja tersebut" label_email: "E-mel" label_equals: "adalah" - label_expand: "Kembangkan" - label_expanded: "dibesarkan" + label_expand: "Kembang" + label_expanded: "dikembangkan" label_expand_all: "Kembangkan semua" label_expand_project_menu: "Kembangkan menu projek" label_export: "Eksport" label_export_preparing: "Eksport sedang disediakan dan akan dimuat turun sebentar lagi." + label_favorites: "Kegemaran" label_filename: "Fail" label_filesize: "Saiz" label_general: "Umum" @@ -428,11 +441,11 @@ ms: label_group_by: "Kumpulkan mengikut" label_group_plural: "Kumpulan" label_hide_attributes: "Kurangkan" - label_hide_column: "Sembunyikan lajur" + label_hide_column: "Sembunyikan kolum" label_hide_project_menu: "Sembunyikan menu projek" label_in: "dalam" - label_in_less_than: "dalam kurang daripada" - label_in_more_than: "dalam lebih daripada" + label_in_less_than: "kurang daripada" + label_in_more_than: "lebih daripada" label_incoming_emails: "E-mel yang masuk" label_information_plural: "Maklumat" label_invalid: "Tidak sah" @@ -444,7 +457,7 @@ ms: label_less_than_ago: "kurang dari beberapa hari yang lalu" label_loading: "Memuatkan..." label_mail_notification: "Pemberitahuan e-mel" - label_manage_columns: "Urus dan susun semula lajur" + label_manage_columns: "Urus dan susun semula kolum" label_me: "saya" label_meeting_agenda: "Agenda" label_meeting_minutes: "Minit" @@ -460,7 +473,7 @@ ms: label_no_value: "Tiada nilai" label_none: "tiada" label_not_contains: "tidak mengandungi" - label_not_equals: "adalah tidak" + label_not_equals: "adalah bukan" label_on: "pada" label_open_menu: "Buka menu" label_open_context_menu: "Buka menu konteks" @@ -487,8 +500,8 @@ ms: label_select_project: "Pilih projek" label_select_watcher: "Pilih pemerhati..." label_selected_filter_list: "Penyaring yang dipilih" - label_show_attributes: "Tunjuk semua atribut" - label_show_in_menu: "Tunjuk paparan dalam menu" + label_show_attributes: "Paparkan semua atribut" + label_show_in_menu: "Paparkan paparan dalam menu" label_sort_by: "Susun mengikut" label_sorted_by: "disusun mengikut" label_sort_higher: "Alihkan ke atas" @@ -507,9 +520,9 @@ ms: label_time_entry_plural: "Masa yang dihabiskan" label_up: "Atas" label_user_plural: "Pengguna" - label_activity_show_only_comments: "Tunjuk aktiviti dengan komen sahaja" - label_activity_show_all: "Tunjuk semua aktiviti" - label_total_progress: "%{percent}% Jumlah kemajuan" + label_activity_show_only_comments: "Paparkan aktiviti dengan komen sahaja" + label_activity_show_all: "Paparkan semua aktiviti" + label_total_progress: "%{percent}% Jumlah perkembangan" label_total_amount: "Jumlah: %{amount}" label_updated_on: "dikemas kini pada" label_value_derived_from_children: "(nilai diperolehi daripada anak)" @@ -518,30 +531,30 @@ ms: label_work_package: "Pakej kerja" label_work_package_parent: "Pakej kerja induk" label_work_package_plural: "Pakej kerja" - label_watch: "Lihat" - label_watch_work_package: "Lihat pakej kerja" + label_watch: "Perhati" + label_watch_work_package: "Perhatikan pakej kerja" label_watcher_added_successfully: "Pemerhati berjaya ditambah!" label_watcher_deleted_successfully: "Pemerhati berjaya dikeluarkan!" label_work_package_details_you_are_here: "Anda berada di tab %{tab} untuk %{type} %{subject}." label_work_package_context_menu: "Menu konteks pakej kerja" - label_unwatch: "Berhenti memerhati" + label_unwatch: "Berhenti memerhatikan" label_unwatch_work_package: "Berhenti memerhati pakej kerja" label_uploaded_by: "Dimuat naik oleh" - label_default_queries: "Asas" + label_default_queries: "Default" label_starred_queries: "Kegemaran" label_global_queries: "Awam" label_custom_queries: "Peribadi" - label_columns: "Lajur" + label_columns: "Kolum" label_attachments: Lampiran - label_drop_files: "" + label_drop_files: "Letakkan fail disini untuk lampirkan fail." label_drop_or_click_files: "Letakkan fail disini atau klik untuk melampirkan fail." - label_drop_folders_hint: Anda tidak boleh memuat naik folder sebagaisatulampiran. Sila pilih fail tunggal. - label_add_attachments: "Lampirkan Fail" - label_formattable_attachment_hint: "Lampir dan pautkan fail dengan meletakkan pada ruang ini atau menampal dari papan klip." + label_drop_folders_hint: Anda tidak boleh memuat naik folder sebagai satu lampiran. Sila pilih fail tunggal. + label_add_attachments: "Lampirkan fail" + label_formattable_attachment_hint: "Lampir dan pautkan fail dengan meletakkan pada ruang ini atau menyisipkan dari papan klip." label_remove_file: "Padam %{fileName}" label_remove_watcher: "Keluarkan pemerhati %{name}" - label_remove_all_files: Padam fail tersebut - label_add_description: "Tambah penerangan untuk %{file}" + label_remove_all_files: Padam semua fail + label_add_description: "Tambah deskripsi untuk %{file}" label_upload_notification: "Sedang memuat naik fail..." label_work_package_upload_notification: "Sedang memuat naik fail untuk Pakej kerja #%{id}: %{subject}" label_wp_id_added_by: "#%{id} ditambah oleh %{author}" @@ -554,63 +567,63 @@ ms: label_version_plural: "Versi-versi" label_view_has_changed: "Paparan ini mempunyai perubahan yang tidak disimpan. Klik untuk simpan mereka." help_texts: - show_modal: "Tunjuk kemasukkan atribut teks bantuan" + show_modal: "Paparkan entri atribut teks bantuan" onboarding: buttons: skip: "Langkau" next: "Seterusnya" got_it: "Faham" steps: - help_menu: "Menu bantuan (?) menyediakan sumber bantuan tambahan. Di sini anda akan menjumpai panduan pengguna, video panduan membantu dan lebih lagi.
Nikmati kerja anda di OpenProject!" + help_menu: "Menu Bantuan (?) menyediakan sumber bantuan tambahan. Di sini anda akan menjumpai panduan pengguna, video panduan membantu dan lebih lagi.
Nikmati kerja anda di OpenProject!" members: "Jemput ahli baru untuk sertai projek anda." quick_add_button: "Klik pada ikon tambah (+) dalam navigasi pengepala untuk cipta projek baru atau untuk jemput rakan sekerja." sidebar_arrow: "Guna anak panah kembali di sudut kiri atas untuk kembali ke menu utama projek." - welcome: "Ambil lawatan pengenalan 3 minit untuk belajar ciri-ciri penting dengan banyak.
Kami syorkan melengkapi langkah-langkah tersebut sehingga ke akhirnya. Anda boleh mula semula lawatan bila-bila masa." + welcome: "Ambil lawatan pengenalan 3 minit untuk belajar fitur-fitur penting dengan banyak.
Kami sarankan melengkapi langkah-langkah tersebut sehingga ke akhirnya. Anda boleh mula semula lawatan bila-bila masa." wiki: "Dalam wiki anda boleh mendokumentasikan dan kongsi pengetahuan bersama dengan pasukan anda." backlogs: overview: "Kendalikan kerja anda dalam paparan tunggakan." - sprints: "Pada kanan anda mempunyai tunggakan produk dan tunggakan bug, pada kiri anda mempunyai pecutan yang berkenaan. Di sini anda boleh mencipta epik, cerita pengguna, dan bug, utamakan dengan menarik & melepaskan dan tambah mereka ke pecutan." + sprints: "Di kanan anda mempunyai tunggakan produk dan tunggakan bug, di kiri anda mempunyai pecutan yang berkenaan. Di sini anda boleh mencipta epik, cerita pengguna, dan bug, utamakan dengan menarik & melepaskan dan tambah mereka ke pecutan." task_board_arrow: "Untuk lihat papan tugasan anda, buka pecutan drop-down..." - task_board_select: "...dan pilih kemasukan papan tugasan." - task_board: "Papan tugasan menggambarkan secara visual kemajuan untuk pecutan ini. Klik ikon tambah (+) di sebelah cerita pengguna untuk tambah tugasan baru atau halangan.
Status boleh dikemas kini dengan tarik dan lepas." + task_board_select: "...dan pilih entri papan tugasan." + task_board: "Papan tugasan menggambarkan secara visual perkembangan untuk pecutan ini. Klik ikon tambah (+) di sebelah cerita pengguna untuk tambah tugasan baru atau halangan.
Status tersebut boleh dikemas kini dengan tarik dan lepas." boards: - overview: "Pilih papan untuk tukar paparan dan kendalikan projek anda menggunakan paparan papan agile." - lists_kanban: "Disini anda boleh mencipta pelbagai senarai (kolum) dalam papan anda. Ciri ini membenarkan anda untuk mencipta papan Kanban, sebagai contoh." - lists_basic: "Disini anda boleh mencipta pelbagai senarai (kolum) dalam papan agile anda." - add: "Klik ikon tambah (+) untuk mencipta kad baru atau menambah kad sedia ada ke senarai pada papan." + overview: "Pilih board untuk tukar paparan dan uruskan projek anda menggunakan paparan board agile." + lists_kanban: "Disini anda boleh mencipta pelbagai senarai (kolum) dalam board anda. Fitur ini membenarkan anda untuk mencipta, sebagai contoh, board Kanban." + lists_basic: "Disini anda boleh mencipta pelbagai senarai (kolum) dalam board agile anda." + add: "Klik ikon tambah (+) untuk mencipta kad baru atau menambah kad sedia ada ke senarai pada board." drag: "Tarik dan lepaskan kad anda dalam senarai yang diberikan untuk menyusun mereka semula, atau untuk memindahkannya ke senarai lain.
Anda boleh klik ikon maklumat (i) di sudut kanan atas atau klik dua kali pada kad untuk membuka butirannya." wp: - toggler: "Sekarang mari lihat bahagian pakej kerja, yang memberikan anda paparan terperinci kerja anda." - list: "Gambaran keseluruhan pakej kerja ini menyediakan senarai semua kerja dalam projek anda, seperti tugasan, pencapaian, fasa dan banyak lagi.
Pakej kerja boleh dicipta dan disunting secara langsung dari paparan ini. Untuk mengakses butiran pakej kerja tertentu, hanya klik dua kali pada barisnya." - full_view: "Paparan butiran pakej kerja tersebut menyediakan semua maklumat yang berkaitan dengan pakej kerja yang diberi, seperti penerangan, status, keutamaan, aktiviti, kebergantungan, dan komen." + toggler: "Sekarang mari lihat bahagian pakej kerja, yang memberikan anda paparan kerja anda secara terperinci." + list: "Gambaran keseluruhan pakej kerja ini menyediakan senarai semua kerja dalam projek anda, seperti tugasan, pencapaian, fasa dan banyak lagi.
Pakej kerja boleh dicipta dan diedit secara langsung dari paparan ini. Untuk mengakses butiran pakej kerja tertentu, hanya klik dua kali pada barisnya." + full_view: "Paparan butiran pakej kerja tersebut menyediakan semua maklumat yang berkaitan dengan pakej kerja yang diberi, seperti deskripsi, status, keutamaan, aktiviti, kebergantungan, dan komen." back_button: "Guna anak panah kembali di sudut kiri untuk keluar dan kembali ke senarai pakej kerja." - create_button: "Butang + Cipta akan menambah pakej kerja baru ke projek anda." + create_button: "Butang + Cipta akan menambah pakej kerja baharu ke projek anda." gantt_menu: "Cipta jadual projek dan garis masa dengan mudah menggunakan modul carta Gantt." - timeline: "Di sini anda boleh edit pelan projek anda, cipta pakej kerja baru, seperti tugasan, pencapaian, fasa, dan banyak lagi, serta tambah kebergantungan. Semua ahli boleh lihat dan kemas kini pelan terkini pada bila-bila masa." + timeline: "Di sini anda boleh edit pelan projek anda, cipta pakej kerja baru, seperti tugasan, pencapaian, fasa, dan banyak lagi, serta tambah kebergantungan. Semua ahli pasukan boleh lihat dan kemas kini pelan terkini pada bila-bila masa." team_planner: - overview: "Perancang pasukan membolehkan anda memberikan tugasan secara visual kepada ahli kumpulan dan dapatkan ringkasan tentang siapa yang mengusahakan apa." - calendar: "Papan perancangan mingguan atau dua mingguan memaparkan semua pakej kerja ditugaskan ke ahli pasukan anda." + overview: "Perancang pasukan membolehkan anda memberikan tugasan secara visual kepada ahli pasukan dan dapatkan gambaran keseluruhan tentang siapa yang mengusahakan apa." + calendar: "Board perancangan mingguan atau dua mingguan memaparkan semua pakej kerja yang ditugaskan ke ahli pasukan anda." add_assignee: "Untuk memulakan, tambah penerima tugasan ke dalam perancang pasukan." - add_existing: "Cari pakej kerja sedia ada dan tarik mereka ke perancang pasukan untuk serta merta tugaskan mereka ke ahli pasukan dan tentukan tarikh mula dan akhir." + add_existing: "Cari pakej kerja sedia ada dan tarik mereka ke perancang pasukan untuk tugaskan mereka ke ahli pasukan dengan serta merta dan tentukan tarikh mula dan akhir." card: "Tarik pakej kerja secara mendatar untuk gerakkan mereka ke belakang atau ke hadapan dalam masa, tarik pinggir pakej kerja untuk mengubah tarikh mula dan akhir malah, tarik secara menegak ke baris berbeza untuk tugaskan mereka ke ahli yang lain." notifications: title: "Pemberitahuan" - no_unread: "Tiada notifikasi belum dibaca" + no_unread: "Tiada pemberitahuan yang belum dibaca" reasons: mentioned: "disebutkan" watched: "pemerhati" - assigned: "wakil" + assigned: "penerima tugasan" responsible: "bertanggungjawab" - created: "telah cipta" + created: "dicipta" scheduled: "dijadualkan" commented: "telah komen" processed: "diproses" - prioritized: "telah utamakan" + prioritized: "telah diutamakan" dateAlert: "Peringatan tarikh" - shared: "dikongsi" + shared: "telah dikongsi" date_alerts: milestone_date: "Tarikh pencapaian" - overdue: "Tertunggak" + overdue: "Tertangguh" overdue_since: "sejak %{difference_in_days}" property_today: "adalah hari ini" property_is: "adalah dalam %{difference_in_days}" @@ -621,27 +634,27 @@ ms: description: "Dengan peringatan tarikh, anda akan dimaklumkan tentang tarikh mula dan akhir yang akan datang supaya anda tidak pernah terlepas atau lupa tarikh akhir yang penting." facets: unread: "Belum dibaca" - unread_title: "Tunjuk yang belum dibaca" + unread_title: "Paparkan yang belum dibaca" all: "Semua" - all_title: "Tunjukkan semua" + all_title: "Paparkan semua" center: label_actor_and: "dan" and_more_users: - other: "dan 1 yang lain" + other: "dan %{count} yang lain" no_results: at_all: "Pemberitahuan baharu akan muncul di sini apabila terdapat aktiviti yang berkaitan dengan anda." with_current_filter: "Tiada pemberitahuan dalam paparan ini pada masa ini" mark_all_read: "Tanda semua sudah dibaca" mark_as_read: "Tanda sudah dibaca" text_update_date: "%{date} oleh" - total_count_warning: "Tunjukkan %{newest_count} pemberitahuan yang terbaru. %{more_count} lagi tidak dipaparkan." + total_count_warning: "Sedang memaparkan %{newest_count} pemberitahuan yang terbaru. %{more_count} lagi tidak dipaparkan." empty_state: - no_notification: "Nampaknya anda sudah menyelesaikan semuanya." + no_notification: "Nampaknya anda telah selesaikan semuanya." no_notification_with_current_project_filter: "Nampaknya anda sudah selesai dengan projek yang dipilih." - no_notification_with_current_filter: "Nampaknya anda sudah selesai untuk penapis %{filter}." + no_notification_with_current_filter: "Nampaknya anda sudah selesai untuk penyaringan %{filter}." no_selection: "Klik pada pemberitahuan untuk paparkan semua butiran aktiviti." new_notifications: - message: "Terdapat pemberitahuan baru." + message: "Terdapat pemberitahuan baharu." link_text: "Klik sini untuk memuatkan mereka." menu: accountable: "Bertanggungjawab" @@ -654,7 +667,7 @@ ms: shared: "Dikongsi" settings: change_notification_settings: 'Anda boleh mengubah suai
tetapan pemberitahuan anda untuk memastikan anda tidak terlepas tarikh yang penting.' - title: "Tetapan notifikasi" + title: "Tetapan pemberitahuan" notify_me: "Maklumkan saya" reminders: no_notification: Tiada pemberitahuan @@ -672,27 +685,27 @@ ms: mentioned: title: "Telah disebutkan" description: "Terima pemberitahuan setiap kali sesiapa menyebut saya di mana saja" - assignee: "Wakil" + assignee: "Penerima tugasan" responsible: "Bertanggungjawab" shared: "Telah dikongsi" watched: "Pemerhati" - work_package_commented: "Semua komen baru" - work_package_created: "Pakej kerja baru" + work_package_commented: "Semua komen baharu" + work_package_created: "Pakej kerja baharu" work_package_processed: "Semua perubahan status" work_package_prioritized: "Semua perubahan keutamaan" work_package_scheduled: "Semua perubahan tarikh" global: immediately: title: "Menyertai" - description: "Pemberitahuan untuk semua aktiviti dalam pakej kerja yang anda terlibat (wakil, bertanggungjawab, atau pemerhati)." + description: "Pemberitahuan untuk semua aktiviti dalam pakej kerja yang anda terlibat (penerima tugasan, bertanggungjawab, atau pemerhati)." delayed: title: "Tidak menyertai" description: "Pemberitahuan tambahan untuk aktiviti dalam semua projek." date_alerts: title: "Peringatan tarikh" - description: "Pemberitahuan secaraautomatik apabila tarikh penting menghampiri untuk pakej kerja terbuka yang anda terlibat (wakil, bertanggungjawab atau pemerhati)." + description: "Pemberitahuan secara automatik apabila tarikh penting menghampiri untuk pakej kerja terbuka yang anda terlibat (penerima tugasan, bertanggungjawab atau pemerhati)." teaser_text: "Dengan peringatan tarikh, anda akan dimaklumkan tentang tarikh mula dan akhir yang akan datang supaya anda tidak pernah terlepas atau lupa tarikh akhir yang penting." - overdue: Apabila tertangguh + overdue: Apabila tertunggak project_specific: title: "Tetapan pemberitahuan khusus projek" description: "Tetapan pemberitahuan khusus projek mengatasi tetapan default diatas." @@ -700,7 +713,7 @@ ms: already_selected: "Projek ini telah dipilih" remove: "Keluarkan tetapan projek" password_confirmation: - field_description: "Anda perlu untuk memasukkan kata laluan akaun anda untuk mengesahkan perubahan ini." + field_description: "Anda perlu memasukkan kata laluan akaun anda untuk mengesahkan perubahan ini." title: "Sahkan kata laluan anda untuk teruskan" pagination: no_other_page: "Anda berada di satu-satunya halaman." @@ -711,11 +724,11 @@ ms: default: "-" subject: "Masukkan subjek di sini" selection: "Sila pilih" - description: "Penerangan: Klik untuk edit..." - relation_description: "Klik untuk tambah penerangan untuk hubungan ini" + description: "Deskripsi: Klik untuk edit..." + relation_description: "Klik untuk tambah deskripsi untuk hubungan ini" project: required_outside_context: > - Sila pilih projek untuk mencipta pakej kerja untuk melihat semua atribut. Anda hanya boleh memilih projek yang mempunyai jenis di atas diaktifkan. + Sila pilih projek untuk mencipta pakej kerja untuk melihat semua atribut. Anda hanya boleh memilih projek yang mempunyai jenis di atas yang telah diaktifkan. details_activity: "Aktiviti butiran projek" context: "Konteks projek" click_to_switch_to_project: "Projek: %{projectname}" @@ -723,14 +736,14 @@ ms: use_template: "Guna templat" no_template_selected: "(Tiada)" copy: - copy_options: "Pilihan salinan" + copy_options: "Salin pilihan" autocompleter: - label: "Autolengkap projek" + label: "Autopelengkapan projek" reminders: settings: daily: add_time: "Tambah masa" - enable: "Bolehkan peringatan e-mel harian" + enable: "Benarkan peringatan e-mel harian" explanation: "Anda akan menerima peringatan hanya untuk pemberitahuan yang belum dibaca dan hanya pada jam yang anda tentukan. %{no_time_zone}" no_time_zone: "Sehingga anda konfigurasi zon masa untuk akaun anda, masa akan ditafsirkan dalam UTC." time_label: "Masa %{counter}:" @@ -739,11 +752,11 @@ ms: title: "Terima peringatan e-mel pada hari-hari ini" immediate: title: "Hantar saya peringatan e-mel" - mentioned: "Serta merta apabila sesiapa @mentions saya" + mentioned: "Serta merta apabila sesiapa @menyebut saya" alerts: title: "Peringatan e-mel untuk item lain (yang bukan pakej kerja)" explanation: > - Pemberitahuan hari ini adalah terhad untuk pakej kerja. Anda boleh memilih untuk terus menerima makluman e-mel untuk kejadian ini sehingga mereka disertakan dalam notifikasi: + Pemberitahuan hari ini adalah terhad untuk pakej kerja. Anda boleh memilih untuk terus menerima makluman e-mel untuk kejadian ini sehingga mereka disertakan dalam pemberitahuan: news_added: "Berita ditambah" news_commented: "Komen pada item berita" document_added: "Dokumen ditambah" @@ -766,9 +779,9 @@ ms: error_no_table_configured: "Sila konfigurasi jadual untuk %{group}." reset_title: "Set semula konfigurasi borang" confirm_reset: > - Amaran: Adakah anda pasti anda ingin set semula konfigurasi borang? Ini akan set semula atribut ke kumpulan asal mereka dan menyahdayakan SEMUA medan tersuai. + Amaran: Adakah anda pasti anda ingin set semula konfigurasi borang? Ini akan set semula atribut kumpulan asal mereka dan menyahdayakan SEMUA ruang tersuai. upgrade_to_ee: "Naik taraf edisi Enterprise di premis" - upgrade_to_ee_text: "Wow! Jika anda perlukan tambahan ini anda adalah super pro! Bolehkah anda menyokong kami pemaju OpenProject dengan menjadi pelanggan edisi Enterprise?" + upgrade_to_ee_text: "Wah! Jika anda perlukan tambahan ini anda adalah sungguh pro! Bolehkah anda menyokong kami pemaju OpenProject dengan menjadi pelanggan edisi Enterprise?" more_information: "Maklumat lanjut" nevermind: "Tidak mengapa" edit: @@ -783,7 +796,7 @@ ms: timer: start_new_timer: "Mulakan pemasa baharu" timer_already_running: "Untuk mula pemasa baharu, anda perlu menghentikan pemasa semasa dahulu:" - timer_already_stopped: "Tiada pemasa aktif untuk pakej kerja ini, adakah anda telah menghentikannya di window lain?" + timer_already_stopped: "Tiada pemasa aktif untuk pakej kerja ini, adakah anda telah menghentikannya di tetingkap lain?" tracking_time: "Masa penjejakan" button_stop: "Hentikan pemasa semasa" two_factor_authentication: @@ -800,7 +813,7 @@ ms: children: "Anak" relates: "Berkaitan Dengan" duplicates: "Duplikasi" - duplicated: "Duplikasi oleh" + duplicated: "Diduplikasi oleh" blocks: "Sekat" blocked: "Disekat oleh" precedes: "Mendahului" @@ -809,7 +822,7 @@ ms: partof: "Sebahagian daripada" requires: "Memerlukan" required: "Diperlukan oleh" - relation_type: "jenis perhubungan" + relation_type: "jenis hubungan" relations_hierarchy: parent_headline: "Induk" hierarchy_headline: "Hierarki" @@ -834,7 +847,7 @@ ms: toggle_description: "Tukar penerangan perhubungan" update_relation: "Klik untuk ubah jenis perhubungan" add_follower: "Tambah pengikut" - show_relations: "Tunjuk perhubungan" + show_relations: "Paparkan perhubungan" add_predecessor: "Tambah pendahulu" remove: "Padam perhubungan" save: "Simpan perhubungan" @@ -849,9 +862,9 @@ ms: placeholder: "Pilih projek" repositories: select_tag: "Pilih tag" - select_branch: "Pilih cawangan" + select_branch: "Pilih cabang" field_value_enter_prompt: "Masukkan nilai untuk '%{field}'" - project_menu_details: "Butiran" + project_menu_details: "Butiran-butiran" scheduling: manual: "Penjadualan secara manual" sort: @@ -873,59 +886,59 @@ ms: strong: "Kuat" italic: "Italic" underline: "Gariskan" - deleted: "Padamkan" + deleted: "Dipadam" code: "Kod sebaris" - heading1: "Tajuk 1" - heading2: "Tajuk 2" - heading3: "Tajuk 3" - unordered_list: "Senarai tidak tersusun" - ordered_list: "Senarai tersusun" - quote: "Petikan harga" - unquote: "Batalkan petikan" - preformatted_text: "Teks yang telah diformatkan" - wiki_link: "Pautan ke halaman wiki" - image: "Gambar" + heading1: "Pengepala 1" + heading2: "Pengepala 2" + heading3: "Pengepala 3" + unordered_list: "Senarai Tidak Tersusun" + ordered_list: "Senarai Tersusun" + quote: "Petikan" + unquote: "Batalkan sebut harga" + preformatted_text: "Teks yang telah dipraformatkan" + wiki_link: "Pautan ke halaman Wiki" + image: "Imej" work_packages: bulk_actions: move: "Perubahan projek secara pukal" edit: "Edit pukal" copy: "Salinan pukal" - delete: "Penghapusan pukal" + delete: "Pemadaman pukal" button_clear: "Kosongkan" comment_added: "Komen telah berjaya ditambahkan." comment_send_failed: "Ralat telah berlaku. Tidak dapat menghantar komen." comment_updated: "Komen telah berjaya dikemas kini." - confirm_edit_cancel: "Adakah anda pasti anda ingin membatalkan penyuntingan pakej kerja?" + confirm_edit_cancel: "Adakah anda pasti anda ingin membatalkan edit pakej kerja?" datepicker_modal: automatically_scheduled_parent: "Dijadualkan secara automatik. Tarikh diperolehi daripada hubungan." manually_scheduled: "Penjadualan secara manual dibenarkan, semua hubungan diabaikan." start_date_limited_by_relations: "Tarikh mula dan akhir yang tersedia adalah dibatasi oleh hubungan." changing_dates_affects_follow_relations: "Mengubah tarikh ini akan mempengaruhi tarikh pakej kerja yang berkaitan." - click_on_show_relations_to_open_gantt: 'Klik pada "%{button_name}" untuk gambaran keseluruhan GANTT.' - show_relations: "Tunjuk hubungan" + click_on_show_relations_to_open_gantt: 'Klik "%{button_name}" untuk gambaran keseluruhan GANTT.' + show_relations: "Paparkan hubungan" ignore_non_working_days: title: "Hari bekerja sahaja" - description_filter: "Saring" + description_filter: "Penyaring" description_enter_text: "Masukkan teks" description_options_hide: "Sembunyikan pilihan" - description_options_show: "Tunjukkan pilihan" - edit_attribute: "%{attribute} - Sunting" + description_options_show: "Paparkan pilihan" + edit_attribute: "%{attribute} - Edit" key_value: "%{key}: %{value}" - label_enable_multi_select: "Bolehkan pilihan berbilang" - label_disable_multi_select: "Melumpuhkan pilihan berbilang" + label_enable_multi_select: "Aktifkan multiselect" + label_disable_multi_select: "Nyahaktifkan multiselect" label_filter_add: "Tambah penyaring" label_filter_by_text: "Saring mengikut teks" label_options: "Pilihan" - label_column_multiselect: "Medan drop-down digabungkan: Pilih dengan kekunci anak panah, sahkan pemilihan dengan enter, padam dengan backspace" + label_column_multiselect: "Ruang drop-down digabungkan: Pilih dengan kekunci anak panah, sahkan pemilihan dengan enter, padam dengan backspace" message_error_during_bulk_delete: Ralat berlaku semasa cuba untuk memadam pakej kerja. message_successful_bulk_delete: Berjaya memadamkan pakej kerja. message_successful_show_in_fullscreen: "Klik di sini untuk buka pakej kerja ini dalam paparan skrin penuh." - message_view_spent_time: "Tunjuk masa yang dihabiskan untuk pakej kerja ini" + message_view_spent_time: "Paparkan masa yang dihabiskan untuk pakej kerja ini" message_work_package_read_only: "Pakej kerja dikunci dalam status ini. Tiada atribut selain status yang boleh diubah." message_work_package_status_blocked: "Status pakej kerja tidak boleh ditulis kerana statusnya yang tertutup dan versi tertutup yang diberikan." - placeholder_filter_by_text: "Subjek, penerangan, komen, ..." + placeholder_filter_by_text: "Subjek, deskripsi, komen, ..." progress: - title: "Anggaran kerja dan kemajuan" + title: "Anggaran kerja dan perkembangan" baseline: addition_label: "Ditambah ke paparan dalam tempoh masa perbandingan" removal_label: "Dikeluarkan dari paparan dalam tempoh masa perbandingan" @@ -936,21 +949,21 @@ ms: baseline_incompatible: "Penyaring atribut ini tidak diambil kira dalam mod asas." baseline_warning: "Mod asas sedang aktif tetapi beberapa penyaring aktif tidak termasuk dalam perbandingan." inline_create: - title: "Klik di sini untuk tambah pakej kerja baru ke senarai ini" + title: "Klik di sini untuk tambah pakej kerja baharu ke senarai ini" create: - title: "Pakej kerja baru" - header: "Baru %{type}" - header_no_type: "Pakej kerja baru (Jenis belum ditetapkan)" - header_with_parent: "Baru %{type} (Anak %{parent_type} #%{id})" + title: "Pakej kerja baharu" + header: "%{type} baharu" + header_no_type: "Pakej kerja baharu (Jenis belum ditetapkan)" + header_with_parent: "%{type} baharu (Anak %{parent_type} #%{id})" button: "Cipta" copy: title: "Salin pakej kerja" hierarchy: - show: "Tunjuk mod hierarki" + show: "Paparkan mod hierarki" hide: "Sembunyikan mod hierarki" toggle_button: "Klik untuk tukar mod hierarki." leaf: "Dedaun pakej kerja pada tahap %{level}." - children_collapsed: "Paras hierarki %{level}, ditutup. Klik untuk tunjuk anak yang disaring" + children_collapsed: "Paras hierarki %{level}, ditutup. Klik untuk paparkan anak yang disaring" children_expanded: "Paras hierarki %{level}, dikembangkan. Klik untuk tutup anak yang disaring" faulty_query: title: Pakej kerja tidak dapat dimuatkan. @@ -960,18 +973,18 @@ ms: description: Sama ada tiada yang dicipta atau semua pakej kerja telah disaring keluar. limited_results: Hanya %{count} pakej kerja boleh ditunjukkan dalam mod penyusunan manual. Sila kurangkan hasil dengan menyaring, atau tukar ke penyusunan secara automatik. property_groups: - details: "Butiran" + details: "Butiran-butiran" people: "Orang" estimatesAndTime: "Anggaran & Masa" other: "Lain-lain" properties: - assignee: "Wakil" + assignee: "Penerima tugasan" author: "Pengarang" createdAt: "Dicipta pada" - description: "Penerangan" + description: "Deskripsi" date: "Tarikh" - percentComplete: "% Selesai" - percentCompleteAlternative: "Kemajuan" + percentComplete: "% Lengkap" + percentCompleteAlternative: "\nPerkembangan" dueDate: "Tarikh tamat" duration: "Tempoh" spentTime: "Masa yang dihabiskan" @@ -979,8 +992,8 @@ ms: percentageDone: "Peratusan selesai" priority: "Keutamaan" projectName: "Projek" - remainingWork: "Kerja berbaki" - remainingWorkAlternative: "Waktu berbaki" + remainingWork: "Kerja yang berbaki" + remainingWorkAlternative: "Waktu yang berbaki" responsible: "Bertanggungjawab" startDate: "Tarikh mula" status: "Status" @@ -993,7 +1006,7 @@ ms: version: "Versi" work: "Kerja" workAlternative: "Anggaran masa" - remainingTime: "Kerja berbaki" + remainingTime: "Kerja yang berbaki" default_queries: latest_activity: "Aktiviti terkini" created_by_me: "Dicipta oleh saya" @@ -1012,37 +1025,37 @@ ms: default: "-" date: "Pilih tarikh" query: - column_names: "Kolum" + column_names: "Kolum-kolum" group_by: "Kumpulkan hasil mengikut" group: "Kumpulkan mengikut" - group_by_disabled_by_hierarchy: "Kumpulkan mengikut dilumpuhkan kerana mod hierarki aktif." - hierarchy_disabled_by_group_by: "Mod hierarki dilumpuhkan kerana hasil dikumpulkan oleh %{column}." - sort_ascending: "Menyusun menaik" - sort_descending: "Menyusun menaik" - move_column_left: "Gerakkan kolum kiri" - move_column_right: "Gerakkan kolum kanan" + group_by_disabled_by_hierarchy: "Kumpulkan mengikut dinyahaktifkan kerana mod hierarki sedang aktif." + hierarchy_disabled_by_group_by: "Mod hierarki dinyahaktifkan kerana hasil dikumpulkan oleh %{column}." + sort_ascending: "Susun menaik" + sort_descending: "Susun menurun" + move_column_left: "Gerakkan kolum ke kiri" + move_column_right: "Gerakkan kolum ke kanan" hide_column: "Sembunyikan kolum" insert_columns: "Masukkan kolum" - filters: "Saringan" + filters: "Penyaring" display_sums: "Paparkan Jumlah" - confirm_edit_cancel: "Adakah anda pasti ingin membatalkan suntingan nama paparan ini? Tajuk akan ditetapkan semula ke nilai sebelumnya." + confirm_edit_cancel: "Adakah anda pasti ingin membatalkan edit nama paparan ini? Tajuk akan ditetapkan semula ke nilai sebelumnya." click_to_edit_query_name: "Klik untuk edit tajuk paparan ini." rename_query_placeholder: "Nama paparan ini" star_text: "Tandakan paparan ini sebagai kegemaran dan tambah ke bar sisi pandangan yang disimpan di sisi kiri." public_text: > - Terbitkan paparan ini, membenarkan pengguna lain untuk akses paparan anda. Pengguna dengan kebenaran 'Urus paparan awam' boleh ubah suai atau keluarkan pertanyaan awam. Ini tidak akan mempengaruhi keterlihatan hasil pakej kerja dalam paparan itu dan bergantung kepada kebenaran mereka, pengguna mungkin melihat hasil yang berbeza. + Terbitkan paparan ini bagi membenarkan pengguna lain untuk akses paparan anda. Pengguna dengan kebenaran 'Urus paparan awam' boleh mengubah suai atau padamkan pertanyaan awam. Ini tidak akan mempengaruhi keterlihatan hasil pakej kerja dalam paparan itu dan bergantung kepada kebenaran mereka, pengguna mungkin akan melihat hasil yang berbeza. errors: - unretrievable_query: "Tidak dapat untuk mendapatkan paparan dari URL" + unretrievable_query: "Tidak dapat untuk memperolehi paparan dari URL" not_found: "Tiada paparan seperti itu" duplicate_query_title: "Nama paparan ini sudah wujud. Tukar juga?" - text_no_results: "Tiada paparan yang sepadan yang dijumpai." + text_no_results: "Tiada paparan yang sepadan ditemui." scheduling: is_parent: "Tarikh pakej kerja ini disimpulkan secara automatik dari anaknya. Aktifkan 'Penjadualan Manual' untuk tetapkan tarikh." - is_switched_from_manual_to_automatic: "Tarikh pakej kerja ini mungkin perlu dikira selepas menukar dari penjadualan manual ke automatik kerana hubungan dengan pakej kerja lain." + is_switched_from_manual_to_automatic: "Tarikh pakej kerja ini mungkin perlu dikira semula selepas menukar dari penjadualan manual ke automatik kerana hubungan dengan pakej kerja lain." sharing: share: "Kongsi" title: "Kongsi pakej kerja" - show_all_users: "Tunjuk semua pengguna kongsi" + show_all_users: "Paparkan kepada semua pengguna dengan siapa pakej kerja telah dikongsikan" selected_count: "%{count} dipilih" selection: mixed: "Bercampur" @@ -1051,33 +1064,33 @@ ms: table: configure_button: "Konfigurasi jadual pakej kerja" summary: "Jadual dengan baris pakej kerja dan kolum atribut pakej kerja." - text_inline_edit: "Kebanyakan sel jadual ini ialah butang yang mengaktifkan kefungsian pengeditan sebaris bagi atribut tersebut." - text_sort_hint: "Dengan pautan dalam pengepala jadual anda boleh menyusun, mengumpul, menyusun semula, mengeluar dan menambahkan kolum jadual." + text_inline_edit: "Kebanyakkan sel jadual ini ialah butang yang mengaktifkan kefungsian edit sebaris bagi atribut tersebut." + text_sort_hint: "Dengan pautan dalam pengepala jadual anda boleh menyusun, mengumpul, menyusun semula, mengeluarkan dan menambahkan kolum jadual." text_select_hint: "Pilih kotak yang sepatutnya dibuka dengan 'ALT' dan kekunci anak panah." table_configuration: button: "Konfigurasi jadual pakej kerja ini" choose_display_mode: "Papar pakej kerja sebagai" modal_title: "Konfigurasi jadual pakej kerja" - embedded_tab_disabled: "Tab konfigurasi ini tidak tersedia untuk paparan tersemat yang anda sedang sunting." + embedded_tab_disabled: "Tab konfigurasi ini tidak tersedia untuk paparan tersemat yang anda sedang edit." default: "default" display_settings: "Tetapan paparan" default_mode: "Senarai datar" hierarchy_mode: "Hierarki" - hierarchy_hint: "Semua hasil jadual tersaring akan ditambah bersama leluhur mereka. Hierarki boleh dikembangkan dan ditutup." + hierarchy_hint: "Semua hasil jadual tersaring akan ditambah bersama leluhur mereka. Hierarki boleh dikembang dan ditutup." display_sums_hint: "Paparkan jumlah semua atribut yang boleh dijumlahkan dalam baris di bawah hasil jadual." - show_timeline_hint: "Tunjuk satu carta gantt yang interaktif pada bahagian kanan jadual. Anda boleh ubah lebar nya dengan menarik pembahagi antara jadual dan carta gantt." - highlighting: "Menyerlahkan" + show_timeline_hint: "Paparkan satu carta gantt yang interaktif pada bahagian kanan jadual. Anda boleh ubah lebarnya dengan menarik pembahagi antara jadual dan carta gantt." + highlighting: "Menyorotkan" highlighting_mode: - description: "Serlahkan dengan warna" - none: "Tiada penyerlahan" - inline: "Atribut yang diserlahkan" + description: "Sorotkan dengan warna" + none: "Tiada penyorotan" + inline: "Atribut yang disorotkan" inline_all: "Semua atribut" entire_row_by: "Keseluruhan baris mengikut" status: "Status" priority: "Keutamaan" type: "Jenis" sorting_mode: - description: "Pilih mod untuk menyusun pakej kerja anda:" + description: "Pilih mod untuk menyusun Pakej kerja anda:" automatic: "Automatik" manually: "Secara manual" warning: "Anda akan hilang penyusunan sebelumnya apabila mengaktifkan mod penyusunan automatik." @@ -1091,17 +1104,17 @@ ms: tabs: overview: Gambaran keseluruhan activity: Aktiviti - relations: Hubungan - watchers: Pemerhati + relations: Hubungan-hubungan + watchers: Pemerhati-pemerhati files: Fail-fail time_relative: - days: "hari" + days: "hari-hari" weeks: "minggu" - months: "bulan" + months: "bulan-bulan" toolbar: settings: configure_view: "Konfigurasi paparan" - columns: "Kolum" + columns: "Kolum-kolum" sort_by: "Susun mengikut" group_by: "Kumpulkan mengikut" display_sums: "Paparkan jumlah" @@ -1130,21 +1143,21 @@ ms: title: "Sahkan untuk teruskan" text: "Adakah anda pasti anda ingin melaksanakan tindakan ini?" destroy_work_package: - title: "Sahkan pemadam %{label}" + title: "Sahkan pemadaman %{label}" single_text: "Adakah anda pasti anda ingin memadam pakej kerja" bulk_text: "Adakah anda pasti anda ingin memadam %{label} yang berikut?" has_children: "Pakej kerja mempunyai %{childUnits}:" confirm_deletion_children: "Saya mengesahkan semua keturunan pakej kerja yang tersenarai akan dikeluarkan secara berulang-ulang." deletes_children: "Semua pakej kerja anak dan keturunan mereka akan dipadamkan secara berulang-ulang." destroy_time_entry: - title: "Sahkan pemadaman kemasukan masa" - text: "Adakah anda pasti anda ingin memadam kemasukan masa yang berikut?" + title: "Sahkan pemadaman entri masa" + text: "Adakah anda pasti anda ingin memadam entri masa yang berikut?" notice_no_results_to_display: "Tiada hasil yang boleh dilihat untuk dipaparkan." notice_successful_create: "Penciptaan yang berjaya." notice_successful_delete: "Pemadaman yang berjaya." notice_successful_update: "Kemas kini yang berjaya." notice_job_started: "kerja bermula." - notice_bad_request: "Permintaan yang salah." + notice_bad_request: "Ralat Permintaan." relations: empty: Tiada perhubungan wujud remove: Padam perhubungan @@ -1155,8 +1168,8 @@ ms: button_save_all: "Simpan" button_cancel_all: "Batal" link_formatting_help: "Bantuan format teks" - btn_preview_enable: "Tinjauan" - btn_preview_disable: "Nyahdayakan tinjauan" + btn_preview_enable: "Previu" + btn_preview_disable: "Nyahdayakan previu" null_value_label: "Tiada nilai" clear_value_label: "-" errors: @@ -1164,7 +1177,7 @@ ms: number: "%{field} bukan nombor yang sah" maxlength: "%{field} tidak boleh mengandungi lebih dari %{maxLength} digit" minlength: "%{field} tidak boleh mengandungi kurang dari %{minLength} digit" - messages_on_field: "Medan ini tidak sah: %{messages}" + messages_on_field: "Ruang ini tidak sah: %{messages}" error_could_not_resolve_version_name: "Tidak dapat menyelesaikan nama versi" error_could_not_resolve_user_name: "Tidak dapat menyelesaikan nama pengguna" error_attachment_upload: "Fail gagal untuk dimuat naik: %{error}" @@ -1173,7 +1186,7 @@ ms: workPackage: other: "pakej kerja" child_work_packages: - other: "satu pakej kerja anak" + other: "%{count} pakej kerja anak" hour: one: "1 j" other: "%{count} j" @@ -1197,7 +1210,7 @@ ms: project_and_subprojects: "dan semua subprojek" search_for: "Cari untuk" views: - card: "Kad-Kad" + card: "Kad-kad" list: "Jadual" timeline: "Gantt" invite_user_modal: @@ -1208,15 +1221,15 @@ ms: invite_to_project: "Jemput %{type} ke %{project}" User: "pengguna" Group: "kumpulan" - PlaceholderUser: "pengguna sementara" + PlaceholderUser: "pengguna placeholder" invite_principal_to_project: "Jemput %{principal} ke %{project}" project: label: "Projek" required: "Sila pilih projek" - lacking_permission: "Sila pilih projek lain kerana anda kekurangan kebenaran untuk tugaskan pengguna ke projek yang dipilih masa ini." + lacking_permission: "Sila pilih projek lain kerana anda kekurangan kebenaran untuk menugaskan pengguna ke projek yang dipilih masa ini." lacking_permission_info: "Anda kekurangan kebenaran untuk menugaskan pengguna ke projek yang sedang dijalankan. Anda perlu memilih yang lain." next_button: "Seterusnya" - no_results: "Tiada projek yang dijumpai" + no_results: "Tiada projek yang ditemui" no_invite_rights: "Anda tidak dibenarkan untuk menjemput ahli ke projek ini" type: required: "Sila pilih jenis untuk dijemput" @@ -1227,30 +1240,30 @@ ms: title: "Kumpulan" description: "Kebenaran berdasarkan peranan yang ditugaskan dalam projek terpilih" placeholder: - title: "Pengguna sementara" - title_no_ee: "Pengguna sementara (Edisi Enterprise hanya tambahan)" - description: "Tidak mempunyai akses ke projek dan tiada e-mel dihantar keluar." + title: "Pengguna placeholder" + title_no_ee: "Pengguna placeholder (Edisi Enterprise hanyalah tambahan)" + description: "Tidak mempunyai akses ke projek dan tiada e-mel yang dihantar keluar." description_no_ee: 'Tidak mempunyai akses ke projek dan tiada e-mel dihantar keluar.
LihatEdisi Enterprise' principal: label: name_or_email: "Nama atau alamat e-mel" name: "Nama" already_member_message: "Sudah menjadi ahli kepada %{project}" - no_results_user: "Tiada pengguna dijumpai" + no_results_user: "Tiada pengguna ditemui" invite_user: "Jemput:" - no_results_placeholder: "Tiada pengguna sementara dijumpai" - create_new_placeholder: "Cipta pengguna sementara baru:" - no_results_group: "Tiada kumpulan dijumpai" + no_results_placeholder: "Tiada placeholder yang ditemui" + create_new_placeholder: "Cipta placeholder baharu:" + no_results_group: "Tiada kumpulan ditemui" next_button: "Seterusnya" required: user: "Sila pilih pengguna" - placeholder: "Sila pilih pengguna sementara" + placeholder: "Sila pilih placeholder" group: "Sila pilih kumpulan" role: label: "Peranan dalam %{project}" - no_roles_found: "Tiada peranan dijumpai" + no_roles_found: "Tiada peranan ditemui" description: >- - Ini adalah peranan yang pengguna akan menerima apabila mereka menyertai projek anda. Peranan menentukan tindakan yang mereka dibenarkan untuk ambil dan maklumat yang mereka boleh lihat. Ketahui lebih lanjut tentang peranan dan kebenaran. + Ini adalah peranan yang pengguna akan menerima apabila mereka menyertai projek anda. Peranan tersebut menentukan tindakan yang mereka dibenarkan untuk ambil dan maklumat yang mereka boleh lihat. Ketahui lebih lanjut tentang peranan dan kebenaran. required: "Sila pilih peranan" next_button: "Seterusnya" message: @@ -1263,9 +1276,12 @@ ms: title: "%{principal} telah dijemput!" description: user: "Pengguna kini boleh log masuk ke akses %{project}. Sementara itu, anda boleh merancang dengan pengguna itu dan tugaskan pakej kerja sebagai contoh." - placeholder: "Pengguna sementara kini boleh digunakan dalam %{project}. Sementara itu anda sudah boleh merancang dengan pengguna dan tugaskan pakej kerja sebagai contoh." - group: "Kumpulan kini sebahagian daripada %{project}. Sementara tu nda sudah boleh merancang dengan kumpulan tersebut dan tugaskan pakej kerja sebagai contoh." + placeholder: "Placeholder kini boleh digunakan dalam %{project}. Sementara itu anda sudah boleh merancang dengan pengguna tersebut dan tugaskan pakej kerja sebagai contoh." + group: "Kumpulan tersebut kini sebahagian daripada %{project}. Sementara itu anda sudah boleh merancang dengan kumpulan tersebut dan menugaskan pakej kerja sebagai contoh." next_button: "Teruskan" + favorite_projects: + no_results: "Anda tiada projek kegemaran" + no_results_subtext: "Tambah satu atau beberapa projek sebagai kegemaran melalui gambaran keseluruhan mereka atau dalam senarai projek." include_projects: toggle_title: "Termasuk projek" title: "Projek-projek" @@ -1277,7 +1293,7 @@ ms: search_placeholder: "Cari projek..." include_subprojects: "Termasuk semua sub-projek" tooltip: - include_all_selected: "Projek sudah dimasukkan sejak Termasuk semua sub-projek didayakan." + include_all_selected: "Projek sudah disertakan sejak Sertakan semua sub-projek didayakan." current_project: "Ini adalah projek yang anda terlibat dalam sekarang." does_not_match_search: "Projek tidak sepadan dengan kriteria carian." no_results: "Tiada projek yang sepadan dengan kriteria carian anda." @@ -1285,9 +1301,9 @@ ms: toggle_title: "Dasar" clear: "Kosongkan" apply: "Gunakan" - header_description: "Serlahkan perubahan yang dibuat ke senarai ini pada bila-bila masa lalu." - enterprise_header_description: "Serlahkan perubahan yang dibuat ke senarai ini pada bila-bila masa lalu dengan edisi Enterprise." - show_changes_since: "Tunjuk perubahan sejak" + header_description: "Sorotkan perubahan yang dibuat ke senarai ini pada bila-bila masa lalu." + enterprise_header_description: "Sorotkan perubahan yang dibuat ke senarai ini pada bila-bila masa lalu dengan edisi Enterprise." + show_changes_since: "Paparkan perubahan sejak" baseline_comparison: "Perbandingan asas" help_description: "Zon masa rujukan untuk yang dasar." time_description: "Dalam masa tempatan anda: %{datetime}" @@ -1317,7 +1333,7 @@ ms: submit_success_message: "Borang telah berjaya dihantar" load_error_message: "Terdapat ralat semasa memuatkan borang" validation_error_message: "Sila betulkan ralat yang terdapat dalam borang" - advanced_settings: "Tetapan maju" + advanced_settings: "Tetapan lanjutan" spot: filter_chip: remove: "Keluarkan" diff --git a/config/locales/crowdin/js-ne.yml b/config/locales/crowdin/js-ne.yml index cc2f874edcea..6df900ea5a47 100644 --- a/config/locales/crowdin/js-ne.yml +++ b/config/locales/crowdin/js-ne.yml @@ -330,6 +330,18 @@ ne: years: "Years" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "no" general_text_yes: "yes" general_text_No: "No" @@ -348,11 +360,10 @@ ne: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ ne: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "days ago" label_all: "all" + label_all_uppercase: "All" label_all_work_packages: "all work packages" label_and: "and" label_ascending: "Ascending" @@ -419,6 +431,7 @@ ne: label_expand_project_menu: "Expand project menu" label_export: "Export" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "फाइल" label_filesize: "साइज" label_general: "General" @@ -1043,7 +1056,7 @@ ne: sharing: share: "Share" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1269,6 +1282,9 @@ ne: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Continue" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Projects" diff --git a/config/locales/crowdin/js-nl.yml b/config/locales/crowdin/js-nl.yml index 9f3237b4d16d..d518be83b296 100644 --- a/config/locales/crowdin/js-nl.yml +++ b/config/locales/crowdin/js-nl.yml @@ -330,6 +330,18 @@ nl: years: "Jaren" description: > Selecteer het oorspronkelijke zoomniveau dat moet worden weergegeven wanneer autozoom niet beschikbaar is. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "Nee" general_text_yes: "Ja" general_text_No: "Nee" @@ -348,11 +360,10 @@ nl: learn_about: "Meer informatie over de nieuwe functies" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ nl: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "dagen geleden" label_all: "alle" + label_all_uppercase: "Alle" label_all_work_packages: "alle werkpakketten" label_and: "en" label_ascending: "Oplopend" @@ -419,6 +431,7 @@ nl: label_expand_project_menu: "Menu project uitvouwen" label_export: "Exporteren" label_export_preparing: "De export wordt voorbereid en wordt binnenkort gedownload." + label_favorites: "Favorites" label_filename: "Bestand" label_filesize: "Grootte" label_general: "Algemeen" @@ -1043,7 +1056,7 @@ nl: sharing: share: "Deel" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1269,6 +1282,9 @@ nl: placeholder: "De tijdelijke gebruiker kan nu worden gebruikt in %{project}. Ondertussen kunt u deze gebruiker al plannen en werkpakketten toewijzen, bijvoorbeeld." group: "De groep is nu een deel van %{project}. Ondertussen kun je al plannen maken met die groep en werkpakketten toewijzen, bijvoorbeeld." next_button: "Ga verder" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Inclusief de projecten" title: "Projecten" diff --git a/config/locales/crowdin/js-no.yml b/config/locales/crowdin/js-no.yml index 95763e2925bd..334638ceb8ce 100644 --- a/config/locales/crowdin/js-no.yml +++ b/config/locales/crowdin/js-no.yml @@ -330,6 +330,18 @@ years: "År" description: > Velg standard zoom-nivå som skal vises når autozoom ikke er tilgjengelig. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "nei" general_text_yes: "ja" general_text_No: "Nei" @@ -348,11 +360,10 @@ learn_about: "Lær mer om de nye funksjonene" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Abonner på kalender" inital_setup_error_message: "En feil oppstod under henting av data." @@ -378,6 +389,7 @@ label_added_time_by: 'Lagt til av %{author} i %{age}' label_ago: "dager siden" label_all: "alle" + label_all_uppercase: "Alle" label_all_work_packages: "alle arbeidspakker" label_and: "og" label_ascending: "Stigende" @@ -419,6 +431,7 @@ label_expand_project_menu: "Utvid prosjektmeny" label_export: "Eksportèr" label_export_preparing: "Eksporten forberedes og lastes ned i løpet av kort tid." + label_favorites: "Favorites" label_filename: "Fil" label_filesize: "Størrelse" label_general: "Generell" @@ -1043,7 +1056,7 @@ sharing: share: "Del" title: "Del arbeidspakke" - show_all_users: "Vis alle delte brukere" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} valgte" selection: mixed: "Blandet" @@ -1269,6 +1282,9 @@ placeholder: "Plassholderen kan nå brukes i %{project}. Samtidig kan du allerede planlegge med den brukeren og tilordne arbeidspakker i forekomsten." group: "Gruppen er nå en del av %{project}. Dette betyr at du allerede kan planlegge med den gruppen og tildele arbeidspakker for forekomst." next_button: "Fortsett" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Inkluder prosjekter" title: "Prosjekter" diff --git a/config/locales/crowdin/js-pl.yml b/config/locales/crowdin/js-pl.yml index 2a4456e5ca35..592d6bba9c68 100644 --- a/config/locales/crowdin/js-pl.yml +++ b/config/locales/crowdin/js-pl.yml @@ -330,6 +330,18 @@ pl: years: "Lata" description: > Wybierz początkowy poziom powiększenia, który ma być wyświetlany, gdy tryb autopowiększenia jest niedostępny. + export: + title: "Opcje PDF wykresu Gantta" + button_export: "Eksportuj" + column_widths: + narrow: "Wąskie" + medium: "Średnie" + wide: "Szerokie" + very_wide: "Bardzo szerokie" + options: + date_zoom: "Powiększenie daty" + paper_size: "Rozmiar papieru" + column_widths: "Szerokość kolumn" general_text_no: "nie" general_text_yes: "tak" general_text_No: "Nie" @@ -348,11 +360,10 @@ pl: learn_about: "Dowiedz się więcej o nowych funkcjach" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - Wersja zawiera różne nowe funkcje i ulepszenia:
  • Wdrożenie raportowania postępów w hierarchiach pakietów roboczych.
  • Zarządzanie atrybutami projektu w uporządkowany sposób na stronie przeglądu projektu.
  • Usprawniony widok pól niestandardowych na liście projektów i w przeglądzie projektu.
  • Ujednolicone nagłówki stron z eleganckim wyglądem Primer.
  • Ulepszenie spotkań dzięki nowym funkcjom, takim jak przesyłanie załączników, osoby odpowiedzialne i historia spotkań.
  • Automatyczne alerty o magazynach plików w złej kondycji i uzyskiwanie kontroli przy użyciu opcji przełączania.
  • Kopiowanie automatycznie zarządzanego folderu projektu dla usług OneDrive/SharePoint podczas kopiowania projektów.
  • Prośba do administratorów o usunięcie udostępnień pakietów roboczych podczas odwoływania członkostwa w projekcie.
  • Lepsze planowanie dzięki 4- i 8-tygodniowym trybom wyświetlania w planiście zespołu.
+ Wersja zawiera różne nowe funkcje i ulepszenia:
  • Eksport widoku wykresu Gantta w formacie PDF, np. w celu wydrukowania (dodatek wersji Enterprise)
  • Ulubione projekty
  • Sekcje w spotkaniach
  • Pokazywanie spotkań w obszarze Moja strona i na stronach przeglądu projektów
  • Możliwość ukrywania załączników na karcie Pliki
  • Niestandardowe pola typu Link (adres URL)
ical_sharing_modal: title: "Subskrybuj kalendarz" inital_setup_error_message: "Podczas pobierania danych wystąpił błąd." @@ -378,6 +389,7 @@ pl: label_added_time_by: 'Dodany przez %{author} o %{age}' label_ago: "dni temu" label_all: "wszystkie" + label_all_uppercase: "Wszystko" label_all_work_packages: "wszystkie pakiety pracy" label_and: "i" label_ascending: "Rosnąco" @@ -419,6 +431,7 @@ pl: label_expand_project_menu: "Rozwiń menu projektu" label_export: "Eksportuj" label_export_preparing: "Eksport jest przygotowywany i zostanie wkrótce pobrany." + label_favorites: "Ulubione" label_filename: "Plik" label_filesize: "Rozmiar" label_general: "Ogólne" @@ -1045,7 +1058,7 @@ pl: sharing: share: "Udostępnij" title: "Udostępnij pakiet roboczy" - show_all_users: "Pokaż wszystkich udostępnionych użytkowników" + show_all_users: "Pokaż wszystkich użytkowników, którym udostępniono pakiet roboczy" selected_count: "Wybrano %{count}" selection: mixed: "Mieszane" @@ -1275,6 +1288,9 @@ pl: placeholder: "Symbolu zastępczego można teraz użyć w %{project}. Tymczasem możesz już planować z tym użytkownikiem i na przykład przypisać pakiety robocze." group: "Grupa jest teraz częścią %{project}. Tymczasem możesz już planować z tą grupą i na przykład przypisać pakiety robocze." next_button: "Kontynuuj" + favorite_projects: + no_results: "Nie masz żadnych ulubionych projektów" + no_results_subtext: "Dodaj jeden lub wiele projektów jako ulubione w ich przeglądzie lub na liście projektów." include_projects: toggle_title: "Uwzględnij projekty" title: "Projekty" diff --git a/config/locales/crowdin/js-pt-BR.yml b/config/locales/crowdin/js-pt-BR.yml index 3446a1f57fb9..7bd8fb4ddc94 100644 --- a/config/locales/crowdin/js-pt-BR.yml +++ b/config/locales/crowdin/js-pt-BR.yml @@ -329,6 +329,18 @@ pt-BR: years: "Anos" description: > Selecione o nível de zoom inicial que deve ser exibido quando o zoom automático não estiver disponível. + export: + title: "Opções de PDF do gráfico de Gantt" + button_export: "Exportar" + column_widths: + narrow: "Estreito" + medium: "Médio" + wide: "Amplo" + very_wide: "Muito amplo" + options: + date_zoom: "Zoom de data" + paper_size: "Tamanho do papel" + column_widths: "Largura da coluna:" general_text_no: "não" general_text_yes: "sim" general_text_No: "Não" @@ -347,11 +359,10 @@ pt-BR: learn_about: "Saiba mais sobre os novos recursos" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - A nova versão traz várias melhorias e recursos:
  • Relatório de progresso agora disponível para hierarquias de pacotes de trabalho.
  • Gerenciamento estruturado dos atributos do projeto na página de visão geral do projeto.
  • Visualização simplificada de campos personalizados nas listas de projeto e visão geral do projeto.
  • Cabeçalhos de página unificados com o moderno design Primer.
  • Reuniões aprimoradas com novos recursos, incluindo upload de anexos, atribuição de responsáveis e histórico de reuniões.
  • Alertas automáticos para armazenamentos de arquivos com problemas, com opções de controle.
  • Auto-cópia da pasta de projeto gerenciada automaticamente para o OneDrive/SharePoint durante a cópia de projetos.
  • Solicitação aos administradores para remover compartilhamentos nos pacotes de trabalho ao revogar a participação em um projeto.
  • Melhorias de planejamento com novos modos de exibição de 4 e 8 semanas no planejador de equipe.
+ A versão contém vários novos recursos e melhorias:
  • Exportação de PDF da visualização de Gantt, por exemplo, para impressão (complemento Enterprise)
  • Projetos favoritos
  • Seções em Reuniões
  • Exibição de reuniões na página Meu trabalho e nas páginas de visão geral do projeto
  • Possibilidade de ocultar anexos na guia Arquivos
  • Campos personalizados do tipo Link (URL)
ical_sharing_modal: title: "Assinar calendário" inital_setup_error_message: "Ocorreu um erro ao buscar dados." @@ -377,6 +388,7 @@ pt-BR: label_added_time_by: 'Adicionado por %{author} em %{age}' label_ago: "dias atrás" label_all: "todos" + label_all_uppercase: "Todos" label_all_work_packages: "todos pacotes de trabalho" label_and: "e" label_ascending: "Crescente" @@ -418,6 +430,7 @@ pt-BR: label_expand_project_menu: "Expandir menu do projeto" label_export: "Exportar" label_export_preparing: "A exportação está sendo preparada e será baixada em breve." + label_favorites: "Favoritos" label_filename: "Arquivo" label_filesize: "Tamanho" label_general: "Geral" @@ -1042,7 +1055,7 @@ pt-BR: sharing: share: "Compartilhar" title: "Compartilhar pacote de trabalho" - show_all_users: "Exibir todos os usuários compartilhados" + show_all_users: "Exibir todos os usuários com quem o pacote de trabalho foi compartilhado" selected_count: "%{count} selecionado" selection: mixed: "Misturado" @@ -1268,6 +1281,9 @@ pt-BR: placeholder: "O espaço reservado agora pode ser usado em %{project}. Enquanto isso, você já pode planejar com este usuário e atribuir pacotes de trabalho por exemplo." group: "O grupo agora faz parte de %{project}. Enquanto isso, você já pode planejar com este grupo e atribuir pacotes de trabalho por exemplo." next_button: "Continuar" + favorite_projects: + no_results: "Você não possui projetos favoritos" + no_results_subtext: "Adicione um ou vários projetos como favoritos por meio de sua visão geral ou na lista de projetos." include_projects: toggle_title: "Incluir projetos" title: "Projetos" diff --git a/config/locales/crowdin/js-pt-PT.yml b/config/locales/crowdin/js-pt-PT.yml index 343b6a538d2d..0bb0514dffbd 100644 --- a/config/locales/crowdin/js-pt-PT.yml +++ b/config/locales/crowdin/js-pt-PT.yml @@ -330,6 +330,18 @@ pt-PT: years: "Anos" description: > Selecione o nível de zoom inicial que deve ser mostrado quando o zoom automático não está disponível. + export: + title: "Opções de PDF do gráfico de Gantt" + button_export: "Exportar" + column_widths: + narrow: "Estreito" + medium: "Médio" + wide: "Amplo" + very_wide: "Muito amplo" + options: + date_zoom: "Formato de datas" + paper_size: "Tamanho do papel" + column_widths: "Larguras da coluna" general_text_no: "não" general_text_yes: "sim" general_text_No: "Não" @@ -348,11 +360,10 @@ pt-PT: learn_about: "Saiba mais sobre os novos recursos" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - A versão contém várias funcionalidades e melhorias novas:
  • Implemente relatórios de progresso em hierarquias de pacotes de trabalho.
  • Faça a gestão dos atributos do projeto de uma forma estruturada na página de visão geral do projeto.
  • Veja de forma simplificada os campos personalizados na lista de projetos e na visão geral do projeto.
  • Cabeçalhos de página unificados com o design elegante do Primer.
  • Melhore as reuniões com novas funcionalidades, como carregamentos de anexos, responsáveis e histórico de reuniões.
  • Receba alertas automáticos para armazenamentos de ficheiros não saudáveis e controle através de opções que pode ativar/desativar.
  • Copie automaticamente a pasta do projeto gerida para o OneDrive/SharePoint ao copiar projetos.
  • Peça aos administradores para removerem as partilhas dos pacotes de trabalho quando revogar a adesão a um projeto.
  • Melhore o planeamento com modos de visualização de 4 e 8 semanas no planeador da equipa.
+ A versão contém uma série de novas funcionalidades e melhorias:
  • Exportação em PDF da vista Gantt, por exemplo, para impressão (suplemento Enterprise)
  • Projetos favoritos
  • Secções em Reuniões
  • Apresentação de reuniões nas páginas A minha página e Visão geral do projeto
  • Possibilidade de ocultar anexos no separador Ficheiros
  • Campos personalizados do tipo Ligação (URL)
ical_sharing_modal: title: "Subscrever o calendário" inital_setup_error_message: "Ocorreu um erro ao recuperar os dados." @@ -378,6 +389,7 @@ pt-PT: label_added_time_by: 'Adicionado por %{author} a %{age}' label_ago: "dias atrás" label_all: "todos" + label_all_uppercase: "Todos" label_all_work_packages: "todas as tarefas" label_and: "e" label_ascending: "Ascendente" @@ -419,6 +431,7 @@ pt-PT: label_expand_project_menu: "Expandir menu do projeto" label_export: "Exportar" label_export_preparing: "A exportação está a ser preparada e será descarregada brevemente." + label_favorites: "Favoritos" label_filename: "Ficheiro" label_filesize: "Tamanho" label_general: "Geral" @@ -627,7 +640,7 @@ pt-PT: center: label_actor_and: "e" and_more_users: - one: "e %{count} outros" + one: "e 1 outro" other: "e %{count} outros" no_results: at_all: "Vão aparecer novas notificações aqui quando houver atividade que lhe interesse" @@ -1043,7 +1056,7 @@ pt-PT: sharing: share: "Partilhe" title: "Partilhar pacote de trabalho" - show_all_users: "Mostrar todos os utilizadores partilhados" + show_all_users: "Mostrar todos os utilizadores com quem o pacote de trabalho foi partilhado" selected_count: "%{count} selecionado" selection: mixed: "Misturado" @@ -1269,6 +1282,9 @@ pt-PT: placeholder: "O espaço reservado agora pode ser usado em %{project}. Enquanto isso, já pode planear com este utilizador e atribuir pacotes de trabalho, por exemplo." group: "O grupo agora faz parte de %{project}. Enquanto isso, já pode planear com este grupo e atribuir pacotes de trabalho, por exemplo." next_button: "Continuar" + favorite_projects: + no_results: "Não tem projetos favoritos" + no_results_subtext: "Adicione um ou vários projetos como favoritos através da sua visão geral ou numa lista de projetos." include_projects: toggle_title: "Incluir projetos" title: "Projetos" diff --git a/config/locales/crowdin/js-ro.yml b/config/locales/crowdin/js-ro.yml index 5a54d9cf2f3c..cff9228c3b2e 100644 --- a/config/locales/crowdin/js-ro.yml +++ b/config/locales/crowdin/js-ro.yml @@ -329,6 +329,18 @@ ro: years: "Ani" description: > Selectați nivelul inițial de zoom care trebuie afișat atunci când funcția de zoom automat nu este disponibilă. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "nu" general_text_yes: "da" general_text_No: "Nu" @@ -347,11 +359,10 @@ ro: learn_about: "Aflați mai multe despre noile caracteristici" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -377,6 +388,7 @@ ro: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "zile în urmă" label_all: "toate" + label_all_uppercase: "Toate" label_all_work_packages: "toate pachetele de lucru" label_and: "și" label_ascending: "Crescător" @@ -418,6 +430,7 @@ ro: label_expand_project_menu: "Deschideți meniul proiectului" label_export: "Exportare" label_export_preparing: "Exportul este în curs de pregătire și va fi descărcat în curând." + label_favorites: "Favorites" label_filename: "Fișier" label_filesize: "Dimensiune" label_general: "General" @@ -639,7 +652,7 @@ ro: empty_state: no_notification: "Se pare că v-ați pus la punct." no_notification_with_current_project_filter: "Se pare că v-ați pus la punct cu proiectul selectat." - no_notification_with_current_filter: "Se pare că v-ați pus la punct cu proiectul selectat." + no_notification_with_current_filter: "Se pare că v-ați pus la punct pentru filtrul %{filter}." no_selection: "Faceți clic pe o notificare pentru a vizualiza toate detaliile activității." new_notifications: message: "Există notificări noi." @@ -1043,7 +1056,7 @@ ro: sharing: share: "Distribuiți" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1271,6 +1284,9 @@ ro: placeholder: "Marca de poziție poate fi utilizată acum în %{project}. Între timp, puteți deja să planificați cu acel utilizator și să atribuiți pachete de lucru, de exemplu." group: "Grupul este acum o parte din %{project}. Între timp, puteți deja să planificați cu acest grup și să atribuiți pachete de lucru, de exemplu." next_button: "Continuaţi" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Includeți proiecte" title: "Proiecte" diff --git a/config/locales/crowdin/js-ru.yml b/config/locales/crowdin/js-ru.yml index bbc9b06ac0cc..1f85332d6bf7 100644 --- a/config/locales/crowdin/js-ru.yml +++ b/config/locales/crowdin/js-ru.yml @@ -329,6 +329,18 @@ ru: years: "Лет" description: > Выберите начальный уровень масштаба, который должен быть показан, когда автозум недоступен. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "нет" general_text_yes: "Да" general_text_No: "Нет" @@ -347,11 +359,10 @@ ru: learn_about: "Подробнее о новых функциях" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Подписаться на календарь" inital_setup_error_message: "Произошла ошибка при получении данных." @@ -377,6 +388,7 @@ ru: label_added_time_by: 'Добавлено %{author} в %{age}' label_ago: "дней назад" label_all: "все" + label_all_uppercase: "Bсе" label_all_work_packages: "Все пакеты работ" label_and: "и" label_ascending: "По возрастанию" @@ -418,6 +430,7 @@ ru: label_expand_project_menu: "Развернуть меню проекта" label_export: "Экспортировать" label_export_preparing: "Экспорт готовится и будет загружен в ближайшее время." + label_favorites: "Favorites" label_filename: "Файл" label_filesize: "Размер" label_general: "Общее" @@ -640,7 +653,7 @@ ru: empty_state: no_notification: "Похоже, вы все сделали." no_notification_with_current_project_filter: "Похоже, в выбранном проекте вы все сделали." - no_notification_with_current_filter: "Похоже, в отфильтрованном вы все сделали." + no_notification_with_current_filter: "Похоже, в отфильтрованном вы все сделали %{filter}." no_selection: "Нажмите на уведомление, чтобы просмотреть все детали." new_notifications: message: "Есть новые уведомления." @@ -1044,7 +1057,7 @@ ru: sharing: share: "Поделиться" title: "Поделиться пакетом работ" - show_all_users: "Показать всех общих пользователей" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} выбрано" selection: mixed: "Смешанное" @@ -1274,6 +1287,9 @@ ru: placeholder: "Теперь плейсхолдер может быть использован в %{project}. Тем временем вы уже можете планировать с этим пользователем и назначать рабочие пакеты." group: "Теперь группа является частью %{project}. Тем временем вы уже можете спланировать работу с этой группой и назначить пакеты работ." next_button: "Продолжить" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Включить проекты" title: "Проекты" diff --git a/config/locales/crowdin/js-rw.yml b/config/locales/crowdin/js-rw.yml index a4a1d595cbd1..cc61288a0f45 100644 --- a/config/locales/crowdin/js-rw.yml +++ b/config/locales/crowdin/js-rw.yml @@ -330,6 +330,18 @@ rw: years: "Years" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "no" general_text_yes: "yes" general_text_No: "No" @@ -348,11 +360,10 @@ rw: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ rw: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "days ago" label_all: "all" + label_all_uppercase: "All" label_all_work_packages: "all work packages" label_and: "and" label_ascending: "Ascending" @@ -419,6 +431,7 @@ rw: label_expand_project_menu: "Expand project menu" label_export: "Export" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "File" label_filesize: "Size" label_general: "General" @@ -1043,7 +1056,7 @@ rw: sharing: share: "Share" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1269,6 +1282,9 @@ rw: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Continue" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Projects" diff --git a/config/locales/crowdin/js-si.yml b/config/locales/crowdin/js-si.yml index 7ef128c9d6c0..a929263ff675 100644 --- a/config/locales/crowdin/js-si.yml +++ b/config/locales/crowdin/js-si.yml @@ -330,6 +330,18 @@ si: years: "අවුරුදු" description: > ස්වයංසූම් ලබා ගත නොහැකි විට පෙන්විය යුතු ආරම්භක විශාලන මට්ටම තෝරන්න. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "නැත" general_text_yes: "ඔව්" general_text_No: "නැත" @@ -348,11 +360,10 @@ si: learn_about: "නව විශේෂාංග ගැන වැඩි විස්තර දැනගන්න" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ si: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "දින කිහිපයකට පෙර" label_all: "සියලු" + label_all_uppercase: "සියලු" label_all_work_packages: "සියලුම වැඩ පැකේජ" label_and: "සහ" label_ascending: "නැගීම" @@ -419,6 +431,7 @@ si: label_expand_project_menu: "ව්යාපෘති මෙනුව පුළුල් කරන්න" label_export: "අපනයන" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "ගොනුව" label_filesize: "ප්‍රමාණය" label_general: "පොදු" @@ -1043,7 +1056,7 @@ si: sharing: share: "Share" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1269,6 +1282,9 @@ si: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "ඉදිරියට යන්න" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "ව්‍යාපෘති" diff --git a/config/locales/crowdin/js-sk.yml b/config/locales/crowdin/js-sk.yml index 4c7aa3a08a72..d582a93ed27f 100644 --- a/config/locales/crowdin/js-sk.yml +++ b/config/locales/crowdin/js-sk.yml @@ -330,6 +330,18 @@ sk: years: "Roky" description: > Zvoľte počiatočnú úroveň priblíženia, ktorá by sa mala zobraziť, ak nie je k dispozícii autozoom. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "nie" general_text_yes: "áno" general_text_No: "Nie" @@ -348,11 +360,10 @@ sk: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ sk: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "dní späť" label_all: "Všetky" + label_all_uppercase: "Všetky" label_all_work_packages: "všetky pracovné balíčky" label_and: "a" label_ascending: "Vzostupne" @@ -419,6 +431,7 @@ sk: label_expand_project_menu: "Rozbaliť ponuku projektu" label_export: "Exportovať" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "Súbor" label_filesize: "Veľkosť" label_general: "Všeobecné" @@ -1045,7 +1058,7 @@ sk: sharing: share: "Zdieľať" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1275,6 +1288,9 @@ sk: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Pokračovať" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Projekty" diff --git a/config/locales/crowdin/js-sl.yml b/config/locales/crowdin/js-sl.yml index fcbd1b2e3809..63fa96fc1a62 100644 --- a/config/locales/crowdin/js-sl.yml +++ b/config/locales/crowdin/js-sl.yml @@ -329,6 +329,18 @@ sl: years: "let" description: > Izberite začetno stopnjo povečave, ki naj bo prikazana, ko samodejno povečanje ni na voljo. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "ne" general_text_yes: "da" general_text_No: "Ne" @@ -347,11 +359,10 @@ sl: learn_about: "Preberite več o novostih" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -377,6 +388,7 @@ sl: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "pred dnevi" label_all: "vsi" + label_all_uppercase: "Vse" label_all_work_packages: "Vsi zahtevki" label_and: "in" label_ascending: "Naraščajoče" @@ -418,6 +430,7 @@ sl: label_expand_project_menu: "Razširi projektni meni" label_export: "Izvozi" label_export_preparing: "Izvoz je v pripravi in ​​bo kmalu prenesen." + label_favorites: "Favorites" label_filename: "Datoteka" label_filesize: "Velikost" label_general: "Splošno" @@ -1044,7 +1057,7 @@ sl: sharing: share: "Share" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1274,6 +1287,9 @@ sl: placeholder: "Rezervirano mesto se zdaj lahko uporabi v %{project}. Medtem lahko planirate s tem uporabnikom in mu dodelite delovne naloge." group: "Skupina je zdaj del %{project}. Medtem lahko planirate s to skupino in ji dodelite delovne naloge." next_button: "Nadaljuj" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Projekti" diff --git a/config/locales/crowdin/js-sr.yml b/config/locales/crowdin/js-sr.yml index cb1ce641d091..350c90ebbcd5 100644 --- a/config/locales/crowdin/js-sr.yml +++ b/config/locales/crowdin/js-sr.yml @@ -330,6 +330,18 @@ sr: years: "Years" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "no" general_text_yes: "yes" general_text_No: "No" @@ -348,11 +360,10 @@ sr: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ sr: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "days ago" label_all: "all" + label_all_uppercase: "All" label_all_work_packages: "all work packages" label_and: "and" label_ascending: "Ascending" @@ -419,6 +431,7 @@ sr: label_expand_project_menu: "Expand project menu" label_export: "Export" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "File" label_filesize: "Size" label_general: "General" @@ -1044,7 +1057,7 @@ sr: sharing: share: "Share" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1272,6 +1285,9 @@ sr: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Continue" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Projects" diff --git a/config/locales/crowdin/js-sv.yml b/config/locales/crowdin/js-sv.yml index 38a48f94eedb..e69da4ca212d 100644 --- a/config/locales/crowdin/js-sv.yml +++ b/config/locales/crowdin/js-sv.yml @@ -329,6 +329,18 @@ sv: years: "År" description: > Välj den initiala zoomnivån som ska visas när autozoom inte är tillgänglig. + export: + title: "Gantt chart PDF options" + button_export: "Exportera" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "nej" general_text_yes: "ja" general_text_No: "Nej" @@ -347,11 +359,10 @@ sv: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -377,6 +388,7 @@ sv: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "dagar sedan" label_all: "alla" + label_all_uppercase: "Alla" label_all_work_packages: "alla arbetspaket" label_and: "och" label_ascending: "Stigande" @@ -418,6 +430,7 @@ sv: label_expand_project_menu: "Expandera projektmenyn" label_export: "Exportera" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favoriter" label_filename: "Fil" label_filesize: "Filstorlek" label_general: "Allmänt" @@ -1042,7 +1055,7 @@ sv: sharing: share: "Dela" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1268,6 +1281,9 @@ sv: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Fortsätt" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Projekt" diff --git a/config/locales/crowdin/js-th.yml b/config/locales/crowdin/js-th.yml index 8029e2ea12f9..c1331402e85a 100644 --- a/config/locales/crowdin/js-th.yml +++ b/config/locales/crowdin/js-th.yml @@ -330,6 +330,18 @@ th: years: "ปี" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "ไม่ใช่" general_text_yes: "ใช่" general_text_No: "ไม่ใช่" @@ -348,11 +360,10 @@ th: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ th: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "วันที่ผ่านมา" label_all: "ทั้งหมด" + label_all_uppercase: "ทั้งหมด" label_all_work_packages: "ชุดภารกิจทั้งหมด" label_and: "และ" label_ascending: "จากน้อยไปมาก" @@ -419,6 +431,7 @@ th: label_expand_project_menu: "Expand project menu" label_export: "Export" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "ไฟล์" label_filesize: "ขนาด" label_general: "ทั่วไป" @@ -1042,7 +1055,7 @@ th: sharing: share: "แชร์" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1266,6 +1279,9 @@ th: placeholder: "ขณะนี้ Placeholder สามารถใช้งานใน %{project} ได้แล้ว, คุณสามารถวางแผนกับผู้ใช้รายนั้นและกำหนดแพ็คเกจงานได้" group: "ตอนนี้กลุ่มนี้เป็นส่วนหนึ่งของ %{project}, คุณสามารถวางแผนกับกลุ่มนั้นและกำหนดแพ็คเกจงานได้" next_button: "Continue" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "โครงการ" diff --git a/config/locales/crowdin/js-tr.yml b/config/locales/crowdin/js-tr.yml index b1b057be619b..ce00802bc3c5 100644 --- a/config/locales/crowdin/js-tr.yml +++ b/config/locales/crowdin/js-tr.yml @@ -329,6 +329,18 @@ tr: years: "Yıl" description: > Otomatik zoom mevcut olmadığında gösterilmesi gereken ilk yakınlaştırma seviyesini seçin. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "hayır" general_text_yes: "evet" general_text_No: "Hayır" @@ -347,11 +359,10 @@ tr: learn_about: "Yeni özellikler hakkında daha fazla bilgi edinin" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -377,6 +388,7 @@ tr: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "gün önce" label_all: "tüm" + label_all_uppercase: "Hepsi" label_all_work_packages: "tüm iş paketleri" label_and: "ve" label_ascending: "Azalan" @@ -418,6 +430,7 @@ tr: label_expand_project_menu: "Proje menüsünü genişlet" label_export: "Dışarı aktar" label_export_preparing: "İhracat hazırlanıyor ve kısa süre içinde indirilecek." + label_favorites: "Favorites" label_filename: "Dosya" label_filesize: "Boyutu" label_general: "Genel" @@ -627,7 +640,7 @@ tr: label_actor_and: "ve" and_more_users: one: "ve 1 diğer" - other: "ve 1 diğer" + other: "ve %{count} diğer" no_results: at_all: "Sizi ilgilendiren bir etkinlik olduğunda yeni bildirimler burada görünecektir." with_current_filter: "Şu anda bu görünümde bildirim yok" @@ -1042,7 +1055,7 @@ tr: sharing: share: "Paylaş" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1268,6 +1281,9 @@ tr: placeholder: "Kullanıcı artık %{project} 'e erişmek için oturum açabilir. Bu arada, o kullanıcıyla zaten plan yapabilir ve örneğin iş paketleri atayabilirsiniz." group: "Grup artık %{project} 'nin bir parçası. Bu arada, bu grupla zaten plan yapabilir ve örneğin iş paketleri atayabilirsiniz." next_button: "Devam et" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Projeleri dahil et" title: "Projeler" diff --git a/config/locales/crowdin/js-uk.yml b/config/locales/crowdin/js-uk.yml index 99ae40c4e7f0..53d12bdb256c 100644 --- a/config/locales/crowdin/js-uk.yml +++ b/config/locales/crowdin/js-uk.yml @@ -330,6 +330,18 @@ uk: years: "Років" description: > Виберіть початкове значення масштабу, коли функція автомасштабування недоступна. + export: + title: "Параметри діаграми Ґанта (PDF)" + button_export: "Експорт" + column_widths: + narrow: "Вузькі" + medium: "Середні" + wide: "Широкі" + very_wide: "Дуже широкі" + options: + date_zoom: "Масштабування дати" + paper_size: "Розмір паперу" + column_widths: "Ширина стовпців" general_text_no: "ні" general_text_yes: "так" general_text_No: "Ні" @@ -348,11 +360,10 @@ uk: learn_about: "Дізнатися більше про нові функції" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - Цей випуск містить кілька нових і поліпшених функцій.
  • Звітування про прогрес в ієрархії пакетів робіт.
  • Керування атрибутами проєкту в структурований спосіб на сторінці огляду проєкту.
  • Оптимізований перегляд користувацьких полів у списку проєкту і в огляді проєкту.
  • Вишуканий дизайн Primer для узгодженого вигляду заголовків сторінок.
  • Зручніше проведення нарад завдяки новим функціям, таким як «Вивантаження вкладень», «Відповідальна особа» й «Історія нарад».
  • Автоматичні сповіщення про несправні файлові сховища й керування ними за допомогою перемикачів.
  • Автоматичне копіювання керованої папку проєкту для OneDrive / SharePoint під час копіювання проєктів.
  • Можливість надсилання адміністраторам запиту на видалення доступу до пакетів робіт у разі відкликання участі в проєкті.
  • Покращене планування за допомогою режимів перегляду на 4 й 8 тижнів у командному планувальнику.
+ Цей випуск містить кілька нових і поліпшених функцій.
  • Експорт діаграми Ґанта у форматі PDF, наприклад для друку (доповнення версії Enterprise)
  • Обрані проєкти
  • Розділи на сторінці «Наради»
  • Показ нарад на Моїй сторінці й сторінках огляду проєкту
  • Можливість приховувати вкладення на вкладці «Файли»
  • Користувацькі поля типу «Посилання (URL)
ical_sharing_modal: title: "Підписатися на календар" inital_setup_error_message: "Під час отримання даних сталася помилка." @@ -378,6 +389,7 @@ uk: label_added_time_by: 'Додано користувачем %{author} о %{age}' label_ago: "днів тому" label_all: "всі" + label_all_uppercase: "Усі" label_all_work_packages: "всі пакети в роботі" label_and: "і" label_ascending: "За зростанням" @@ -419,6 +431,7 @@ uk: label_expand_project_menu: "Розгорніть меню проекту" label_export: "Експорт" label_export_preparing: "Файл готується для експорту, і невдовзі його буде завантажено." + label_favorites: "Обране" label_filename: "Файл" label_filesize: "Розмір" label_general: "Загальні" @@ -1045,7 +1058,7 @@ uk: sharing: share: "Поширити" title: "Надати доступ до пакета робіт" - show_all_users: "Показати всіх користувачів із доступом" + show_all_users: "Показувати всіх користувачів, яким надано доступ до пакета робіт" selected_count: "Вибрано: %{count}" selection: mixed: "Змішані" @@ -1275,6 +1288,9 @@ uk: placeholder: "Прототип тепер може ввійти, щоб отримати доступ до проєкту «%{project}». Тим часом ви вже можете включати цього користувача в план і призначати йому пакети робіт." group: "Ця група тепер входить у проєкт «%{project}». Тим часом ви вже можете включати її в план і призначати їй пакети робіт." next_button: "Продовжити" + favorite_projects: + no_results: "У вас немає обраних проєктів" + no_results_subtext: "Додайте один або кілька проєктів в обране на відповідній сторінці огляду або в списку проєктів." include_projects: toggle_title: "Включити проєкти" title: "Проекти" diff --git a/config/locales/crowdin/js-uz.yml b/config/locales/crowdin/js-uz.yml index 3f0cd9439077..53aa060673e3 100644 --- a/config/locales/crowdin/js-uz.yml +++ b/config/locales/crowdin/js-uz.yml @@ -330,6 +330,18 @@ uz: years: "Years" description: > Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "no" general_text_yes: "yes" general_text_No: "No" @@ -348,11 +360,10 @@ uz: learn_about: "Learn more about the new features" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -378,6 +389,7 @@ uz: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "days ago" label_all: "all" + label_all_uppercase: "All" label_all_work_packages: "all work packages" label_and: "and" label_ascending: "Ascending" @@ -419,6 +431,7 @@ uz: label_expand_project_menu: "Expand project menu" label_export: "Export" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "File" label_filesize: "Size" label_general: "General" @@ -1043,7 +1056,7 @@ uz: sharing: share: "Share" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1269,6 +1282,9 @@ uz: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Continue" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Include projects" title: "Projects" diff --git a/config/locales/crowdin/js-vi.yml b/config/locales/crowdin/js-vi.yml index 19796f532997..d6523658e115 100644 --- a/config/locales/crowdin/js-vi.yml +++ b/config/locales/crowdin/js-vi.yml @@ -329,6 +329,18 @@ vi: years: "Years" description: > Chọn mức phóng to ban đầu sẽ được hiển thị khi phóng tự động không có sẵn. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "không" general_text_yes: "có" general_text_No: "Không" @@ -347,11 +359,10 @@ vi: learn_about: "Tìm hiểu thêm về các tính năng mới" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -377,6 +388,7 @@ vi: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "vài ngày trước" label_all: "tất cả" + label_all_uppercase: "Toàn bộ" label_all_work_packages: "Tất cả công việc" label_and: "and" label_ascending: "Tăng dần" @@ -418,6 +430,7 @@ vi: label_expand_project_menu: "Mở rộng menu dự án" label_export: "Xuất" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "Tệp" label_filesize: "Kích cỡ" label_general: "Tổng quan" @@ -1041,7 +1054,7 @@ vi: sharing: share: "Chia sẻ" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1265,6 +1278,9 @@ vi: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "Nhóm này hiện là một phần của %{project}. Trong khi đó, bạn có thể lên kế hoạch cho nhóm đó và chỉ định các gói làm việc cho từng trường hợp." next_button: "Tiếp tục" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "Dự án bao gồm" title: "Các dự án" diff --git a/config/locales/crowdin/js-zh-CN.yml b/config/locales/crowdin/js-zh-CN.yml index 8a5a81195664..b718502c652b 100644 --- a/config/locales/crowdin/js-zh-CN.yml +++ b/config/locales/crowdin/js-zh-CN.yml @@ -329,6 +329,18 @@ zh-CN: years: "年" description: > 选择自动缩放不可用时应显示的初始缩放级别。 + export: + title: "甘特图 PDF 选项" + button_export: "导出" + column_widths: + narrow: "窄" + medium: "正常" + wide: "宽" + very_wide: "非常宽" + options: + date_zoom: "日期缩放" + paper_size: "纸张大小" + column_widths: "列宽" general_text_no: "否" general_text_yes: "是" general_text_No: "否" @@ -347,11 +359,10 @@ zh-CN: learn_about: "详细了解新功能" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - 该版本包含各种新功能和改进:
  • 跨工作包层次实施进度报告。
  • 在项目概览页面以结构化方式管理项目属性。
  • 简化项目列表和项目概览中自定义字段的视图。
  • 采用时尚的 Primer 设计,统一页面标题。
  • 利用附件上传、负责和会议历史等新功能增强会议功能。
  • 对不健康的文件存储自动发出警报,并通过切换选项进行控制。
  • 复制项目时,为 OneDrive/SharePoint 复制自动管理的项目文件夹。
  • 撤销项目成员资格时,要求管理员删除工作包上的共享。
  • 通过团队计划器中的 4 周和 8 周显示模式增强计划性。
+ 该版本包含各种新功能和改进:
  • 甘特视图的 PDF 导出,例如用于打印(企业插件)
  • 收藏项目
  • 会议中的章节
  • 在 "我的 "页面和项目概览页面显示会议
  • 在 "文件 "选项卡中隐藏附件的可能性
  • 链接(URL)类型的自定义字段
ical_sharing_modal: title: "订阅日历" inital_setup_error_message: "获取数据时发生错误。" @@ -377,6 +388,7 @@ zh-CN: label_added_time_by: '由 %{author} 在 %{age} 添加' label_ago: "天前" label_all: "所有" + label_all_uppercase: "全部" label_all_work_packages: "所有工作包" label_and: "和" label_ascending: "升序" @@ -418,6 +430,7 @@ zh-CN: label_expand_project_menu: "展开项目菜单" label_export: "导出" label_export_preparing: "导出文件已开始准备并将很快被下载。" + label_favorites: "收藏夹" label_filename: "文件" label_filesize: "大小" label_general: "通用" @@ -1041,7 +1054,7 @@ zh-CN: sharing: share: "共享" title: "共享工作包" - show_all_users: "显示所有共享用户" + show_all_users: "显示与之共享工作包的所有用户" selected_count: "%{count} 已选择" selection: mixed: "混合" @@ -1265,6 +1278,9 @@ zh-CN: placeholder: "现在可以在 %{project} 中使用占位符。同时,您已经可以与该用户一起制定计划并分配工作包等。" group: "该组现已加入 %{project}。同时,您已经可以与该组一起制定计划并分配工作包等。" next_button: "继续" + favorite_projects: + no_results: "您没有收藏的项目" + no_results_subtext: "通过项目概览或项目列表添加一个或多个项目作为收藏夹。" include_projects: toggle_title: "包含项目" title: "项目" diff --git a/config/locales/crowdin/js-zh-TW.yml b/config/locales/crowdin/js-zh-TW.yml index a96870eaba27..7d0c0b0aaed3 100644 --- a/config/locales/crowdin/js-zh-TW.yml +++ b/config/locales/crowdin/js-zh-TW.yml @@ -236,7 +236,7 @@ zh-TW: upsale: become_hero: "成為英雄!" enterprise_info_html: "%{feature_title} is an Enterprise add-on." - upgrade_info: "Please upgrade to a paid plan to activate and start using it in your team." + upgrade_info: "請升級到付費版以啟用此功能" benefits: description: "本地部署的 Enterprise edition 具有哪些優勢?" high_security: "Security features" @@ -249,7 +249,7 @@ zh-TW: professional_support_text: "Get reliable, high-touch support from senior support engineers with expert knowledge about running OpenProject in business-critical environments." button_start_trial: "開始免費試用" button_upgrade: "立即更新" - button_contact_us: "Contact us for a demo" + button_contact_us: "聯絡我們取得試用" button_book_now: "立即預約" confidence: > We deliver the confidence of a tested and supported enterprise-class project management software - with Open Source and an open mind. @@ -329,6 +329,18 @@ zh-TW: years: "年" description: > 選擇自動縮放無法接通應顯示的初始縮放級別。 + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" general_text_no: "否" general_text_yes: "是" general_text_No: "否" @@ -347,11 +359,10 @@ zh-TW: learn_about: "瞭解更多新功能的資訊" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > - The release contains various new features and improvements:
  • Implement progress reporting across work package hierarchies.
  • Manage project attributes in a structured way on the project overview page.
  • Streamlined view of custom fields in project list and project overview.
  • Unified page headers with the sleek Primer design.
  • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
  • Automatic alerts for unhealthy file storages, and gain control with toggle options.
  • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
  • Ask admins to remove shares on work packages when revoking a project membership.
  • Enhance planning with 4 and 8-week display modes in the team planner.
+ The release contains various new features and improvements:
  • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
  • Favorite projects
  • Sections in Meetings
  • Showing meetings on the My page and project overview pages
  • Possibility to hide attachments in the Files tab
  • Custom fields of the type Link (URL)
ical_sharing_modal: title: "訂閱日曆" inital_setup_error_message: "更新資料時發生錯誤" @@ -377,6 +388,7 @@ zh-TW: label_added_time_by: 'Added by %{author} at %{age}' label_ago: "天前" label_all: "所有" + label_all_uppercase: "全部" label_all_work_packages: "所有工作項目" label_and: "和" label_ascending: "昇冪" @@ -418,6 +430,7 @@ zh-TW: label_expand_project_menu: "展開專案選單" label_export: "匯出" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "檔案" label_filesize: "檔案大小" label_general: "一般" @@ -1041,7 +1054,7 @@ zh-TW: sharing: share: "共享" title: "分享工作項目" - show_all_users: "顯示所有使用者" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "已選取 %{count} 個" selection: mixed: "Mixed" @@ -1265,6 +1278,9 @@ zh-TW: placeholder: "The placeholder can now be used in %{project}. Meanwhile you can already plan with that user and assign work packages for instance." group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "繼續" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." include_projects: toggle_title: "包含的專案" title: "專案" diff --git a/config/locales/crowdin/ka.seeders.yml b/config/locales/crowdin/ka.seeders.yml index 1e1b23b052e2..79cff6c128d5 100644 --- a/config/locales/crowdin/ka.seeders.yml +++ b/config/locales/crowdin/ka.seeders.yml @@ -251,6 +251,21 @@ ka: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: სქრამ-პროექტი status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/ka.yml b/config/locales/crowdin/ka.yml index 9b771a088456..d4a20bbbe2b9 100644 --- a/config/locales/crowdin/ka.yml +++ b/config/locales/crowdin/ka.yml @@ -264,6 +264,7 @@ ka: lists: active: "Active projects" my: "ჩემი პროექტები" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ ka: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: There are currently no members part of this project. @@ -322,6 +330,7 @@ ka: project_roles: "პროექტის როლები" wp_shares: "Work package shares" groups: "ჯგუფები" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -484,7 +493,7 @@ ka: no_common_statuses_exists: "There is no status available for all selected work packages. Their status cannot be changed." unsupported_for_multiple_projects: "Bulk move/copy is not supported for work packages from multiple projects" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -782,6 +791,7 @@ ka: not_an_iso_date: "is not a valid date. Required format: YYYY-MM-DD." not_same_project: "doesn't belong to the same project." odd: "კენტი უნდა იყოს." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "could not be validated with the associated regular expression." smaller_than_or_equal_to_max_length: "must be smaller than or equal to maximum length." taken: "has already been taken." @@ -1263,6 +1273,7 @@ ka: button_edit: "ჩასწორება" button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}" button_expand_all: "ყველას გაშლა" + button_favorite: "Add to favorites" button_filter: "ფილტრი" button_generate: "გენერაცია" button_list: "სია" @@ -1290,6 +1301,7 @@ ka: button_unarchive: "არქივიდან გამოტანა" button_uncheck_all: "ყველა მონიშვნის მოხსნა" button_unlock: "განბლოკვა" + button_unfavorite: "Remove from favorites" button_unwatch: "მეთვალყურეობის გაუქმება" button_update: "განახლება" button_upgrade: "განახლება" @@ -1575,6 +1587,7 @@ ka: pdf_overview_table: "PDF ცხრილი" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF ანგარიში" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1722,17 +1735,6 @@ ka: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "სიახლეები" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "წვდომადობა" label_account: "ანგარიში" label_active: "აქტიური" @@ -1913,7 +1915,7 @@ ka: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "გარემო" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "არის" label_everywhere: "ყველგან" label_example: "მაგალითი" @@ -1927,7 +1929,7 @@ ka: label_expanded_click_to_collapse: "Expanded. Click to collapse" label_f_hour: "%{value} საათი" label_f_hour_plural: "%{value} საათი" - label_favoured: "რჩეული" + label_favorite: "რჩეული" label_feed_plural: "არხები" label_feeds_access_key: "RSS-ის წვდომის გასაღები" label_feeds_access_key_created_on: "RSS access key created %{value} ago" @@ -2000,6 +2002,7 @@ ka: label_learn_more: "გაიგეთ მეტი" label_less_or_equal: "<=" label_less_than_ago: "less than days ago" + label_link_url: "Link (URL)" label_list: "სია" label_loading: "იტვირთება..." label_lock_user: "მომხმარებლის დაბლოკვა" @@ -2025,6 +2028,7 @@ ka: label_membership_plural: "Memberships" lable_membership_added: "წევრი დაემატა" lable_membership_updated: "წევრი განახლდა" + label_menu: "Menu" label_menu_badge: pre_alpha: "პრე-ალფა" alpha: "ალფა" @@ -2126,6 +2130,7 @@ ka: label_percent_complete: "% დასრულებულია" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Total number of projects" label_project_copy_notifications: "Send email notifications during the project copy" label_project_latest: "Latest projects" @@ -2140,7 +2145,7 @@ ka: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "ფაილების საცავი" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projects using %{storage} disk storage" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "View all projects" label_project_show_details: "Show project details" label_project_hide_details: "Hide project details" @@ -2197,6 +2202,7 @@ ka: label_setting_plural: "მორგება" label_system_settings: "System settings" label_show_completed_versions: "Show completed versions" + label_columns: "სვეტები" label_sort: "დალაგება" label_sort_by: "Sort by %{value}" label_sorted_by: "sorted by %{value}" @@ -2741,7 +2747,7 @@ ka: member_of_group: "Assignee's group" name_or_identifier: "Name or identifier" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2886,6 +2892,7 @@ ka: setting_app_subtitle: "Application subtitle" setting_app_title: "Application title" setting_attachment_max_size: "Attachment max. size" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Autofetch repository changes" @@ -2987,6 +2994,8 @@ ka: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3223,6 +3232,10 @@ ka: input_label: "სვეტების დამატება" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Additional resources" getting_started: "Getting started" @@ -3570,7 +3583,7 @@ ka: link: ბმული plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/kk.seeders.yml b/config/locales/crowdin/kk.seeders.yml index 2d977cf4660b..9675ee921a96 100644 --- a/config/locales/crowdin/kk.seeders.yml +++ b/config/locales/crowdin/kk.seeders.yml @@ -251,6 +251,21 @@ kk: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/kk.yml b/config/locales/crowdin/kk.yml index 1835556fb9e6..28714602d421 100644 --- a/config/locales/crowdin/kk.yml +++ b/config/locales/crowdin/kk.yml @@ -264,6 +264,7 @@ kk: lists: active: "Active projects" my: "My projects" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ kk: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: There are currently no members part of this project. @@ -322,6 +330,7 @@ kk: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Groups" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -484,7 +493,7 @@ kk: no_common_statuses_exists: "There is no status available for all selected work packages. Their status cannot be changed." unsupported_for_multiple_projects: "Bulk move/copy is not supported for work packages from multiple projects" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -782,6 +791,7 @@ kk: not_an_iso_date: "is not a valid date. Required format: YYYY-MM-DD." not_same_project: "doesn't belong to the same project." odd: "must be odd." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "could not be validated with the associated regular expression." smaller_than_or_equal_to_max_length: "must be smaller than or equal to maximum length." taken: "has already been taken." @@ -1263,6 +1273,7 @@ kk: button_edit: "Edit" button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}" button_expand_all: "Expand all" + button_favorite: "Add to favorites" button_filter: "Filter" button_generate: "Generate" button_list: "List" @@ -1290,6 +1301,7 @@ kk: button_unarchive: "Unarchive" button_uncheck_all: "Uncheck all" button_unlock: "Unlock" + button_unfavorite: "Remove from favorites" button_unwatch: "Unwatch" button_update: "Жаңарту" button_upgrade: "Upgrade" @@ -1575,6 +1587,7 @@ kk: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1722,17 +1735,6 @@ kk: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "News" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Accessibility" label_account: "Account" label_active: "Active" @@ -1913,7 +1915,7 @@ kk: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Environment" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "is" label_everywhere: "everywhere" label_example: "Example" @@ -1927,7 +1929,7 @@ kk: label_expanded_click_to_collapse: "Expanded. Click to collapse" label_f_hour: "%{value} hour" label_f_hour_plural: "%{value} hours" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Feeds" label_feeds_access_key: "RSS access key" label_feeds_access_key_created_on: "RSS access key created %{value} ago" @@ -2000,6 +2002,7 @@ kk: label_learn_more: "Learn more" label_less_or_equal: "<=" label_less_than_ago: "less than days ago" + label_link_url: "Link (URL)" label_list: "List" label_loading: "Loading..." label_lock_user: "Lock user" @@ -2025,6 +2028,7 @@ kk: label_membership_plural: "Memberships" lable_membership_added: "Member added" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2126,6 +2130,7 @@ kk: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Total number of projects" label_project_copy_notifications: "Send email notifications during the project copy" label_project_latest: "Latest projects" @@ -2140,7 +2145,7 @@ kk: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projects using %{storage} disk storage" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "View all projects" label_project_show_details: "Show project details" label_project_hide_details: "Hide project details" @@ -2197,6 +2202,7 @@ kk: label_setting_plural: "Settings" label_system_settings: "System settings" label_show_completed_versions: "Show completed versions" + label_columns: "Columns" label_sort: "Sort" label_sort_by: "Sort by %{value}" label_sorted_by: "sorted by %{value}" @@ -2741,7 +2747,7 @@ kk: member_of_group: "Assignee's group" name_or_identifier: "Name or identifier" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2886,6 +2892,7 @@ kk: setting_app_subtitle: "Application subtitle" setting_app_title: "Application title" setting_attachment_max_size: "Attachment max. size" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Autofetch repository changes" @@ -2987,6 +2994,8 @@ kk: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3223,6 +3232,10 @@ kk: input_label: "Add columns" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Additional resources" getting_started: "Getting started" @@ -3570,7 +3583,7 @@ kk: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/ko.seeders.yml b/config/locales/crowdin/ko.seeders.yml index a80b4998beb5..d22a9f9e5639 100644 --- a/config/locales/crowdin/ko.seeders.yml +++ b/config/locales/crowdin/ko.seeders.yml @@ -251,6 +251,21 @@ ko: * [ ] 더 많은 맥주 item_4: subject: 프로젝트 종료 + wiki: | + _이 위키에서는 공동으로 페이지와 하위 페이지를 만들고 편집하여 프로젝트 위키를 만들 수 있습니다._ + + **다음과 같은 작업이 가능합니다. + + * 텍스트 및 이미지 삽입, 다른 문서에서 복사 및 붙여넣기 + * 상위 페이지를 사용하여 페이지 계층 구조 만들기 + * 프로젝트 메뉴에 위키 페이지 포함 + * 매크로를 사용하여 목차, 작업 패키지 목록, Gantt 차트 등 포함 + * 다른 텍스트 필드(예: 프로젝트 개요 페이지)에 위키 페이지 포함 + * 다른 문서의 링크 포함 + * 변경 기록 보기 + * Markdown으로 보기 + + 추가 정보: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: 스크럼 프로젝트 status_explanation: 모든 작업이 예정대로 진행되고 있습니다. 관련된 사람들이 자신의 작업을 알고 있습니다. 시스템이 완전히 설정되었습니다. diff --git a/config/locales/crowdin/ko.yml b/config/locales/crowdin/ko.yml index 8cccdf4d3a8e..e8bcd4b8a7bf 100644 --- a/config/locales/crowdin/ko.yml +++ b/config/locales/crowdin/ko.yml @@ -264,6 +264,7 @@ ko: lists: active: "활성 프로젝트" my: "내 프로젝트" + favored: "즐겨 찾는 프로젝트" archived: "보관된 프로젝트" my_private: "내 비공개 프로젝트 목록" new: @@ -304,7 +305,14 @@ ko: storage: no_results_title_text: 이 프로젝트에서 사용하는 추가 기록 디스크 공간이 없습니다. lists: - can_be_saved_as: "수정 사항은 새 목록에만 저장할 수 있습니다." + create: + success: "수정된 목록이 새 목록으로 저장되었습니다" + failure: "수정된 목록을 저장할 수 없습니다: %{errors}" + update: + success: "수정된 목록이 저장되었습니다" + failure: "수정된 목록을 저장할 수 없습니다: %{errors}" + can_be_saved: "목록이 수정되었습니다:" + can_be_saved_as: "수정 사항은 새 목록에만 저장할 수 있습니다:" members: index: no_results_title_text: 프로젝트에 멤버 파트가 없습니다. @@ -322,6 +330,7 @@ ko: project_roles: "프로젝트 역할" wp_shares: "작업 패키지 공유" groups: "그룹" + no_modify_on_shared: "현재는 멤버 페이지에서 공유 멤버십을 수정하거나 제거할 수 없습니다. 대신 공유 모달을 사용하세요." delete_member_dialog: title: "멤버 제거" will_remove_the_users_role: "이렇게 하면 이 프로젝트에서 사용자의 역할이 제거됩니다." @@ -476,7 +485,7 @@ ko: no_common_statuses_exists: "선택한 모든 작업 패키지에 사용 가능한 상태가 없습니다. 해당 상태를 변경할 수 없습니다." unsupported_for_multiple_projects: "여러 프로젝트에서 작업 패키지 일괄 이동/복사는 지원되지 않습니다." sharing: - missing_workflow_waring: + missing_workflow_warning: title: "작업 패키지 공유에 대한 워크플로 누락" message: "'작업 패키지 편집자' 역할에 대해 구성된 워크플로가 없습니다. 워크플로가 없으면 사용자와 공유된 워크플로는 작업 패키지의 상태를 변경할 수 없습니다. 워크플로를 복사할 수는 있습니다. 소스 유형(예: '작업')과 소스 역할(예: '멤버')을 선택하세요. 그런 다음 대상 유형을 선택하세요. 시작하기 위해 모든 유형을 대상으로 선택할 수 있습니다. 마지막으로 '작업 패키지 편집자' 역할을 대상으로 선택하고 '복사'를 누르세요. 기본값을 생성한 후 다른 모든 역할에 대해 수행하는 것처럼 워크플로를 미세 조정하세요." link_message: "관리에서 워크플로를 구성하세요." @@ -774,6 +783,7 @@ ko: not_an_iso_date: "은(는) 유효한 날짜가 아닙니다. 필요한 형식: YYYY-MM-DD." not_same_project: "은(는) 동일한 프로젝트에 속하지 않습니다." odd: "에 홀수를 입력해 주세요" + regex_match_failed: "%{expression} 정규식과 일치하지 않습니다." regex_invalid: "관련 정규식으로 유효성을 확인할 수 없습니다." smaller_than_or_equal_to_max_length: "은(는) 최대 길이보다 같거나 작아야 합니다." taken: "은(는) 이미 존재합니다." @@ -985,13 +995,13 @@ ko: only_same_project_categories_allowed: "작업 패키지의 카테고리는 작업 패키지와 동일한 프로젝트에 있어야 합니다." does_not_exist: "지정한 카테고리가 존재하지 않습니다." estimated_hours: - cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work." - must_be_set_when_remaining_work_is_set: "Required when Remaining work is set." - only_values_greater_or_equal_zeroes_allowed: "Must be >= 0." + cant_be_inferior_to_remaining_work: "남은 작업보다 낮을 수 없습니다." + must_be_set_when_remaining_work_is_set: "'남은 작업'이 설정된 경우 필수입니다." + only_values_greater_or_equal_zeroes_allowed: "0 이상이어야 합니다." format: "%{message}" remaining_hours: - cant_exceed_work: "Cannot be higher than Work." - must_be_set_when_work_is_set: "Required when Work is set." + cant_exceed_work: "작업보다 높을 수 없습니다." + must_be_set_when_work_is_set: "작업이 설정된 경우 필수입니다." format: "%{message}" readonly_status: "작업 패키지가 읽기 전용 상태이므로 해당 속성을 변경할 수 없습니다." type: @@ -1247,6 +1257,7 @@ ko: button_edit: "편집" button_edit_associated_wikipage: "연결된 위키 페이지 %{page_title} 편집" button_expand_all: "모두 확장" + button_favorite: "즐겨찾기에 추가" button_filter: "필터" button_generate: "생성" button_list: "목록" @@ -1274,6 +1285,7 @@ ko: button_unarchive: "보관 취소" button_uncheck_all: "모두 선택 취소" button_unlock: "잠금 해제" + button_unfavorite: "즐겨찾기에서 제거" button_unwatch: "주시 안 함" button_update: "업데이트" button_upgrade: "업그레이드" @@ -1541,6 +1553,7 @@ ko: pdf_overview_table: "PDF 테이블" pdf_report_with_images: "이미지가 포함된 PDF 보고서" pdf_report: "PDF 보고서" + pdf_gantt: "PDF Gantt" image: omitted: "이미지를 내보내지 못했습니다." units: @@ -1619,11 +1632,11 @@ ko: file_links_journal: > 지금부터 파일 링크(외부 저장소에 저장된 파일)와 관련된 활동이 활동 탭에 표시됩니다. 다음은 이미 존재하는 링크와 관련된 활동을 나타냅니다. progress_calculation_adjusted_from_disabled_mode: >- - Progress calculation automatically set to work-based mode and adjusted with version update. + 진행률 계산은 자동으로 작업 기반 모드로 설정되고 버전 업데이트에 따라 조정됩니다. progress_calculation_adjusted: >- - Progress calculation automatically adjusted with version update. + 진행률 계산은 자동으로 버전 업데이트에 따라 조정됩니다. totals_removed_from_childless_work_packages: >- - Work and progress totals automatically removed for non-parent work packages with version update. This is a maintenance task and can be safely ignored. + 버전 업데이트를 통해 부모가 아닌 작업 패키지의 작업 및 진행률 합계가 자동으로 제거됩니다. 유지 관리 작업이므로 무시해도 됩니다. links: configuration_guide: "구성 가이드" get_in_touch: "질문이 있으신가요? 문의해 주세요." @@ -1688,17 +1701,6 @@ ko: mentioned: "%{work_package} 을(를) 멘션하였습니다." responsible: "%{work_package}을(를) 담당하게 되었습니다" watched: "%{work_package}을(를) 지켜 보는 중입니다." - update_info_mail: - body: > - OpenProject 12.0 릴리스를 발표하게 되어 기쁩니다. 이 메이저 릴리스는 OpenProject를 사용하는 방식을 크게 개선할 것으로 예상됩니다. - 이 릴리스부터 인앱 알림을 도입합니다. 이제부터 OpenProject에서 작업 패키지 업데이트에 대한 알림을 직접 받게 됩니다. 이러한 알림을 읽음으로 표시하거나, 코멘트에 답하거나, 알림 센터를 나가지 않고도 작업 패키지 특성을 직접 수정할 수도 있습니다. - 즉, 더 이상 알림용으로 이메일을 사용하지 않을 것입니다. 알림 센터가 이러한 업데이트를 확인하고 조치를 취하기에 더 좋은 공간이라고 생각합니다. 그러나 이메일로 업데이트를 계속 받으려면 선택한 특정 시간에 매일 이메일 미리 알림을 받도록 선택할 수 있습니다. - 새로운 기본 알림 설정을 확인하고 계정 설정에서 알림 및 이메일 미리 알림에 대한 기본 설정을 지정해야 합니다. 아래의 "이메일 설정 변경" 버튼으로 이 작업을 수행할 수 있습니다. - 인앱 알림이 유용하고 생산성을 더욱 개선하는 데 도움이 되기를 바랍니다. - 감사합니다. OpenProject 팀 - body_header: "버전 12.0, 알림 센터 포함" - body_subheader: "뉴스" - subject: "12.0 릴리스의 알림에 대한 중요 변경 사항" label_accessibility: "접근성" label_account: "계정" label_active: "활성" @@ -1879,7 +1881,7 @@ ko: label_enterprise_support: "엔터프라이즈 지원" label_enterprise_addon: "Enterprise 추가 기능" label_environment: "환경" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "견적 및 진행률" label_equals: "일치함" label_everywhere: "어디에 있든지" label_example: "예" @@ -1893,7 +1895,7 @@ ko: label_expanded_click_to_collapse: "확장되었습니다. 축소하려면 클릭하세요." label_f_hour: "%{value}시간" label_f_hour_plural: "%{value}시간" - label_favoured: "호감" + label_favorite: "즐겨찾기" label_feed_plural: "피드" label_feeds_access_key: "RSS 액세스 키" label_feeds_access_key_created_on: "RSS 액세스 키가 %{value} 전에 생성되었습니다." @@ -1966,6 +1968,7 @@ ko: label_learn_more: "자세히 알아보기" label_less_or_equal: "<=" label_less_than_ago: "일 미만 전" + label_link_url: "링크(URL)" label_list: "목록" label_loading: "로드 중..." label_lock_user: "사용자 잠금" @@ -1991,6 +1994,7 @@ ko: label_membership_plural: "멤버십" lable_membership_added: "멤버 추가됨" lable_membership_updated: "멤버 갱신됨" + label_menu: "메뉴" label_menu_badge: pre_alpha: "프리 알파" alpha: "알파" @@ -2092,6 +2096,7 @@ ko: label_percent_complete: "완료 %" label_project_activity: "프로젝트 활동" label_project_attribute_plural: "프로젝트 특성" + label_project_attribute_manage_link: "프로젝트 특성 관리" label_project_count: "전체 프로젝트 수" label_project_copy_notifications: "프로젝트 복사 중에 이메일 알림 보내기" label_project_latest: "최근 프로젝트" @@ -2106,7 +2111,7 @@ ko: label_project_attributes_settings: "프로젝트 특성 설정" label_project_storage_plural: "파일 저장소" label_project_storage_project_folder: "파일 저장소: 프로젝트 폴더" - label_projects_storage_information: "%{count} 개의 프로젝트가 %{storage} 디스크 스토리지를 사용 중" + label_projects_disk_usage_information: "%{used_disk_space} 디스크 공간을 사용하고 있는 %{count}개 프로젝트" label_project_view_all: "모든 프로젝트 보기" label_project_show_details: "프로젝트 세부 정보 표시" label_project_hide_details: "프로젝트 세부 정보 숨기기" @@ -2163,6 +2168,7 @@ ko: label_setting_plural: "설정" label_system_settings: "시스템 설정" label_show_completed_versions: "완료된 버전 표시" + label_columns: "열" label_sort: "분류" label_sort_by: "%{value}(으)로 정렬" label_sorted_by: "%{value}(으)로 정렬됨" @@ -2847,6 +2853,7 @@ ko: setting_app_subtitle: "응용 프로그램 부제목" setting_app_title: "응용 프로그램 제목" setting_attachment_max_size: "첨부 파일 최대 크기" + setting_show_work_package_attachments: "기본적으로 파일 탭에 첨부 파일 표시" setting_antivirus_scan_mode: "스캔 모드" setting_antivirus_scan_action: "감염된 파일 작업" setting_autofetch_changesets: "Autofetch 리포지토리 변경 사항" @@ -2948,6 +2955,8 @@ ko: attachments: whitelist_text_html: > 업로드된 파일의 유효한 파일 확장명 및/또는 MIME 형식 목록을 정의합니다.
파일 확장명(예: %{ext_example}) 또는 MIME 형식(예: %{mime_example})을 입력합니다.
모든 파일 형식을 업로드할 수 있도록 허용하려면 비워 둡니다. 여러 값이 허용됩니다(각 값에 대해 한 줄). + show_work_package_attachments: > + 이 옵션을 비활성화하면 새 프로젝트의 작업 패키지 파일 탭에서 첨부 파일 목록이 숨겨집니다. 작업 패키지 설명에 첨부된 파일은 내부 첨부 파일 저장소에 계속 업로드됩니다. antivirus: title: "바이러스 검사" clamav_ping_failed: "ClamAV 데몬을 연결하지 못했습니다. 구성을 다시 확인하고 다시 시도하세요." @@ -3184,6 +3193,10 @@ ko: input_label: "열 추가" input_placeholder: "열 선택" drag_area_label: "열 관리 및 재정렬" + sort_by: + automatic: + heading: "자동" + description: "하나 이상의 정렬 기준에 따라 %{plural}을(를) 정렬합니다. 이전 정렬은 손실됩니다." top_menu: additional_resources: "추가 리소스" getting_started: "시작하기" diff --git a/config/locales/crowdin/lt.seeders.yml b/config/locales/crowdin/lt.seeders.yml index f6cdd7b67098..997a48d647c2 100644 --- a/config/locales/crowdin/lt.seeders.yml +++ b/config/locales/crowdin/lt.seeders.yml @@ -251,6 +251,21 @@ lt: * [ ] Dar daugiau alaus item_4: subject: Projekto pabaiga + wiki: | + _Šioje viki jūs galite bendrai kurti ir redaguoti puslapius bei popuslapius, kad sukurtumėte projekto viki._ + + **Jūs galite:** + + * Įterpti tekstą ir piešinius, taipogi kopijuoti ir įkelti iš kitų dokumentų + * Kurti puslapių hierarchiją su tėviniais puslapiais + * Įtraukti viki puslapius į projekto meniu + * Naudoti makro, kad įterptumėte pvz. turinį, darbo paketų sąrašus ar Ganto diagaramas + * Įtraukti viki puslapius į kitus tekstinius laukus, pavyzdžiui projekto apžvalgos puslapyje + * Įtraukti nuorodas į kitus dokumentus + * Peržiūrėti pokyčių istoriją + * Žiūrėti kaip Markdown + + Daugiau informacijos rasite: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum projektas status_explanation: Visos užduotys vyksta pagal planą. Susiję žmonės žino savo užduotis. Sistema pilnai paruošta. diff --git a/config/locales/crowdin/lt.yml b/config/locales/crowdin/lt.yml index d7996361e87e..0f767dd69f71 100644 --- a/config/locales/crowdin/lt.yml +++ b/config/locales/crowdin/lt.yml @@ -261,6 +261,7 @@ lt: lists: active: "Aktyvūs projektai" my: "Mano projektai" + favored: "Mėgstami projektai" archived: "Archyvuoti projektai" my_private: "Mano privatūs projektų sąrašai" new: @@ -301,7 +302,14 @@ lt: storage: no_results_title_text: Šis projektas papildomos vietos diske nenaudoja. lists: - can_be_saved_as: "Pakeitimus galima išsaugoti tik naujame sąraše." + create: + success: "Pakeistas sąrašas įrašytas kaip naujas sąrašas" + failure: "Nepavyksta įrašyti pakeisto sąrašo: %{errors}" + update: + success: "Pakeistas sąrašas buvo įrašytas" + failure: "Nepavyksta įrašyti pakeisto sąrašo: %{errors}" + can_be_saved: "Sąrašas pakeistas:" + can_be_saved_as: "Pakeitimus galima įrašyti tik į naują sąrašą:" members: index: no_results_title_text: Nėra nė vieno šio projekto dalyvio. @@ -319,6 +327,7 @@ lt: project_roles: "Projekto vaidmenys" wp_shares: "Darbo paketų bendrinimai" groups: "Grupės" + no_modify_on_shared: "Jūs šiuo metu negalite keisti ar išimti bendrintų narysčių per nario puslapį. Vietoje to naudokite bendrinimo dialogą." delete_member_dialog: title: "Išimti narį" will_remove_the_users_role: "Tai išims naudotojo vaidmenį iš šio projekto." @@ -495,7 +504,7 @@ lt: no_common_statuses_exists: "Parinkti darbo paketai neturi būsenos. Jų būsena negali pakeista." unsupported_for_multiple_projects: "Masinis darbų paketų perkėlimas/kopijavimas nėra palaikomas darbui iškart su keliais projektais" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Darbo paketo dalinimuisi trūksta darbo proceso" message: "Vaidmeniui „Darbo paketo redaktorius“ nesukonfigūruotas procesas. Be proceso naudotojas negali pakeisti darbo paketo būsenos. Procesą galima nukopijuoti. Parinkite šaltinio tipą („pvz. „Užduotis“) ir šaltinio vaidmenį (pvz. „Narys“). Tada parinkite paskirties tipus. Pradžiai galėtumėte kaip paskirtį parinkti visus tipus. Galų gale parinkite vaidmenį „Darbo paketų redaktorius“ kaip paskirtį ir spauskite „Kopijuoti“. Taip sukūrę numatytąjį variantą, patikslinkite procesus kaip tai darote su kitais vaidmenimis." link_message: "Konfigūruokite procesus administravime." @@ -793,6 +802,7 @@ lt: not_an_iso_date: "nėra tinkama data. Reikalingas formatas: YYYY-MM-DD." not_same_project: "nepriklauso tam pačiam projektui." odd: "turi būti nelyginis." + regex_match_failed: "neatitinka reguliariosios išraiškos %{expression}." regex_invalid: "negalėjo būti patvirtintas su susieta reguliaria išraiška." smaller_than_or_equal_to_max_length: "turi būti mažesnis arba lygus didžiausiam ilgiui." taken: "jau užimtas." @@ -1290,6 +1300,7 @@ lt: button_edit: "Redaguoti" button_edit_associated_wikipage: "Redaguoti susijusį Wiki puslapį: %{page_title}" button_expand_all: "Išskleisti visus" + button_favorite: "Pridėti prie mėgstamų" button_filter: "Filtras" button_generate: "Generuoti" button_list: "Sąrašas" @@ -1317,6 +1328,7 @@ lt: button_unarchive: "Išarchyvuoti" button_uncheck_all: "Atžymėti visus" button_unlock: "Atrakinti" + button_unfavorite: "Išimti iš mėgiamų" button_unwatch: "Nestebėti" button_update: "Atnaujinti" button_upgrade: "Atnaujinti" @@ -1638,6 +1650,7 @@ lt: pdf_overview_table: "PDF lentelė" pdf_report_with_images: "PDF ataskaita su piešiniais" pdf_report: "PDF ataskaita" + pdf_gantt: "PDF Gantt" image: omitted: "Paveiksliukas neeksportuotas." units: @@ -1720,7 +1733,7 @@ lt: progress_calculation_adjusted: >- Eigos skaičiavimas automatiškai pakeistas su versijos atnaujinimu. totals_removed_from_childless_work_packages: >- - Work and progress totals automatically removed for non-parent work packages with version update. This is a maintenance task and can be safely ignored. + Darbo ir eigos sumos automatiškai išimtos ne tėviniams darbų paketams atnaujinant versiją. Tai palaikymo užduotis ir ją galima saugiai ignoruoti. links: configuration_guide: "Konfigūravimo vadovas" get_in_touch: "Turite klausimų? Susisiekite su mumis." @@ -1785,17 +1798,6 @@ lt: mentioned: "Jūs buvote paminėtas %{work_package}" responsible: "Jūs tapote atsakingas už %{work_package}" watched: "Jūs stebite %{work_package}" - update_info_mail: - body: > - Mes džiaugiamės galėdami pranešti apie OpenProject 12.0. Tai didelė laida, kuri tikimės stipriai pagerins tai, kaip jūs naudojate OpenProject. - Pradedant šia laida mes pristatome Pranešimų Centrą. Nuo dabar jūs galėsite gauti pranešimus apie darbo paketų atnaujinimus tiesiai OpenProject. Jūs galite pažymėti šiuos pranešimus perskaitytais, atsakyti į komentarą ar tiesiogiai pakeisti darbo paketo atributus, nepalikdami Pranešimų Centro. - Tai taipogi reiškia, kad jūs daugiau nenaudosite e-pašto pranešimams. Mes galvojame, kad Pranešimų centras yra geresnė vieta peržiūrėti ir imtis veiksmų su atnaujinimais. Kaip bebūtų, jei jūs norėtumėte ir toliau gauti atnaujinimus e-paštu, galite pasirinkti kasdieninius e-pašto priminimus jūsų pasirinktu metu. - Prašome nustatyti savo e-pašto priminimo parinktis jūsų paskyros nustatymuose. Galite tai padaryti paspaudę žemiau esantį mygtuką „Keisti e-pašto nustatymus“. - Mes tikimės, kad vidiniai pranešimai jums bus naudingi ir, kad jie dar labiau pagerins jūsų produktyvumą. - Nuoširdžiai, OpenProject komanda - body_header: "Versija 12.0 su Pranešimų centru" - body_subheader: "Naujienos" - subject: "Svarbūs pranešimų pakeitimai laidoje 12.0" label_accessibility: "Prieinamumas" label_account: "Paskyra" label_active: "Aktyvus" @@ -1976,7 +1978,7 @@ lt: label_enterprise_support: "„Enterprise“ palaikymas" label_enterprise_addon: "Enterprise priedas" label_environment: "Aplinka" - label_estimates_and_time: "Įvertinimai ir eiga" + label_estimates_and_progress: "Įvertinimai ir eiga" label_equals: "yra" label_everywhere: "visur" label_example: "Pavyzdys" @@ -1990,7 +1992,7 @@ lt: label_expanded_click_to_collapse: "Išplėsta. Spauskite, kad sutrauktumėte" label_f_hour: "%{value} valanda" label_f_hour_plural: "%{value} valandų(-os)" - label_favoured: "Mėgstamas" + label_favorite: "Mėgstamas" label_feed_plural: "Naujienų srautai" label_feeds_access_key: "RSS prieigos raktas" label_feeds_access_key_created_on: "RSS prieigos raktas sukurtas prieš %{value}" @@ -2063,6 +2065,7 @@ lt: label_learn_more: "Sužinoti daugiau" label_less_or_equal: "<=" label_less_than_ago: "mažiau nei prieš dieną" + label_link_url: "Nuoroda (URL)" label_list: "Sąrašas" label_loading: "Įkeliama..." label_lock_user: "Užrakinti vartotoją" @@ -2088,6 +2091,7 @@ lt: label_membership_plural: "Narystės" lable_membership_added: "Narys pridėtas" lable_membership_updated: "Narys atnaujintas" + label_menu: "Meniu" label_menu_badge: pre_alpha: "pre-alfa" alpha: "alfa" @@ -2189,6 +2193,7 @@ lt: label_percent_complete: "% baigta" label_project_activity: "Projekto aktyvumas" label_project_attribute_plural: "Projekto atributai" + label_project_attribute_manage_link: "Valdyti projekto atributus" label_project_count: "Bendras projektų skaičius" label_project_copy_notifications: "Vykstant projekto kopijavimui siųsti pranešimus į el. paštą" label_project_latest: "Naujausi projektai" @@ -2203,7 +2208,7 @@ lt: label_project_attributes_settings: "Projekto atributų nustatymai" label_project_storage_plural: "Failų saugyklos" label_project_storage_project_folder: "Failų saugyklos: projekto aplankai" - label_projects_storage_information: "%{count} projektai(-as, -ų) naudoja %{storage} disko vietos" + label_projects_disk_usage_information: "%{count} projektai, naudojantys %{used_disk_space} disko vietos" label_project_view_all: "Peržiūrėti visus projektus" label_project_show_details: "Rodyti detalią projekto informaciją" label_project_hide_details: "Slėpti detalią projekto informaciją" @@ -2260,6 +2265,7 @@ lt: label_setting_plural: "Nustatymai" label_system_settings: "Sistemos nustatymai" label_show_completed_versions: "Rodyti užbaigtas versijas" + label_columns: "Stulpeliai" label_sort: "Rikiuoti" label_sort_by: "Rūšiuoti pagal %{value}" label_sorted_by: "suršiuota pagal %{value}" @@ -2806,7 +2812,7 @@ lt: member_of_group: "Priskirtojo asmens grupė" name_or_identifier: "Pavadinimas arba identifikatorius" only_subproject_id: "Tik sub-projektai" - shared_with_user: "Bendrinamas su naudotoju" + shared_with_user: "Bendrinamas su naudotojais" shared_with_me: "Bendrinama su manimi" subproject_id: "Įtraukti sub-projektus" repositories: @@ -2949,6 +2955,7 @@ lt: setting_app_subtitle: "Programos paantraštė" setting_app_title: "Programos pavadinimas" setting_attachment_max_size: "Didžiausias prisegamo failo dydis" + setting_show_work_package_attachments: "Pagal nutylėjimą rodyti priedus failų kortelėje" setting_antivirus_scan_mode: "Skenavimo režimas" setting_antivirus_scan_action: "Užkrėsto failo veiksmas" setting_autofetch_changesets: "Automatiškai įkelti repozitorijos pakeitimus" @@ -3050,6 +3057,8 @@ lt: attachments: whitelist_text_html: > Sudarykite sąrašą leidžiamų failų praplėtimų ir/arba MIME tipų su kuriais bus leidžiama įkelti failus.
Įveskite failų praplėtimus (t.y., %{ext_example}) arba MIME tipus (t.y., %{mime_example}).
Palikite tuščią, jei norite leisti visus tipus. Leidžiama daugiau nei viena reikšmė (po vieną kiekvienoje eilutėje). + show_work_package_attachments: > + Išjungus šią parinktį naujų projektų darbo paketų failų kortelėje bus paslėptas priedų sąrašas. Darbo paketų aprašyme prisegti failai bus įkeliami į vidinę priedų saugyklą. antivirus: title: "Virusų tikrinimas" clamav_ping_failed: "Nepavyko prisijungti prie ClamAV demono. Dar kartą patikrinkite konfigūraciją ir bandykite dar kartą." @@ -3286,6 +3295,10 @@ lt: input_label: "Pridėti stulpelių" input_placeholder: "Parinkti stulpelį" drag_area_label: "Tvarkyti ir perrikiuoti stulpelius" + sort_by: + automatic: + heading: "Automatinis" + description: "Rikiuokite %{plural} pagal vieną ar daugiau rikiavimo kriterijų. Prarasite bet kokį ankstesnį rikiavimą." top_menu: additional_resources: "Papildomi ištekliai" getting_started: "Darbo pradžia" @@ -3636,7 +3649,7 @@ lt: link: nuoroda plugin_openproject_auth_plugins: name: "OpenProject Auth Priedai" - description: "Openproject autentifikacijos OmniAuth strategijos teikėjų integracija." + description: "OmniAuth stretegijos tiekėjų OpenProject autentifikacijos integracija." plugin_openproject_auth_saml: name: "OmniAuth SAML / Vienas prisijungimas" description: "Prideda OmniAuth SAML tiekėja į OpenProject" diff --git a/config/locales/crowdin/lv.seeders.yml b/config/locales/crowdin/lv.seeders.yml index fe5126c20007..4523dcc4df90 100644 --- a/config/locales/crowdin/lv.seeders.yml +++ b/config/locales/crowdin/lv.seeders.yml @@ -251,6 +251,21 @@ lv: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/lv.yml b/config/locales/crowdin/lv.yml index e330ec801769..658b2c657a66 100644 --- a/config/locales/crowdin/lv.yml +++ b/config/locales/crowdin/lv.yml @@ -264,6 +264,7 @@ lv: lists: active: "Active projects" my: "Mani projekti" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ lv: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: Pašlaik projektam nav neviena dalībnieka. @@ -322,6 +330,7 @@ lv: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Groups" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -491,7 +500,7 @@ lv: no_common_statuses_exists: "There is no status available for all selected work packages. Their status cannot be changed." unsupported_for_multiple_projects: "Vairāku darba paku pārvietošana/kopēšana netiek atbalstīta no vairākiem projektiem" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -789,6 +798,7 @@ lv: not_an_iso_date: "is not a valid date. Required format: YYYY-MM-DD." not_same_project: "neietilpst vienā un tai pašā projektā." odd: "jābūt nepāra." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "could not be validated with the associated regular expression." smaller_than_or_equal_to_max_length: "jābūt mazākam vai vienādam ar maksimālo garumu." taken: "jau tika aizņemts." @@ -1278,6 +1288,7 @@ lv: button_edit: "Labot" button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}" button_expand_all: "Expand all" + button_favorite: "Add to favorites" button_filter: "Filtrēt" button_generate: "Ģenerēt" button_list: "List" @@ -1305,6 +1316,7 @@ lv: button_unarchive: "Unarchive" button_uncheck_all: "Noņemt visus" button_unlock: "Unlock" + button_unfavorite: "Remove from favorites" button_unwatch: "Pārtraukt sekošanu" button_update: "Atjaunot" button_upgrade: "Upgrade" @@ -1608,6 +1620,7 @@ lv: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1755,17 +1768,6 @@ lv: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "Jaunumi" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Accessibility" label_account: "Konts" label_active: "Aktīvs" @@ -1946,7 +1948,7 @@ lv: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Environment" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "is" label_everywhere: "everywhere" label_example: "Example" @@ -1960,7 +1962,7 @@ lv: label_expanded_click_to_collapse: "Expanded. Click to collapse" label_f_hour: "%{value} hour" label_f_hour_plural: "%{value} hours" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Feeds" label_feeds_access_key: "RSS piekļuves atslēga" label_feeds_access_key_created_on: "API piekļuves atslēga izveidota pirms %{value}" @@ -2033,6 +2035,7 @@ lv: label_learn_more: "Uzzināt vairāk" label_less_or_equal: "mazāks vai vienāds" label_less_than_ago: "less than days ago" + label_link_url: "Link (URL)" label_list: "List" label_loading: "Notiek ielāde..." label_lock_user: "Lock user" @@ -2058,6 +2061,7 @@ lv: label_membership_plural: "Memberships" lable_membership_added: "Member added" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2159,6 +2163,7 @@ lv: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Kopējais projektu skaits" label_project_copy_notifications: "Send email notifications during the project copy" label_project_latest: "Jaunākie projekti" @@ -2173,7 +2178,7 @@ lv: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projects using %{storage} disk storage" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "Skatīt visus projektus" label_project_show_details: "Show project details" label_project_hide_details: "Hide project details" @@ -2230,6 +2235,7 @@ lv: label_setting_plural: "Iestatījumi" label_system_settings: "Sistēmas iestatījumi" label_show_completed_versions: "Rādīt pabeigtas versijas" + label_columns: "Kolonnas" label_sort: "Sort" label_sort_by: "Sort by %{value}" label_sorted_by: "sorted by %{value}" @@ -2776,7 +2782,7 @@ lv: member_of_group: "Assignee's group" name_or_identifier: "Nosaukumu vai identifikatoru" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2921,6 +2927,7 @@ lv: setting_app_subtitle: "Application subtitle" setting_app_title: "Application title" setting_attachment_max_size: "Attachment max. size" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Autofetch repository changes" @@ -3022,6 +3029,8 @@ lv: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3258,6 +3267,10 @@ lv: input_label: "Add columns" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Additional resources" getting_started: "Getting started" @@ -3607,7 +3620,7 @@ lv: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/mn.seeders.yml b/config/locales/crowdin/mn.seeders.yml index a493a25c4954..1ebfb95a5c34 100644 --- a/config/locales/crowdin/mn.seeders.yml +++ b/config/locales/crowdin/mn.seeders.yml @@ -251,6 +251,21 @@ mn: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/mn.yml b/config/locales/crowdin/mn.yml index bd47587c2e11..6fd50458fe52 100644 --- a/config/locales/crowdin/mn.yml +++ b/config/locales/crowdin/mn.yml @@ -264,6 +264,7 @@ mn: lists: active: "Active projects" my: "My projects" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ mn: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: There are currently no members part of this project. @@ -322,6 +330,7 @@ mn: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Groups" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -484,7 +493,7 @@ mn: no_common_statuses_exists: "There is no status available for all selected work packages. Their status cannot be changed." unsupported_for_multiple_projects: "Bulk move/copy is not supported for work packages from multiple projects" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -782,6 +791,7 @@ mn: not_an_iso_date: "is not a valid date. Required format: YYYY-MM-DD." not_same_project: "doesn't belong to the same project." odd: "must be odd." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "could not be validated with the associated regular expression." smaller_than_or_equal_to_max_length: "must be smaller than or equal to maximum length." taken: "has already been taken." @@ -1263,6 +1273,7 @@ mn: button_edit: "Edit" button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}" button_expand_all: "Expand all" + button_favorite: "Add to favorites" button_filter: "Filter" button_generate: "Generate" button_list: "List" @@ -1290,6 +1301,7 @@ mn: button_unarchive: "Unarchive" button_uncheck_all: "Uncheck all" button_unlock: "Unlock" + button_unfavorite: "Remove from favorites" button_unwatch: "Unwatch" button_update: "Update" button_upgrade: "Upgrade" @@ -1575,6 +1587,7 @@ mn: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1722,17 +1735,6 @@ mn: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "News" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Accessibility" label_account: "Account" label_active: "Active" @@ -1913,7 +1915,7 @@ mn: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Environment" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "is" label_everywhere: "everywhere" label_example: "Example" @@ -1927,7 +1929,7 @@ mn: label_expanded_click_to_collapse: "Expanded. Click to collapse" label_f_hour: "%{value} hour" label_f_hour_plural: "%{value} hours" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Feeds" label_feeds_access_key: "RSS access key" label_feeds_access_key_created_on: "RSS access key created %{value} ago" @@ -2000,6 +2002,7 @@ mn: label_learn_more: "Learn more" label_less_or_equal: "<=" label_less_than_ago: "less than days ago" + label_link_url: "Link (URL)" label_list: "List" label_loading: "Loading..." label_lock_user: "Lock user" @@ -2025,6 +2028,7 @@ mn: label_membership_plural: "Memberships" lable_membership_added: "Member added" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2126,6 +2130,7 @@ mn: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Total number of projects" label_project_copy_notifications: "Send email notifications during the project copy" label_project_latest: "Latest projects" @@ -2140,7 +2145,7 @@ mn: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projects using %{storage} disk storage" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "View all projects" label_project_show_details: "Show project details" label_project_hide_details: "Hide project details" @@ -2197,6 +2202,7 @@ mn: label_setting_plural: "Settings" label_system_settings: "System settings" label_show_completed_versions: "Show completed versions" + label_columns: "Columns" label_sort: "Sort" label_sort_by: "Sort by %{value}" label_sorted_by: "sorted by %{value}" @@ -2741,7 +2747,7 @@ mn: member_of_group: "Assignee's group" name_or_identifier: "Name or identifier" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2886,6 +2892,7 @@ mn: setting_app_subtitle: "Application subtitle" setting_app_title: "Application title" setting_attachment_max_size: "Attachment max. size" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Autofetch repository changes" @@ -2987,6 +2994,8 @@ mn: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3223,6 +3232,10 @@ mn: input_label: "Add columns" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Additional resources" getting_started: "Getting started" @@ -3570,7 +3583,7 @@ mn: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/ms.seeders.yml b/config/locales/crowdin/ms.seeders.yml index cff54ff98c66..523257f72128 100644 --- a/config/locales/crowdin/ms.seeders.yml +++ b/config/locales/crowdin/ms.seeders.yml @@ -7,7 +7,7 @@ ms: common: colors: item_0: - name: Biru (gelap) + name: Biru (tua) item_1: name: Biru item_2: @@ -15,7 +15,7 @@ ms: item_3: name: Hijau (muda) item_4: - name: Hijau (gelap) + name: Hijau (tua) item_5: name: Kuning item_6: @@ -31,7 +31,7 @@ ms: item_11: name: Kelabu item_12: - name: Kelabu (gelap) + name: Kelabu (tua) item_13: name: Hitam document_categories: @@ -122,7 +122,7 @@ ms: item_2: name: Fasa item_3: - name: Ciri-ciri + name: Fitur item_4: name: Epik item_5: @@ -150,17 +150,17 @@ ms: projects: demo-project: name: Projek demo - status_explanation: Semua tugasan mengikut jadual. Orang yang terlibat tahu tugasan mereka. Sistem ini lengkap sepenuhnya. - description: Ini adalah ringkasan singkat matlamat projek demo ini. + status_explanation: Semua tugasan mengikut jadual. Orang yang terlibat tahu tugasan mereka. Sistem ini telah siap sepenuhnya. + description: Ini adalah ringkasan pendek matlamat projek demo ini. news: item_0: title: Selamat datang ke projek demo anda summary: | - Kami gembira anda menyertai. - Dalam modul ini, anda boleh menyampaikan berita projek ke ahli pasukan. + Kami gembira anda menyertai kami. + Dalam modul ini, anda boleh menyampaikan berita projek ke ahli pasukan anda. description: Berita sebenar categories: - item_0: Kategori 1 (untuk diubah dalam seting Projek) + item_0: Kategori 1 (untuk diubah dalam tetapan Projek) queries: item_0: name: Pelan projek @@ -195,21 +195,21 @@ ms: options: name: Sedang bermula text: | - Kami gembira anda menyertai! Kami cadangkan beberapa perkara untuk bermula di OpenProject. + Kami gembira anda menyertai kami! Kami cadangkan beberapa perkara sebagai permulaan di OpenProject. - Temui ciri paling penting dengan [Lawatan Berpandu]({{opSetting:base_url}}/projects/demo-project/work_packages/?start_onboarding_tour=true) kami. + Temui fitur paling penting dengan [Lawatan Berpandu ({{opSetting:base_url}}/projects/demo-project/work_packages/?start_onboarding_tour=true) kami. - _Cuba ikuti langkah berikut:_ + _Cuba ikuti langkah-langkah berikut:_ 1. *Jemput ahli baru ke projek anda*: → Pergi ke [Ahli]({{opSetting:base_url}}/projects/demo-project/members) dalam navigasi projek. 2. *Lihat kerja dalam projek anda*: → Pergi ke [Pakej kerja]({{opSetting:base_url}}/projects/demo-project/work_packages) dalam navigasi projek. - 3. *Cipta satu pakej pekerjaan baharu*: → Pergi ke [Pakej kerja → Cipta]({{opSetting:base_url}}/projects/demo-project/work_packages/new). - 4. *Cipta dan kemaskini pelan projek*: → Pergi ke [Pelan projek]({{opSetting:base_url}}/projects/demo-project/work_packages?query_id=##query.id:demo_project__query__project_plan) dalam navigasi projek. - 5. *Aktifkan modul lanjutan*: → Pergi ke [Seting projek → Modul]({{opSetting:base_url}}/projects/demo-project/settings/modules). + 3. *Cipta satu pakej kerja baharu*: → Pergi ke [Pakej kerja → Cipta]({{opSetting:base_url}}/projects/demo-project/work_packages/new). + 4. *Cipta dan kemas kini pelan projek*: → Pergi ke [Pelan projek]({{opSetting:base_url}}/projects/demo-project/work_packages?query_id=##query.id:demo_project__query__project_plan) dalam navigasi projek. + 5. *Aktifkan modul selanjutanya*: → Pergi ke [Tetapan projek → Modul]({{opSetting:base_url}}/projects/demo-project/settings/modules). 6. *Lengkapkan tugasan anda dalam projek*: → Pergi ke [Pakej kerja → Tugasan]({{opSetting:base_url}}/projects/demo-project/work_packages/details/##wp.id:set_date_and_location_of_conference/overview?query_id=##query.id:demo_project__query__tasks). - Di sini anda akan menemui [Panduan Pengguna](https://www.openproject.org/docs/user-guide/). - Sila beritahu kami jika anda mempunyai sebarang soalan atau memerlukan bantuan. Hubungi kami: [support[at]openproject.com](mailto:support@openproject.com). + Di sini anda akan menemui [Panduan Pengguna] (https://www.openproject.org/docs/user-guide/) kami. + Sila beritahu kami jika anda mempunyai sebarang soalan atau memerlukan bantuan. Hubungi kami: [support[at]openproject.com](mel ke:support@openproject.com). item_5: options: name: Pakej kerja @@ -251,21 +251,36 @@ ms: * [ ] Lagi banyak bir item_4: subject: Akhir projek + wiki: | + _Dalam wiki ini, anda boleh bekerjasama mencipta dan edit halaman dan sub-halaman untuk mencipta wiki projek._ + + **Anda boleh:** + + *Masukkan teks dan imej, juga menyalin dan sisipkan daripada dokumen lain + *Cipta hierarki laman dengan halaman induk + *Sertakan halaman wiki ke menu projek + *Gunakan makro untuk sertakan, cth. Jadual kandungan, senarai pakej kerja, atau carta Gantt + *Sertakan halaman wiki di ruang teks lain, cth. Halaman gambaran keseluruhan projek + *Sertakan pautan ke dokumen-dokumen lain + *Lihat sejarah perubahan + *Lihat sebagai Markdown + + Maklumat lanjut: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: - name: Scrum Projek - status_explanation: Semua tugasan mengikut jadual. Orang yang terlibat tahu tugasan mereka. Sistem ini lengkap sepenuhnya. - description: Ini adalah ringkasan singkat matlamat projek demo Scrum ini. + name: Projek Scrum + status_explanation: Semua tugasan mengikut jadual. Orang yang terlibat tahu akan tugasan mereka. Sistem ini telah siap sepenuhnya. + description: Ini adalah ringkasan pendek matlamat demo projek Scrum ini. news: item_0: - title: Selamat datang ke projek demo Scrum anda + title: Selamat datang ke demo projek Scrum anda summary: | - Kami gembira anda menyertai. - Dalam modul ini, anda boleh menyampaikan berita projek ke ahli pasukan. + Kami gembira anda menyertai kami. + Dalam modul ini, anda boleh menyampaikan berita projek ke ahli pasukan anda. versions: item_0: name: Bug Tunggakan item_1: - name: Tunggakan produk + name: Tunggakan Produk item_2: name: Pecutan 1 wiki: @@ -314,12 +329,12 @@ ms: _Sila dokumen di sini topik untuk mesyuarat Retrospektif Pecutan_ * Kotak masa (3 j). - * Setelah Semakan Pecutan, akan dimoderasi oleh Ketua Scrum. + * Setelah Semakan Pecutan, akan dikendalikan oleh Ketua Scrum. * Pasukan membincangkan pecutan: apa yang berjalan lancar, apa yang perlu diperbaiki untuk menjadi lebih produktif untuk pecutan seterusnya atau lebih menyeronokkan. item_3: name: Pecutan 2 categories: - item_0: Kategori 1 (untuk diubah dalam seting Projek) + item_0: Kategori 1 (untuk diubah dalam tetapan Projek) queries: item_0: name: Pelan projek @@ -331,9 +346,9 @@ ms: name: Tugasan boards: kanban: - name: Board Kanban + name: Papan Kanban basic: - name: Board tugasan + name: Papan tugasan lists: item_0: name: Senarai keinginan @@ -352,20 +367,20 @@ ms: options: name: Sedang bermula text: | - Kami gembira anda menyertai! Kami cadangkan beberapa perkara untuk bermula di OpenProject. + Kami gembira anda menyertai kami! Kami cadangkan beberapa perkara sebagai permula andi OpenProject. - _Cuba ikuti langkah berikut:_ + _Cuba ikuti langkah-langkah berikut:_ 1. *Jemput ahli baru ke projek anda*: → Pergi ke [Ahli]({{opSetting:base_url}}/projects/your-scrum-project/members) dalam navigasi produk. 2. *Lihat Tunggakan Produk dan Tunggakan Pecutan anda*: → Pergi ke [Tunggakan]({{opSetting:base_url}}/projects/your-scrum-project/backlogs) dalam navigasi projek. - 3. *Lihat Board tugasan anda*: → Pergi ke [Tunggakan]({{opSetting:base_url}}/projects/your-scrum-project/backlogs) → Klik anak panah kanan di Pecutan → Pilih [Board Tugasan](##sprint:scrum_project__version__sprint_1). + 3. *Lihat Papan tugasan anda*: → Pergi ke [Tunggakan]({{opSetting:base_url}}/projects/your-scrum-project/backlogs) → Klik anak panah kanan di Pecutan → Pilih [Papan Tugasan](##sprint:scrum_project__version__sprint_1). 4. *Cipta satu pakej kerja baru*: → Pergi ke [Pakej kerja → Cipta]({{opSetting:base_url}}/projects/your-scrum-project/work_packages/new). 5. *Cipta dan kemas kini pelan projek*: → Pergi ke [Pelan projek](##query:scrum_project__query__project_plan) dalam navigasi projek. 6. *Cipta Pecutan wiki*: → Pergi ke [Tunggakan]({{opSetting:base_url}}/projects/your-scrum-project/backlogs) dan buka pecutan wiki dari menu juntai bawah sebelah kanan di pecutan. Anda boleh edit [templat wiki]({{opSetting:base_url}}/projects/your-scrum-project/wiki/) berdasarkan keperluan anda. - 7. *Aktifkan modul lanjutan*: → Pergi ke [Seting projek → Modul]({{opSetting:base_url}}/projects/your-scrum-project/settings/modules). + 7. *Aktifkan modul lanjutan*: → Pergi ke [Tetapan projek → Modul]({{opSetting:base_url}}/projects/your-scrum-project/settings/modules). Disini anda akan menemui [Panduan Pengguna](https://www.openproject.org/docs/user-guide/) kami. - Sila beritahu kami jika anda mempunyai sebarang soalan atau memerlukan bantuan. Hubungi kami: [support[at]openproject.com](mailto:support@openproject.com). + Sila beritahu kami jika anda mempunyai sebarang soalan atau memerlukan bantuan. Hubungi kami: [support[at]openproject.com](mel ke:support@openproject.com). item_5: options: name: Pakej kerja @@ -376,7 +391,7 @@ ms: item_0: subject: Skrin log masuk baharu item_1: - subject: Set semula kata laluan tidak menghantar e-mel + subject: E-mel tidak akan dihantar semasa tetapan semula kata laluan item_2: subject: Laman web baharu children: @@ -385,23 +400,23 @@ ms: item_1: subject: Melaksanakan lawatan produk item_2: - subject: Laman arahan baharu + subject: Halaman muka baru children: item_0: subject: Cipta skema laman arahan untuk laman arahan baru item_3: subject: Borang hubungan item_4: - subject: Ciri-ciri karusel + subject: Fitur karusel children: item_0: - subject: Buat tangkapan skrin untuk lawatan ciri + subject: Buat tangkapan skrin untuk lawatan fitur item_5: subject: Warna hover yang salah item_6: subject: Sijil SSL item_7: - subject: Sediakan Staging environment + subject: Sediakan persekitaran Staging item_8: subject: Pilih sistem pengurusan kandungan item_9: @@ -467,5 +482,5 @@ ms: _Sila dokumen disini topik untuk mesyuarat Retrospektif Pecutan_ * Kotak masa (3 j). - * Setelah Semakan Pecutan, akan dimoderasi oleh Ketua Scrum. + * Setelah Semakan Pecutan, akan dikendalikan oleh Ketua Scrum. * Pasukan membincangkan pecutan: apa yang berjalan lancar, apa yang perlu diperbaiki untuk menjadi lebih produktif untuk pecutan seterusnya atau lebih menyeronokkan. diff --git a/config/locales/crowdin/ms.yml b/config/locales/crowdin/ms.yml index c9fdd8961ae3..777db77b6ae9 100644 --- a/config/locales/crowdin/ms.yml +++ b/config/locales/crowdin/ms.yml @@ -20,13 +20,13 @@ #See COPYRIGHT and LICENSE files for more details. #++ ms: - no_results_title_text: Saat ini tiada apa untuk dipaparkan. + no_results_title_text: Pada masa ini tiada apa untuk dipaparkan. activities: index: no_results_title_text: Tiada sebarang aktiviti untuk projek dalam tempoh masa ini. admin: plugins: - no_results_title_text: Saat ini tiada sebarang plugin yang dipasang. + no_results_title_text: Pada masa ini tiada sebarang plugin yang dipasang. no_results_content_text: Lihat halaman integrasi dan plugin kami untuk maklumat lebih lanjut. custom_styles: color_theme: "Tema warna" @@ -53,23 +53,23 @@ ms: manage_colors: "Edit pilihan warna " instructions: primary-button-color: "Warna aksen yang kuat, digunakan untuk butang paling penting pada skrin" - accent-color: "Warna untuk pautan dan elemen-elemen yang ditonjolkan." - header-item-bg-hover-color: "Warna latar belakang item pengepala boleh diklik apabila dihover dengan tetikus." + accent-color: "Warna untuk pautan dan elemen-elemen yang diserlahkan." + header-item-bg-hover-color: "Warna latar belakang item pengepala boleh diklik apabila digegar dengan tetikus." header-item-font-color: "Warna fon item pengepala boleh diklik." - header-item-font-hover-color: "Warna fon item pengepala boleh diklik apabila dihover dengan tetikus." - header-border-bottom-color: "Garis nipis di bawah tajuk. Biarkan medan ini kosong jika anda tidak mahu sebarang garis." + header-item-font-hover-color: "Warna fon item pengepala boleh diklik apabila digegar dengan tetikus." + header-border-bottom-color: "Garisan halus di bawah tajuk. Biarkan ruangan ini kosong jika anda tidak mahu sebarang garisan." main-menu-bg-color: "Warna latar belakang menu sebelah kiri " theme_warning: Penukaran tema akan menulis ganti gaya tersuai anda. Reka bentuk tersebut akan hilang. Adakah anda pasti anda ingin teruskan? enterprise: upgrade_to_ee: "Naik taraf ke edisi Enterprise" add_token: "Muat naik token sokongan edisi Enterprise" delete_token_modal: - text: "Adakah anda yakin anda ingin hapuskan token edisi Enterprise terkini yang telah digunakan?" + text: "Adakah anda pasti anda ingin hapuskan token edisi Enterprise terkini yang telah digunakan?" title: "Padam token" replace_token: "Ganti token sokongan semasa anda" order: "Pesan edisi di premis Enterprise" paste: "Sisipkan token sokongan edisi Enterprise anda" - required_for_feature: "Tambahan ini hanya tersedia dengan token sokongan edisi Enterprise yang aktif" + required_for_feature: "Tambahan ini hanya tersedia dengan token sokongan edisi Enterprise yang aktif." enterprise_link: "Untuk info lebih lanjut, klik disini." start_trial: "Mulakan percubaan percuma" book_now: "Tempah sekarang" @@ -84,25 +84,25 @@ ms: text: "Tindakan individu pengguna (cth. mengemas kini pakej kerja dua kali) digabungkan ke dalam satu tindakan tunggal jika perbezaan umur mereka kurang daripada tempoh masa yang ditetapkan. Mereka akan dipaparkan sebagai satu tindakan di dalam aplikasi. Ini juga akan menangguhkan pemberitahuan dengan jumlah masa yang sama, mengurangkan bilangan emel yang dihantar dan juga akan memberi kesan kepada penagguhan %{webhook_link}." link: "webhook" announcements: - show_until: Tunjuk sehingga + show_until: Paparkan sehingga is_active: kini dipaparkan - is_inactive: tidak dipaparkan sekarang ini + is_inactive: tidak dipaparkan pada masa ini antivirus_scan: not_processed_yet_message: "Muat turun disekat, kerana fail tidak diimbas untuk virus lagi. Sila cuba sebentar lagi." quarantined_message: "Virus telah dikesan dalam fail '%{filename}'. Ia telah diasingkan dan tidak tersedia untuk muat turun." - deleted_message: "Virus telah dikesan dalam fail '%{filename}'. Fail berikut telah dihapuskan." - deleted_by_admin: "Fail '%{filename}' yang diasingkan telah dihapuskan oleh pentadbir." + deleted_message: "Virus telah dikesan dalam fail '%{filename}'. Fail berikut telah dipadamkan." + deleted_by_admin: "Fail '%{filename}' yang diasingkan telah dipadamkan oleh pentadbir." overridden_by_admin: "Pengasingan untuk fail '%{filename}' telah dibatalkan oleh %{user}. Fail tersebut kini boleh diakses." quarantined_attachments: - container: "Pengandung" - delete: "Hapuskan fail yang di kuarantin" + container: "Bekas" + delete: "Padamkan fail yang diasingkan" title: "Lampiran yang diasingkan" - error_cannot_act_self: "Tidak boleh laksanakan tindakan pada fail yang anda muat naik sendiri." + error_cannot_act_self: "Tidak boleh laksanakan tindakan pada fail yang anda sendiri yang telah dimuat naik." attribute_help_texts: - note_public: "Sebarang teks dan imej yang anda tambah ke medan ini boleh dilihat secara umum oleh semua pengguna yang log masuk!" - text_overview: "Dalam paparan ini, anda boleh mencipta teks bantuan tersuai untuk paparan atribut. Apabila ditetapkan, teks ini boleh ditunjukkan dengan mengklik ikon bantuan yang bersebelahan dengan atribut yang dimilikinya." + note_public: "Sebarang teks dan imej yang anda tambah ke ruangan ini boleh dilihat secara umum oleh semua pengguna yang log masuk!" + text_overview: "Dalam paparan ini, anda boleh mencipta teks bantuan tersuai untuk paparan atribut. Apabila ditetapkan, teks ini boleh ditunjukkan dengan mengklik ikon bantuan bersebelahan dengan atribut yang dimilikinya." label_plural: "Atribut teks bantuan" - show_preview: "Teks pratonton" + show_preview: "Teks previu" add_new: "Tambah teks bantuan" edit: "Edit teks bantuan untuk %{attribute_caption}" background_jobs: @@ -111,23 +111,23 @@ ms: cancelled_due_to: "Pekerjaan dibatalkan disebabkan ralat: %{message}" ldap_auth_sources: ldap_error: "Ralat-LDAP: %{error_message}" - ldap_auth_failed: "Tidak boleh mengesahkan di Pelayan-LDAP." - sync_failed: "Gagal untuk selaraskan daripada LDAP: %{message}." + ldap_auth_failed: "Tidak boleh mengesahkan di LDAP-Server." + sync_failed: "Gagal untuk diselaraskan daripada LDAP: %{message}." back_to_index: "Klik di sini untuk kembali ke senarai sambungan." technical_warning_html: | Borang LDAP ini memerlukan pengetahuan teknikal LDAP anda/ Pemasangan Direktori Aktif.
- Sila lawati dokumentasi kami untuk arahan lebih terperinci. + Sila kunjungi dokumentasi kami untuk arahan lebih terperinci. attribute_texts: name: Nama arbitrari sambungan LDAP host: Nama hos LDAP atau alamat IP login_map: Kunci atribut dalam LDAP yang digunakan untuk kenal pasti login pengguna yang unik. Biasanya, ini akan menjadi `uid` atau `samAccountName`. - generic_map: Kunci atribut LDAP yang telah dipetakan ke atribut OpenProject `%{attribute}` - admin_map_html: "Pilihan: kunci atribut LDAP yangjika hadiryang menandakan pengguna OpenProject sebagai pentadbir. Biarkan kosong jika ragu-ragu." + generic_map: Kunci atribut LDAP yang telah dipetakan ke atribut `%{attribute}` OpenProject + admin_map_html: "Pilihan: kunci atribut LDAP yangjika hadir menandakan pengguna OpenProject sebagai pentadbir. Biarkan kosong jika ragu-ragu." system_user_dn_html: | Masukkan DN sistem pengguna yang digunakan untuk akses baca sahaja.
- Contoh: uid=openproject,ou=system,dc=example,dc=com + Contoh: uid=openproject,ou=sistem,dc=contoh,dc=com system_user_password: Masukkan kata laluan ikatan bagi pengguna sistem base_dn: | Masukkan pangkalan DN dari peranti LDAP yang anda mahukan di OpenProject untuk mencari pengguna dan kumpulan. @@ -135,9 +135,9 @@ ms: Contoh: ou=pengguna,dc=contoh,dc=com filter_string: | Tambah penyaring RFC4515 pilihan untuk digunakan pada hasil yang dikembalikan bagi pengguna yang disaring dalam LDAP. - Ini boleh digunakan untuk mengehadkan set pengguna yang dijumpai oleh OpenProject untuk pengesahan dan penyelarasan kumpulan. + Ini boleh digunakan untuk mengehadkan set pengguna yang dijumpai oleh OpenProject untuk pengesahan dan sinkronisasi kumpulan. filter_string_concat: | - OpenProject akan sentiasa menyaring atribut log masuk yang disediakan oleh pengguna untuk mengenalpasti rekod. Jika anda menyediakan penyaringan di sini, ia akan digabungkan ke satu AND. Secara default, tangkap semua (objectClass=*) akan digunakan sebagai penyaring. + OpenProject akan sentiasa menyaring atribut log masuk yang disediakan oleh pengguna untuk mengenalpasti rekod. Jika anda menyediakan penyaringan di sini, ia akan digabungkan ke satu AND. Secara default, tangkap semua (objekKelas=*) akan digunakan sebagai penyaring. onthefly_register: | Jika anda tanda kotak ini, OpenProject akan mencipta pengguna baharu secara automatik dari entri LDAP mereka apabila mereka pertama kali mengesahkan dengan OpenProject. @@ -146,33 +146,33 @@ ms: encryption_details: "pilihan-pilihan LDAPS/STARTTTLS" system_account: "Akaun sistem" system_account_legend: | - OpenProject memerlukan akses baca-sahaja melalui akaun sistem untuk carian pengguna dan kumpulan dalam pokok LDAP anda. - Sila tetapkan kredensial ikatan bagi pengguna sistem tersebut dalam bahagian yang berikutnya. + OpenProject memerlukan akses baca-sahaja melalui akaun sistem untuk pencarian pengguna dan kumpulan dalam pokok LDAP anda. + Sila tetapkan kelayakan ikatan bagi pengguna sistem tersebut dalam bahagian yang berikutnya. ldap_details: "Butiran LDAP" user_settings: "Pemetaan atribut" user_settings_legend: | - Medan yang berikut adalah berkaitan tentang bagaimana pengguna dicipta dalam OpenProject dari kemasukan LDAP dan + Ruang yang berikut adalah berkaitan tentang bagaimana pengguna dicipta dalam OpenProject dari entri LDAP dan atribut LDAP apa yang digunakan untuk menentukan atribut pengguna OpenProject (pemetaan atribut) tls_mode: plain: "tiada" simple_tls: "LDAPS" start_tls: "STARTTTLS" - plain_description: "Buka sambungan tidak sulit ke server LDAP. Tidak disyorkan untuk produksi." + plain_description: "Buka sambungan tidak sulit ke server LDAP. Tidak disarankan untuk produksi." simple_tls_description: "Gunakan LDAPS. Perlukan port yang berasingan pada server LDAP. Mod ini selalu lapuk, kami sarankan untuk gunakan STARTTLS jika boleh." start_tls_description: "Hantar perintah STARTTLS selepas sambungkan ke port LDAP standard. Disarankan untuk sambungan yang disulitkan." section_more_info_link_html: > - Bahagian ini berkaitan dengan keselamatan sambungan sumber pengesahan LDAP ini. Untuk maklumat lebih lanjut, lawat dokumentasi Net::LDAP berikut. + Bahagian ini berkaitan dengan keselamatan sambungan sumber pengesahan LDAP ini. Untuk maklumat lanjut, kunjungi Net::dokumentasi LDAP berikut. tls_options: verify_peer: "Sahkan sijil SSL" verify_peer_description_html: > - Membolehkan verifikasi SSL ketat bagi rantaian dipercayai sijil.
Amaran: Nyahtandakan pilihan ini nyahaktifkan verifikasi SSL bagi sijil server LDAP. Ini mendedahkan hubungan anda kepada Man dalam serangan Tengah. + Membolehkan verifikasi SSL ketat bagi rantaian dipercayai sijil.
Amaran: Nyahtandakan pilihan ini untuk nyahaktifkan verifikasi SSL bagi sijil server LDAP. Ini mendedahkan hubungan anda kepada Orang dalam serangan Tengah. tls_certificate_description: "Jika sijil server LDAP bukan lagi di sumber yang dipercayai di sistem ini, anda boleh tambahkannya secara manual di sini. Masukkan sijil rentetan PEM X509." forums: show: - no_results_title_text: Tiada pos sekarang ini untuk forum. + no_results_title_text: Tiada pos untuk forum buat masa ini. colors: index: - no_results_title_text: Tiada warna sekarang ini. + no_results_title_text: Tiada warna buat masa ini. no_results_content_text: Cipta warna baharu label_new_color: "Warna baharu" new: @@ -185,14 +185,14 @@ ms: label_no_color: "Tiada warna" label_properties: "Ciri-ciri" label_really_delete_color: > - Adakah anda pasti, anda ingin membuang warna berikut? Jenis-jenis yang menggunakan warna ini tidak akan dipadam. + Adakah anda pasti, anda ingin membuang warna berikut? Jenis-jenis yang menggunakan warna ini tidak akan dipadam. custom_actions: actions: name: "Tindakan" add: "Tambah tindakan" assigned_to: executing_user_value: "(Tugaskan ke pengguna yang melaksana)" - conditions: "Syarat" + conditions: "Syarat-syarat" plural: "Tindakan tersuai" new: "Tindakan tersuai baharu" edit: "Edit tindakan tersuai %{name}" @@ -202,24 +202,24 @@ ms: description: "Tindakan tersuai adalah pintasan satu klik ke satu set tindakan yang telah ditetapkan yang anda boleh sediakan untuk pakej kerja tertentu berdasarkan status, peranan, jenis atau projek." custom_fields: text_add_new_custom_field: > - Untuk menambah medan tersuai ke projek, anda perlu menciptanya dahulu sebelum anda boleh menambahnya ke projek ini. + Untuk menambah ruang tersuai ke projek, anda perlu menciptanya terlebih dahulu sebelum anda boleh menambahnya ke projek ini. is_enabled_globally: "adalah diaktifkan secara global" enabled_in_project: "Diaktifkan dalam projek" contained_in_type: "Terkandung dalam jenis" - confirm_destroy_option: "Menghapuskan satu pilihan akan menghapuskan semua kejadian yang berkaitan dengannya (cth. dalam pakej kerja). Adakah anda pasti anda ingin menghapuskannya?" + confirm_destroy_option: "Padamkan satu pilihan akan memadamkan semua kejadian yang berkaitan dengannya (cth. dalam pakej kerja). Adakah anda pasti anda ingin memadamkannya?" reorder_alphabetical: "Susun semula nilai mengikut abjad" reorder_confirmation: "Amaran: Susunan semasa nilai yang sedia ada akan hilang. Teruskan?" instructions: - is_required: "Tandakan ruang yang tersuai seperti yang diperlukan. Ini akan buatkan ia wajib untuk isikan ruang tersebut apabila membuat sumber yang baru atau kemas kini sumber sedia ada." - is_for_all: "Tandakan ruang tersuai sebagai tersedia di semua projek baru dan sedia ada." + is_required: "Tandakan ruang yang tersuai seperti yang diperlukan. Ini akan buatkan ia wajib untuk isikan ruang tersebut apabila membuat sumber yang baharu atau kemas kini sumber sedia ada." + is_for_all: "Tandakan ruang tersuai sebagai tersedia di semua projek baharu dan sedia ada." searchable: "Sertakan nilai-nilai ruangan apabila gunakan fungsi pencarian global." - editable: "Benarkan ruangan tersebut boleh disunting oleh pengguna sendiri." - visible: "Buat ruangan boleh dilihat ke semua penngguna (bukan pentadbir) dalam gambaran kesuluruhan projek dan dipaparkan di widget butiran projek di Gambaran Keseluruhan Projek." + editable: "Benarkan ruangan tersebut boleh diedit oleh pengguna sendiri." + visible: "Buat ruangan boleh dilihat ke semua pengguna (bukan pentadbir) dalam gambaran kesuluruhan projek dan dipaparkan di widget butiran projek di Gambaran Keseluruhan Projek." is_filter: > Benarkan ruang tersuai untuk digunakan di penyaring paparan pakej kerja. Perhatikan bahawa hanya "Untuk semua projek" yang dipilih, ruang tersuai akan dipaparkan di paparan global. tab: - no_results_title_text: Tiada medan tersuai sekarang ini. - no_results_content_text: Cipta medan tersuai baharu + no_results_title_text: Tiada ruangan tersuai pada masa ini. + no_results_content_text: Cipta ruangan tersuai baharu concatenation: single: "atau" global_search: @@ -254,7 +254,7 @@ ms: failed: "Pembuangan projek %{name} telah gagal" failed_text: "Permintaan untuk buang projek %{name} telah gagal. Projek telah diarkibkan." completed: "Penghapusan projek %{name} selesai" - completed_text: "Permintaan untuk menghapuskan projek %{name} telah diselesaikan." + completed_text: "Permintaan untuk menghapuskan projek %{name} selesai." completed_text_children: "Tambahan pula, subprojek berikut telah dipadam:" index: open_as_gantt: "Buka sebagai paparan Gantt" @@ -263,34 +263,35 @@ ms: lists: active: "Projek yang aktif" my: "Projek saya" + favored: "Projek kegemaran" archived: "Projek yang diarkibkan" my_private: "Senarai projek peribadi saya" new: placeholder: "Senarai projek baharu" delete_modal: - title: "Hapus senarai projek" - text: "Tindakan ini tidak akan menghapuskan sebarang projek yang terkandung di dalam senarai. Adakah anda pasti untuk menghapuskan senarai projek ini?" + title: "Padamkan senarai projek" + text: "Tindakan ini tidak akan memadamkan sebarang projek yang terkandung di dalam senarai. Adakah anda pasti untuk memadamkan senarai projek ini?" settings: - change_identifier: Tukar identifier + change_identifier: Tukar pengecam activities: no_results_title_text: Tiada aktiviti yang tersedia buat masa ini. forums: - no_results_title_text: Saat ini tiada forum untuk projek ini. + no_results_title_text: Tiada forum untuk projek ini buat masa ini. no_results_content_text: Cipta forum baharu categories: no_results_title_text: Tiada kategori pakej kerja buat masa ini. no_results_content_text: Cipta kategori pakej kerja baharu custom_fields: - no_results_title_text: Tiada medan tersuai tersedia buat masa ini. + no_results_title_text: Tiada ruangan tersuai tersedia buat masa ini. project_custom_fields: header: title: "Atribut projek" - description: "Atribut projek berikut akan dipaparkan pada laman gambaran keseluruhan projek anda di bawah bahagian masing-masing. Anda boleh mengaktifkan atau menyahaktifkan atribut individu. Atribut dan bahagian projek ditakrifkan dalam seting pentadbiran oleh pentadbir yang bertanggungjawab." + description: "Atribut projek berikut akan dipaparkan pada laman gambaran keseluruhan projek anda di bawah bahagian masing-masing. Anda boleh mengaktifkan atau menyahaktifkan atribut individu. Atribut dan bahagian projek ditakrifkan dalam tetapan pentadbiran oleh pentadbir yang bertanggungjawab." filter: label: "Cari atribut projek" actions: label_enable_single: "Aktif dalam projek ini, klik untuk nyahaktifkan" - label_disable_single: "Tidakvaktif dalam projek ini, klik untuk aktifkan" + label_disable_single: "Tidak aktif dalam projek ini, klik untuk aktifkan" label_enable_all: "Aktifkan semua" label_disable_all: "Nyahaktifkan semua" types: @@ -298,15 +299,22 @@ ms: form: enable_type_in_project: 'Aktifkan jenis "%{type}"' versions: - no_results_title_text: Saat ini tiada versi untuk projek ini. + no_results_title_text: Tiada versi untuk projek ini buat masa ini. no_results_content_text: Cipta versi baharu storage: - no_results_title_text: Tiada disk space terekod tambahan yang digunakan untuk projek ini. + no_results_title_text: Tiada ruang cakera terekod tambahan yang digunakan untuk projek ini. lists: - can_be_saved_as: "Perubahan hanya boleh disimpan dalam senarai baru." + create: + success: "Senarai yang telah dimodifikasikan telah disimpan sebagai senarai baharu." + failure: "Senarai yang dimodifikasi tidak boleh disimpan: %{errors}" + update: + success: "Senarai yang dimodifikasi telah disimpan" + failure: "Senarai yang dimodifikasi tidak boleh disimpan: %{errors}" + can_be_saved: "Senarai yang dimodifikasi:" + can_be_saved_as: "Modifikasi tersebut hanya boleh disimpan di senarai baharu:" members: index: - no_results_title_text: Saat ini tiada ahli yang menjadi sebahagian daripada projek ini. + no_results_title_text: Tiada ahli yang menjadi sebahagian daripada projek ini buat masa ini. no_results_content_text: Tambah ahli ke projek invite_by_mail: "Hantar jemputan ke %{mail}" send_invite_to: "Hantar jemputan ke" @@ -321,6 +329,7 @@ ms: project_roles: "Peranan projek" wp_shares: "Kongsian pakej kerja" groups: "Kumpulan" + no_modify_on_shared: "Anda buat masa ini tidak boleh mengubahsuai atau mengeluarkan keahlian yang dikongsi melalui laman ahli. Sebaliknya, guna modal perkongsian." delete_member_dialog: title: "Keluarkan ahli" will_remove_the_users_role: "Ini akan membatalkan peranan pengguna dari projek ini." @@ -337,8 +346,8 @@ ms: other: "Juga, %{shared_work_packages_link} telah dikongsi dengan pengguna ini." remove_project_membership_or_work_package_shares_too: "Adakah anda ingin mengeluarkan pengguna ini sebagai ahli projek secara langsung (dan kekalkan perkongsian) atau keluarkan perkongsian pakej kerja juga?" will_remove_all_user_access_priveleges: "Mengeluarkan ahli ini akan membatalkan semua kebenaran akses pengguna dari projek. Pengguna tersebut akan masih wujud sebagai sebahagian daripada kejadian." - will_remove_all_group_access_priveleges: "Mengeluarkan ahli ini akan membatalkan semua kebenaran akses kumpulan dari projek. Kumpulan tersebut akan masih wujud sebagai sebahagian daripada contoh." - cannot_delete_inherited_membership: "Anda tidak boleh mengeluarkan ahli ini kerana mereka adalah anggota dalam satu kumpulan yang juga merupakan ahli dalam projek ini." + will_remove_all_group_access_priveleges: "Mengeluarkan ahli ini akan membatalkan semua kebenaran akses kumpulan dari projek. Kumpulan tersebut akan masih wujud sebagai sebahagian daripada kejadian." + cannot_delete_inherited_membership: "Anda tidak boleh mengeluarkan ahli ini kerana mereka tergolong dalam satu kumpulan yang juga merupakan ahli dalam projek ini." cannot_delete_inherited_membership_note_admin_html: "Anda boleh sama ada mengeluarkan kumpulan tersebut sebagai ahli projek atau ahli tertentu ini dari kumpulan tersebut dalam %{administration_settings_link}." cannot_delete_inherited_membership_note_non_admin: "Anda boleh sama ada mengeluarkan kumpulan tersebut sebagai ahli projek atau hubungi pentadbir anda untuk mengeluarkan ahli tertentu ini dari kumpulan tersebut." delete_work_package_shares_dialog: @@ -360,15 +369,15 @@ ms: my: access_token: failed_to_reset_token: "Gagal set semula token akses: %{error}" - notice_reset_token: "Token %{type} yang baharu telah dihasilkan. Token akses anda adalah:" - token_value_warning: "Nota: Ini adalah satu-satunya masa anda akan melihat token ini, pastikan untuk menyalinnya sekarang." - no_results_title_text: Tiada token akses tersedia sekarang ini. + notice_reset_token: "Token %{type} yang baharu telah dijanakan. Token akses anda adalah:" + token_value_warning: "Perhatian: Ini adalah satu-satunya masa anda akan melihat token ini, pastikan untuk menyalinnya sekarang." + no_results_title_text: Tiada token akses tersedia buat masa ini. notice_api_token_revoked: "Token API telah dihapuskan. Untuk mencipta token baharu sila gunakan pautan di bahagian API." notice_rss_token_revoked: "Token RSS telah dihapuskan. Untuk mencipta token baharu sila gunakan pautan di bahagian RSS." notice_ical_token_revoked: 'Token iCalendar "%{token_name}" untuk kalendar "%{calendar_name}" projek "%{project_name}" telah dibatalkan. URL iCalendar dengan token ini sudah tidak sah.' news: index: - no_results_title_text: Tiada berita untuk dipaparkan pada masa ini. + no_results_title_text: Tiada berita untuk dipaparkan buat masa ini. no_results_content_text: Tambah item berita users: autologins: @@ -381,10 +390,10 @@ ms: device: "Peranti / OS" unknown_browser: "pelayar yang tidak diketahui" unknown_os: "sistem operasi yang tidak diketahui" - current: "Sesi sekarang" + current: "Sesi kini" title: "Pengurusan sesi" instructions: "Ini adalah senarai semua peranti yang log masuk ke dalam akaun anda. Batalkan sesi yang anda tidak kenali atau tidak lagi mempunyai akses kepadanya." - may_not_delete_current: "Anda tidak boleh menghapuskan sesi semasa anda." + may_not_delete_current: "Anda tidak boleh memadamkan sesi semasa anda." groups: member_in_these_groups: "Pengguna ini adalah ahli untuk kumpulan berikut pada masa ini:" no_results_title_text: Pengguna ini bukan ahli untuk mana-mana kumpulan pada masa ini. @@ -394,23 +403,23 @@ ms: text: "Teks" placeholder_users: right_to_manage_members_missing: > - Anda tidak dibenarkan untuk membuang pengguna sementara. Anda tidak mempunyai hak untuk mengurus ahli untuk semua projek yang pengguna sementara merupakan ahli kepada. - delete_tooltip: "Buang pengguna sementara" + Anda tidak dibenarkan untuk membuang pengguna placeholder. Anda tidak mempunyai hak untuk mengurus ahli untuk semua projek yang pengguna placeholder adalah ahli. + delete_tooltip: "Buang pengguna placeholder" deletion_info: - heading: "Buang pengguna sementara %{name}" + heading: "Buang pengguna placeholder %{name}" data_consequences: > - Semua kejadian pengguna gantian (cth., sebagai penerima tugasan, bertanggungjawab atau nilai pengguna lain) akan ditugaskan semula kepada akaun yang dipanggil "Pengguna yang dipadam". Kerana data setiap akaun yang dipadam ditugaskan semula ke akaun ini, tidak akan dapat untuk membezakan data yang dicipta oleh pengguna daripada data akaun lain yang dipadam. + Semua kejadian pengguna placeholder (cth., sebagai penerima tugasan, bertanggungjawab atau nilai pengguna lain) akan ditugaskan semula kepada akaun yang dipanggil "Pengguna yang dipadam". Kerana data setiap akaun yang dipadam ditugaskan semula ke akaun ini, tidak akan dapat untuk membezakan data yang dicipta oleh pengguna daripada data akaun lain yang dipadam. irreversible: "Tindakan ini tidak dapat dipulihkan" confirmation: "Masukkan nama pengguna sementara %{name} untuk mengesahkan pembuangan." upsale: - title: Pengguna gantian + title: Pengguna sementara description: > - Pengguna sementara ialah cara untuk memperuntukkan pakej kerja kepada pengguna yang bukan sebahagian daripada projek anda. Ianya berguna dalam pelbagai senario; contohnya, jika anda perlu menjejaki tugas untuk sumber yang masih belum dinamakan atau disediakan, atau jika anda tidak ingin memberikan seseorang akses ke OpenProject, tetapi masih hendak menjejaki tugas yang telah diperuntukkan ke mereka. + Placeholder ialah satu cara untuk memperuntukkan pakej kerja kepada pengguna yang bukan sebahagian daripada projek anda. Ianya berguna dalam pelbagai senario; contohnya, jika anda perlu menjejaki tugas untuk sumber yang masih belum dinamakan atau disediakan, atau jika anda tidak ingin memberikan seseorang akses ke OpenProject, tetapi masih hendak menjejaki tugas yang telah diperuntukkan ke mereka. prioritiies: edit: priority_color_text: | Klik untuk menugaskan atau menukar warna untuk keutamaan ini. - Ia boleh digunakan untuk menonjolkan pakej kerja dalam jadual ini. + Ia boleh digunakan untuk menyoroti pakej kerja dalam jadual ini. reportings: index: no_results_title_text: Tiada laporan status buat masa ini. @@ -421,10 +430,10 @@ ms: Tandakan pilihan ini untuk menanda pakej kerja dengan status ini sebagai baca-sahaja. Tiada atribut yang boleh diubah dengan pengecualian status.
- Nota: Nilai yang diwarisi (cth, dari anak-anak atau saudara) masih akan digunakan. + Perhatian: Nilai yang diwarisi (cth, dari anak-anak atau saudara) masih akan digunakan. status_color_text: | - Klik untuk menugaskan atau menukar warna untuk status ini. - Ditunjuk pada butang status dan boleh digunakan untuk menyerlahkan pakej kerja dalam jadual. + Klik untuk menugaskan atau menukar warna status ini. + Ia ditunjukkan pada butang status dan boleh digunakan untuk menyoroti pakej kerja dalam jadual. index: no_results_title_text: Tiada status pakej kerja buat masa ini. no_results_content_text: Tambah status baharu @@ -436,21 +445,21 @@ ms: no_results_title_text: Tiada jenis buat masa ini. no_results_content_text: Cipta jenis baharu edit: - settings: "Seting" + settings: "Tetapan" form_configuration: "Konfigurasi borang" more_info_text_html: > - Edisi Enterprise membenarkan anda untuk menyuaikan borang konfigurasi dengan segala jenis penambahan:
  • Tambah kumpulan atribut baru
  • Namakan semula atribut kumpulan
  • Tambah jadual pakej kerja yang berkaitan
+ Edisi Enterprise membenarkan anda untuk menyuaikan borang konfigurasi dengan segala jenis penambahan:
  • Tambah kumpulan atribut baharu
  • Namakan semula atribut kumpulan
  • Tambah jadual pakej kerja yang berkaitan
projects: "Projek" enabled_projects: "Projek yang diaktifkan" edit_query: "Edit jadual" - query_group_placeholder: "Berikan jadual satu nama" + query_group_placeholder: "Berikan jadual berikut nama" reset: "Set semula ke default" type_color_text: | Warna yang dipilih membezakan jenis-jenis yang berbeza - dalam carta Gantt atau jadual pakej kerja. Oleh itu, disyorkan untuk menggunakan warna yang kuat. + dalam carta Gantt atau jadual pakej kerja. Oleh itu, ianya disarankan untuk menggunakan warna yang kuat. versions: overview: - work_packages_in_archived_projects: "Versi ini adalah dikongsi dengan projek yang diarkibkan yang masih mempunyai pakej kerja ditugaskan ke versi ini. Ini dikira, tetapi tidak akan muncul dalam paparan yang dipautkan." + work_packages_in_archived_projects: "Versi ini dikongsi dengan projek yang diarkibkan yang masih mempunyai pakej kerja ditugaskan ke versi ini. Ini dikira, tetapi tidak akan muncul dalam paparan yang dipautkan." no_results_title_text: Tiada pakej kerja yang ditugaskan pada versi ini buat masa ini. wiki: page_not_editable_index: Halaman yang diminta belum (lagi) wujud. Anda telah diubah hala ke indeks semua halaman wiki. @@ -463,33 +472,33 @@ ms: no_results_title_text: Tiada aliran kerja buat sekarang ini. work_packages: x_descendants: - other: "Satu keturunan pakej kerja" + other: "%{count} keturunan pakej kerja" bulk: copy_failed: "Pakej kerja ini tidak boleh disalin." - move_failed: "Pakej kerja tidak boleh digerakkan." + move_failed: "Pakej kerja tidak boleh dialihkan." could_not_be_saved: "Pakej kerja yang berikut tidak dapat disimpan:" - none_could_be_saved: "Tiada pakej kerja %{total} yang boleh dikemaskini." - x_out_of_y_could_be_saved: "%{failing} daripada %{total} pakej kerja tidak dapat dikemaskini manakala %{success} boleh." - selected_because_descendants: "Semasa %{selected} pakej kerja dipilih, sebanyak %{total} pakej kerja terjejas yang termasuk keturunan." + none_could_be_saved: "Tiada pakej kerja %{total} yang boleh dikemas kini." + x_out_of_y_could_be_saved: "%{failing} daripada %{total} pakej kerja tidak dapat dikemas kini manakala %{success} boleh." + selected_because_descendants: "Semasa %{selected} pakej kerja dipilih, sebanyak %{total} pakej kerja terjejas, termasuk keturunannya." descendant: "keturunan yang dipilih" move: no_common_statuses_exists: "Tiada status tersedia untuk semua pakej kerja yang terpilih. Status mereka tidak dapat diubah." unsupported_for_multiple_projects: "Pindahan/salinan secara pukal tidak disokong untuk pakej kerja dari projek yang berbeza" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Aliran kerja hilang untuk perkongsian pakej kerja" - message: "Tiada aliran kerja yang dikonfigurasi untuk peranan 'Penyunting Pakej Kerja'. Tanpa aliran kerja, perkongsian dengan pengguna tidak boleh mengubah status pakej kerja tersebut. Aliran kerja boleh disalin. Pilih jenis sumber (cth. 'Tugasan') dan peranan sumber (cth. 'Ahli'). Kemudian pilih jenis sasaran. Sebagai permulaan, anda boleh pilih semua jenis sebagai sasaran. Akhirnya, pilih peranan 'Penyunting Pakej Kerja' sebagai sasaran dan tekan 'Salin'. Setelah mencipta tetapan ini, selaraskan semula aliran kerja sebagaimana yang anda lakukan untuk setiap peranan yang lain." - link_message: "Konfigurasi aliran kerja dalam pentadbiran." + message: "Tiada aliran kerja yang dikonfigurasikan untuk peranan 'Pengedit Pakej Kerja'. Tanpa aliran kerja, yang dikongsikan dengan pengguna tidak boleh mengubah status pakej kerja. Aliran kerja boleh disalin. Pilih jenis sumber (cth. 'Tugasan') dan peranan sumber (cth. 'Ahli'). Kemudian pilih jenis sasaran. Untuk bermula, anda boleh memilih semua jenis sebagai sasaran. Akhirnya, pilih peranan 'Pengedit Pakej Kerja' sebagai sasaran dan tekan 'Salin'. Setelah mencipta default, selaraskan aliran kerja sebagaimana anda lakukan untuk peranan lain." + link_message: "Konfigurasikan aliran kerja dalam pentadbiran." summary: reports: category: - no_results_title_text: Tiada kategori tersedia sekarang ini. + no_results_title_text: Tiada kategori tersedia buat masa ini. assigned_to: - no_results_title_text: Saat ini tiada ahli yang menjadi sebahagian daripada projek ini. + no_results_title_text: Tiada ahli yang menjadi sebahagian daripada projek ini buat masa ini. responsible: - no_results_title_text: Saat ini tiada ahli yang menjadi sebahagian daripada projek ini. + no_results_title_text: Tiada ahli yang menjadi sebahagian daripada projek ini buat masa ini. author: - no_results_title_text: Saat ini tiada ahli yang menjadi sebahagian daripada projek ini. + no_results_title_text: Tiada ahli yang menjadi sebahagian daripada projek ini buat masa ini. priority: no_results_title_text: Tiada keutamaan yang tersedia buat masa ini. type: @@ -503,26 +512,26 @@ ms: deletion_pending: "Akaun telah dikunci dan dijadualkan untuk pemadaman. Ambil perhatian bahawa proses ini berlaku di latar belakang. Ia mungkin mengambil beberapa saat sehingga pengguna dipadamkan sepenuhnya." deletion_info: data_consequences: - other: 'Data yang dicipta oleh pengguna (cth. e-mel, keutamaan, pakej kerja, entri wiki) akan dipadam sebanyak mungkin. Namun, perlu diingat bahawa data seperti pakej kerja dan entri wiki tidak boleh dipadam tanpa mengganggu kerja pengguna lain. Data tersebut kemudian ditugaskan semula ke akaun dipanggil "Pengguna yang dipadam". Kerana data setiap akaun yang dipadam ditugaskan semula ke akaun ini, tidak akan dapat untuk membezakan data yang dicipta oleh pengguna daripada data akaun lain yang dipadam.' - self: 'Data yang anda cipta (cth. e-mel, keutamaan, pakej kerja, entri wiki) akan dipadam sebanyak mungkin. Namun, perlu diingat bahawa data seperti pakej kerja dan entri wiki tidak boleh dipadam tanpa mengganggu kerja pengguna lain. Data tersebut kemudian ditugaskan semula ke akaun dipanggil "Pengguna yang dipadam". Kerana data setiap akaun yang dipadam ditugaskan semula ke akaun ini, tidak akan dapat untuk membezakan data anda cipta daripada data akaun lain yang dipadam.' - heading: "Buang akaun %{name}" + other: 'Data yang dicipta oleh pengguna (cth. e-mel, keutamaan, pakej kerja, entri wiki) akan dipadam sebanyak mungkin. Namun, perlu diingat bahawa data seperti pakej kerja dan entri wiki tidak boleh dipadam tanpa mengganggu kerja pengguna lain. Data tersebut kemudian ditugaskan semula ke akaun dipanggil "Pengguna yang dipadam", kerana data setiap akaun yang dipadam, ditugaskan semula ke akaun ini tidak akan dapat untuk membezakan data yang dicipta oleh pengguna daripada data akaun lain yang dipadam.' + self: 'Data yang anda cipta (cth. e-mel, keutamaan, pakej kerja, entri wiki) akan dipadam sebanyak mungkin. Namun, perlu diingat bahawa data seperti pakej kerja dan entri wiki tidak boleh dipadam tanpa mengganggu kerja pengguna lain. Data tersebut kemudian ditugaskan semula ke akaun dipanggil "Pengguna yang dipadam", kerana data setiap akaun yang dipadam, ditugaskan semula ke akaun ini tidak akan dapat untuk membezakan data anda cipta daripada data akaun lain yang dipadam.' + heading: "Padam akaun %{name}" info: - other: "Menghapuskan akaun pengguna adalah tindakan yang tidak dapat dipulihkan." - self: "Menghapuskan akaun pengguna anda adalah tindakan yang tidak dapat dipulihkan." + other: "Memadamkan akaun pengguna adalah tindakan yang tidak dapat dipulihkan." + self: "Memadamkan akaun pengguna anda adalah tindakan yang tidak dapat dipulihkan." login_consequences: - other: "Akaun ini akan dihapuskan dari sistem. Oleh itu, pengguna ini tidak akan lagi dapat log masuk dengan kredensial semasa. Mereka boleh memilih untuk menjadi pengguna aplikasi ini semula dengan cara yang diberikan oleh aplikasi ini." - self: "Akaun anda akan dihapuskan dari sistem. Oleh itu, anda tidak akan lagi dapat log masuk dengan kredensial semasa anda. Jika anda memilih untuk menjadi pengguna aplikasi ini semula, anda boleh lakukannya dengan cara yang diberikan oleh aplikasi ini." + other: "Akaun ini akan dipadamkan dari sistem. Oleh itu, pengguna ini tidak akan lagi dapat log masuk dengan kelayakan semasa. Mereka boleh memilih untuk menjadi pengguna aplikasi ini semula dengan cara yang diberikan oleh aplikasi ini." + self: "Akaun anda akan dipadamkan dari sistem. Oleh itu, anda tidak akan lagi dapat log masuk dengan kelayakan semasa anda. Jika anda memilih untuk menjadi pengguna aplikasi ini semula, anda boleh lakukannya dengan cara yang diberikan oleh aplikasi ini." login_verification: - other: "Masukkan %{name} log masuk untuk mengesahkan penghapusan. Setelah dihantar, anda akan diminta untuk mengesahkan kata laluan anda." - self: "Masukkan %{name} log masuk anda untuk mengesahkan penghapusan. Setelah dihantar, anda akan diminta untuk mengesahkan kata laluan anda." + other: "Masukkan %{name} log masuk untuk mengesahkan pemadaman. Setelah dihantar, anda akan diminta untuk mengesahkan kata laluan anda." + self: "Masukkan %{name} log masuk anda untuk mengesahkan pemadaman. Setelah dihantar, anda akan diminta untuk mengesahkan kata laluan anda." error_inactive_activation_by_mail: > - Akaun anda masih belum diaktifkan. Untuk pengaktifan akaun anda, klik pautan yang telah dihantar melalui e-mel kepada anda. + Akaun anda masih belum diaktifkan. Untuk pengaktifan akaun anda, klik pautan yang telah dihantar melalui e-mel anda. error_inactive_manual_activation: > Akaun anda masih belum diaktifkan. Sila tunggu pentadbir untuk mengaktifkan akaun anda. error_self_registration_disabled: > Pendaftaran pengguna tidak diaktifkan pada sistem ini. Sila minta pentadbir untuk mencipta satu akaun untuk anda. error_self_registration_limited_provider: > - Pendaftaran pengguna terhad pada penyediaan log masuk satu kali '%{name}'. Sila bertanya kepada pentadbir untuk mengaktifkan akaun tersebut untuk anda atau tukar had pendaftaran sendiri untuk penyediaan ini. + Pendaftaran pengguna terhad pada penyediaan log masuk satu kali '%{name}'. Sila meminta pentadbir untuk mengaktifkan akaun tersebut untuk anda atau tukar had pendaftaran sendiri untuk penyediaan ini. login_with_auth_provider: "atau daftar masuk dengan akaun sedia ada anda" signup_with_auth_provider: "atau daftar menggunakan" auth_source_login: Sila log masuk sebagai %{login} untuk mengaktifkan akaun anda. @@ -564,9 +573,9 @@ ms: custom_field: allow_non_open_versions: "Benarkan versi tidak terbuka" default_value: "Nilai default" - editable: "Boleh disunting" + editable: "Boleh diedit" field_format: "Format" - is_filter: "Digunakan sebagai saringan" + is_filter: "Digunakan sebagai penyaring" is_required: "Diperlukan" max_length: "Panjang maksima" min_length: "Panjang minimum" @@ -580,15 +589,15 @@ ms: enterprise_token: starts_at: "Sah sehingga" subscriber: "Pelanggan" - encoded_token: "Token sokongan enterprise" - active_user_count_restriction: "Maksimum pengguna aktif" + encoded_token: "Token sokongan Enterprise" + active_user_count_restriction: "Pengguna aktif maksimum" grids/grid: page: "Halaman" row_count: "Bilangan baris" column_count: "Bilangan kolum" widgets: "Widget" oauth_client: - client: "ID pelanggan" + client: "ID klien" relation: lag: "Lag" from: "Pakej kerja" @@ -604,7 +613,7 @@ ms: active_value: true: "tidak diarkibkan" false: "diarkibkan" - identifier: "Pengenal" + identifier: "Pengecam" latest_activity_at: "Aktiviti terakhir di" parent: "Subprojek kepada" public_value: @@ -613,8 +622,8 @@ ms: false: "peribadi" queries: "Pertanyaan" status_code: "Status projek" - description: "Penerangan" - status_explanation: "Penerangan status projek" + description: "Deskripsi" + status_explanation: "Deskripsi status projek" status_codes: not_started: "Belum dimulakan" on_track: "Ikut jadual" @@ -622,15 +631,15 @@ ms: off_track: "Lari jadual" finished: "Selesai" discontinued: "Dihentikan" - templated: "Templat projek" + templated: "Projek templat" templated_value: true: "ditandakan sebagai templat" false: "tidak ditandakan sebagai templat" types: "Jenis" versions: "Versi" - work_packages: "Pakej kerja" + work_packages: "Pakej Kerja" query: - column_names: "Lajur" + column_names: "Kolum" relations_to_type_column: "Berhubung dengan %{type}" relations_of_type_column: "%{type} hubungan" group_by: "Kumpulkan hasil mengikut" @@ -647,9 +656,9 @@ ms: type: "Jenis" ongoing: "Sedang berlangsung" type: - description: "Teks default untuk keterangan" + description: "Teks default untuk deskripsi" attribute_groups: "" - is_in_roadmap: "Dipaparkan dalam roadmap secara asas" + is_in_roadmap: "Dipaparkan dalam roadmap secara default" is_default: "Diaktifkan untuk projek baru secara default" is_milestone: "Adalah pencapaian" color: "Warna" @@ -687,7 +696,7 @@ ms: custom_field_section: Bahagian work_package: begin_insertion: "Permulaan kemasukan" - begin_deletion: "Permulaan penghapusan" + begin_deletion: "Permulaan pemadaman" children: "Sub-elemen" derived_done_ratio: "Jumlah % disiapkan" derived_remaining_hours: "Jumlah kerja berbaki" @@ -695,7 +704,7 @@ ms: done_ratio: "% Lengkap" duration: "Tempoh" end_insertion: "Pengakhiran kemasukan" - end_deletion: "Pengakhiran penghapusan" + end_deletion: "Pengakhiran pemadaman" ignore_non_working_days: "Abaikan hari tidak bekerja" include_non_working_days: title: "Hari bekerja" @@ -764,16 +773,17 @@ ms: invalid_url_scheme: "adalah bukan protokol yang disokong (dibenarkan: %{allowed_schemes})." less_than_or_equal_to: "perlu kurang daripada atau sama dengan %{count}." not_available: "adalah tidak tersedia kerana konfigurasi sistem." - not_deletable: "tidak dapat dihapuskan." + not_deletable: "tidak dapat dipadamkan." not_current_user: "adalah bukan pengguna semasa." not_a_date: "bukan tarikh yang sah." not_a_datetime: "bukan tarikh masa yang sah." - not_a_number: "bukan satu nombor." + not_a_number: "bukan nombor." not_allowed: "adalah tidak sah kerana kekurangan kebenaran." not_an_integer: "bukan sebuah integer." not_an_iso_date: "bukan tarikh yang sah. Format yang diperlukan: TTTT-BB-HH." not_same_project: "tidak tergolong dalam projek yang sama." odd: "mesti ganjil." + regex_match_failed: "tidak padan dengan ungkapan biasa %{expression}." regex_invalid: "tidak dapat disahkan dengan ungkapan biasa yang berkaitan." smaller_than_or_equal_to_max_length: "perlu kurang daripada atau sama dengan panjang maksima." taken: "sudah diguna pakai." @@ -782,7 +792,7 @@ ms: type_mismatch: "adalah bukan jenis '%{type}'" type_mismatch_nested: "adalah bukan jenis '%{type}' pada laluan '%{path}'" unchangeable: "tidak boleh diubah." - unknown_property: "bukan ciri yang diketahui." + unknown_property: "bukan ciri-ciri yang diketahui." unknown_property_nested: "mempunyai laluan yang tidak diketahui '%{path}'." unremovable: "tidak dapat dikeluarkan." url_not_secure_context: > @@ -820,7 +830,7 @@ ms: doorkeeper/application: attributes: redirect_uri: - fragment_present: "tidak boleh mengandungi fragment." + fragment_present: "tidak boleh mengandungi fragmen." invalid_uri: "mestilah URI yang sah." relative_uri: "mestilah URI mutlak." secured_uri: 'tidak menyediakan "Konteks Selamat". Gunakan antara HTTPS atau alamat gelung-balik, seperti localhost.' @@ -828,7 +838,7 @@ ms: scopes: not_match_configured: "tidak sepadan dengan skop yang tersedia." enterprise_token: - unreadable: "tidak boleh dibaca. Adakah anda pasti ia adalah token sandaran?" + unreadable: "tidak boleh dibaca. Adakah anda pasti ia adalah token sokongan?" grids/grid: overlaps: "bertindih." outside: "luar daripada grid." @@ -839,7 +849,7 @@ ms: blank: "adalah wajib. Sila pilih nama." not_unique: "sudah digunakan. Sila pilih nama lain." notifications: - at_least_one_channel: "Sekurang-kurangnya satu saluran untuk menghantar notifikasi perlu ditentukan." + at_least_one_channel: "Sekurang-kurangnya satu saluran untuk menghantar pemberitahuan perlu ditentukan." attributes: read_ian: read_on_creation: "tidak boleh ditetapkan kepada benar semasa penciptaan pemberitahuan." @@ -857,9 +867,9 @@ ms: parse_schema_filter_params_service: attributes: base: - unsupported_operator: "pengendali tersebut tidak disokong." + unsupported_operator: "Operator tersebut tidak disokong." invalid_values: "Satu nilai tidak sah." - id_filter_required: "Saringan 'id' diperlukan." + id_filter_required: "Penyaring 'id' diperlukan." project: archived_ancestor: "Projek mempunyai leluhur yang diarkibkan." foreign_wps_reference_version: "Pakej kerja dalam projek bukan keturunan versi rujukan projek atau keturunannya." @@ -874,44 +884,44 @@ ms: query: attributes: project: - error_not_found: "tidak dijumpai" + error_not_found: "tidak ditemui" public: error_unauthorized: "- Pengguna tersebut tiada kebenaran untuk mencipta paparan awam." group_by: invalid: "Tidak dapat dikumpulkan mengikut: %{value}" format: "%{message}" column_names: - invalid: "Lajur pertanyaan tidak sah: %{value}" + invalid: "Kolum pertanyaan tidak sah: %{value}" format: "%{message}" sort_criteria: - invalid: "Tidak boleh disusun mengikut lajur: %{value}" + invalid: "Tidak boleh disusun mengikut kolum: %{value}" format: "%{message}" timestamps: invalid: "Penanda masa mengandungi nilai yang tidak sah: %{values}" forbidden: "Penanda masa mengandungi nilai terlarang: %{values}" format: "%{message}" selects: - name_not_included: "Lajur 'Nama' perlu disertakan" - nonexistent: "Lajur '%{column}' tidak wujud." + name_not_included: "Kolum 'Nama' perlu disertakan" + nonexistent: "Kolum '%{column}' tidak wujud." format: "%{message}" group_by_hierarchies_exclusive: "saling eksklusif dengan kumpulan '%{group_by}'. Anda tidak boleh mengaktifkan kedua-duanya." filters: custom_fields: - inexistent: "Tiada medan tersuai untuk penapis tersebut." + inexistent: "Tiada ruangan tersuai untuk saringan tersebut." queries/filters/base: attributes: values: - inclusion: "penapis mempunyai nilai yang tidak sah." + inclusion: "penyaring mempunyai nilai yang tidak sah." format: "%{message}" relation: typed_dag: circular_dependency: "Hubungan ini mencipta sebuah lingkaran hubungan." attributes: to: - error_not_found: "pakej kerja dalam posisi `ke` tidak dapat dijumpai atau tidak kelihatan." + error_not_found: "pakej kerja dalam posisi `ke` tidak dapat ditemui atau tidak kelihatan." error_readonly: "pautan `ke` yang sedia ada tidak berubah" from: - error_not_found: "pakej kerja dalam posisi `dari` tidak dapat dijumpai atau tidak kelihatan" + error_not_found: "pakej kerja dalam posisi `dari` tidak dapat ditemui atau tidak kelihatan" error_readonly: "pautan `dari` yang sedia ada tidak berubah" repository: not_available: "Vendor SCM tidak tersedia" @@ -922,11 +932,11 @@ ms: role: attributes: permissions: - dependency_missing: "perlu juga sertakan '%{dependency}' kerana '%{permission}' dipilih." + dependency_missing: "juga perlu sertakan '%{dependency}' kerana '%{permission}' dipilih." setting: attributes: base: - working_days_are_missing: "Sekurang-kurangnya satu hari dalam seminggu perlu ditentukan sebagai hari bekerja." + working_days_are_missing: "Sekurang-kurangnya sehari dalam seminggu perlu ditentukan sebagai hari bekerja." previous_working_day_changes_unprocessed: "Perubahan terdahulu pada konfigurasi hari bekerja belum dilaksanakan lagi." time_entry: attributes: @@ -940,7 +950,7 @@ ms: full_hour: "hanya boleh dikonfigurasikan untuk dihantar pada jam penuh." notification_settings: only_one_global_setting: "Perlu ada satu sahaja tetapan pemberitahuan global." - email_alerts_global: "Seting pemberitahuan e-mel hanya boleh ditetapkan secara global." + email_alerts_global: "Tetapan pemberitahuan e-mel hanya boleh ditetapkan secara global." format: "%{message}" wrong_date: "Nilai yang salah untuk Tarikh mula, Tarikh luput, atau Terlewat." watcher: @@ -949,10 +959,10 @@ ms: not_allowed_to_view: "adalah tidak dibenarkan untuk melihat sumber ini." locked: "adalah terkunci." wiki_page: - error_conflict: "Halaman wiki telah dikemas kini oleh orang lain semasa anda sedang menyuntingnya." + error_conflict: "Halaman wiki telah dikemas kini oleh orang lain semasa anda sedang mengeditnya." attributes: slug: - undeducible: "tidak boleh simpulkan daripada tajuk tersebut '%{title}'." + undeducible: "tidak boleh disimpulkan daripada tajuk tersebut '%{title}'." work_package: is_not_a_valid_target_for_time_entries: "Pakej kerja #%{id} adalah sasaran yang tidak sah untuk penugasan semula kemasukan waktu." attributes: @@ -999,8 +1009,8 @@ ms: attribute_groups: attribute_unknown: "Atribut pakej kerja tidak sah digunakan." attribute_unknown_name: "Atribut pakej kerja tidak sah digunakan: %{attribute}" - duplicate_group: "Nama kumpulan '%{group}' digunakan lebih dari sekali. Nama kumpulan mesti unik." - query_invalid: "Pencarian yang ditekankan '%{group}' tidak sah: %{details}" + duplicate_group: "Nama kumpulan '%{group}' digunakan lebih dari sekali. Nama kumpulan mestilah unik." + query_invalid: "Pencarian yang ditetapkan '%{group}' tidak sah: %{details}" group_without_name: "Kumpulan tanpa nama tidak dibenarkan." user: attributes: @@ -1017,16 +1027,16 @@ ms: numeric: "angka (cth. '1')" special: "istimewa (cth. '%')" reused: - other: "telah digunakan sebelum ini. SIla pilih yang berbeza daripada yang terakhir." + other: "telah digunakan sebelum ini. SIla pilih yang berbeza daripada yang %{count} terakhir anda." match: confirm: "Sahkan kata laluan baharu." - description: "'Pengesahan kata laluan' perlu sepadan dengan input dalam medan 'Kata laluan baharu'." + description: "'Pengesahan kata laluan' perlu sepadan dengan input dalam ruangan 'Kata laluan baharu'." status: - invalid_on_create: "adalah bukan status yang sah untuk pengguna yang baharu." + invalid_on_create: "adalah bukan status yang sah untuk pengguna baharu." ldap_auth_source: - error_not_found: "tidak dijumpai" + error_not_found: "tidak ditemui" auth_source: - error_not_found: "tidak dijumpai" + error_not_found: "tidak ditemui" member: principal_blank: "Sila pilih sekurang-kurangnya satu pengguna atau kumpulan." role_blank: "perlu ditugaskan." @@ -1035,23 +1045,23 @@ ms: ungrantable: "mempunyai peranan yang tidak boleh ditugaskan." more_than_one: "mempunyai lebih daripada satu peranan." principal: - unassignable: "tidak boleh ditugaskan pada projek." + unassignable: "tidak boleh ditugaskan ke projek." version: undeletable_archived_projects: "Versi tidak dapat dipadam kerana ia mempunyai pakej kerja yang dilampirkan padanya." undeletable_work_packages_attached: "Versi tidak dapat dipadam kerana ia mempunyai pakej kerja yang dilampirkan padanya." status: readonly_default_exlusive: "tidak dapat diaktifkan untuk status-status yang ditandakan sebagai default." template: - body: "Sila periksa medan-medan yang berikut:" + body: "Sila semak ruang-ruang yang berikut:" header: - other: "1 ralat menghalang %{model} ini daripada disimpan" + other: "%{count} ralat menghalang %{model} ini daripada disimpan" models: attachment: "Fail" - attribute_help_text: "Atribut teks bantuan" + attribute_help_text: "Teks bantuan atribut" category: "Kategori" - comment: "Ulasan" + comment: "Komen" custom_action: "Tindakan tersuai" - custom_field: "Medan tersuai" + custom_field: "Ruang tersuai" "doorkeeper/application": "Aplikasi OAuth" forum: "Forum" global_role: "Peranan global" @@ -1060,7 +1070,7 @@ ms: news: "Berita" notification: other: "Pemberitahuan" - placeholder_user: "Pengguna gantian" + placeholder_user: "Pengguna sementara" project: "Projek" query: "Pertanyaan tersuai" role: @@ -1075,22 +1085,22 @@ ms: wiki_page: "Halaman wiki" errors: header_invalid_fields: - other: "Terdapat masalah dengan medan yang berikut:" + other: "Terdapat masalah dengan ruangan yang berikut:" header_additional_invalid_fields: - other: "Tambahan pula, terdapat masalah dengan medan yang berikut:" - field_erroneous_label: "Medan ini tidak sah: %{full_errors}\nSila masukkan nilai yang sah." + other: "Tambahan pula, terdapat masalah dengan ruangan yang berikut:" + field_erroneous_label: "Ruang ini tidak sah: %{full_errors}\nSila masukkan nilai yang sah." activity: item: created_by_on: "dicipta oleh %{user} pada %{datetime}" - created_by_on_time_entry: "masa direkod oleh %{user} pada %{datetime}" + created_by_on_time_entry: "masa dilog oleh %{user} pada %{datetime}" created_on: "dicipta oleh %{datetime}" - created_on_time_entry: "masa yang direkodkan pada %{datetime}" + created_on_time_entry: "masa yang dilog pada %{datetime}" updated_by_on: "dikemas kini oleh %{user} pada %{datetime}" - updated_by_on_time_entry: "masa yang direkod dikemas kini oleh %{user} pada %{datetime}" + updated_by_on_time_entry: "masa yang dilog dikemas kini oleh %{user} pada %{datetime}" updated_on: "dikemas kini pada %{datetime}" - updated_on_time_entry: "masa yang direkod dikemas kini pada %{datetime}" + updated_on_time_entry: "masa yang dilog dikemas kini pada %{datetime}" deleted_on: "dipadamkan pada %{datetime}" - deleted_by_on: "dihapuskan oleh %{user} pada %{datetime}" + deleted_by_on: "dipadamkan oleh %{user} pada %{datetime}" added_on: "ditambah pada %{datetime}" added_by_on: "ditambah oleh %{user} pada %{datetime} " removed_on: "dikeluarkan pada %{datetime}" @@ -1109,7 +1119,7 @@ ms: added: "ditetapkan kepada %{value}" added_html: "ditetapkan kepada %{value}" removed: "dikeluarkan" - updated: "ditukar dari %{old_value} kepada %{value}" + updated: "diubah dari %{old_value} kepada %{value}" updated_html: "diubah dari %{old_value} kepada %{value}" position: updated: "disusun semula" @@ -1141,10 +1151,10 @@ ms: color: "Warna" created_at: "Dicipta pada" custom_options: "Nilai yang mungkin" - custom_values: "Medan tersuai" + custom_values: "Ruangan tersuai" date: "Tarikh" - default_columns: "Lajur default" - description: "Penerangan" + default_columns: "Kolum default" + description: "Deskripsi" derived_due_date: "Tarikh tamat yang diperolehi" derived_estimated_hours: "Jumlah kerja" derived_start_date: "Tarikh mula yang diperolehi" @@ -1186,19 +1196,19 @@ ms: version: "Versi" work_package: "Pakej kerja" backup: - failed: "Sokongan gagal" + failed: "Sandaran gagal" label_backup_token: "Token sandaran" label_create_token: "Cipta token sandaran" - label_delete_token: "Padam token sokongan" - label_reset_token: "Set semula token sokongan" + label_delete_token: "Padam token sandaran" + label_reset_token: "Set semula token sandaran" label_token_users: "Pengguna berikut mempunyai token sandaran aktif" reset_token: action_create: Cipta action_reset: Set semula - heading_reset: "Tetapkan semula token sokongan" - heading_create: "Cipta token sokongan" + heading_reset: "Tetapkan semula token sandaran" + heading_create: "Cipta token sandaran" implications: > - Membolehkan sandaran akan membenarkan mana-mana pengguna dengan kebenaran yang diperlukan dan token sandaran ini untuk memuat turun sandaran yang mengandungi semua data pemasangan OpenProject ini. Ini termasuk data semua pengguna. + Mengaktifkan sandaran akan membenarkan mana-mana pengguna dengan kebenaran yang diperlukan dan token sandaran ini untuk memuat turun sandaran yang mengandungi semua data pemasangan OpenProject ini. Ini termasuk data semua pengguna. info: > Anda perlu menghasilkan token sandaran untuk dapat mencipta sandaran. Setiap kali anda ingin meminta sandaran anda perlu menyediakan token ini. Anda boleh memadam token sandaran tersebut untuk menyahdayakan sandaran untuk pengguna ini. verification: > @@ -1206,12 +1216,12 @@ ms: verification_word_reset: Tetapkan semula verification_word_create: cipta warning: > - Apabila anda mencipta token baharu anda hanya akan dibenarkan untuk meminta sokongan selepas 24 jam. Ini adalah langkah keselamatan. Selepas itu anda boleh meminta sokongan bila-bila masa menggunakan token tersebut. + Apabila anda mencipta token baharu anda hanya akan dibenarkan untuk meminta sandaran selepas 24 jam. Ini adalah langkah keselamatan. Selepas itu anda boleh meminta sandaran bila-bila masa menggunakan token tersebut. text_token_deleted: Token sandaran dipadam. Sandaran kini dinyahdayakan. error: invalid_token: Tidak sah atau token sandaran hilang token_cooldown: Token sandaran ini akan sah dalam %{hours} jam. - backup_pending: Sudah ada sokongan yang belum selesai. + backup_pending: Sudah ada sandaran yang belum selesai. limit_reached: Anda hanya boleh membuat %{limit} sandaran setiap hari. button_actions: "Tindakan" button_add: "Tambah" @@ -1226,7 +1236,7 @@ ms: button_change: "Tukar" button_change_parent_page: "Tukar laman induk" button_change_password: "Tukar kata laluan" - button_check_all: "Periksa semua" + button_check_all: "Semak semua" button_clear: "Kosongkan" button_click_to_reveal: "Klik untuk tunjukkan" button_close: "Tutup" @@ -1234,8 +1244,8 @@ ms: button_configure: "Konfigurasi" button_continue: "Seterusnya" button_copy: "Salin" - button_copy_to_clipboard: "Salin ke clipboard" - button_copy_link_to_clipboard: "Salin pautan ke clipboard" + button_copy_to_clipboard: "Salin ke papan klip" + button_copy_link_to_clipboard: "Salin pautan ke papan klip" button_copy_and_follow: "Salin dan ikut" button_create: "Cipta" button_create_and_continue: "Simpan dan teruskan" @@ -1244,9 +1254,10 @@ ms: button_delete_watcher: "Buang pemerhati %{name}" button_download: "Muat turun" button_duplicate: "Salinan" - button_edit: "Sunting" - button_edit_associated_wikipage: "Sunting halaman wiki berkaitan: %{page_title}" + button_edit: "Edit" + button_edit_associated_wikipage: "Edit halaman wiki berkaitan: %{page_title}" button_expand_all: "Kembangkan semua" + button_favorite: "Tambah ke kegemaran" button_filter: "Saring" button_generate: "Menjana" button_list: "Senarai" @@ -1255,7 +1266,7 @@ ms: button_move: "Alih" button_move_and_follow: "Alih dan ikut" button_print: "Cetak" - button_quote: "Petikan harga" + button_quote: "Petikan" button_remove: Keluarkan button_rename: "Nama semula" button_replace: "Ganti" @@ -1267,13 +1278,14 @@ ms: button_save_as: "Simpan sebagai" button_apply_changes: "Guna pakai perubahan" button_save_back: "Simpan dan kembali" - button_show: "Tunjukkan" + button_show: "Paparkan" button_sort: "Susun" button_submit: "Hantar" button_test: "Uji" button_unarchive: "Nyaharkib" button_uncheck_all: "Batalkan semua pilihan" button_unlock: "Buka kunci" + button_unfavorite: "Keluarkan dari kegemaran" button_unwatch: "Berhenti memerhati" button_update: "Kemas kini" button_upgrade: "Naik taraf" @@ -1293,7 +1305,7 @@ ms: button_revoke_all: "Batalkan semua" button_revoke_only: "Tarik balik %{shared_role_name} sahaja" consent: - checkbox_label: Saya sudah perhatikan dan bersetuju dengan perkara di atas. + checkbox_label: Saya sudah menyatakan dan bersetuju dengan perkara di atas. failure_message: Persetujuan gagal, tidak boleh teruskan. title: Persetujuan Pengguna decline_warning_message: Anda telah menolak untuk memberi persetujuan dan telah dilog keluar. @@ -1311,7 +1323,7 @@ ms: failed_internal: "Penyalinan gagal disebabkan ralat dalaman." succeeded: "Projek yang dicipta %{target_project_name}" errors: "Ralat" - project_custom_fields: "Medan tersuai pada projek" + project_custom_fields: "Ruangan tersuai pada projek" x_objects_of_this_type: zero: "Tiada objek untuk jenis ini" one: "Satu objek untuk jenis ini" @@ -1419,10 +1431,10 @@ ms: hour: other: "jam" description_active: "Aktif?" - description_attachment_toggle: "Tunjuk/Sembunyi lampiran" + description_attachment_toggle: "Papar/Sembunyi lampiran" description_autocomplete: > - Medan ini menggunakan autolengkap. Semasa menaip tajuk pakej kerja anda akan menerima senarai calon yang boleh jadi. - description_available_columns: "Lajur Tersedia" + Ruangan ini menggunakan autolengkap. Semasa menaip tajuk pakej kerja anda akan menerima senarai calon yang boleh jadi. Pilih satu dengan gunakan anak panah atas dan anak panah bawah, dan memilihnya dengan menggunakan tab atau enter. Secara alternatif, anda boleh masukkan nombor pakej kerja secara langsung. + description_available_columns: "Kolum Tersedia" description_choose_project: "Projek" description_compare_from: "Bandingkan dari" description_compare_to: "Bandingkan dengan " @@ -1430,9 +1442,9 @@ ms: description_date_from: "Masukkan tarikh mula" description_date_to: "Masukkan tarikh tamat" description_enter_number: "Masukkan nombor" - description_enter_text: "Masuk teks" + description_enter_text: "Masukkan teks" description_filter: "Saring" - description_filter_toggle: "Tunjuk/Sembunyi saringan" + description_filter_toggle: "Papar/Sembunyi saringan" description_category_reassign: "Pilih kategori" description_message_content: "Kandungan mesej" description_my_project: "Anda adalah ahli" @@ -1441,9 +1453,9 @@ ms: description_project_scope: "Skop carian" description_query_sort_criteria_attribute: "Susun atribut" description_query_sort_criteria_direction: "Arah susunan" - description_search: "Medan carian" + description_search: "Ruang carian" description_select_work_package: "Pilih pakej kerja" - description_selected_columns: "Lajur Terpilih" + description_selected_columns: "Kolum Terpilih" description_sub_work_package: "Sub pakej kerja semasa" description_toc_toggle: "Tunjuk/Sembunyi jadual kandungan" description_wiki_subpages_reassign: "Pilih laman induk baharu" @@ -1456,18 +1468,18 @@ ms: add_groups: "Tambah kumpulan atribut baharu" rename_groups: "Nama semula kumpulan atribut" project_filters: - description_html: "Menyaring dan mengisihkan ruang tersuai ialah tambahan edisi Enterprise." + description_html: "Menyaring dan menyusun ruang tersuai ialah tambahan edisi Enterprise." enumeration_activities: "Aktiviti penjejakan masa" enumeration_work_package_priorities: "Keutamaan pakej kerja" enumeration_reported_project_statuses: "Status projek yang dilaporkan" error_auth_source_sso_failed: "Log masuk satu kali (SSO) untuk pengguna '%{value}' gagal" error_can_not_archive_project: "Projek ini tidak boleh diarkibkan: %{errors}" error_can_not_delete_entry: "Tidak dapat membuang entri" - error_can_not_delete_custom_field: "Tidak dapat membuang medan tersuai" - error_can_not_delete_in_use_archived_undisclosed: "Terdapat juga pakej kerja dalam projek yang telah diarkibkan. Anda perlu meminta pentadbir untuk melaksanakan penghapusan untuk melihat projek yang mana akan terjejas." + error_can_not_delete_custom_field: "Tidak dapat membuang ruangan tersuai" + error_can_not_delete_in_use_archived_undisclosed: "Terdapat juga pakej kerja dalam projek yang telah diarkibkan. Anda perlu meminta pentadbir untuk melaksanakan pemadaman untuk melihat projek yang mana akan terjejas." error_can_not_delete_in_use_archived_work_packages: "Terdapat juga pakej kerja dalam projek yang telah diarkibkan. Anda perlu mengaktifkan semula projek berikut dahulu, sebelum anda boleh mengubah atribut pakej kerja yang berkenaan: %{archived_projects_urls}" error_can_not_delete_type: - explanation: 'Jenis ini mengandungi pakej kerja dan tidak boleh dipadamkan. Anda boleh melihat semua pakej kerja yang terjejas dalam pandangan ini.' + explanation: 'Jenis ini mengandungi pakej kerja dan tidak boleh dipadamkan. Anda boleh melihat semua pakej kerja yang terjejas dalam paparan ini.' error_can_not_delete_standard_type: "Jenis standard tidak boleh dipadamkan." error_can_not_invite_user: "Gagal menghantar jemputan kepada pengguna." error_can_not_remove_role: "Peranan ini sedang digunakan dan tidak boleh dipadam." @@ -1477,35 +1489,35 @@ ms: error_check_user_and_role: "Sila pilih pengguna dan peranan." error_code: "Ralat %{code}" error_color_could_not_be_saved: "Warna tidak dapat disimpan" - error_cookie_missing: "Kuki OpenProject tidak dijumpai. Sila pastikan bahawa kuki telah diaktifkan, kerana aplikasi ini tidak akan berfungsi dengan betul tanpanya." + error_cookie_missing: "Kuki OpenProject tidak ditemui. Sila pastikan bahawa kuki telah diaktifkan, kerana aplikasi ini tidak akan berfungsi dengan betul tanpanya." error_custom_option_not_found: "Pilihan tidak wujud." error_enterprise_activation_user_limit: "Akaun anda tidak dapat diaktifkan (had pengguna dicapai). Sila hubungi pentadbir anda untuk dapatkan akses." error_enterprise_token_invalid_domain: "Edisi Enterprise tidak aktif. Domain token Enterprise anda (%{actual}) tidak sepadan dengan nama hos sistem (%{expected})." - error_failed_to_delete_entry: "Gagal untuk menghapuskan kemasukan ini." - error_in_dependent: "Ralat dalam cubaan untuk mengubah objek yang bergantung: %{dependent_class} #%{related_id} - %{related_subject}: %{error}" - error_in_new_dependent: "Ralat dalam cubaan untuk mencipta objek yang bergantung: %{dependent_class} - %{related_subject}" + error_failed_to_delete_entry: "Gagal untuk memadamkan entri ini." + error_in_dependent: "Ralat dalam pencubaan untuk mengubah objek yang bergantung: %{dependent_class} #%{related_id} - %{related_subject}: %{error}" + error_in_new_dependent: "Ralat dalam pencubaan untuk mencipta objek yang bergantung: %{dependent_class} - %{related_subject}: %{error}" error_invalid_selected_value: "Nilai yang dipilih tidak sah." - error_journal_attribute_not_present: "Jurnal tidak mempunyai atribut %{attribute}." - error_pdf_export_too_many_columns: "Terlalu banyak lajur dipilih untuk eksport PDF. Sila kurangkan bilangan lajur." + error_journal_attribute_not_present: "Jurnal tidak mengandungi atribut %{attribute}." + error_pdf_export_too_many_columns: "Terlalu banyak kolum dipilih untuk eksport PDF. Sila kurangkan bilangan kolum." error_pdf_failed_to_export: "Eksport PDF tidak dapat disimpan: %{error}" - error_token_authenticity: "Adakah anda cuba untuk menghantar data pada pelbagai pelayar atau tab? Sila tutup semua tab dan cuba lagi." - error_work_package_not_found_in_project: "Pakej kerja tidak dijumpai atau tidak tergolong dalam projek ini" + error_token_authenticity: "Tidak dapat mengesahkan token Cross-Site Request Forgery. Adakah anda sedang mencuba untuk menghantar data pada pelbagai pelayar atau tab? Sila tutup semua tab dan cuba lagi." + error_work_package_not_found_in_project: "Pakej kerja tidak ditemui atau tidak tergolong dalam projek ini" error_must_be_project_member: "perlu menjadi ahli projek" - error_migrations_are_pending: "Pemasangan OpenProject mempunyai migrasi pangkalan data yang belum selesai. Anda mungkin telah terlepas menjalankan migrasi semasa peningkatan terakhir. Sila semak panduan menaik taraf untuk menaik taraf pemasangan anda dengan betul." - error_migrations_visit_upgrade_guides: "Sila lawati dokumentasi panduan peningkatan kami" + error_migrations_are_pending: "Pemasangan OpenProject anda mempunyai migrasi pangkalan data yang belum selesai. Anda mungkin telah terlepas menjalankan migrasi semasa naik taraf terakhir anda. Sila semak panduan menaik taraf untuk menaikkan taraf pemasangan anda dengan betul." + error_migrations_visit_upgrade_guides: "Sila kunjungi dokumentasi panduan naik taraf kami" error_no_default_work_package_status: 'Tiada status pakej kerja default telah ditetapkan. Sila semak konfigurasi anda (Pergi ke "Pentadbiran -> Status pakej kerja").' - error_no_type_in_project: "Tiada jenis yang berkaitan dengan projek ini. Sila semak seting projek." - error_omniauth_registration_timed_out: "Pendaftaran melalui pembekal pengesahan luaran tamat tempoh. Sila cuba lagi." + error_no_type_in_project: "Tiada jenis yang berkaitan dengan projek ini. Sila semak tetapan projek." + error_omniauth_registration_timed_out: "Pendaftaran melalui pembekal pengesahan luaran telah tamat tempoh. Sila cuba lagi." error_omniauth_invalid_auth: "Maklumat pengesahan yang dikembalikan dari pembekal identiti adalah tidak sah. Sila hubungi pentadbir anda untuk bantuan lanjut." - error_password_change_failed: "Ralat berlaku semasa cuba menukar kata laluan." - error_scm_command_failed: "Ralat berlaku semasa cuba mengakses repositori: %{value}" - error_scm_not_found: "Kemasukan atau semakan tersebut tidak dijumpai dalam repositori." + error_password_change_failed: "Ralat berlaku semasa percubaan untuk menukar kata laluan." + error_scm_command_failed: "Ralat berlaku semasa percubaan untuk mengakses repositori: %{value}" + error_scm_not_found: "Entri atau semakan tersebut tidak ditemui dalam repositori." error_type_could_not_be_saved: "Jenis tidak dapat disimpan" - error_unable_delete_status: "Status pakej kerja tidak boleh dihapuskan kerana ianya digunakan oleh sekurang-kurangnya satu pakej kerja." - error_unable_delete_default_status: "Tidak dapat menghapuskan status pakej kerja default. Sila pilih status pakej kerja default yang lain sebelum menghapuskan yang semasa." + error_unable_delete_status: "Status pakej kerja tidak boleh dipadamkan kerana ianya digunakan oleh sekurang-kurangnya satu pakej kerja." + error_unable_delete_default_status: "Tidak dapat memadamkan status pakej kerja default. Sila pilih status pakej kerja default yang lain sebelum memadamkan yang semasa." error_unable_to_connect: "Tidak dapat untuk menyambung (%{value})" error_unable_delete_wiki: "Tidak dapat memadam halaman wiki berikut." - error_unable_update_wiki: "Tidak dapat menaiktaraf halaman wiki berikut." + error_unable_update_wiki: "Tidak dapat menaik taraf halaman wiki berikut." error_workflow_copy_source: "Sila pilih jenis sumber atau peranan" error_workflow_copy_target: "Sila pilih jenis sasaran dan peranan" error_menu_item_not_created: Item menu tidak dapat ditambah @@ -1513,20 +1525,20 @@ ms: error_wiki_root_menu_item_conflict: > Tidak dapat menamakan semula "%{old_name}" ke "%{new_name}" disebabkan konflik dalam item menu yang dihasilkan dengan item menu yang sedia ada "%{existing_caption}" (%{existing_identifier}). error_external_authentication_failed: "Ralat berlaku semasa pengesahan luaran. Sila cuba sekali lagi." - error_attribute_not_highlightable: "Atribut tidak boleh ditekankan: %{attributes}" + error_attribute_not_highlightable: "Atribut tidak boleh disorotkan: %{attributes}" events: - changeset: "Set perubahan disunting" - message: Mesej telah disunting + changeset: "Set perubahan telah diedit" + message: Mesej telah diedit news: Berita - project_attributes: "Atribut projek telah disunting" - project: "Projek telah disunting" - projects: "Projek telah disunting" + project_attributes: "Atribut projek telah diedit" + project: "Projek telah diedit" + projects: "Projek telah diedit" reply: Dibalas - time_entry: "Log masa disunting" - wiki_page: "Halaman wiki telah disunting" + time_entry: "Log masa diedit" + wiki_page: "Halaman wiki telah diedit" work_package_closed: "Pakej Kerja ditutup" - work_package_edit: "Pakej kerja disunting" - work_package_note: "Nota pakej kerja ditambah" + work_package_edit: "Pakej kerja diedit" + work_package_note: "Nota Pakej Kerja ditambah" title: project: "Projek: %{name}" subproject: "Subprojek: %{name}" @@ -1541,14 +1553,15 @@ ms: pdf_overview_table: "Jadual PDF" pdf_report_with_images: "Laporan PDF dengan imej" pdf_report: "Laporan PDF" + pdf_gantt: "Gantt PDF" image: omitted: "Imej tidak dieksport." units: - hours: h - days: d + hours: j + days: h extraction: available: - pdftotext: "Pdfketeks tersedia (pilihan)" + pdftotext: "PdfkeTeks tersedia (pilihan)" unrtf: "Unrtf tersedia (pilihan)\n" catdoc: "Catdoc tersedia (pilihan)" xls2csv: "Xls2csv tersedia (pilihan)" @@ -1569,7 +1582,7 @@ ms: gui_validation_error_plural: "%{count} ralat" homescreen: additional: - projects: "Projek yang terbaru yang dapat dilihat dalam contoh ini." + projects: "Projek terbaru yang dapat dilihat dalam contoh ini." no_visible_projects: "Tiada projek yang dapat dilihat dalam contoh ini." users: "Pengguna berdaftar terbaru dalam contoh ini" blocks: @@ -1591,19 +1604,19 @@ ms: image_conversion: imagemagick: "Imagemagick" journals: - changes_retracted: "Perubahan ditarik balik." + changes_retracted: "Perubahan telah ditarik balik." caused_changes: dates_changed: "Tarikh ditukar" - default_attribute_written: "Atribut baca sahaja ditulis" - progress_mode_changed_to_status_based: "Pengiraan kemajuan dikemas kini" + default_attribute_written: "Atribut baca-sahaja ditulis" + progress_mode_changed_to_status_based: "Pengiraan perkembangan dikemas kini" status_p_complete_changed: "Status % Lengkap diubah" system_update: "Kemas kini sistem OpenProject:" cause_descriptions: - work_package_predecessor_changed_times: dengan perubahan kepada pendahulu %{link} + work_package_predecessor_changed_times: dengan perubahan pada pendahulu %{link} work_package_parent_changed_times: dengan perubahan pada induk %{link} work_package_children_changed_times: dengan perubahan pada anak %{link} - work_package_related_changed_times: dengan perubahan pada yang berkaitan %{link} - unaccessable_work_package_changed: dengan perubahan pada pakej kerja berkaitan + work_package_related_changed_times: dengan perubahan pada %{link} yang berkaitan + unaccessable_work_package_changed: dengan perubahan pada pakej kerja yang berkaitan working_days_changed: changed: "dengan perubahan pada hari bekerja (%{changes})" days: @@ -1612,12 +1625,12 @@ ms: dates: working: "%{date} kini hari bekerja" non_working: "%{date} kini bukan hari bekerja" - progress_mode_changed_to_status_based: Mod pengiraan kemajuan ditetapkan kepada berasaskan status + progress_mode_changed_to_status_based: Mod pengiraan perkembangan ditetapkan kepada berasaskan status status_p_complete_changed: >- % nilai lengkap untuk status '%{status_name}' diubah dari %{old_value}% kepada %{new_value}% system_update: file_links_journal: > - Mulai sekarang, aktiviti berkaitan dengan pautan fail (fail-fail yang disimpan di penyimpanan luaran) akan muncul dalam tab aktiviti. Yang berikut mewakili aktiviti berkenaan pautan yang sudah sedia ada: + Mulai sekarang, aktiviti berkaitan dengan pautan fail (fail-fail yang disimpan di storan luaran) akan muncul dalam tab Aktiviti. Yang berikut mewakili aktiviti berkenaan pautan yang sudah sedia ada: progress_calculation_adjusted_from_disabled_mode: >- Perkembangan pengiraan ditetapkan ke mod berasaskan kerja secara automatik dan diselaraskan dengan versi kemas kini. progress_calculation_adjusted: >- @@ -1653,71 +1666,60 @@ ms: simple_revoke_confirmation: "Adakah anda pasti anda mahu membatalkan token ini?" api: title: "API" - text_hint: "Token APi membenarkan aplikasi pihak ketiga untuk berkomunikasi dengan OpenProject ini sebagai contoh melalui REST API." + text_hint: "Token API membenarkan aplikasi pihak ketiga untuk berkomunikasi dengan OpenProject ini, sebagai contoh, melalui REST API." static_token_name: "Token API" - disabled_text: "Token API tidak didayakan oleh pentadbir. Sila hubungi pentadbir anda untuk menggunakan ciri ini." + disabled_text: "Token API tidak didayakan oleh pentadbir. Sila hubungi pentadbir anda untuk menggunakan fitur ini." ical: title: "iCalendar" - text_hint: 'Token iCalendar membenarkan pengguna untuk melanggan kepada kalendar OpenProject dan paparkan maklumat pakej kerja terkini daripada pelanggan luaran.' - disabled_text: "Langganan iCalendar tidak didayakan oleh pentadbir. Sila hubungi pentadbir anda untuk menggunakan ciri ini." - empty_text_hint: "Untuk tambah token iCalendar, langgan kepada kalendar baharu atau kalendar yang sedia ada dalam modul Kalendar projek. Anda perlu mempunyai kebenaran yang diperlukan." + text_hint: 'Token iCalendar membenarkan pengguna untuk melanggan kepada kalendar OpenProject dan lihat maklumat pakej kerja terkini daripada pelanggan luaran.' + disabled_text: "Langganan iCalendar tidak didayakan oleh pentadbir. Sila hubungi pentadbir anda untuk menggunakan fitur ini." + empty_text_hint: "Untuk tambah token iCalendar, langgan kalendar baharu atau kalendar yang sedia ada dalam modul Kalendar projek. Anda perlu mempunyai kebenaran yang diperlukan." oauth: title: "OAuth" text_hint: "Token OAuth membenarkan aplikasi pihak ketiga untuk menyambung dengan contoh OpenProject ini." - empty_text_hint: "Tiada akses aplikasi pihak ketiga yang dikonfigurasikan dan aktif untuk anda. Sila hubungi pentadbir anda untuk aktifkan ciri ini." + empty_text_hint: "Tiada akses aplikasi pihak ketiga yang dikonfigurasikan dan aktif untuk anda. Sila hubungi pentadbir anda untuk aktifkan fitur ini." rss: title: "RSS" - text_hint: "Token RSS membenarkan pengguna untuk mengikut perubahan terkini dalam kejadian OpenProject ini melalui pembaca RSS luaran. " + text_hint: "Token RSS membenarkan pengguna untuk mengikut perubahan terkini dalam contoh OpenProject ini melalui pembaca RSS luaran. " static_token_name: "Token RSS" - disabled_text: "Token RSS tidak diaktifkan oleh pentadbir. Sila hubungi pentadbir anda untuk menggunakan ciri ini." + disabled_text: "Token RSS tidak diaktifkan oleh pentadbir. Sila hubungi pentadbir anda untuk menggunakan fitur ini." storages: - title: "Penyimpanan fail" - text_hint: "Token Penyimpanan Fail menyambungkan OpenProject dengan Fail Penyimpanan luaran." - empty_text_hint: "Tiada akses penyimpanan terpaut pada akaun anda." - revoke_token: "Adakah anda ingin membuang token ini? Anda perlu untuk log masuk semula di %{storage}" - removed: "Token Fail Penyimpanan berjaya dikeluarkan" + title: "Storan fail" + text_hint: "Token Storan Fail menyambungkan contoh OpenProject dengan Storan Fail luaran." + empty_text_hint: "Tiada akses storan terpaut pada akaun anda." + revoke_token: "Adakah anda ingin membuang token ini? Anda perlu log masuk semula di %{storage}" + removed: "Token Storan Fail berjaya dipadamkan" failed: "Sebuah ralat telah berlaku dan token tidak dapat dipadam. Sila cuba lagi kemudian." - unknown_storage: "Penyimpanan tidak dikenal pasti" + unknown_storage: "Storan tidak dikenal pasti" notifications: - send_notifications: "Hantar notifikasi untuk tindakan ini" + send_notifications: "Hantar pemberitahuan untuk tindakan ini" work_packages: subject: created: "Pakej kerja telah dicipta." assigned: "Anda telah ditugaskan ke %{work_package}" - subscribed: "Anda melanggan ke %{work_package}" - mentioned: "Anda telah disebut dalam %{work_package}" + subscribed: "Anda telah melanggan ke %{work_package}" + mentioned: "Anda telah disebut di %{work_package}" responsible: "Anda telah menjadi bertanggungjawab untuk %{work_package}" watched: "Anda sedang melihat %{work_package}" - update_info_mail: - body: > - Kami gembira untuk mengumumkan pengeluaran OpenProject 12.0. Ia adalah pengeluaran besar yang diharapkan dapat meningkatkan secara ketara cara anda menggunakan OpenProject. - Bermula dengan pengeluaran ini, kami memperkenalkan pemberitahuan dalam aplikasi. Mulai sekarang, anda akan menerima pemberitahuan untuk kemas kini di pakej kerja secara terus dalam OpenProject. Anda boleh menanda pemberitahuan sebagai sudah dibaca, membalas komen atau mengubah suai secara terus atribut pakej kerja tanpa meninggalkan pusat pemberitahuan tersebut. - Ini juga bermakna kami tidak akan menggunakan e-mel sebagai pemberitahuan lagi. Kami berpendapat bahawa pusat pemberitahuan baharu ini adalah tempat yang lebih baik untuk melihat dan bertindak berdasarkan pembaharuan ini. Walaubagaimanapun, jika anda ingin terus menerima perkembangan melalui e-mel, anda boleh memilih untuk menerima peringatan e-mel setiap hari pada masa-masa tertentu yang anda pilih. - Sila pastikan untuk mengesahkan seting pemberitahuan asas anda, dan tetapkan pilihan anda untuk pemberitahuan dan peringatan e-mel melalui seting akaun anda. Anda boleh melakukan ini melalui butang "Tukar seting e-mel" di bawah. - Kami berharap anda mendapati pemberitahuan dalam aplikasi kami bermanfaat dan ianya akan membuat anda menjadi lebih produktif. - Sangat dihargai, Pasukan OpenProject - body_header: "Versi 12.0 dengan Pusat Pemberitahuan" - body_subheader: "Berita" - subject: "Perubahan yang penting pada pemberitahuan dengan pelancaran 12.0" label_accessibility: "Kebolehcapaian" label_account: "Akaun" label_active: "Aktif" label_activate_user: "Aktifkan pengguna" label_active_in_new_projects: "Aktifkan dalam projek baharu" label_activity: "Aktiviti" - label_add_edit_translations: "Tambah dan sunting terjemahan" + label_add_edit_translations: "Tambah dan edit terjemahan" label_add_another_file: "Tambah fail yang lain" - label_add_columns: "Tambah lajur yang dipilih" + label_add_columns: "Tambah kolum yang dipilih" label_add_note: "Tambah nota" label_add_related_work_packages: "Tambah pakej kerja yang berkaitan" label_add_subtask: "Tambah subtugas" label_added: "ditambah" label_added_by: "Ditambah oleh %{author}" label_added_time_by: "Ditambah oleh %{author} %{age} yang lalu" - label_additional_workflow_transitions_for_assignee: "Peralihan tambahan dibenarkan apabila pengguna adalah penerima tugasan" - label_additional_workflow_transitions_for_author: "Peralihan tambahan dibenarkan apabila pengguna adalah pengarang" + label_additional_workflow_transitions_for_assignee: "Peralihan tambahan dibenarkan apabila pengguna ialah penerima tugasan" + label_additional_workflow_transitions_for_author: "Peralihan tambahan dibenarkan apabila pengguna ialah pengarang" label_administration: "Pentadbiran" - label_advanced_settings: "Tetapan maju" + label_advanced_settings: "Tetapan lanjutan" label_age: "Umur" label_ago: "hari yang lalu" label_all: "semua" @@ -1733,13 +1735,13 @@ ms: label_ical_access_key_type: "iCalendar" label_ical_access_key_description: 'Token iCalendar "%{token_name}" untuk "%{calendar_name}" dalam "%{project_name}"' label_ical_access_key_not_present: "Token iCalendar tidak ada." - label_ical_access_key_generation_hint: "Dihasilkan secara automatik apabila melanggan ke kalendar." + label_ical_access_key_generation_hint: "Dijanakan secara automatik apabila melanggan ke kalendar." label_ical_access_key_latest: "terkini" - label_ical_access_key_revoke: "Membatalkan" + label_ical_access_key_revoke: "Menarik balik" label_applied_status: "Status yang dilaksanakan" label_archive_project: "Arkib projek" label_ascending: "Menaik" - label_assigned_to_me_work_packages: "Pakej kerja yang ditugaskan pada saya" + label_assigned_to_me_work_packages: "Pakej kerja yang ditugaskan kepada saya" label_associated_revisions: "Semakan yang berhubungan" label_attachment_plural: "Lampiran" label_attribute: "Atribut" @@ -1771,16 +1773,16 @@ ms: label_board_plural: "Board" label_branch: "Cabang" label_browse: "Melayari" - label_bulk_edit_selected_work_packages: "Sunting secara pukal pakej kerja dipilih" + label_bulk_edit_selected_work_packages: "Edit secara pukal pakej kerja yang dipilih" label_bundled: "(Terkumpul)" label_calendar: "Kalendar" label_calendars_and_dates: "Kalendar dan tarikh" - label_calendar_show: "Tunjuk Kalendar" + label_calendar_show: "Paparkan Kalendar" label_category: "Kategori" label_consent_settings: "Persetujuan Pengguna" label_wiki_menu_item: Item menu wiki label_select_main_menu_item: Pilih item menu utama baharu - label_required_disk_storage: "Penyimpanan disk yang diperlukan" + label_required_disk_storage: "Storan cakera yang diperlukan" label_send_invitation: Hantar jemputan label_change_plural: "Perubahan" label_change_properties: "Tukar ciri-ciri" @@ -1792,15 +1794,15 @@ ms: label_changeset_id: "ID Set Ubahsuai" label_changeset_plural: "Set Ubahsuai" label_checked: "ditanda" - label_check_uncheck_all_in_column: "Tanda/Nyahtanda semua dalam lajur" + label_check_uncheck_all_in_column: "Tanda/Nyahtanda semua dalam kolum" label_check_uncheck_all_in_row: "Tanda/Nyahtanda semua dalam baris" label_child_element: "Elemen anak" label_choices: "Pilihan" - label_chronological_order: "Terlama dahulu" + label_chronological_order: "Paling lama dahulu" label_close_versions: "Tutup versi yang telah selesai" label_closed_work_packages: "ditutup" label_collapse: "Sembunyi" - label_collapsed_click_to_show: "Disembunyikan. Klik untuk tunjukkan" + label_collapsed_click_to_show: "Disembunyikan. Klik untuk paparkan" label_configuration: konfigurasi label_comment_add: "Tambah komen" label_comment_added: "Komen ditambah" @@ -1822,9 +1824,9 @@ ms: label_core_build: "Binaan teras" label_current_status: "Status semasa" label_current_version: "Versi semasa" - label_custom_field_add_no_type: "Tambah medan ini ke jenis pakej kerja" - label_custom_field_new: "Medan tersuai baharu" - label_custom_field_plural: "Medan tersuai" + label_custom_field_add_no_type: "Tambah ruangan ini ke jenis pakej kerja" + label_custom_field_new: "Ruang tersuai baharu" + label_custom_field_plural: "Ruang tersuai" label_custom_field_default_type: "Jenis kosong" label_custom_style: "Reka bentuk" label_dashboard: "Papan Pemuka" @@ -1838,9 +1840,9 @@ ms: label_day_plural: "hari" label_default: "Default" label_delete_user: "Padam pengguna" - label_delete_project: "Padam Projek" - label_deleted: "dipadamkan" - label_deleted_custom_field: "(medan tersuai yang telah dipadam)" + label_delete_project: "Padam projek" + label_deleted: "dipadam" + label_deleted_custom_field: "(ruang tersuai yang telah dipadam)" label_deleted_custom_option: "(pilihan yang telah dipadam)" label_empty_element: "(kosong)" label_missing_or_hidden_custom_option: "(nilai yang hilang atau kurang kebenaran untuk mengakses)" @@ -1863,23 +1865,23 @@ ms: label_duplicate: "duplikasi" label_duplicates: "duplikasi" label_edit: "Edit" - label_edit_x: "Sunting: %{x}" + label_edit_x: "Edit: %{x}" label_enable_multi_select: "Tukar pelbagai pilihan" - label_enabled_project_custom_fields: "Medan tersuai yang diaktifkan" + label_enabled_project_custom_fields: "Ruang tersuai yang diaktifkan" label_enabled_project_modules: "Modul yang diaktifkan" label_enabled_project_activities: "Dayakan aktiviti penjejakan masa " label_end_to_end: "hujung ke hujung" label_end_to_start: "hujung ke mula" - label_enumeration_new: "NIlai pengiraan baharu" - label_enumeration_value: "Nilai pengiraan" - label_enumerations: "Penyenaraian" + label_enumeration_new: "Nilai perhitungan baharu" + label_enumeration_value: "Nilai perhitungan" + label_enumerations: "Perhitungan" label_enterprise: "Enterprise" label_enterprise_active_users: "%{current}/%{limit} pengguna aktif yang ditempah" label_enterprise_edition: "Edisi Enterprise" label_enterprise_support: "sokongan Enterprise" - label_enterprise_addon: "Penambahan Enterprise" + label_enterprise_addon: "Tambahan Enterprise" label_environment: "Persekitaran" - label_estimates_and_time: "Anggaran dan perkembangan" + label_estimates_and_progress: "Anggaran dan perkembangan" label_equals: "ialah" label_everywhere: "di mana-mana saja" label_example: "Contoh" @@ -1893,19 +1895,19 @@ ms: label_expanded_click_to_collapse: "Dikembangkan. Klik untuk sembunyikan" label_f_hour: "%{value} jam" label_f_hour_plural: "%{value} jam" - label_favoured: "Digemari" + label_favorite: "Kegemaran" label_feed_plural: "Feed" label_feeds_access_key: "Kunci akses RSS" label_feeds_access_key_created_on: "Kunci akses RSS dicipta %{value} yang lalu" label_feeds_access_key_type: "RSS" label_file_plural: "Fail-fail" - label_filter_add: "Tambah penapis" - label_filter: "Penapis" - label_filter_plural: "Saringan" - label_filters_toggle: "Tunjuk/sembunyi penapis\n" + label_filter_add: "Tambah penyaring" + label_filter: "Penyaring" + label_filter_plural: "Saring" + label_filters_toggle: "Papar/sembunyi penyaring\n" label_float: "Terapung" label_folder: "Folder" - label_follows: "ikut" + label_follows: "ikuti" label_force_user_language_to_default: "Tetapkan bahasa pengguna yang mempunyai bahasa yang tidak dibenarkan kepada default" label_form_configuration: "Konfigurasi borang" label_gantt_chart: "Carta Gantt" @@ -1944,8 +1946,8 @@ ms: label_introduction_video: "Video pengenalan" label_invite_user: "Jemput pengguna" label_share: "Kongsi" - label_show_hide: "Tunjuk/sembunyi" - label_show_all_registered_users: "Tunjuk semua pengguna berdaftar" + label_show_hide: "Papar/sorok" + label_show_all_registered_users: "Paparkan semua pengguna berdaftar" label_journal: "Jurnal" label_journal_diff: "Perbandingan Penerangan" label_language: "Bahasa" @@ -1966,6 +1968,7 @@ ms: label_learn_more: "Ketahui lebih lanjut" label_less_or_equal: "<=" label_less_than_ago: "kurang dari beberapa hari yang lalu" + label_link_url: "Pautan (URL) " label_list: "Senarai" label_loading: "Memuatkan..." label_lock_user: "Kunci pengguna" @@ -1974,9 +1977,9 @@ ms: label_custom_logo: "Logo tersuai" label_custom_export_logo: "Logo eksport tersuai" label_custom_export_cover: "Latar belakang penutup eksport tersuai" - label_custom_export_cover_overlay: "Susun atur latar belakang penutup tersuai" + label_custom_export_cover_overlay: "Lapisan latar belakang penutup eksport tersuai" label_custom_export_cover_text_color: "Warna teks" - label_custom_pdf_export_settings: "Paparan eksport PDF tersuai" + label_custom_pdf_export_settings: "Tetapan eksport PDF tersuai" label_custom_favicon: "Favicon tersuai" label_custom_touch_icon: "Ikon sentuh tersuai" label_logout: "Daftar keluar" @@ -1987,21 +1990,22 @@ ms: label_me: "saya" label_member_new: "Ahli baru" label_member_all_admin: "(Semua peranan disebabkan oleh status admin)" - label_member_plural: "Ahli" + label_member_plural: "Ahli-ahli" label_membership_plural: "Keahlian" lable_membership_added: "Ahli ditambah" lable_membership_updated: "Ahli dikemas kini" + label_menu: "Menu" label_menu_badge: pre_alpha: "pra-alpha" alpha: "alpha" beta: "beta" label_menu_item_name: "Nama item menu" - label_message: "Pesanan" - label_message_last: "Pesanan terakhir" - label_message_new: "Pesanan baharu" - label_message_plural: "Pesanan" - label_message_posted: "Pesanan ditambah" - label_min_max_length: "Min - Max panjang" + label_message: "Mesej" + label_message_last: "Mesej terakhir" + label_message_new: "Mesej baharu" + label_message_plural: "Mesej" + label_message_posted: "Mesej ditambah" + label_min_max_length: "Min - Maks panjang" label_minute_plural: "minit" label_missing_api_access_key: "Kunci akses API hilang" label_missing_feeds_access_key: "Kunci akses RSS hilang" @@ -2021,24 +2025,24 @@ ms: label_name: "Nama" label_never: "Tidak akan" label_new: "Baharu" - label_new_features: "Ciri baharu" + label_new_features: "Fitur baharu" label_new_statuses_allowed: "Status baharu yang dibenarkan" label_news_singular: "Berita" label_news_added: "Berita yang ditambah" label_news_comment_added: "Komen ditambah ke berita" label_news_latest: "Berita-berita terkini" label_news_new: "Tambah berita" - label_news_edit: "Sunting berita" + label_news_edit: "Edit berita" label_news_plural: "Berita" - label_news_view_all: "Paparkan semua berita" + label_news_view_all: "Lihat semua berita" label_next: "Seterusnya" - label_next_week: "Minggu depan" + label_next_week: "Minggu hadapan" label_no_change_option: "(Tiada perubahan)" label_no_data: "Tiada data untuk dipaparkan" label_no_parent_page: "Tiada halaman induk" label_nothing_display: "Tiada apa untuk dipaparkan" label_nobody: "tiada siapa" - label_not_found: "tidak dijumpai" + label_not_found: "tidak ditemui" label_none: "tiada" label_none_parentheses: "(tiada)" label_not_contains: "tidak mengandungi" @@ -2048,23 +2052,23 @@ ms: label_operator_none: "adalah kosong" label_operator_equals_or: "adalah (ATAU)" label_operator_equals_all: "adalah (DAN)" - label_operator_shared_with_user_any: "mana-mana" + label_operator_shared_with_user_any: "sebarang" label_open_menu: "Buka menu" label_open_work_packages: "buka" label_open_work_packages_plural: "buka" label_openproject_website: "Laman web OpenProject" - label_optional_description: "Penerangan" + label_optional_description: "Deskripsi" label_options: "Pilihan" label_other: "Lain" label_overall_activity: "Aktiviti keseluruhan" - label_overview: "Ringkasan" + label_overview: "Gambaran Keseluruhan" label_page_title: "Tajuk halaman" label_part_of: "sebahagian daripada" label_password_lost: "Lupa kata laluan anda?" label_password_rule_lowercase: "Huruf Kecil" label_password_rule_numeric: "Aksara Nombor" label_password_rule_special: "Aksara Khas" - label_password_rule_uppercase: "Huruf besar" + label_password_rule_uppercase: "Huruf Besar" label_path_encoding: "Laluan pengekodan" label_per_page: "Setiap halaman" label_people: "Orang" @@ -2072,7 +2076,7 @@ ms: label_permissions_report: "Laporan kebenaran" label_personalize_page: "Peribadikan halaman ini" label_placeholder_user: "Pengguna sementara" - label_placeholder_user_new: "Pengguna gantian baharu" + label_placeholder_user_new: "Pengguna sementara baharu" label_placeholder_user_plural: "Pengguna sementara" label_planning: "Perancangan" label_please_login: "Sila log masuk" @@ -2080,8 +2084,8 @@ ms: label_modules_and_plugins: "Modul dan Plugin" label_precedes: "mendahului" label_preferences: "Keutamaan" - label_preview: "Pratonton" - label_preview_not_available: "Pratonton tidak tersedia" + label_preview: "Previu" + label_preview_not_available: "Previu tidak tersedia" label_previous: "Sebelumnya" label_previous_week: "Minggu sebelumnya" label_principal_invite_via_email: "atau jemput pengguna baharu melalui e-mel" @@ -2089,11 +2093,12 @@ ms: label_privacy_policy: "Privasi data dan dasar keselamatan" label_product_version: "Versi produk" label_profile: "Profil" - label_percent_complete: "% Selesai" + label_percent_complete: "% Lengkap" label_project_activity: "Aktiviti projek" label_project_attribute_plural: "Atribut projek" + label_project_attribute_manage_link: "Urus atribut projek" label_project_count: "Jumlah bilangan projek" - label_project_copy_notifications: "Hantar notifikasi e-mel semasa salinan projek" + label_project_copy_notifications: "Hantar pemberitahuan e-mel semasa salinan projek" label_project_latest: "Projek terkini" label_project_default_type: "Benarkan jenis kosong" label_project_hierarchy: "Hierarki projek" @@ -2102,14 +2107,14 @@ ms: label_project_list_plural: "Senarai projek" label_project_attributes_plural: "Atribut projek" label_project_custom_field_plural: "Atribut projek" - label_project_settings: "Seting projek" - label_project_attributes_settings: "Seting atribut projek" - label_project_storage_plural: "Penyimpanan fail" - label_project_storage_project_folder: "Penyimpanan Fail: Folder projek" - label_projects_storage_information: "%{count} projek menggunakan %{storage} penyimpanan cakera" - label_project_view_all: "Paparkan semua projek" - label_project_show_details: "Tunjukkan butiran projek" - label_project_hide_details: "Sembunyikan butiran projek" + label_project_settings: "Tetapan projek" + label_project_attributes_settings: "Tetapan atribut projek" + label_project_storage_plural: "Storan fail" + label_project_storage_project_folder: "Storan Fail: Folder projek" + label_projects_disk_usage_information: "%{count} projek menggunakan %{used_disk_space} ruang cakera" + label_project_view_all: "Lihat semua projek" + label_project_show_details: "Paparkan butiran projek" + label_project_hide_details: "Sorokkan butiran projek" label_public_projects: "Projek awam" label_query_new: "Pertanyaan baharu" label_query_plural: "Pertanyaan tersuai" @@ -2127,8 +2132,8 @@ ms: label_relation_new: "Hubungan baharu" label_release_notes: "Nota keluaran" label_remaining_work: "Kerja berbaki" - label_remove_columns: "Keluarkan lajur yang dipilih" - label_renamed: "menamakan semula" + label_remove_columns: "Keluarkan kolum yang dipilih" + label_renamed: "namakan semula" label_reply_plural: "Balasan" label_report: "Laporan" label_report_bug: "Lapor bug" @@ -2138,7 +2143,7 @@ ms: label_reporting_plural: "Laporan" label_repository: "Repositori" label_repository_root: "Akar repositori" - label_repository_plural: "Repositori-repositori" + label_repository_plural: "Repositori" label_required: "diperlukan" label_requires: "memerlukan" label_result_plural: "Keputusan" @@ -2147,12 +2152,12 @@ ms: label_revision_id: "Semakan %{value}" label_revision_plural: "Semakan" label_roadmap: "Roadmap" - label_roadmap_edit: "Sunting roadmap %{name}" + label_roadmap_edit: "Edit roadmap %{name}" label_roadmap_due_in: "Masa tamat dalam %{value}" label_roadmap_no_work_packages: "Tiada pakej kerja untuk versi ini" label_roadmap_overdue: "%{value} lambat" label_role_and_permissions: "Peranan dan kebenaran" - label_role_new: "Peranan baru" + label_role_new: "Peranan baharu" label_role_plural: "Peranan\n" label_role_search: "Tetapkan peranan ke ahli baharu" label_scm: "SCM" @@ -2162,23 +2167,24 @@ ms: label_session: "Sesi" label_setting_plural: "Tetapan" label_system_settings: "Tetapan sistem" - label_show_completed_versions: "Tunjuk versi lengkap" + label_show_completed_versions: "Paparkan versi lengkap" + label_columns: "Kolum" label_sort: "Susun" - label_sort_by: "Sort mengikut %{value}" + label_sort_by: "Susun mengikut %{value}" label_sorted_by: "disusun mengikut %{value}" label_sort_higher: "Alihkan ke atas" label_sort_highest: "Alih ke paling atas" - label_sort_lower: "Gerak ke bawah" + label_sort_lower: "Alih ke bawah" label_sort_lowest: "Alih ke paling bawah" label_spent_time: "Masa yang dihabiskan" - label_start_to_end: "mula hingga tamat" + label_start_to_end: "mula hingga akhir" label_start_to_start: "mula ke mula" label_statistics: "Statistik" label_status: "Status" - label_storage_free_space: "Ruang disk yang berbaki" - label_storage_used_space: "Ruang disk yang digunakan" - label_storage_group: "Sistem Fail Penyimpanan %{identifier}" - label_storage_for: "Merangkumi penyimpanan untuk" + label_storage_free_space: "Ruang cakera yang berbaki" + label_storage_used_space: "Ruang cakera yang digunakan" + label_storage_group: "Sistem storan fail %{identifier}" + label_storage_for: "Merangkumi storan untuk" label_string: "Teks" label_subproject: "Subprojek" label_subproject_new: "Subprojek baharu" @@ -2186,7 +2192,7 @@ ms: label_subtask_plural: "Subtugas" label_summary: "Ringkasan" label_system: "Sistem" - label_system_storage: "Maklumat penyimpanan" + label_system_storage: "Maklumat storan" label_table_of_contents: "Jadual kandungan" label_tag: "Tag" label_team_planner: "Perancang Pasukan" @@ -2199,12 +2205,12 @@ ms: label_title: "Tajuk" label_projects_menu: "Projek" label_today: "hari ini" - label_top_menu: "Menu teratas" + label_top_menu: "Menu Teratas" label_topic_plural: "Topik" label_total: "Jumlah" label_type_new: "Jenis baharu" label_type_plural: "Jenis" - label_ui: "Antara muka pengguna" + label_ui: "Antara Muka Pengguna" label_updated_time: "Dikemas kini %{value} yang lalu" label_updated_time_at: "%{author} %{age}" label_updated_time_by: "Dikemas kini oleh %{author} %{age} yang lalu" @@ -2217,12 +2223,12 @@ ms: label_user_named: "Pengguna %{name}" label_user_activity: "aktiviti %{value}" label_user_anonymous: "Anonim" - label_user_mail_option_all: "Untuk sebarang acara pada semua projek saya" - label_user_mail_option_none: "Tiada acara" + label_user_mail_option_all: "Untuk sebarang peristiwa pada semua projek saya" + label_user_mail_option_none: "Tiada peristiwa" label_user_mail_option_only_assigned: "Hanya untuk perkara yang ditugaskan kepada saya" label_user_mail_option_only_my_events: "Hanya untuk perkara yang saya perhatikan atau yang saya terlibat dalam" - label_user_mail_option_only_owner: "Hanya untuk perkara yang saya adalah pemiliknya" - label_user_mail_option_selected: "Untuk sebarang acara pada projek terpilih sahaja" + label_user_mail_option_only_owner: "Hanya untuk perkara yang saya ialah pemiliknya" + label_user_mail_option_selected: "Untuk sebarang peristiwa pada projek terpilih sahaja" label_user_new: "Pengguna baharu" label_user_plural: "Pengguna" label_user_search: "Cari pengguna" @@ -2236,28 +2242,28 @@ ms: label_version_sharing_system: "Dengan semua projek" label_version_sharing_tree: "Dengan pokok projek" label_videos: "Video" - label_view_all_revisions: "Papar semua semakan" - label_view_diff: "Papar perbezaan" - label_view_revisions: "Papar semakan" + label_view_all_revisions: "Lihat semua semakan" + label_view_diff: "Lihat perbezaan" + label_view_revisions: "Lihat semakan" label_watched_work_packages: "Pakej kerja yang dipantau" label_what_is_this: "Apakah ini?" label_week: "Minggu" label_wiki_content_added: "Halaman wiki ditambah" label_wiki_content_updated: "Halaman wiki dikemas kini" label_wiki_toc: "Jadual Kandungan" - label_wiki_toc_empty: "Jadual Kandungan kosong kerana tiada tajuk yang tersedia." - label_wiki_dont_show_menu_item: "Jangan tunjukkan halaman wiki ini di navigasi projek." - label_wiki_edit: "Sunting wiki" - label_wiki_edit_plural: "Sunting wiki" + label_wiki_toc_empty: "Jadual Kandungan kosong kerana tiada pengepala yang tersedia." + label_wiki_dont_show_menu_item: "Jangan paparkan halaman wiki ini di navigasi projek." + label_wiki_edit: "Edit wiki" + label_wiki_edit_plural: "Edit wiki" label_wiki_page_attachments: "Lampiran halaman wiki" label_wiki_page_id: "ID halaman wiki" label_wiki_navigation: "Navigasi wiki" label_wiki_page: "Halaman wiki" label_wiki_page_plural: "Halaman wiki" - label_wiki_show_index_page_link: "Tunjuk item submenu 'Jadual Kandungan'" - label_wiki_show_menu_item: "Tunjuk sebagai item menu dalam navigasi projek" - label_wiki_show_new_page_link: "Tunjuk item submenu 'Cipta laman anak baharu'" - label_wiki_show_submenu_item: "Tunjuk sebagai item submenu " + label_wiki_show_index_page_link: "Paparkan item submenu 'Jadual Kandungan'" + label_wiki_show_menu_item: "Paparkan sebagai item menu dalam navigasi projek" + label_wiki_show_new_page_link: "Paparkan item submenu 'Cipta laman anak baharu'" + label_wiki_show_submenu_item: "Paparkan sebagai item submenu " label_wiki_start: "Halaman mula" label_work: "Kerja" label_work_package: "Pakej kerja" @@ -2266,14 +2272,14 @@ ms: label_work_package_category_plural: "Kategori pakej kerja" label_work_package_hierarchy: "Hierarki pakej kerja" label_work_package_new: "Pakej kerja baharu" - label_work_package_edit: "Sunting pakej kerja %{name}" + label_work_package_edit: "Edit pakej kerja %{name}" label_work_package_plural: "Pakej kerja" label_work_package_status: "Status pakej kerja" label_work_package_status_new: "Status baharu" label_work_package_status_plural: "Status pakej kerja" label_work_package_types: "Jenis pakej kerja " label_work_package_tracking: "Penjejakan pakej kerja" - label_work_package_view_all: "Paparkan semua pakej kerja" + label_work_package_view_all: "Lihat semua pakej kerja" label_workflow: "Aliran kerja" label_workflow_plural: "Aliran kerja" label_workflow_summary: "Ringkasan" @@ -2309,15 +2315,15 @@ ms: label_global_role: "Peranan global" label_not_changeable: "(tidak boleh diubah)" label_global: "Global" - label_seeded_from_env_warning: Rekod ini telah dicipta melalui seting / pemboleh ubah persekitaran. Tidak boleh disunting melalui UI. + label_seeded_from_env_warning: Rekod ini telah dicipta melalui tetapan / pemboleh ubah persekitaran. Tidak boleh diedit melalui UI. macro_execution_error: "Ralat melaksanakan makro berikut %{macro_name}" macro_unavailable: "Makro %{macro_name} tidak dapat dipaparkan." macros: - placeholder: "[Sementara] Makro %{macro_name}" + placeholder: "[Placeholder] Makro %{macro_name}" errors: missing_or_invalid_parameter: "Parameter makro hilang atau tidak sah." legacy_warning: - timeline: "Garis masa warisan makro ini telah dipadamkan and tidak lagi tersedia. Anda boleh menggantikan fungsi tersebut dengan makro jadual tertutup." + timeline: "Garis masa warisan makro ini telah dipadamkan dan tidak lagi tersedia. Anda boleh menggantikan fungsi tersebut dengan makro jadual tertutup." include_wiki_page: removed: "Makro tersebut tidak lagi wujud." wiki_child_pages: @@ -2334,8 +2340,8 @@ ms: digests: including_mention_singular: "termasuk sebutan" including_mention_plural: "termasuk %{number_mentioned} sebutan" - unread_notification_singular: "1 notifikasi belum dibaca" - unread_notification_plural: "%{number_unread} notifikasi belum dibaca" + unread_notification_singular: "1 pemberitahuan belum dibaca" + unread_notification_plural: "%{number_unread} pemberitahuan belum dibaca" you_have: "Anda mempunyai" logo_alt_text: "Logo" mention: @@ -2348,28 +2354,28 @@ ms: salutation_full_name: "Nama penuh" work_packages: created_at: "Dicipta pada %{timestamp} oleh %{user}" - login_to_see_all: "Log masuk untuk melihat semua notifikasi" + login_to_see_all: "Log masuk untuk melihat semua pemberitahuan" mentioned: "Anda telah disebut dalam sebuah komen" mentioned_by: "%{user} menyebut anda di ruang komen" more_to_see: - other: "Terdapat 1 lagi pakej kerja dengan pemberitahuan." - open_in_browser: "Buka di laman layar" + other: "Terdapat %{count} lagi pakej kerja dengan pemberitahuan." + open_in_browser: "Buka di pelayar" reason: - watched: "Diawasi" + watched: "Dipantau" assigned: "Ditugaskan" responsible: "Bertanggungjawab" mentioned: "Disebut" shared: "Dikongsi" subscribed: "semua" - prefix: "Diterima kerana seting notifikasi: %{reason}" + prefix: "Diterima kerana tetapan pemberitahuan: %{reason}" date_alert_start_date: "Peringatan tarikh" date_alert_due_date: "Peringatan tarikh" see_all: "Lihat semua" updated_at: "Dikemas kini pada %{timestamp} oleh %{user}" sharing: work_packages: - allowed_actions: "Anda boleh %{allowed_actions} pakej kerja ini. Ini akan berubah bergantung kepada peranan projek anda atau kebenaran." - create_account: "Untuk mengakses pakej kerja ini, anda perlu membuat dan mengaktifkan akaun pada %{instance}." + allowed_actions: "Anda boleh %{allowed_actions} pakej kerja ini. Ini akan berubah bergantung kepada peranan projek dan kebenaran anda." + create_account: "Untuk mengakses pakej kerja ini, anda perlu mencipta dan mengaktifkan akaun di %{instance}." open_work_package: "Buka pakej kerja" subject: "Pakej kerja #%{id} telah dikongsi dengan anda" enterprise_text: "Kongsi pakej kerja dengan pengguna yang bukan ahli projek." @@ -2379,49 +2385,49 @@ ms: storages: health: plaintext: - storage: "Penyimpanan" + storage: "Storan" healthy: - summary: "Berita gembira! Status penyimpanan anda, %{storage_name}, kini dipaparkan sebagai \"Sihat\"." + summary: "Berita gembira! Status storan anda, %{storage_name}, kini dipaparkan sebagai \"Sihat\"." error-solved-on: "Diselesaikan Pada" recommendation: "Kami akan terus memantau sistem untuk memastikan ia berada dalam keadaan yang baik. Sekiranya terdapat perbezaan, kami akan memberi maklum balas kepada anda." - details: "Untuk maklumat lanjut atau membuat sebarang pindaan, anda boleh melawat konfigurasi penyimpanan anda" + details: "Untuk maklumat lanjut atau membuat sebarang pindaan, anda boleh melawat konfigurasi storan anda" unhealthy: - summary: "Status penyimpanan anda, %{storage_name}, kini dipaparkan sebagai \"Ralat\". Kami telah mengesan satu isu yang mungkin memerlukan perhatian anda." + summary: "Status storan anda, %{storage_name}, kini dipaparkan sebagai \"Ralat\". Kami telah mengesan satu isu yang mungkin memerlukan perhatian anda." error-details: "Butiran Ralat" error-message: "Mesej Ralat" - error-occurred-on: "Berlaku pada" - recommendation: "Kami mencadangkan untuk melawat halaman konfigurasi penyimpanan untuk menangani isu ini" + error-occurred-on: "Berlaku Pada" + recommendation: "Kami mencadangkan untuk melawat halaman konfigurasi storan untuk menangani isu ini" unsubscribe: "Jika anda tidak lagi ingin menerima pemberitahuan ini, anda boleh berhenti melanggan bila-bila masa. Untuk berhenti melanggan, sila ikuti arahan di laman ini" - email_notification_settings: "Tetapan pemberitahuan e-mel penyimpanan" - see_storage_settings: "Lihat tetapan penyimpanan" + email_notification_settings: "Tetapan pemberitahuan e-mel storan" + see_storage_settings: "Lihat tetapan storan" healthy: - subject: "Penyimpanan \"%{name}\" kini sihat!" + subject: "Storan \"%{name}\" kini sihat!" solved_at: "diselesaikan pada" - summary: "Masalah dengan integrasi penyimpanan %{storage_name} anda kini selesai" + summary: "Masalah dengan integrasi storan %{storage_name} anda kini telah diselesaikan" unhealthy: - subject: "Penyimpanan \"%{name}\" kini tidak sihat!" + subject: "Storan \"%{name}\" kini tidak sihat!" since: "sejak" - summary: "Terdapat masalah dengan integrasi penyimpanan %{storage_name} anda " + summary: "Terdapat masalah dengan integrasi storan %{storage_name} anda " troubleshooting: - text: "Untuk maklumat lebih lanjut, periksa penyimpanan fail" + text: "Untuk maklumat lanjut, semak storan fail" link_text: "pencarisilapan dokumentasi" - mail_body_account_activation_request: "Pengguna baharu (%{value}) telah mendaftar. Akaun ini menunggu kelulusan anda:" + mail_body_account_activation_request: "Pengguna baharu (%{value}) telah mendaftar. Akaun ini sedang menunggu kelulusan anda:" mail_body_account_information: "Maklumat akaun anda" mail_body_account_information_external: "Anda boleh menggunakan akaun %{value} anda untuk log masuk." - mail_body_backup_ready: "Permintaan sokongan anda sudah bersedia. Anda boleh memuat turun di sini:" - mail_body_backup_token_reset_admin_info: Token sokongan untuk pengguna '%{user}' telah di set semula. - mail_body_backup_token_reset_user_info: Token sokongan anda telah di set semula. + mail_body_backup_ready: "Permintaan sandaran anda sudah bersedia. Anda boleh memuat turun di sini:" + mail_body_backup_token_reset_admin_info: Token sandaran untuk pengguna '%{user}' telah diset semula. + mail_body_backup_token_reset_user_info: Token sandaran anda telah diset semula. mail_body_backup_token_info: Token sebelumnya sudah tidak sah. mail_body_backup_waiting_period: Token baharu akan diaktifkan dalam %{hours} jam. - mail_body_backup_token_warning: Jika ini bukan anda, log masuk ke OpenProject serta merta dan set semula. - mail_body_incoming_email_error: E-mel yang anda hantar ke OpenProject tidak boleh proses. + mail_body_backup_token_warning: Jika ini bukan anda, log masuk ke OpenProject dengan serta merta dan set semula. + mail_body_incoming_email_error: E-mel yang anda hantar ke OpenProject tidak boleh diproses. mail_body_incoming_email_error_in_reply_to: "Di %{received_at} %{from_email} menulis" mail_body_incoming_email_error_logs: "Log" mail_body_lost_password: "Untuk menukar kata laluan, klik pada pautan berikut:" mail_password_change_not_possible: title: "Tidak dapat menukar kata laluan" - body: "Akaun anda %{app_title} telah disambungkan ke penyedia pengesahan luar (%{name})." - subtext: "Kata laluan bagi akaun luar tidak boleh ditukar di dalam aplikasi. Sila gunakan fungsi kata laluan hilang di penyedia pengesahan anda." + body: "Akaun anda %{app_title} telah disambungkan ke penyedia pengesahan luaran (%{name})." + subtext: "Kata laluan bagi akaun luar tidak boleh ditukar di dalam aplikasi. Sila gunakan fungsi kehilangan kata laluan di penyedia pengesahan anda." mail_body_register: "Selamat datang ke %{app_title}. Sila aktifkan akaun anda dengan mengklik pautan ini:" mail_body_register_header_title: "E-mel jemputan ahli projek" mail_body_register_user: "Kepada %{name}," @@ -2430,14 +2436,14 @@ ms: Jika anda mempunyai sebarang soalan, rujuklah dokumentasi kami (%{documentation_link}) atau hubungi pentadbir anda. mail_body_register_closing: "Pasukan OpenProject anda" mail_body_register_ending: "Kekal berhubung! Yang benar, " - mail_body_reminder: "%{count} pakej kerja yang ditugaskan pada anda akan tamat dalam masa %{days} hari yang akan datang:" - mail_body_group_reminder: '%{count} pakej kerja yang ditugaskan pada kumpulan "%{group}" akan tamat dalam masa %{days} hari yang akan datang:' + mail_body_reminder: "%{count} pakej kerja yang ditugaskan kepada anda akan tamat dalam masa %{days} hari yang akan datang:" + mail_body_group_reminder: '%{count} pakej kerja yang ditugaskan kepada kumpulan "%{group}" akan tamat dalam masa %{days} hari yang akan datang:' mail_body_wiki_page_added: "Halaman wiki '%{id}' telah ditambah oleh %{author}." mail_body_wiki_page_updated: "Halaman wiki '%{id}' telah dikemas kini oleh %{author}." mail_subject_account_activation_request: "Permintaan pengaktifan akaun %{value}" - mail_subject_backup_ready: "Sokongan anda telah siap" + mail_subject_backup_ready: "Sandaran anda telah siap" mail_subject_backup_token_reset: "Set semula token sandaran" - mail_subject_incoming_email_error: "E-mel yang anda hantar ke OpenProject tidak boleh proses" + mail_subject_incoming_email_error: "E-mel yang anda hantar ke OpenProject tidak boleh diproses" mail_subject_lost_password: "Kata laluan %{value} anda" mail_subject_register: "Pengaktifan akaun %{value} anda" mail_subject_wiki_content_added: "Halaman wiki '%{id}' telah ditambah" @@ -2446,8 +2452,8 @@ ms: subject: "%{project} - Anda telah ditambah sebagai ahli" body: added_by: - without_message: "%{user} menambah anda sebagai ahli pada projek '%{project}'." - with_message: "%{user} menambah anda sebagai ahli dalam penulisan projek '%{project}':" + without_message: "%{user} telah menambah anda sebagai ahli pada projek '%{project}'." + with_message: "%{user} telah menambah anda sebagai ahli dalam penulisan projek '%{project}':" roles: "Anda mempunyai peranan-peranan yang berikut:" mail_member_updated_project: subject: "%{project} - Peranan anda telah dikemas kini" @@ -2461,17 +2467,17 @@ ms: body: updated_by: without_message: "%{user} telah mengemas kini peranan yang anda miliki secara global." - with_message: "%{user} telah mengemas kini peranan yang anda telah tulis secara global:" + with_message: "%{user} telah mengemas kini peranan yang anda tulis secara global:" roles: "Anda kini mempunyai peranan yang berikut:" mail_user_activation_limit_reached: subject: Had pengaktifan pengguna dicapai message: | - Pengguna baharu (%{email}) cuba mencipta satu akaun pada persekitaran OpenProject yang anda urus (%{host}). + Pengguna baharu (%{email}) telah cuba mencipta satu akaun pada persekitaran OpenProject yang anda uruskan (%{host}). Pengguna tersebut tidak dapat mengaktifkan akaun mereka kerana had pengguna telah dicapai. steps: - label: "Untuk membenarkan pengguna untuk daftar masuk anda boleh juga: " + label: "Untuk membenarkan pengguna untuk daftar masuk, anda juga boleh: " a: "Naik taraf pelan pembayaran anda ([di sini](upgrade_url))" #here turned into a link - b: "Lihat atau padam pengguna sedia ada ([di sini](users_url))" #here turned into a link + b: "Kunci atau padam pengguna sedia ada ([di sini](users_url))" #here turned into a link more_actions: "Lebih banyak fungsi" noscript_description: "Anda perlu mengaktifkan JavaScript untuk menggunakan OpenProject!" noscript_heading: "JavaScript dinyahdayakan" @@ -2481,15 +2487,15 @@ ms: notice_account_already_activated: Akaun tersebut sudah diaktifkan. notice_account_invalid_token: Token pengaktifan tidak sah notice_account_invalid_credentials: "Pengguna atau kata laluan tidak sah" - notice_account_invalid_credentials_or_blocked: "Pengguna atau kata laluan tidak sah atau akaun disekat kerana beberapa cubaan log masuk yang gagal. Jika ya, ianya akan dinyahsekat secara automatik dalam masa yang singkat." - notice_account_lost_email_sent: "E-mel dengan arahan untuk memilih kata laluan baharu telah dihantar kepada anda." - notice_account_new_password_forced: "Kata laluan baru diperlukan." - notice_account_password_expired: "Kata laluan anda tamat tempoh selepas %{days} hari. Sila tetapkan yang baharu" + notice_account_invalid_credentials_or_blocked: "Pengguna atau kata laluan tidak sah atau akaun disekat kerana beberapa cubaan log masuk yang gagal. Jika begitu, ianya akan dinyahsekat secara automatik dalam masa yang singkat." + notice_account_lost_email_sent: "E-mel bersertaan arahan untuk memilih kata laluan baharu telah dihantar kepada anda." + notice_account_new_password_forced: "Kata laluan baharu diperlukan." + notice_account_password_expired: "Kata laluan anda telah tamat tempoh selepas %{days} hari. Sila tetapkan yang baharu." notice_account_password_updated: "Kata laluan telah berjaya dikemas kini." notice_account_pending: "Akaun anda telah dicipta dan sedang menunggu kelulusan pentadbir." notice_account_register_done: "Akaun anda berjaya dicipta. Untuk mengaktifkan akaun anda, klik pada pautan yang telah dihantar melalui e-mel kepada anda." notice_account_unknown_email: "Pengguna tidak diketahui." - notice_account_update_failed: "Seting akaun tidak dapat dsimpan. Sila lihat pada halaman akaun anda." + notice_account_update_failed: "Tetapan akaun tidak dapat disimpan. Sila lihat di halaman akaun anda." notice_account_updated: "Akaun telah berjaya dikemas kini." notice_account_other_session_expired: "Semua sesi lain yang berkaitan dengan akaun anda telah dibatalkan." notice_account_wrong_password: "Kata laluan salah" @@ -2498,35 +2504,35 @@ ms: notice_auth_stage_verification_error: "Tidak dapat mengesahkan peringkat '%{stage}'." notice_auth_stage_wrong_stage: "Dijangka tamat peringkat pengesahan '%{expected}', tetapi '%{actual}' dikembalikan." notice_auth_stage_error: "Peringkat pengesahan '%{stage}' gagal." - notice_can_t_change_password: "Akaun ini digunakan sebagai sumber pengesahan luaran. Mustahil untuk ubah kata laluan." - notice_custom_options_deleted: "Pilihan '%{option_value}' dan kejadiannya telah dipadamkan." + notice_can_t_change_password: "Akaun ini digunakan sebagai sumber pengesahan luaran. Mustahil untuk menukar kata laluan." + notice_custom_options_deleted: "Pilihan '%{option_value}' dan %{num_deleted} kejadiannya telah dipadamkan." notice_email_error: "Ralat berlaku sewaktu menghantar e-mel (%{value})" notice_email_sent: "E-mel telah dihantar ke %{value}" notice_failed_to_save_work_packages: "Gagal untuk simpan %{count} pakej kerja pada %{total} yang dipilih: %{ids}." notice_failed_to_save_members: "Gagal untuk simpan ahli: %{errors}." - notice_deletion_scheduled: "Pemadaman telah dijadualkan dan dijalankan secara beransur-ransur." + notice_deletion_scheduled: "Pemadaman telah dijadualkan dan dijalankan secara ansuran." notice_file_not_found: "Halaman yang anda cuba untuk akses tidak wujud atau telah dikeluarkan." notice_forced_logout: "Anda telah dilog keluar secara automatik selepas %{ttl_time} minit tidak aktif." - notice_internal_server_error: "Ralat berlaku pada halaman yang anda sedang cuba untuk akses. Jika anda berterusan mengalami masalah sila hubungi pentadbir %{app_title} anda untuk bantuan." + notice_internal_server_error: "Ralat berlaku pada halaman yang anda sedang cuba untuk mengakses. Jika anda mengalami masalah secara berterusan, sila hubungi pentadbir %{app_title} anda untuk bantuan." notice_locking_conflict: "Maklumat telah dikemas kini oleh sekurang-kurangnya salah satu pengguna lain sementara itu." - notice_locking_conflict_additional_information: "Kemas kini datang daripada %{users}." + notice_locking_conflict_additional_information: "Kemas kini tersebut ialah daripada %{users}." notice_locking_conflict_reload_page: "Sila muat semula halaman, semak semula perubahan dan terapkan semula kemas kini anda." notice_member_added: Tambah %{name} ke projek. notice_members_added: Tambah %{number} pengguna ke projek. notice_member_removed: "Keluarkan %{user} dari projek." notice_member_deleted: "%{user} telah dikeluarkan dari projek ini dan dipadam." notice_no_principals_found: "Tiada hasil ditemui." - notice_bad_request: "Permintaan yang salah." + notice_bad_request: "Permintaan yang Salah." notice_not_authorized: "Anda tidak diberi kebenaran untuk mengakses halaman ini." notice_not_authorized_archived_project: "Projek yang anda cuba untuk akses telah diarkibkan." notice_password_confirmation_failed: "Kata laluan tidak betul. Tidak boleh teruskan." - notice_principals_found_multiple: "Terdapat %{number} hasil dijumpai. \n Tab untuk memfokuskan hasil pertama." + notice_principals_found_multiple: "Terdapat %{number} hasil ditemui. \n Tab untuk memfokuskan hasil pertama." notice_principals_found_single: "Terdapat satu hasil. \n Tab untuk fokuskan." - notice_project_not_deleted: "Projek tersebut tidak dibuang." - notice_successful_connection: "Sambungan yang berjaya." - notice_successful_create: "Penciptaan yang berjaya." - notice_successful_delete: "Penghapusan yang berjaya." - notice_successful_update: "Kemas kini yang berjaya." + notice_project_not_deleted: "Projek tersebut tidak dipadam." + notice_successful_connection: "Sambungan berjaya." + notice_successful_create: "Penciptaan berjaya." + notice_successful_delete: "Pemadaman berjaya." + notice_successful_update: "Kemas kini berjaya." notice_successful_update_custom_fields_added_to_project: | Naik taraf berjaya. Jenis ruang tersuai yang aktif telah diaktifkan di borang pakej kerja secara automatik. Lihat lebih lagi. notice_successful_update_custom_fields_added_to_type: | @@ -2538,7 +2544,7 @@ ms: notice_automatic_set_of_standard_type: "Tetapkan jenis standard secara automatik." notice_logged_out: "Anda telah dilog keluar." notice_wont_delete_auth_source: Sambungan LDAP tidak boleh dipadam sekiranya masih ada pengguna yang menggunakannya. - notice_project_cannot_update_custom_fields: "Anda tidak boleh mengemas kini medan tersuai tersedia projek. Projek adalah tidak sah: %{errors}" + notice_project_cannot_update_custom_fields: "Anda tidak boleh mengemas kini ruang tersuai tersedia projek. Projek adalah tidak sah: %{errors}" notice_attachment_migration_wiki_page: > Halaman ini dijanakan secara automatik semasa penaiktarafan OpenProject. Ia mengandungi semua lampiran yang sebelum ini berkaitan dengan %{container_type} "%{container_name}". #Default format for numbers @@ -2561,8 +2567,8 @@ ms: mb: "MB" tb: "TB" onboarding: - heading_getting_started: "Dapatkan satu rumusan" - text_getting_started_description: "Dapatkan rumusan ringkas pengurusan projek dan kolaborasi kumpulan dengan OpenPorject. Anda boleh mula semula video ini di menu bantuan." + heading_getting_started: "Dapatkan gambaran keseluruhan" + text_getting_started_description: "Dapatkan gambaran keseluruhan pengurusan projek dan kolaborasi kumpulan dengan OpenProject. Anda boleh mula semula video ini di menu bantuan." welcome: "Selamat datang ke %{app_title}" select_language: "Sila pilih bahasa anda" permission_add_work_package_notes: "Tambah nota" @@ -2570,42 +2576,42 @@ ms: permission_add_messages: "Hantar mesej" permission_add_project: "Cipta projek" permission_add_work_package_attachments: "Tambah lampiran" - permission_add_work_package_attachments_explanation: "Benarkan penambahan lampiran tanpa kebenaran edit pakej kerja" + permission_add_work_package_attachments_explanation: "Benarkan penambahan lampiran tanpa kebenaran Edit pakej kerja" permission_archive_project: "Arkib projek" permission_create_user: "Cipta pengguna" - permission_manage_user: "Sunting pengguna" - permission_manage_placeholder_user: "Cipta, edit, dan buang pengguna sementara" + permission_manage_user: "Edit pengguna" + permission_manage_placeholder_user: "Cipta, edit, dan buang pengguna placeholder" permission_add_subprojects: "Cipta subprojek" permission_add_work_package_watchers: "Tambah pemerhati" permission_assign_versions: "Tetapkan versi" permission_browse_repository: "Akses baca-sahaja kepada repositori (melayari dan keluar)" - permission_change_wiki_parent_page: "" + permission_change_wiki_parent_page: "Tukar induk halaman wiki " permission_change_work_package_status: "Tukar status pakej kerja" - permission_change_work_package_status_explanation: "Benarkan penukaran status tanpa kebenaran Sunting pakej kerja" + permission_change_work_package_status_explanation: "Benarkan penukaran status tanpa kebenaran Edit pakej kerja" permission_comment_news: "Komen berita" permission_commit_access: "Baca/tulis akses ke repositori (komit)" permission_copy_projects: "Salin projek" permission_copy_work_packages: "Salin pakej kerja" - permission_create_backup: "Cipta sokongan" + permission_create_backup: "Cipta sandaran" permission_delete_work_package_watchers: "Buang pemerhati" - permission_delete_work_packages: "Buang pakej kerja" + permission_delete_work_packages: "Padam pakej kerja" permission_delete_messages: "Padam mesej" permission_delete_own_messages: "Padam mesej sendiri" permission_delete_reportings: "Padam laporan" permission_delete_timelines: "Padam garis masa" permission_delete_wiki_pages: "Padam halaman wiki" permission_delete_wiki_pages_attachments: "Padam lampiran" - permission_edit_work_package_notes: "Sunting nota" - permission_edit_work_packages: "Sunting pakej kerja" - permission_edit_messages: "Sunting mesej" - permission_edit_own_work_package_notes: "Sunting nota sendiri" - permission_edit_own_messages: "Sunting mesej sendiri" - permission_edit_own_time_entries: "Sunting log masa sendiri" - permission_edit_project: "Sunting projek" - permission_edit_reportings: "Sunting laporan" - permission_edit_time_entries: "Sunting log masa untuk pengguna-pengguna lain" - permission_edit_timelines: "Sunting garis masa" - permission_edit_wiki_pages: "Sunting halaman wiki" + permission_edit_work_package_notes: "Edit nota" + permission_edit_work_packages: "Edit pakej kerja" + permission_edit_messages: "Edit mesej" + permission_edit_own_work_package_notes: "Edit nota sendiri" + permission_edit_own_messages: "Edit mesej sendiri" + permission_edit_own_time_entries: "Edit log masa sendiri" + permission_edit_project: "Edit projek" + permission_edit_reportings: "Edit laporan" + permission_edit_time_entries: "Edit log masa untuk pengguna lain" + permission_edit_timelines: "Edit garis masa" + permission_edit_wiki_pages: "Edit halaman wiki" permission_export_work_packages: "Eksport pakej kerja" permission_export_wiki_pages: "Eksport halaman wiki" permission_list_attachments: "Senarai lampiran" @@ -2613,12 +2619,12 @@ ms: permission_log_time: "Log masa untuk pengguna lain" permission_manage_forums: "Uruskan forum" permission_manage_categories: "Urus kategori pakej kerja" - permission_manage_dashboards: "Urus dashboard" + permission_manage_dashboards: "Urus papan pemuka" permission_manage_work_package_relations: "Urus hubungan pakej kerja" permission_manage_members: "Urus ahli-ahli" permission_manage_news: "Urus berita" permission_manage_project_activities: "Urus aktiviti projek" - permission_manage_public_queries: "Kendalikan paparan awam" + permission_manage_public_queries: "Uruskan paparan awam" permission_manage_repository: "Urus repositori" permission_manage_subtasks: "Urus hierarki pakej kerja" permission_manage_versions: "Urus versi" @@ -2629,29 +2635,29 @@ ms: permission_rename_wiki_pages: "Nama semula halaman wiki" permission_save_queries: "Simpan paparan" permission_search_project: "Cari projek" - permission_select_custom_fields: "Pilih medan tersuai" + permission_select_custom_fields: "Pilih ruang tersuai" permission_select_project_custom_fields: "Pilih atribut projek" permission_select_project_modules: "Pilih modul projek" permission_share_work_packages: "Kongsi pakej kerja" permission_manage_types: "Pilih jenis" - permission_view_project: "Paparkan projek" - permission_view_changesets: "Paparkan semakan repositori dalam OpenProject" - permission_view_commit_author_statistics: "Paparkan statistik pengarang komit" - permission_view_dashboards: "Paparkan dashboard" + permission_view_project: "Lihat projek" + permission_view_changesets: "Lihat semakan repositori dalam OpenProject" + permission_view_commit_author_statistics: "Lihat statistik pengarang komit" + permission_view_dashboards: "Lihat papan pemuka" permission_view_work_package_watchers: "Lihat senarai pemerhati" - permission_view_work_packages: "Papar pakej kerja" - permission_view_messages: "Papar mesej" - permission_view_news: "Papar berita" - permission_view_members: "Papar ahli" - permission_view_reportings: "Papar laporan" - permission_view_shared_work_packages: "Papar perkongsian pakej kerja" - permission_view_time_entries: "Papar masa yang digunakan" - permission_view_timelines: "Papar garis masa" - permission_view_wiki_edits: "Papar sejarah wiki" - permission_view_wiki_pages: "Papar wiki" + permission_view_work_packages: "Lihat pakej kerja" + permission_view_messages: "Lihat mesej" + permission_view_news: "Lihat berita" + permission_view_members: "Lihat ahli" + permission_view_reportings: "Lihat laporan" + permission_view_shared_work_packages: "Lihat perkongsian pakej kerja" + permission_view_time_entries: "Lihat masa yang digunakan" + permission_view_timelines: "Lihat garis masa" + permission_view_wiki_edits: "Lihat sejarah wiki" + permission_view_wiki_pages: "Lihat wiki" permission_work_package_assigned: "Menjadi penerima tugasan/bertanggungjawab" permission_work_package_assigned_explanation: "Pakej kerja boleh ditugaskan kepada pengguna dan kumpulan yang memegang peranan ini dalam projek yang berkaitan" - permission_view_project_activity: "Papar aktiviti projek" + permission_view_project_activity: "Lihat aktiviti projek" permission_save_bcf_queries: "Simpan pertanyaan BCF" permission_manage_public_bcf_queries: "Urus pertanyaan BCF awam" permission_edit_attribute_help_texts: "Edit atribut teks bantuan" @@ -2659,16 +2665,16 @@ ms: default: "-" project: destroy: - confirmation: "Jika anda teruskan, projek %{identifier} tersebut akan musnah selama-lamanya. Untuk mengesahkan tindakan ini sila perkenalkan nama projek dalam medan dibawah, ini akan:" + confirmation: "Jika anda teruskan, projek %{identifier} tersebut akan dimusnahkan selama-lamanya. Untuk mengesahkan tindakan ini sila perkenalkan nama projek dalam ruang dibawah, ini akan:" project_delete_result_1: "Padam semua data berkaitan" - project_delete_result_2: "Padam semua projek yang diuruskan dalam simpanan yang dilampirkan." - info: "Menghapuskan projek tersebut adalah tindakan yang tidak dapat dipulihkan." + project_delete_result_2: "Padam semua projek yang diuruskan dalam storan yang dilampirkan." + info: "Memadam projek tersebut adalah tindakan yang tidak dapat dipulihkan." project_verification: "Masukkan nama projek %{name} untuk mengesahkan pemadaman." subprojects_confirmation: "Subprojeknya: %{value} juga akan dipadamkan." - title: "Hapuskan projek %{name}" + title: "Padamkan projek %{name}" identifier: warning_one: Ahli projek akan perlu memindahkan semula repositori projek. - warning_two: Pautan sedia ada pada projek akan tidak lagi berfungsi. + warning_two: Pautan sedia ada pada projek tidak akan berfungsi lagi. title: Ubah pengenal projek template: copying: > @@ -2707,7 +2713,7 @@ ms: repositories: at_identifier: "pada %{identifier}" atom_revision_feed: "Feed semakan atom" - autofetch_information: "Tandakan ini jika anda mahu repositori untuk dikemaskini secara automatik apabila mengakses repositori modul halaman.\nIni meliputi pengambilan semula komit dari repositori dan muat semula penyimpanan disk yang diperlukan." + autofetch_information: "Tandakan ini jika anda mahu repositori untuk dikemas kini secara automatik apabila mengakses halaman modul repositori.\nIni meliputi pengambilan semula komit dari repositori dan muat semula storan cakera yang diperlukan." checkout: access: readwrite: "Baca + Tulis" @@ -2715,49 +2721,49 @@ ms: none: "Tiada akses pengeluaran, anda hanya boleh melihat repositori tersebut melalui aplikasi ini." access_permission: "Kebenaran anda pada repositori ini" url: "URL pengeluaran" - base_url_text: "Pangkalan URL yang digunakan untuk menjana URL checkout (cth., https://myserver.example.org/repos/).\nNota: Pangkalan URL hanya digunakan untuk penulisan semula URL checkout dalam repositori yang diuruskan. Repositori lain tidak diubah." + base_url_text: "Pangkalan URL yang digunakan untuk menjana pengeluaran URL (cth., https://myserver.example.org/repos/).\nPerhatian: Pangkalan URL hanya digunakan untuk penulisan semula pengeluaran URL dalam repositori yang diuruskan. Repositori lain tidak diubah." default_instructions: git: |- - Data yang terkandung dalam repositori ini boleh dimuat turun ke dalam komputer dengan Git. - SIla rujuk dokumentasi Git jika anda memerlukan maklumat lanjut mengenai prosedur checkout dan pelanggan yang tersedia. + Data yang terkandung dalam repositori ini boleh dimuat turun ke dalam komputer anda dengan Git. + Sila rujuk dokumentasi Git jika anda memerlukan maklumat lanjut mengenai prosedur pengeluaran dan pelanggan yang tersedia. subversion: |- - Data yang terkandung dalam repositori ini boleh dimuat turun ke dalam komputer dengan Subversion. - SIla rujuk dokumentasi Subversion jika anda memerlukan maklumat lanjut mengenai prosedur checkout dan pelanggan yang tersedia. + Data yang terkandung dalam repositori ini boleh dimuat turun ke dalam komputer anda dengan Subversion. + Sila rujuk dokumentasi Subversion jika anda memerlukan maklumat lanjut mengenai prosedur pengeluaran dan pelanggan yang tersedia. enable_instructions_text: "Papar arahan pengeluaran yang ditakrifkan di bawah pada semua halaman berkaitan repositori." instructions: "Arahan pengeluaran" show_instructions: "Papar arahan pengeluaran" - text_instructions: "Teks ini dipaparkan bersama URL checkout untuk bimbingan cara untuk membuat checkout repositori." - not_available: "Arahan pengeluaran tidak ditetapkan untuk repositori ini. Mohon pentadbir anda untuk membenarkan mereka untuk repositori ini dalam tetapan sistem." - create_managed_delay: "Sila ambil perhatian: Repositori tersebut diurus, ianya dicipta secara asinkron pada disk dan akan tersedia tidak lama lagi." + text_instructions: "Teks ini dipaparkan bersama pengeluaran URL untuk bimbingan cara untuk membuat pengeluaran repositori." + not_available: "Arahan pengeluaran tidak ditetapkan untuk repositori ini. Minta pentadbir anda untuk mengaktifkannya untuk repositori ini dalam tetapan sistem." + create_managed_delay: "Sila ambil perhatian: Repositori tersebut telah diurus, ianya dicipta secara ansuran pada cakera dan akan tersedia tidak lama lagi." create_successful: "Repositori telah didaftarkan." delete_sucessful: "Repositori telah dipadamkan." destroy: - confirmation: "Jika anda teruskan, ini akan menghapuskan repositori yang diuruskan selama-lamanya." - info: "Menghapuskan repositori tersebut adalah tindakan yang tidak dapat dipulihkan." - info_not_managed: "Nota: Ini TIDAK akan memadam kandungan repositori, kerana ia tidak diurus oleh OpenProject." + confirmation: "Jika anda teruskan, ini akan memadamkan repositori yang diuruskan selama-lamanya." + info: "Memadam repositori tersebut adalah tindakan yang tidak dapat dipulihkan." + info_not_managed: "Perhatian: Ini TIDAK akan memadam kandungan repositori, kerana ia tidak diurus oleh OpenProject." managed_path_note: "Direktori berikut akan dipadamkan: %{path}" - repository_verification: "Masukkan pengenal projek %{identifier} untuk mengesahkan penghapusan repositorinya." - subtitle: "Anda benar mahu memadam %{repository_type} projek %{project_name}?" - subtitle_not_managed: "Anda benar mahu mengeluarkan %{repository_type} %{url} yang terpaut daripada projek %{project_name}?" + repository_verification: "Masukkan pengenal projek %{identifier} untuk mengesahkan pemadaman repositorinya." + subtitle: "Adakah anda benar-benar ingin memadam %{repository_type} projek %{project_name}?" + subtitle_not_managed: "Adakah anda benar-benar mahu mengeluarkan %{repository_type} %{url} yang terpaut daripada projek %{project_name}?" title: "Padam %{repository_type} tersebut" title_not_managed: "Keluarkan pautan %{repository_type}?" errors: build_failed: "Tidak boleh mencipta repositori dengan konfigurasi yang dipilih. %{reason}" - managed_delete: "Tidak boleh menghapuskan repositori yang dikendali." + managed_delete: "Tidak boleh memadam repositori yang diuruskan." managed_delete_local: "TIdak dapat memadam repositori tempatan pada sistem fail di '%{path}': %{error_message}" empty_repository: "Repositori tersebut wujud, tetapi kosong. Ia tidak mengandungi sebarang semakan lagi." exists_on_filesystem: "Direktori repositori telah wujud dalam sistem fail." filesystem_access_failed: "Satu ralat berlaku semasa mengakses repositori dalam sistem fail: %{message}" - not_manageable: "Vendor repositori ini tidak boleh diurus oleh OpenProject." - path_permission_failed: "Ralat berlaku semasa cuba membuat laluan berikut: %{path}. Sila pastikan OpenProject boleh menulis pada folder tersebut." + not_manageable: "Vendor repositori ini tidak boleh diuruskan oleh OpenProject." + path_permission_failed: "Ralat berlaku semasa percubaan membuat laluan berikut: %{path}. Sila pastikan OpenProject boleh menulis pada folder tersebut." unauthorized: "Anda tidak dibenarkan untuk mengakses repositori atau kelayakan tersebut tidak sah." - unavailable: "Repositori tersebut tiada." + unavailable: "Repositori tersebut tidak tersedia." exception_title: "Tidak boleh mengakses repositori tersebut: %{message}" disabled_or_unknown_type: "Jenis yang dipilih %{type} dinyahaktifkan atau tidak lagi tersedia untuk vendor SCM %{vendor}." disabled_or_unknown_vendor: "Vendor SCM %{vendor} dinyahaktifkan atau tidak lagi tersedia." - remote_call_failed: "Panggilan ke alat kawalan jauh yang dikendalikan gagal dengan mesej '%{message}' (Kod: %{code})" - remote_invalid_response: "Menerima tindak balas yang tidak sah dari remote yang diuruskan." - remote_save_failed: "Tidak dapat menyimpan repositori dengan parameter yang diambil dari remote tersebut." + remote_call_failed: "Panggilan ke alat kawalan jauh yang diuruskan gagal dengan mesej '%{message}' (Kod: %{code})" + remote_invalid_response: "Tindak balas yang diterima tidak sah dari alat kawalan jauh yang diuruskan." + remote_save_failed: "Tidak dapat menyimpan repositori dengan parameter yang diambil dari alat kawalan jauh tersebut." git: instructions: managed_url: "Ini adalah URL repositori Git terurus (lokal)." @@ -2787,16 +2793,16 @@ ms: existing: "Pautkan repositori lokal" managed: "Cipta repositori baharu dalam OpenProject" storage: - not_available: "Penggunaan penyimpanan disk tidak tersedia untuk repositori." + not_available: "Penggunaan storan cakera tidak tersedia untuk repositori." update_timeout: "Simpan informasi ruang cakera terakhir yang diperlukan untuk repositori selama N minit.\nMemandangkan pengiraan ruang cakera yang diperlukan bagi repositori mungkin mahal, tinggikan nilai ini untuk mengurangkan kesan prestasinya." oauth_application_details: "Nilai rahsia pelanggan tidak akan dapat untuk diakses lagi setelah anda menutup tetingkap ini. Sila salin nilai-nilai ini ke tetapan Integrasi Nextcloud OpenProject:" oauth_application_details_link_text: "Pergi ke halaman tetapan" - setup_documentation_details: "JIka anda memerlukan bantuan mengkonfigurasikan penyimpanan fail baharu lihat dokumentasi berikut:" - setup_documentation_details_link_text: "Setup penyimpanan fail" - show_warning_details: "Untuk gunakan simpanan fail ini, ingat untuk mengaktifkan modul dan simpanan khusus di tetapan project setiap projek yang dikehendaki." + setup_documentation_details: "Jika anda memerlukan bantuan mengkonfigurasikan storan fail baharu, sila lihat dokumentasi berikut:" + setup_documentation_details_link_text: "Penyediaan Storan Fail" + show_warning_details: "Untuk gunakan storan fail ini, ingat untuk mengaktifkan modul dan storan khusus di tetapan projek setiap projek yang dikehendaki." subversion: existing_title: "Repositori Subversion sedia ada" - existing_introduction: "JIka anda mempunyai repositori Subversion sedia ada, anda boleh pautkan ia dengan OpenProject untuk mengaksesnya dari dalam aplikasi." + existing_introduction: "Jika anda mempunyai repositori Subversion sedia ada, anda boleh pautkan ia dengan OpenProject untuk mengaksesnya dari dalam aplikasi." existing_url: "URL sedia ada" instructions: managed_url: "Ini ialah URL repositori Subversion yang telah dikendalikan (lokal)." @@ -2804,8 +2810,8 @@ ms: managed_title: "Repositori Subversion diintegrasikan ke OpenProject" managed_introduction: "Biarkan OpenProject mencipta dan mengintegrasikan repositori Subversion lokal secara automatik." managed_url: "URL yang diuruskan" - password: "Repositori Kata laluan" - username: "Repositori nama pengguna " + password: "Kata Laluan Repositori " + username: " Nama Pengguna Repositori" truncated: "Harap maaf, kami terpaksa pangkas direktori ini ke fail %{limit}. Entri %{truncated} telah dipadam dari senarai." named_repository: "repositori %{vendor_name}" update_settings_successful: "Tetapan tersebut telah berjaya disimpan." @@ -2822,10 +2828,10 @@ ms: Jika CORS telah dibenarkan, ini ialah asal yang dibenarkan untuk mengakses API OpenProject.
Sila semak dokumentasi di pengepala Asal untuk cara nyatakan nilai-nilai yang dijangkakan. setting_apiv3_write_readonly_attributes: "Tulis akses pada atribut baca sahaja" setting_apiv3_write_readonly_attributes_instructions_html: > - Jika dibenarkan, API tersebut akan membenarkan para pentadbir untuk menulis atribut baca sahaja statik semasa penciptaan, seperti createdAt dan pengarang.
Amaran: Tetapan ini mempunyai kes guna untuk e.g., mengimport data, tapi membenarkan para pentadbir untuk meniru penciptaan item sebagai pengguna lain. Walau bagaimanapun, semua permintaan penciptaan sedang dilog oleh pengarang sebenar.
Untuk maklumat lanjut tentang atribut dan sumber yang disokong, sila lihat %{api_documentation_link}. + Jika dibenarkan, API tersebut akan membenarkan para pentadbir untuk menulis atribut baca sahaja statik semasa penciptaan, seperti diciptakanPada dan pengarang.
Amaran: Tetapan ini mempunyai kes guna untuk, cth., mengimport data, tetapi membenarkan para pentadbir untuk meniru penciptaan item sebagai pengguna lain. Walau bagaimanapun, semua permintaan penciptaan sedang dilog oleh pengarang sebenar.
Untuk maklumat lanjut tentang atribut dan sumber yang disokong, sila lihat %{api_documentation_link}. setting_apiv3_max_page_size: "Saiz halaman API maksimum" setting_apiv3_max_page_instructions_html: > - Tetapkan saiz halaman maksimum yang boleh direspon API. Ia tidak mungkin boleh melaksanakan permintaan API yang kembalikan lebih banyak nilai pada satu halaman.
Amaran: Sila ubah nilai ini hanya jika anda pasti anda perlukannya. Tetapkan ia ke nilai tinggi akan memberi kesan kepada prestasi yang ketara, manakala nilai yang lagi rendah dari pilihan mengikut halaman akan mengakibatkan ralat di paparan yang dipautkan. + Tetapkan saiz halaman maksimum yang boleh diberi maklum balas API. Ia tidak mungkin boleh melaksanakan permintaan API yang kembalikan lebih banyak nilai pada satu halaman.
Amaran: Sila ubah nilai ini hanya jika anda pasti anda perlukannya. Tetapkan ia ke nilai tinggi akan memberi kesan kepada prestasi yang ketara, manakala nilai yang lagi rendah dari pilihan mengikut halaman akan mengakibatkan ralat di paparan yang dipautkan. setting_apiv3_docs: "Dokumentasi" setting_apiv3_docs_enabled: "Benarkan halaman docs" setting_apiv3_docs_enabled_instructions_html: > @@ -2834,9 +2840,9 @@ ms: setting_email_delivery_method: "Kaedah penghantaran e-mel" setting_emails_salutation: "Menggelar pengguna dalam e-mel dengan" setting_sendmail_location: "Lokasi sendmail boleh dilaksanakan" - setting_smtp_enable_starttls_auto: "Gunakan secara automatik STARTTLS jika tersedia" + setting_smtp_enable_starttls_auto: "Gunakan STARTTLS secara automatik jika tersedia" setting_smtp_ssl: "Guna sambungan SSL" - setting_smtp_address: "Pelayan SMTP" + setting_smtp_address: "Server SMTP" setting_smtp_port: "Port SMTP" setting_smtp_authentication: "Pengesahan SMTP" setting_smtp_user_name: "Nama pengguna SMTP" @@ -2844,8 +2850,9 @@ ms: setting_smtp_domain: "Domain SMTP HELO" setting_activity_days_default: "Hari yang dipaparkan pada aktiviti projek" setting_app_subtitle: "Subtajuk aplikasi" - setting_app_title: "Nama aplikasi" + setting_app_title: "Tajuk aplikasi" setting_attachment_max_size: "Saiz maksimum lampiran" + setting_show_work_package_attachments: "Paparkan lampiran di tab fail secara default" setting_antivirus_scan_mode: "Mod pengimbas" setting_antivirus_scan_action: "Tindakan fail yang dijangkiti" setting_autofetch_changesets: "Perubahan repositori autofetch" @@ -2853,47 +2860,47 @@ ms: setting_available_languages: "Bahasa tersedia" setting_bcc_recipients: "Penerima salinan karbon tertutup (bcc)" setting_brute_force_block_after_failed_logins: "Sekat pengguna selepas bilangan percubaan log masuk gagal ini" - setting_brute_force_block_minutes: "Masa pengguna diblokkan untuk " + setting_brute_force_block_minutes: "Masa pengguna disekat untuk " setting_cache_formatted_text: "Teks yang diformat dalam cache" - setting_use_wysiwyg_description: "Pilih untuk aktifkan penyunting CKEditor5 WYSIWYG untuk semua pengguna secara asas. CKEditor mempunyai kefungsian terhad untuk GFM Markdown." - setting_column_options: "Senarai lajur pakej kerja asas" + setting_use_wysiwyg_description: "Pilih untuk aktifkan pengedit CKEditor5 WYSIWYG untuk semua pengguna secara default. CKEditor mempunyai kefungsian terhad untuk GFM Markdown." + setting_column_options: "Senarai kolum pakej kerja default" setting_commit_fix_keywords: "Membetulkan kata kunci" setting_commit_logs_encoding: "Pengekodan mesej komit" setting_commit_logtime_activity_id: "Aktiviti log masuk" setting_commit_logtime_enabled: "Benarkan pencatatan masa" setting_commit_ref_keywords: "Merujuk kata kunci" setting_consent_time: "Masa pemberian persetujuan" - setting_consent_info: "Teks maklumat kebenaran" - setting_consent_required: "Persetujuan diperlukan" + setting_consent_info: "Teks maklumat persetujuan" + setting_consent_required: "Persetujuan yang diperlukan" setting_consent_decline_mail: "Alamat mel hubungan pemberi persetujuan" setting_cross_project_work_package_relations: "Benarkan hubungan pakej kerja rentas projek" setting_first_week_of_year: "Minggu pertama dalam tahun mengandungi " setting_date_format: "Tarikh" - setting_default_language: "Bahasa tetapan asas" - setting_default_projects_modules: "Modul yang diaktifkan default untuk projek baru" - setting_default_projects_public: "Projek baharu adalah awam secara asas" + setting_default_language: "Bahasa default" + setting_default_projects_modules: "Modul yang diaktifkan secara default untuk projek baharu" + setting_default_projects_public: "Projek baharu adalah awam secara default" setting_diff_max_lines_displayed: "Jumlah maksimum baris perbezaan yang dipaparkan" - setting_display_subprojects_work_packages: "Paparkan subprojek pakej kerja pada projek utama secara lalai" + setting_display_subprojects_work_packages: "Paparkan subprojek pakej kerja di projek utama secara default" setting_emails_footer: "Pengaki e-mel" setting_emails_header: "Pengepala e-mel" - setting_email_login: "Guna e-mel sebagai log masuk" + setting_email_login: "Guna e-mel untuk log masuk" setting_enabled_scm: "Aktifkan SCM" - setting_enabled_projects_columns: "Lajur dalam senarai projek dipaparkan secara lalai" - setting_feeds_enabled: "Aktifkan feed" - setting_ical_enabled: "Bolehkan langganan iCalendar" + setting_enabled_projects_columns: "Kolum dalam senarai projek dipaparkan secara default" + setting_feeds_enabled: "Aktifkan Feed" + setting_ical_enabled: "Benarkan langganan iCalendar" setting_feeds_limit: "Had kandungan feed " setting_file_max_size_displayed: "Saiz maksimum fail teks ditampilkan sebaris " setting_host_name: "Nama hos" setting_invitation_expiration_days: "Pengaktifan e-mel tamat tempoh selepas" - setting_work_package_done_ratio: "Pengiraan kemajuan" + setting_work_package_done_ratio: "Pengiraan perkembangan" setting_work_package_done_ratio_field: "Berdasarkan kerja" setting_work_package_done_ratio_status: "Berdasarkan status" setting_work_package_done_ratio_explanation_html: > - Di mod berasaskan kerja, % yang telah selesai dikira daripada berapa banyak kerja yang telah siap berhubungan dengan jumlah kerja. Di mod berasaskan status, setiap status mempunyai kadar % yang telah selesai berkait dengannya. Pertukaran status akan mengubah % yang telah selesai. + Di mod berasaskan kerja, % Lengkap dikira daripada berapa banyak kerja yang telah siap berhubungan dengan jumlah kerja. Di mod berasaskan status, setiap status mempunyai kadar % Lengkap berkait dengannya. Pertukaran status akan mengubah % Lengkap. setting_work_package_properties: "Ciri-ciri pakej kerja" setting_work_package_startdate_is_adddate: "Guna tarikh semasa sebagai tarikh mula untuk pakej kerja baharu" - setting_work_packages_projects_export_limit: "Pakej kerja / had eksport projek" - setting_journal_aggregation_time_minutes: "Tindakan pengguna diagregatkan dalam" + setting_work_packages_projects_export_limit: "Pakej kerja / Had eksport projek" + setting_journal_aggregation_time_minutes: "Tindakan pengguna dikumpulkan dalam" setting_log_requesting_user: "Log masuk pengguna yang direkodkan, nama, dan alamat mel untuk semua permintaan" setting_login_required: "Pengesahan diperlukan" setting_mail_from: "Alamat e-mel pengeluaran" @@ -2903,8 +2910,8 @@ ms: setting_mail_handler_ignore_filenames: "Lampiran mel yang diabaikan" setting_new_project_user_role_id: "Peranan yang diberikan kepada pengguna bukan pentadbir yang mencipta projek" setting_password_active_rules: "Kelas-kelas karakter yang aktif" - setting_password_count_former_banned: "Jumlah kebanyakkan kata laluan yang telah digunakan yang disekat untuk penggunaan semula" - setting_password_days_valid: "Jumlah hari selepas untuk menguatkuasakan pertukaran kata laluan" + setting_password_count_former_banned: "Jumlah kebanyakkan kata laluan buat masa ini yang telah digunakan yang disekat untuk penggunaan semula" + setting_password_days_valid: "Jumlah hari, selepas untuk menguatkuasakan pertukaran kata laluan" setting_password_min_length: "Panjang minimum" setting_password_min_adhered_rules: "Bilangan minimum kelas yang diperlukan" setting_per_page_options: "Pilihan objek setiap halaman" @@ -2917,10 +2924,10 @@ ms: setting_repositories_automatic_managed_vendor: "Jenis vendor repositori automatik" setting_repositories_encodings: "Pengekodan repositori" setting_repository_authentication_caching_enabled: "Bolehkan caching untuk permintaan pengesahan perisian kawalan versi" - setting_repository_storage_cache_minutes: "Saiz cache disk repositori" - setting_repository_checkout_display: "Tunjukkan arahan checkout" - setting_repository_checkout_base_url: "URL pangkalan checkout" - setting_repository_checkout_text: "Teks arahan checkout" + setting_repository_storage_cache_minutes: "Saiz cache cakera repositori" + setting_repository_checkout_display: "Paparkan arahan pengeluaran" + setting_repository_checkout_base_url: "URL pangkalan pengeluaran" + setting_repository_checkout_text: "Teks arahan pengeluaran" setting_repository_log_display_limit: "Bilangan maksimum semakan yang dipaparkan pada log fail" setting_repository_truncate_at: "Bilangan maksimum fail yang dipaparkan dalam pelayar repositori" setting_rest_api_enabled: "Benarkan perkhidmatan web REST" @@ -2932,28 +2939,30 @@ ms: setting_sys_api_enabled: "Mengaktifkan pengurusan repositori perkhidmatan web" setting_sys_api_description: "Perkhidmatan web pengurusan repositori menyediakan integrasi dan kebenaran pengguna untuk mengakses repositori." setting_time_format: "Masa" - setting_accessibility_mode_for_anonymous: "Mengaktifkan mod kebolehcapaian untuk pengguna tanpa nama" + setting_accessibility_mode_for_anonymous: "Mengaktifkan mod kebolehcapaian untuk pengguna anonim" setting_user_format: "Format nama pengguna" - setting_user_default_timezone: "Zon masa asas pengguna" + setting_user_default_timezone: "Zon masa default pengguna" setting_users_deletable_by_admins: "Akaun pengguna yang boleh dipadam oleh pentadbir" setting_users_deletable_by_self: "Pengguna dibenarkan memadam akaun mereka" setting_welcome_text: "Teks blok selamat datang" setting_welcome_title: "Tajuk blok selamat datang" - setting_welcome_on_homescreen: "Paparkan blok selamat datang pada skrin utama" - setting_work_package_list_default_highlighting_mode: "Mod perserlahan default" - setting_work_package_list_default_highlighted_attributes: "Atribut perserlahan sebaris default" + setting_welcome_on_homescreen: "Paparkan blok selamat datang di skrin utama" + setting_work_package_list_default_highlighting_mode: "Mod penyorotan default" + setting_work_package_list_default_highlighted_attributes: "Atribut disorot sebaris default" setting_working_days: "Hari bekerja" settings: attachments: whitelist_text_html: > - Jelaskan senarai sambungan fail yang sah dan/atau jenis mime bagi fail yang telah dimuat naik.
Masukkan sambungan fail (e.g., %{ext_example}) atau jenis mime (e.g., %{mime_example}).
Tinggalkan kosong untuk benarkan sebarang jenis fail untuk dimuat naik. Pelbagai nilai juga dibenarkan. (satu baris untuk setiap nilai) + Jelaskan senarai sambungan fail yang sah dan/atau jenis mime bagi fail yang telah dimuat naik.
Masukkan sambungan fail (cth., %{ext_example}) atau jenis mime (cth., %{mime_example}).
Tinggalkan kosong untuk benarkan sebarang jenis fail untuk dimuat naik. Pelbagai nilai juga dibenarkan. (satu baris untuk setiap nilai) + show_work_package_attachments: > + Menyahaktifkan pilihan ini akan menyorokkan senarai lampiran di tab fail pakej kerja untuk projek baharu. Fail yang dilampirkan di deskripsi pakej kerja masih akan dimuat naik di simpanan lampiran dalaman. antivirus: title: "Pengimbasan virus" clamav_ping_failed: "Gagal untuk sambung ke daemon ClamAV. Semak semula konfigurasi tersebut dan cuba lagi." remaining_quarantined_files_html: > Pengimbasan virus telah dinyahaktifkan. %{file_count} kekal di dalam kuarantin. Untuk menyemak fail yang dikuarantin, sila lawati pautan ini: %{link} remaining_scan_complete_html: > - Fail yang berbaki telah diimbas. Terdapat %{file_count} dalam kuarantin. Anda sedang diarahkan ke halaman kuarantin. Guna halaman ini untuk memadam atau mengatasi fail yang dikuarantinkan. + Fail yang berbaki telah diimbas. Terdapat %{file_count} dalam kuarantin. Anda sedang diarahkan ke halaman kuarantin. Guna halaman ini untuk memadam atau mengganti fail yang dikuarantinkan. remaining_rescanned_files: > Pengimbasan virus telah berjaya diaktifkan. Terdapat %{file_count} yang sebelum ini dimuat naik dan masih perlu diimbas. Proses ini telah dijadualkan di latar belakang. Fail tersebut akan kekal boleh diakses semasa pengimbasan. upsale: @@ -2962,33 +2971,33 @@ ms: delete: "Padam fail tersebut" quarantine: "Kuarantin fail tersebut" instructions_html: > - Pilih tindakan untuk dilaksanakan ke fail yang didapati mempunyai virus:
  • %{quarantine_option}: Kuarantinkan fail tersebut untuk elakkan pengguna dari mengaksesnya. Para pentadbir boleh menyemak dan memadamkan fail yang dikuarantin di pentadbiran.
  • %{delete_option}: Padamkan fail dengan segera.
+ Pilih tindakan untuk dilaksanakan ke fail yang didapati mempunyai virus:
  • %{quarantine_option}: Kuarantinkan fail tersebut untuk elakkan pengguna daripada mengaksesnya. Para pentadbir boleh menyemak dan memadamkan fail yang dikuarantin di pentadbiran.
  • %{delete_option}: Padamkan fail dengan segera.
modes: - clamav_socket_html: Masukkan soket ke daemon, e.g., %{example} + clamav_socket_html: Masukkan soket ke clamd daemon, cth., %{example} clamav_host_html: Masukkan nama hos dan port ke clamd daemon dipisahkan dengan kolon. cth., %{example} description_html: > - Pilih mod di mana integrasi pengimbas antivirus perlu dioperasikan.
  • %{disabled_option}: Fail yang telah dimuat naik belum diimbas untuk virus.
  • %{socket_option}: Anda telah tetapkan ClamAV di server sama seperti OpenProject dan imbasan daemon clamd sedang dilancarkan di latar belakang
  • %{host_option}: Anda sedang strim fail ke hos imbasan virus luar. - brute_force_prevention: "Penyekatan pegguna secara automatik" + Pilih mod di mana integrasi pengimbas antivirus perlu dioperasikan.
    • %{disabled_option}: Fail yang telah dimuat naik belum diimbas untuk virus.
    • %{socket_option}: Anda telah tetapkan ClamAV di server sama seperti OpenProject dan imbasan daemon clamd sedang dilancarkan di latar belakang
    • %{host_option}: Anda sedang strim fail ke hos imbasan virus luar.
    + brute_force_prevention: "Penyekatan pengguna secara automatik" date_format: first_date_of_week_and_year_set: > Jika pilihan "%{day_of_week_setting_name}" atau "%{first_week_setting_name}" telah ditetapkan, pilihan yang lain juga perlu ditetapkan untuk mengelakkan ketidakselarasan di bahagian muka depan. first_week_of_year_text_html: > - Pilih tarikh pada Januari yang mengandungi minggu pertama dari tahun tersebut. Nilai ini sekali dengan hari pertama dari minggu tersebut menentukan jumlah mingguan dalam setahun. Untuk maklumat lanjut, sila lihat dokumentasi kamibagi topik ini. + Pilih tarikh pada Januari yang mengandungi minggu pertama dari tahun tersebut. Nilai ini sekali dengan hari pertama dari minggu tersebut menentukan jumlah mingguan dalam setahun. Untuk maklumat lanjut, sila lihat dokumentasi kamibagi topik ini. experimental: - save_confirmation: Awas! Risiko kehilangan data! Hanyalah aktifkan ciri eksperimen jika anda tidak keberatan melanggar pemasangan OpenProject anda dan kehilangan kesemua datanya. - warning_toast: Bendera ciri ialah tetapan yang mengaktifkan ciri-ciri yang masih dalam pembangunan. Ia hanyalah patut digunakan atas tujuan pemeriksaan. Ia tidak akan diaktifkan pada pemasangan OpenProject yang memegang data penting. Ciri-ciri ini kemungkinan besar akan merosakkan data anda. Gunakannya dengan risiko anda sendiri. - feature_flags: Fitur flags + save_confirmation: Awas! Risiko kehilangan data! Hanyalah aktifkan fitur eksperimen jika anda tidak keberatan melanggar pemasangan OpenProject anda dan kehilangan kesemua datanya. + warning_toast: Bendera fitur ialah tetapan yang mengaktifkan fitur yang masih dalam pembangunan. Ia hanyalah patut digunakan atas tujuan pemeriksaan. Ia tidak akan diaktifkan pada pemasangan OpenProject yang memegang data penting. Fitur ini kemungkinan besar akan merosakkan data anda. Gunakannya dengan risiko anda sendiri. + feature_flags: Bendera fitur general: "Umum" highlighting: mode_long: - inline: "Serlahkan talian atribut" - none: "Tiada penyerlahan" + inline: "Sorotkan talian atribut" + none: "Tiada sorotan" status: "Keseluruhan baris mengikut Status" type: "Keseluruhan baris mengikut Jenis" priority: "Keseluruhan baris mengikut Keutamaan" icalendar: - enable_subscriptions_text_html: "Benarkan pengguna dengan kebenaran yang diperlukan untuk melanggan kalendar OpenProject dan akses informasi pakej kerja melalui kalendar pelanggan luar.\nNota: Sila baca tentang langganan iCalendar untuk fahami tentang potensi risiko keselamatan sebelum membenarkannya." - language_name_being_default: "%{language_name} (asas)" + enable_subscriptions_text_html: "Benarkan pengguna dengan kebenaran yang diperlukan untuk melanggan kalendar OpenProject dan akses maklumat pakej kerja melalui kalendar pelanggan luaran.\nPerhatian: Sila baca tentang langganan iCalendar untuk fahami tentang potensi risiko keselamatan sebelum membenarkannya." + language_name_being_default: "%{language_name} (default)" notifications: events_explanation: "Tetapkan mana-mana peristiwa untuk e-mel dihantar keluar. Pakej kerja dikecualikan dari senarai ini kerana pemberitahuannya boleh dikonfigurasikan khusus ke setiap pengguna." delay_minutes_explanation: "Penghantaran e-mel mungkin akan ditangguhkan untuk membenarkan pengguna dengan pemberitahuan dalam aplikasi yang dikonfigurasikan, untuk mengesahkan pemberitahuan dalam aplikasi sebelum e-mel dihantarkan. Pengguna yang membaca pemberitahuan dalam aplikasi tidak akan menerima e-mel, oleh kerana pemberitahuan tersebut telah pun dibaca." @@ -2998,23 +3007,23 @@ ms: heading: "Atribut projek" label_new_attribute: "Atribut projek" label_new_section: "Bahagian" - label_edit_section: "Sunting tajuk" + label_edit_section: "Edit tajuk" label_section_actions: "Tindakan bahagian" - heading_description: "Atribut projek ini muncul dalam halaman gambaran keseluruhan setiap projek. Anda boleh menambah atribut baharu, kumpulkan mereka dalam bahagian dan susun semula mereka mengikut kehendak anda. Atribut ini boleh didayakan atau dinyahdayakan tetapi tidak boleh disusun semula pada tahap projek. " + heading_description: "Atribut projek ini muncul dalam halaman gambaran keseluruhan setiap projek. Anda boleh menambah atribut baharu, kumpulkan ia dalam bahagian dan susunkannya semula mengikut kehendak anda. Atribut ini boleh didayakan atau dinyahdayakan tetapi tidak boleh disusun semula pada tahap projek. " label_project_custom_field_actions: "Tindakan atribut projek " label_no_project_custom_fields: "Tiada atribut projek yang ditakrifkan dalam bahagian ini" edit: - description: "Perubahan pada atribut projek ini akan ini akan tercermin dalam semua projek di mana ia diaktifkan. Atribut yang diperlukan tidak boleh dinyahdayakan berdasarkan setiap projek." + description: "Perubahan pada atribut projek ini akan dipantulkan ke dalam semua projek di mana ia telah diaktifkan. Atribut yang diperlukan tidak boleh dinyahdayakan berdasarkan setiap projek." new: heading: "Atribut baharu" - description: "Perubahan pada atribut projek ini akan ini akan tercermin dalam semua projek di mana ia diaktifkan. Atribut yang diperlukan tidak boleh dinyahdayakan berdasarkan setiap projek." + description: "Perubahan pada atribut projek ini akan dipantulkan ke dalam semua projek di mana ia telah diaktifkan. Atribut yang diperlukan tidak boleh dinyahdayakan berdasarkan setiap projek." projects: - missing_dependencies: "Modul projek %{module} telah diperiksa yang bergantung pada %{dependencies}. Anda perlu periksa kebergantungan ini juga." + missing_dependencies: "Modul projek %{module} telah disemak yang bergantung pada %{dependencies}. Anda perlu menyemak kebergantungan ini juga." section_new_projects: "Tetapan untuk projek baharu" section_project_overview: "Tetapan untuk senarai projek" session: "Sesi" user: - default_preferences: "Pilihan asas" + default_preferences: "Pilihan default" display_format: "Format paparan" deletion: "Pemadaman" working_days: @@ -3036,42 +3045,42 @@ ms: skip_last_comma: "palsu" text_accessibility_hint: "Mod kebolehcapaian direka untuk pengguna yang buta, kurang upaya atau yang mempunyai masalah penglihatan. Untuk yang kemudian, unsur yang difokuskan ditekankan secara khusus. Harap maklum, modul tunggakan tersebut tidak tersedia dalam mod ini." text_access_token_hint: "Token akses membenarkan anda untuk memberikan aplikasi luaran akses kepada sumber data OpenProject." - text_analyze: "Analisis lanjut: %{subject}" + text_analyze: "Analisis selanjutnya: %{subject}" text_are_you_sure: "Adakah anda pasti?" text_are_you_sure_continue: "Adakah anda pasti anda ingin teruskan?" text_are_you_sure_with_children: "Padam pakej kerja dan semua pakej kerja anak?" text_are_you_sure_with_project_custom_fields: "Memadam atribut ini akan memadam nilainya dalam semua projek. Adakah anda pasti anda ingin lakukan ini?" text_assign_to_project: "Tugaskan ke projek" text_form_configuration: > - Anda boleh mengubah suai medan yang akan dipaparkan dalam XX pakej kerja. Anda boleh dengan bebas mengumpulkan medan tersebut untuk mencerminkan keperluan domain anda. - text_form_configuration_required_attribute: "Atribut ditandakan sebagai diperlukan dan dengan itu sentiasa ditunjukkan" + Anda boleh mengubah suai ruangan yang akan dipaparkan dalam borang pakej kerja. Anda boleh mengumpulkan ruangan tersebut dengan bebas untuk memantulkan keperluan domain anda. + text_form_configuration_required_attribute: "Atribut ditandakan sebagai diperlukan dan dengan itu sentiasa dipaparkan" text_caracters_maximum: "%{count} aksara maksimum." text_caracters_minimum: "Mesti sekurang-kurangnya %{count} bilangan aksara." - text_comma_separated: "Beberapa nilai dibenarkan (Dipisahkan dengan koma). " + text_comma_separated: "Beberapa nilai dibenarkan (dipisahkan dengan koma). " text_comment_wiki_page: "Komen pada halaman wiki: %{page}" text_custom_field_possible_values_info: "Satu baris untuk setiap nilai" text_custom_field_hint_activate_per_project: > - Apabila menggunakan medan tersuai: Ingatlah bahawa medan tersuai perlu diaktifkan untuk setiap projek juga. + Apabila menggunakan ruang tersuai: Ingatlah bahawa ruang tersuai perlu diaktifkan untuk setiap projek juga. text_custom_field_hint_activate_per_project_and_type: > - Medan tersuai perlu diaktifkan untuk setiap jenis pakej kerja dan setiap projek. + Ruang tersuai perlu diaktifkan untuk setiap jenis pakej kerja dan setiap projek. text_wp_status_read_only_html: > - Edisi Enterprise akan menambahkan segala tambahan ke ruangan status pakej kerja:
    • Benarkan untuk menandakan pakej kerja untuk baca sahaja untuk status tertentu
    + Edisi Enterprise akan menambahkan segala tambahan ke ruang status pakej kerja:
    • Benarkan untuk menandakan pakej kerja untuk baca sahaja pada status tertentu
    text_project_custom_field_html: > - Edisi Enterprise akan menambahkan segala jenis tambahan ke ruang tersuai projek:
    • Tambah ruang tersuai ke projek ke senarai projek anda untuk ciptakan paparan portfolio project
    + Edisi Enterprise akan menambahkan segala jenis tambahan ke ruang tersuai projek:
    • Tambah ruang tersuai ke projek ke senarai Projek anda untuk ciptakan paparan portfolio project
    text_custom_logo_instructions: > - Logo putih pada latar belakang telus disyorkan. Untuk hasil yang terbaik pada kedua-dua, paparan konvensional dan paparan retina, pastikan dimensi imej adalah 460px x 60px. + Logo putih pada latar belakang telus disarankan. Untuk hasil yang terbaik pada kedua-duanya, paparan konvensional dan paparan retina, pastikan dimensi imej adalah 460px kali 60px. text_custom_export_logo_instructions: > - Ini merupakan logo yang akan muncul dalam PDF eksport anda. Ia perlu menjadi fail imej PNG atau JPEG. Logo hitam atau bewarna pada latar belakang telus atau putih disyorkan. + Ini merupakan logo yang akan muncul dalam eksport PDF anda. Ia perlu menjadi fail imej PNG atau JPEG. Logo hitam atau bewarna pada latar belakang telus atau putih disarankan. text_custom_export_cover_instructions: > - Ini merupakan imej yang akan muncul pada latar belakang muka hadapan PDF eksport anda. Perlu menjadi fail imej PNG atau JPEG berukuran kira-kira 800px lebar dan 500px tinggi. + Ini merupakan imej yang akan muncul pada latar belakang muka hadapan eksport PDF anda. Ia perlu menjadi fail imej PNG atau JPEG berukuran kira-kira 800px lebar dan 500px tinggi. text_custom_favicon_instructions: > - ini ialah ikon kecil yang akan dipaparkan di tetingkap laman layar/tab di sebelah tajuk halaman tersebut. Ia perlulah meggunakan fail imej PNG yang bersaiz 32 kali 32 piksel kuasa dua bersertaan latar belakang lutsinar. + ini ialah ikon kecil yang akan dipaparkan di tetingkap pelayar/tab di sebelah tajuk halaman tersebut. Ia perlulah menggunakan fail imej PNG yang bersaiz 32 kali 32 piksel kuasa dua bersertaan latar belakang telus. text_custom_touch_icon_instructions: > - Ini merupakan ikon yang akan muncul dalam telefon bimbit atau tablet anda apabila anda meletakkan penanda pada skrin utama anda. Perlu menjadi fail imej PNG berukuran 180 x 180 piksel bersaiz persegi. Sila pastikan latar belakang imej tidak telus jika tidak ia akan kelihatan buruk pada iOS. + Ini merupakan ikon yang akan muncul dalam telefon bimbit atau tablet anda apabila anda meletakkan penanda pada skrin utama anda. Perlu menjadi fail imej PNG berukuran 180 kali 180 piksel persegi. Sila pastikan latar belakang imej tidak telus, jika tidak, ia akan kelihatan buruk di iOS. text_database_allows_tsv: "Pangkalan data membenarkan TSVector (pilihan)" - text_default_administrator_account_changed: "Akaun asas pentadbir diubah" - text_default_encoding: "Asas: UTF-8" - text_destroy: "Hapus" + text_default_administrator_account_changed: "Akaun default pentadbir diubah" + text_default_encoding: "Default: UTF-8" + text_destroy: "Padam" text_destroy_with_associated: "Terdapat objek tambahan yang berkaitan dengan pakej kerja yang perlu dipadam. Objek tersebut adalah dari jenis berikut:" text_destroy_what_to_do: "Apakah yang anda ingin lakukan?" text_diff_truncated: "... Perbezaan ini dipendekkan kerana ia melebihi saiz maksimum yang boleh dipaparkan." @@ -3079,9 +3088,9 @@ ms: text_enumeration_category_reassign_to: "Tetapkan semula mereka ke nilai ini:" text_enumeration_destroy_question: "%{count} objek ditugaskan pada nilai ini." text_file_repository_writable: "Lampiran direktori boleh ditulis" - text_git_repo_example: "repositori kosong dan lokal (e.g. /gitrepo, c:\\gitrepo)" + text_git_repo_example: "repositori kosong dan lokal (cth. /gitrepo, c:\\gitrepo)" text_hint_date_format: "Masukkan tarikh dalam format TTTT-BB-HH. Format lain mungkin akan diubah ke tarikh yang tidak diingini." - text_hint_disable_with_0: "Nota: Nyahaktifkan dengan 0" + text_hint_disable_with_0: "Perhatian: Nyahaktifkan dengan 0" text_hours_between: "Antara %{min} dan %{max} jam." text_work_package_added: "Pakej kerja %{id} telah dilaporkan oleh %{author}." text_work_package_category_destroy_assignments: "Padam kategori tugasan" @@ -3091,7 +3100,7 @@ ms: text_work_package_watcher_added: "Anda telah ditambah sebagai pemerhati untuk Pakej kerja %{id} oleh %{watcher_changer}." text_work_package_watcher_removed: "Anda telah dikeluarkan dari pemerhati Pakej kerja %{id} oleh %{watcher_changer}." text_work_packages_destroy_confirmation: "Adakah anda pasti anda ingin memadam pakej kerja yang dipilih tersebut?" - text_work_packages_ref_in_commit_messages: "Merujuk dan membaiki pakej kerja dalam mesej kommit" + text_work_packages_ref_in_commit_messages: "Merujuk dan memperbaiki pakej kerja dalam mesej kommit" text_journal_added: "%{label} %{value} ditambah" text_journal_attachment_added: "%{label} %{value} ditambah sebagai lampiran" text_journal_attachment_deleted: "%{label} %{old} dikeluarkan sebagai lampiran" @@ -3114,21 +3123,21 @@ ms: text_min_max_length_info: "0 bermakna tiada sekatan" text_no_roles_defined: Tiada peranan ditentukan. text_no_access_tokens_configurable: "Tiada token akses yang boleh dikonfigurasikan." - text_no_configuration_data: "Peranan, jenis, status pakej kerja dan aliran kerja belum dikonfigurasikan lagi. Sangat disyorkan untuk memuatkan konfigurasi lalai. Anda akan dapat mengubahnya selepas dimuatkan." + text_no_configuration_data: "Peranan, jenis, status pakej kerja dan aliran kerja belum dikonfigurasikan lagi. Sangat disarankan untuk memuatkan konfigurasi default. Anda akan dapat mengubahnya selepas dimuatkan." text_no_notes: "Tiada komen yang tersedia untuk pakej kerja ini." - text_notice_too_many_values_are_inperformant: "Maklum: Memaparkan lebih daripada 100 item setiap halaman akan meningkatkan masa muat halaman." + text_notice_too_many_values_are_inperformant: "Perhatian: Memaparkan lebih daripada 100 item setiap halaman akan meningkatkan masa muat halaman." text_notice_security_badge_displayed_html: > - Nota: jika dibenarkan, ini akan paparkan lambang bersertaan status pemasangan di panel pentadbiran, dan di halaman utama. Ia hanya akan dipaparkan ke para pentadbir sahaja.
    Lambang tersebut akan menyemak versi OpenProject terkini terhadap pangkalan data keluaran rasmi OpenProject untuk memaklumkan anda tentang sebarang kemas kini atau kelemahan yang diketahui. Untuk maklumat lanjut bagi penyediaan semakan, data apa yang diperlukan untuk menyediakan kemas kini tersedia, and bagaimana untuk menyahaktifkan semakan ini, sila kunjungi dokumentasi konfigurasi. - text_own_membership_delete_confirmation: "Anda akan mengeluarkan beberapa atau semua kebenaran anda dan mungkin tidak lagi dapat mengedit projek ini selepas itu.\nAdakah anda pasti anda ingin meneruskan?" + Perhatian: jika dibenarkan, ini akan paparkan lambang bersertaan status pemasangan di %{information_panel_label} panel pentadbiran, dan di halaman utama. Ia hanya akan dipaparkan ke para pentadbir sahaja.
    Lambang tersebut akan menyemak versi OpenProject terkini anda terhadap pangkalan data keluaran rasmi OpenProject untuk memaklumkan anda tentang sebarang kemas kini atau kelemahan yang diketahui. Untuk maklumat lanjut bagi penyediaan semakan, data apa yang diperlukan untuk menyediakan kemas kini tersedia, and bagaimana untuk menyahaktifkan semakan ini, sila kunjungi dokumentasi konfigurasi. + text_own_membership_delete_confirmation: "Anda akan mengeluarkan beberapa atau semua kebenaran anda dan mungkin tidak lagi dapat mengedit projek ini selepas itu.\nAdakah anda pasti anda ingin teruskan?" text_plugin_assets_writable: "Aset plugin direktori yang boleh ditulis" text_powered_by: "Dikuasakan oleh %{link}" - text_project_identifier_info: "Hanya huruf kecil (a-z), nombor, sengkang dan tanda garis bawah adalah dibernarkan, mesti mula dengan huruf kecil." + text_project_identifier_info: "Hanya huruf kecil (a-z), nombor, sengkang dan tanda garis bawah adalah dibenarkan, mesti mula dengan huruf kecil." text_reassign: "Tugaskan semula ke pakej kerja:" text_regexp_info: "cth. ^[A-Z0-9]+$" text_regexp_multiline: 'Regex digunakan dalam mod berbilang baris. cth., ^---\s+' text_repository_usernames_mapping: "Pilih atau kemas kini pengguna OpenProject yang dipetakan ke setiap nama pengguna yang dijumpai dalam log repositori.\nPengguna dengan OpenProject dan nama pengguna repositori atau e-mel yang sama dipetakan secara automatik. " text_status_changed_by_changeset: "Dilaksanakan dalam set perubahan %{value}." - text_table_difference_description: "Dalam jadual ini, %{entries} yang tunggal ditunjukkan. Anda boleh lihat perbezaan antara mana-mana dua kemasukan dengan mula-mula memilih kotak semak dalam jadual. Apabila butang di bawah jadual ditekan, perbezaan akan ditunjukkan." + text_table_difference_description: "Dalam jadual ini, %{entries} yang tunggal dipaparkan. Anda boleh lihat perbezaan antara mana-mana dua entri dengan mula memilih kotak semak dalam jadual. Apabila butang di bawah jadual ditekan, perbezaan akan ditunjukkan." text_time_logged_by_changeset: "Dilaksanakan dalam set perubahan %{value}." text_tip_work_package_begin_day: "pakej kerja bermula pada hari ini" text_tip_work_package_begin_end_day: "pakej kerja yang bermula dan berakhir pada hari ini" @@ -3138,20 +3147,20 @@ ms: text_user_invited: Pengguna telah dijemput dan sedang menunggu pendaftaran. text_user_wrote: "%{value} menulis:" text_warn_on_leaving_unsaved: "Pakej kerja tersebut mengandungi teks yang belum disimpan yang akan hilang jika anda tinggalkan halaman ini." - text_what_did_you_change_click_to_add_comment: "Apakah yang anda ubah? Klik untuk tambah komen" + text_what_did_you_change_click_to_add_comment: "Apakah yang telah anda ubah? Klik untuk tambah komen" text_wiki_destroy_confirmation: "Adakah anda pasti anda ingin memadam wiki ini dan semua kandungannya?" text_wiki_page_destroy_children: "Padam halaman anak dan semua keturunannya" text_wiki_page_destroy_question: "Halaman ini mempunyai %{descendants} halaman anak dan keturunannya. Apakah yang anda ingin lakukan?" text_wiki_page_nullify_children: "Kekalkan halaman anak sebagai halaman berhubung" text_wiki_page_reassign_children: "Tetapkan semula halaman anak kepada halaman induk ini" - text_workflow_edit: "Pilih satu peranan dan satu jenis untuk sunting aliran kerja tersebut" + text_workflow_edit: "Pilih satu peranan dan satu jenis untuk edit aliran kerja tersebut" text_zoom_in: "Zum masuk" text_zoom_out: "Zum keluar" text_setup_mail_configuration: "Konfigurasi pembekal e-mel anda" help_texts: views: project: > - %{plural} sentiasa dilampirkan kepada projek. Anda hanya boleh memilih projek disini dimana modul %{plural} tersebut adalah aktif. Selepas mencipta satu %{singular} anda boleh menambah pakej kerja dari projek lain kepadanya. + %{plural} sentiasa dilampirkan kepada projek. Anda hanya boleh memilih projek disini dimana modul %{plural} adalah aktif. Selepas mencipta satu %{singular} anda boleh menambah pakej kerja dari projek lain kepadanya. public: "Terbitkan paparan ini, membenarkan pengguna lain untuk akses paparan anda. Pengguna dengan kebenaran 'Urus paparan awam' boleh ubah suai atau keluarkan pertanyaan awam. Ini tidak akan mempengaruhi keterlihatan hasil pakej kerja dalam paparan itu dan bergantung kepada kebenaran mereka, pengguna mungkin melihat hasil yang berbeza." favoured: "Tandakan paparan ini sebagai kegemaran dan tambah ke bar sisi pandangan yang disimpan di sisi kiri." time: @@ -3163,31 +3172,35 @@ ms: time: "%I:%M %p" pm: "petang" timeframe: - show: "Tunjukkan tempoh masa" + show: "Paparkan tempoh masa" end: "kepada" start: "dari" title_remove_and_delete_user: Keluarkan pengguna yang dijemput dari projek dan padamkan beliau. title_enterprise_upgrade: "Naik taraf untuk membuka lebih ramai pengguna." tooltip_user_default_timezone: > - Zon masa asas untuk pengguna baharu. Boleh diubah dalam tetapan pengguna. + Zon masa default untuk pengguna baharu. Boleh diubah dalam tetapan pengguna. tooltip_resend_invitation: > Hantar jemputan e-mel yang lain dengan token baharu jika yang lama sudah tamat tempohnya atau pengguna tidak menerima e-mel asal. Boleh juga digunakan untuk pengguna aktif untuk memilih kaedah pengesahan baharu. Apabila digunakan dengan pengguna aktif, status mereka akan berubah kepada 'dijemput'. tooltip: setting_email_login: > - Jika diaktifkan pengguna tidak akan dapat untuk memilih log masuk semasa pendaftaran. Sebaliknya e-mel yang mereka berikan akan digunakan sebagai log masuk. Pentadbir masih boleh mengubah log masuk berasingan. + Jika diaktifkan, pengguna tidak akan dapat untuk memilih log masuk semasa pendaftaran. Sebaliknya e-mel yang mereka berikan akan digunakan sebagai log masuk. Pentadbir masih boleh mengubah log masuk secara berasingan. queries: apply_filter: Gunakan saringan pra-konfigurasi configure_view: - heading: Konfigurasi paparan + heading: Paparan konfigurasi columns: - input_label: "Tambah lajur" - input_placeholder: "Pilih satu lajur" - drag_area_label: "Urus dan susun semula lajur" + input_label: "Tambah kolum" + input_placeholder: "Pilih satu kolum" + drag_area_label: "Urus dan susun semula kolum" + sort_by: + automatic: + heading: "Automatik" + description: "Menyusun %{plural} oleh satu atau lebih kriteria susunan. Anda akan kehilangan susunan sebelumnya." top_menu: additional_resources: "Sumber tambahan" getting_started: "Sedang bermula" help_and_support: "Bantuan dan sokongan" - total_progress: "Jumlah kemajuan" + total_progress: "Jumlah perkembangan" user: all: "semua" active: "aktif" @@ -3201,15 +3214,15 @@ ms: assign_random_password: "Tetapkan kata laluan rawak (dihantar ke pengguna melalui e-mel)" blocked: "dikunci sementara" blocked_num_failed_logins: - other: "dikunci sementara (satu percubaan log masuk gagal)" + other: "dikunci sementara (%{count} percubaan log masuk gagal)" confirm_status_change: "Anda akan mengubah status '%{name}'. Adakah anda pasti anda ingin teruskan?" - deleted: "Padam pengguna" + deleted: "Pengguna yang dipadam" error_status_change_failed: "Penukaran status pengguna gagal kerana ralat tersebut: %{errors}" invite: Jemput pengguna melalui e-mel invited: dijemput lock: "Kunci secara kekal" locked: "dikunci secara kekal" - no_login: "Pengguna ini mengesahkan melalui log masuk dengan kata laluan. Kerana ia dilumpuhkan, mereka tidak dapat log masuk." + no_login: "Pengguna ini mengesahkan melalui log masuk dengan kata laluan. Kerana ia tidak dibenarkan, mereka tidak dapat log masuk." password_change_unsupported: Penukaran kata laluan tidak disokong. registered: "berdaftar" reset_failed_logins: "Set semula log masuk yang gagal" @@ -3222,7 +3235,7 @@ ms: version_status_closed: "ditutup" version_status_locked: "dikunci" version_status_open: "dibuka" - note: Nota + note: Perhatian note_password_login_disabled: "Kata laluan log masuk telah dibatalkan oleh %{configuration}." warning: Amaran warning_attachments_not_saved: "%{count} fail tidak dapat disimpan." @@ -3230,30 +3243,30 @@ ms: Anda menjemput pengguna lebih dari yang disokong pelan semasa anda. Pengguna yang dijemput mungkin tidak dapat sertai persekitaran OpenProject anda. Sila naik taraf pelan anda atau sekat pengguna sedia ada untuk membenarkan pengguna yang dijemput dan berdaftar untuk sertai. warning_registration_token_expired: | Pengaktifan e-mel telah tamat tempoh. Kami hantar anda yang baharu ke %{email}. - Sila klik link di dalamnya untuk mengaktifkan akaun anda. + Sila klik pautan di dalamnya untuk mengaktifkan akaun anda. warning_user_limit_reached: > - Menambah pengguna tambahan akan melebihi had semasa. Sila hubungi pentadbir untuk meningkatkan had pengguna bagi memastikan pengguna luaran dapat mengakses salinan ini. + Menambah pengguna tambahan akan melebihi had semasa. Sila hubungi pentadbir untuk meningkatkan had pengguna bagi memastikan pengguna luaran dapat mengakses contoh ini. warning_user_limit_reached_admin: > - Menambah pengguna tambahan akan melebihi had semasa. Sila naik taraf pelan anda bagi memastikan pengguna luaran dapat mengakses salinan ini. + Menambah pengguna tambahan akan melebihi had semasa. Sila naik taraf pelan anda bagi memastikan pengguna luaran dapat mengakses contoh ini. warning_user_limit_reached_instructions: > - Anda telah mencapai had pengguna anda (%{current}/%{max} pengguna aktif). Siila hubungi sales@openproject.com untuk menaikkan taraf pelan edisi Enterprise anda dan tambah pengguna tambahan. + Anda telah mencapai had pengguna anda (%{current}/%{max} pengguna aktif). Sila hubungi sales@openproject.com untuk menaik taraf pelan edisi Enterprise anda dan tambah pengguna tambahan. warning_protocol_mismatch_html: > warning_bar: https_mismatch: - title: "Mod persediaan HTTPS tidak sepadan" + title: "Mod penyediaan HTTPS tidak sepadan" text_html: > Aplikasi anda sedang berjalan dengan mod HTTPS ditetapkan kepada %{set_protocol}, tetapi permintaannya ialah permintaan %{actual_protocol}. Ini akan mengakibatkan ralat! Anda perlu menetapkan nilai konfigurasi seperti yang berikut: %{setting_value}. Sila lihat dokumentasi pemasangan atas cara-cara untuk menetapkan konfigurasi ini. hostname_mismatch: title: "Tetapan nama hos tidak sepadan" text_html: > - Aplikasi anda berjalan dengan tetapan nama hos yang ditetapkan ke %{set_hostname}, tetapi permintaan tersebut adalah %{actual_hostname} nama hos. Ini akan mengakibatkan ralat! Pergi ke Tetapan sistem dan ubah tetapan "Nama hos" untuk membetulkan ini. + Aplikasi anda berjalan dengan tetapan nama hos yang ditetapkan ke %{set_hostname}, tetapi permintaan tersebut adalah %{actual_hostname} nama hos. Ini akan mengakibatkan ralat! Pergi ke Tetapan sistem dan ubah tetapan "Nama hos" untuk membetulkannya. menu_item: "Item menu" menu_item_setting: "Keterlihatan" wiki_menu_item_for: 'Item menu untuk halaman wiki "%{title}"' wiki_menu_item_setting: "Penglihatan" wiki_menu_item_new_main_item_explanation: > - Anda sedang memadam item menu utama wiki yang tunggal. Anda kini perlu memilih halaman wiki di mana item menu baharu akan dihasilkan. Untuk menghapuskan modul wiki tersebut, modul wiki tersebut boleh dinyahaktifkan oleh pentadbir projek. + Anda sedang memadam item menu utama wiki yang tunggal. Anda kini perlu memilih halaman wiki di mana item menu baharu akan dijanakan. Untuk memadamkan modul wiki tersebut, ianya boleh dinyahaktifkan oleh pentadbir projek. wiki_menu_item_delete_not_permitted: Item menu wiki bagi halaman wiki tunggal tidak boleh dipadam. #TODO: merge with work_packages top level key work_package: @@ -3263,11 +3276,11 @@ ms: info: "Memadam pakej projek tersebut adalah tindakan yang tidak dapat dipulihkan." title: "Padam pakej kerja" progress: - label_note: "Nota:" + label_note: "Perhatian:" modal: - work_based_help_text: "% Selesai secara automatik diperolehi daripada Kerja dan Kerja yang berbaki." - status_based_help_text: "% Selesai ditetapkan oleh status pakej kerja." - migration_warning_text: "Dalam mod pengiraan kemajuan berdasarkan kerja, % Lengkap tidak boleh ditetapkan secara manual dan ianya terikat dengan Kerja. Nilai sedia ada tersebut telah disimpan tetapi tidak boleh disunting. Sila masukkan Kerja dahulu." + work_based_help_text: "% Lengkap secara automatik diperolehi daripada Kerja dan Kerja yang berbaki." + status_based_help_text: "% Lengkap ditetapkan oleh status pakej kerja." + migration_warning_text: "Dalam mod pengiraan perkembangan berdasarkan kerja, % Lengkap tidak boleh ditetapkan secara manual dan ianya terikat dengan Kerja. Nilai sedia ada tersebut telah disimpan tetapi tidak boleh diedit. Sila input Kerja dahulu." sharing: count: zero: "0 pengguna" @@ -3285,17 +3298,17 @@ ms: label_toggle_all: "Tukar semua perkongsian" permissions: comment: "Komen" - comment_description: "Boleh lihat dan komen pakej kerja ini." + comment_description: "Boleh lihat dan komen tentang pakej kerja ini." denied: "Anda tidak mempunyai kebenaran untuk berkongsi pakej kerja." - edit: "Sunting" - edit_description: "Boleh lihat, komen dan sunting pakej kerja ini." + edit: "Edit" + edit_description: "Boleh lihat, komen dan edit pakej kerja ini." view: "Lihat" view_description: "Boleh papar pakej kerja ini." remove: "Keluarkan" share: "Kongsi" text_empty_search_description: "Tiada pengguna dengan kriteria penyaring semasa." - text_empty_search_header: "Kami tidak menjumpai keputusan yang sepadan." - text_empty_state_description: "Pakej kerja masih belum dikongsi dengan sesiapa lagi." + text_empty_search_header: "Kami tidak menemui keputusan yang sepadan." + text_empty_state_description: "Pakej kerja masih belum dikongsikan dengan sesiapa lagi." text_empty_state_header: "Tidak dikongsikan" text_user_limit_reached: "Menambah pengguna tambahan akan melebihi had semasa. Sila hubungi pentadbir untuk meningkatkan had pengguna bagi memastikan pengguna luaran dapat mengakses pakej kerja ini." text_user_limit_reached_admins: 'Menambah pengguna tambahan akan melebihi had semasa. Sila naik taraf pelan anda untuk dapat menambah lebih banyak pengguna.' @@ -3304,7 +3317,7 @@ ms: warning_user_limit_reached_admin: > Menambah pengguna tambahan akan melebihi had semasa. Sila naik taraf pelan anda bagi memastikan pengguna luaran dapat mengakses pakej kerja ini. warning_no_selected_user: "Sila pilih pengguna untuk berkongsi pakej kerja ini dengan mereka" - warning_locked_user: "Pengguna %{user} telah dikunci dan tidak boleh dikongsi dengannya" + warning_locked_user: "Pengguna %{user} telah dikunci dan tidak boleh dikongsi" user_details: locked: "Pengguna yang dikunci" invited: "Jemputan dihantar. " @@ -3323,7 +3336,7 @@ ms: Tarikh yang ditambah ke senarai dibawah diterima sebagai tidak berfungsi dan dilangkau semasa menjadualkan pakej kerja. change_button: "Tukar hari bekerja" warning: > - Menukar hari mana dalam seminggu dianggap hari bekerja atau hari tidak bekerja boleh memberi kesan kepada hari permulaan dan tamat bagi semua pakej kerja dalam semua projek dalam kejadian ini.
    Sila ambil perhatian bahawa perubahan hanya dilaksanakan selepas anda klik butang terapkan perubahan. + Menukar hari mana dalam seminggu dianggap hari bekerja atau hari tidak bekerja boleh memberi kesan kepada hari mula dan tamat bagi semua pakej kerja dalam semua projek dalam kejadian ini.
    Sila ambil perhatian bahawa perubahan hanya dilaksanakan selepas anda klik butang terapkan perubahan. journal_note: changed: _**Hari bekerja** telah diubah (%{changes})._ days: @@ -3332,13 +3345,13 @@ ms: dates: working: "%{date} kini hari bekerja" non_working: "%{date} kini bukan hari bekerja" - nothing_to_preview: "Tiada kandungan untuk dipratonton" + nothing_to_preview: "Tiada kandungan untuk dipreviu" api_v3: attributes: lock_version: "Versi Terkunci " - property: "Ciri" + property: "Ciri-ciri" errors: - code_400: "Permintaan yang salah:%{message}" + code_400: "Ralat Permintaan: %{message}" code_401: "Anda perlu disahkan untuk mengakses sumber ini." code_401_wrong_credentials: "Anda tidak memberikan kelayakan yang betul." code_403: "Anda tidak diberi kebenaran untuk mengakses sumber ini." @@ -3349,26 +3362,26 @@ ms: code_500_outbound_request_failure: "Satu permintaan outbound ke sumber lain telah gagal dengan kod status %{status_code}. " code_500_missing_enterprise_token: "Permintaan tidak boleh dikendalikan kerana token Enterprise yang tidak sah atau hilang." not_found: - work_package: "Pakej kerja yang anda cari tidak dapat ditemui atau telah dihapuskan." + work_package: "Pakej kerja yang anda cari tidak dapat ditemui atau telah dipadamkan." expected: date: "TTTT-BB-HH (ISO 8601 tarikh sahaja)" - datetime: "YYYY-MM-DDThh:mm:ss[.lll][+hh:mm] (mana-mana tarikh masa ISO 8601 yang sesuai)" + datetime: "TTTT-BB-HHTjj:mm:ss[.lll][+jj:mm] (mana-mana tarikh masa ISO 8601 yang sesuai)" duration: "Tempoh masa ISO 8601" invalid_content_type: "JENIS-KANDUNGAN dijangka untuk menjadi '%{content_type}' tetapi mendapat '%{actual}'." - invalid_format: "Format ciri yang tidak sah '%{property}': Format yang dijangka seperti '%{expected_format}', tetapi mendapat '%{actual}'." + invalid_format: "Format ciri-ciri yang tidak sah '%{property}': Format yang dijangka seperti '%{expected_format}', tetapi mendapat '%{actual}'." invalid_json: "Permintaan tersebut tidak dapat dibaca sebagai JSON." invalid_relation: "Hubungan tersebut adalah tidak sah." - invalid_resource: "Untuk ciri '%{property}' sebuah pautan seperti '%{expected}' dijangkakan, tetapi mendapat '%{actual}'." + invalid_resource: "Untuk ciri-ciri '%{property}' sebuah pautan seperti '%{expected}' dijangkakan, tetapi mendapat '%{actual}'." invalid_signal: embed: "Permintaan menyemat %{invalid} tidak disokong. Penyematan yang disokong adalah %{supported}." - select: "Permintaan %{invalid} yang dipilih tersebut tidak disokong. Pilihan yang disokong adalah %{supported}." + select: "Permintaan %{invalid} yang dipilih tidak disokong. Pilihan yang disokong ialah %{supported}." invalid_user_status_transition: "Status akaun pengguna semasa tidak membenarkan operasi ini." missing_content_type: "tidak ditentukan" - missing_property: "Sifat yang hilang '%{property}'." + missing_property: "Ciri-ciri yang hilang '%{property}'." missing_request_body: "Tiada badan permintaan." - missing_or_malformed_parameter: "Parameter pertanyan '%{parameter}' tidak dijumpai atau cacat." + missing_or_malformed_parameter: "Parameter pertanyaan '%{parameter}' tidak ditemui atau cacat." multipart_body_error: "Badan permintaan tidak mempunyai bahagian multipart seperti yang dijangka." - multiple_errors: "Beberapa kekangan medan telah dilanggar." + multiple_errors: "Beberapa kekangan ruang telah dilanggar." unable_to_create_attachment: "Lampiran tidak boleh dicipta" unable_to_create_attachment_permissions: "Lampiran tidak dapat disimpan kerana kurang kebenaran sistem fail" render: @@ -3385,21 +3398,21 @@ ms: resources: schema: "Skema" undisclosed: - parent: Tidak dibenarkan - Induk yang dipilih tidak kelihatan kerana kurang kebenaran. + parent: Tidak didedahkan - Induk yang dipilih tidak kelihatan kerana kurang kebenaran. ancestor: Tidak didedahkan - Leluhur tidak kelihatan kerana kurang kebenaran. doorkeeper: pre_authorization: status: "Pra-kebenaran" - auth_url: "URL Auth" + auth_url: "Auth URL" access_token_url: "Akses token URL" errors: messages: #Common error messages invalid_request: - unknown: "Permintaan tersebut tidak mengandungi parameter yang diperlukan, termasuk nilai parameter yang tidak disokong, atau tidak betul secara lain." + unknown: "Permintaan tersebut tidak mengandungi parameter yang diperlukan, termasuk nilai parameter yang tidak disokong, atau sebaliknya telah cacat." missing_param: "Parameter yang diperlukan hilang: %{value}." request_not_authorized: "Permintaan perlu dibenarkan. Parameter yang diperlukan untuk membenarkan permintaan tiada atau tidak sah." - invalid_redirect_uri: "URI redirect yang diminta tidak betul atau tidak sepadan dengan URI redirect pelanggan." + invalid_redirect_uri: "Pengubah hala URI yang diminta tidak betul atau tidak sepadan dengan pengubah hala URI pelanggan." unauthorized_client: "Pelanggan tersebut tidak dibenarkan untuk melaksanakan permintaan ini menggunakan kaedah ini." access_denied: "Pemilik sumber atau server kebenaran menafikan permintaan ini." invalid_scope: "Skop yang diminta adalah tidak sah, tidak diketahui, atau salah bentuk." @@ -3411,18 +3424,18 @@ ms: resource_owner_authenticator_not_configured: "Carian Pemilik Sumber gagal kerana Doorkeeper.configure.resource_owner_authenticator tidak dikonfigurasikan." admin_authenticator_not_configured: "Akses ke panel admin dilarang kerana Doorkeeper.configure.admin_authenticator tidak dikonfigurasi." #Access grant errors - unsupported_response_type: "Server kebenaran tidak menyokong jenis respons ini." - unsupported_response_mode: "Server kebenaran tidak menyokong mod respons ini." + unsupported_response_type: "Server kebenaran tidak menyokong jenis tindak balas ini." + unsupported_response_mode: "Server kebenaran tidak menyokong mod tindak balas ini." #Access token errors - invalid_client: "Pengesahan pelanggan gagal kerana pelanggan yang tidak diketahui, tiada pengesahan pelanggan yang dimasukkan, atau kaedah pengesahan yang tidak disokong." - invalid_grant: "Pemberian kebenaran yang diberikan adalah tidak sah, luput, dibatalkan, tidak sepadan dengan pengalihan semula URI yang digunakan dalam permintaan kebenaran, atau dikeluarkan kepada pelanggan lain." + invalid_client: "Pengesahan pelanggan gagal kerana pelanggan yang tidak diketahui, tiada pengesahan pelanggan yang disertakan, atau kaedah pengesahan yang tidak disokong." + invalid_grant: "Pemberian kebenaran yang diberikan adalah tidak sah, luput, dibatalkan, tidak sepadan dengan pengubah hala URI yang digunakan dalam permintaan kebenaran, atau dikeluarkan kepada pelanggan lain." unsupported_grant_type: "Jenis pemberian kebenaran tidak disokong oleh server pengesahan." invalid_token: - revoked: "Token akses telah dibatalkan" + revoked: "Token akses telah ditarik balik" expired: "Token akses telah tamat tempoh" unknown: "Token akses tidak sah" revoke: - unauthorized: "Anda tidak dibenarkan untuk membatalkan token ini." + unauthorized: "Anda tidak dibenarkan untuk menarik balik token ini." forbidden_token: missing_scope: 'Akses kepada sumber ini memerlukan skop "%{oauth_scopes}".' unsupported_browser: @@ -3440,22 +3453,22 @@ ms: instructions: name: "Nama aplikasi anda. Ini akan dipaparkan ke pengguna lain selepas kebenaran." redirect_uri_html: > - URL yang dibenarkan untuk pengguna ubah hala. Satu kemasukan setiap baris.
    Jika anda mendaftar aplikasi desktop, guna URL berikut. - confidential: "Semak jika aplikasi akan digunakan dimana rahsia pelanggan boleh dikekalkan tersembunyi. Mobile apps asal dan Single Page Apps dianggap sebagai tidak sulit." - scopes: "Tandakan skop yang anda mahu aplikasi untuk berikan akses. Jika tiada skop ditandakan, api_v3 diandaikan." + URL yang dibenarkan membenarkan pengguna boleh diubah hala. Satu entri setiap baris.
    Jika anda mendaftar aplikasi desktop, guna URL berikut. + confidential: "Semak jika aplikasi akan digunakan dimana rahsia pelanggan boleh dikekalkan sulit. Mobile apps asal dan Single Page Apps dianggap sebagai tidak sulit." + scopes: "Tandakan skop yang anda mahu aplikasi untuk berikan akses. Jika tiada skop ditandakan, api_v3 akan diandaikan." client_credential_user_id: "ID pengguna pilihan untuk menyamar apabila pelanggan menggunakan aplikasi ini. Tinggalkan kosong untuk benarkan akses awam sahaja." - register_intro: "Jika anda sedang membangunkan aplikasi pelanggan API OAuth untuk OpenProject, anda boleh mendaftarkannya menggunakan borang ini untuk semua pengguna menggunakan." + register_intro: "Jika anda sedang membangunkan aplikasi pelanggan API OAuth untuk OpenProject, anda boleh mendaftarkannya menggunakan borang ini untuk semua pengguna menggunakannya." default_scopes: "" client_id: "ID pelanggan" client_secret_notice: > - Ini adalah satu-satunya masa di mana kita boleh mencetak rahsia pelanggan, sila catat dan simpankan ia selamat. Ia perlu diperlakukan sebagai sebuah kata laluan dan tidak boleh dipulihkan oleh OpenProject pada masa kemudian. + Ini adalah satu-satunya masa di mana kita boleh mencetak rahsia pelanggan, sila catat dan simpankan ia dengan selamat. Ia perlu diperlakukan sebagai sebuah kata laluan dan tidak boleh dipulihkan oleh OpenProject pada masa kemudian. authorization_dialog: authorize: "Benarkan" - cancel: "Batal dan nafi kebenaran." + cancel: "Batal dan nafikan kebenaran." prompt_html: "Benarkan %{application_name} untuk menggunakan akaun anda %{login}?" title: "Benarkan %{application_name}" wants_to_access_html: > - Aplikasi ini meminta akses ke akaun OpenProject.
    Ia telah meminta kebenaran yang berikut: + Aplikasi ini meminta akses ke akaun OpenProject anda.
    Ia telah meminta kebenaran yang berikut: scopes: api_v3: "Akses API v3 penuh" api_v3_text: "Aplikasi akan menerima akses penuh baca & tulis di OpenProject API v3 untuk melaksanakan tindakan bagi pihak anda." @@ -3465,17 +3478,17 @@ ms: successful_application_revocation: "Pembatalan aplikasi %{application_name} berjaya." none_given: "Tiada aplikasi OAuth yang telah diberi akses ke akaun anda." x_active_tokens: - other: "satu token aktif" + other: "%{count} token aktif" flows: authorization_code: "Aliran kod kebenaran" client_credentials: "Aliran kelayakan pelanggan" - client_credentials: "Pengguna yang digunakan untuk kelayakan pelanggan" + client_credentials: "Pengguna yang digunakan untuk kelayakan Pelanggan" client_credentials_impersonation_set_to: "Pengguna kelayakan pelanggan ditetapkan kepada" - client_credentials_impersonation_warning: "Nota: Pelanggan yang menggunakan aliran 'Kelayakan Pelanggan' dalam aplikasi ini akan mempunyai hak pengguna ini." + client_credentials_impersonation_warning: "Perhatian: Pelanggan yang menggunakan aliran 'Kelayakan Pelanggan' dalam aplikasi ini akan mempunyai hak pengguna ini." client_credentials_impersonation_html: > Secara default, OpenProject menyediakan kebenaran OAuth 2.0 melalui %{authorization_code_flow_link}. Anda boleh memilih untuk mengaktifkan %{client_credentials_flow_link}, tetapi anda mesti menyediakan pengguna yang akan mewakili permintaan. authorization_error: "Sebuah ralat kebenaran telah berlaku." - revoke_my_application_confirmation: "Adakah anda benar-benar mahu mengeluarkan aplikasi ini? Ini akan membatalkan %{token_count} aktif untuknya." + revoke_my_application_confirmation: "Adakah anda benar-benar mahu keluarkan aplikasi ini? Ini akan menarik balik %{token_count} aktif darinya." my_registered_applications: "Aplikasi OAuth berdaftar" oauth_client: urn_connection_status: @@ -3489,46 +3502,46 @@ ms: label_refresh_token: "Token muat semula" errors: oauth_authorization_code_grant_had_errors: "Pemberian pengesahan OAuth2 tidak berjaya" - oauth_reported: "Pembekal OAuth2 dilapor" - oauth_returned_error: "OAuth2 kembalikan sebuah ralat" - oauth_returned_json_error: "OAuth2 mengembalikan ralat JSON" - oauth_returned_http_error: "OAuth2 kembalikan ralat rangkaian" - oauth_returned_standard_error: "OAuth2 kembalikan sebuah ralat dalaman" - wrong_token_type_returned: "Oauth2 mengembalikan jenis token yang salah, mengharapkan AksesToken::Pembawa" + oauth_reported: "Pembekal OAuth2 melaporkan" + oauth_returned_error: "OAuth2 telah kembalikan sebuah ralat" + oauth_returned_json_error: "OAuth2 telah kembalikan ralat JSON" + oauth_returned_http_error: "OAuth2 telah kembalikan ralat rangkaian" + oauth_returned_standard_error: "OAuth2 telah kembalikan sebuah ralat dalaman" + wrong_token_type_returned: "Oauth2 telah kembalikan jenis token yang salah, menjangkakan AksesToken::Pembawa" oauth_issue_contact_admin: "OAuth2 melaporkan sebuah ralat. Sila hubungi pentadbir sistem anda." - oauth_client_not_found: "Pelanggan OAuth2 tidak dijumpai dalam titik terakhir 'panggilan balik' (redirect_url)." + oauth_client_not_found: "Pelanggan OAuth2 tidak ditemui dalam titik terakhir 'panggilan balik' (redirect_url)." refresh_token_called_without_existing_token: > Ralat dalaman: Memanggil refresh_token tanpa token yang sedia ada sebelum ini. refresh_token_updated_failed: "Ralat semasa kemas kini OAuthClientToken" oauth_client_not_found_explanation: > - Ralat muncul selepas anda mengemas kini client_id dan client_secret dalam Openproject, tetapi belum mengemas kini medan 'URI Kembali' dalam pembekal OAuth2. - oauth_code_not_present: "'Kod' OAuth2 tidak dijumpai dalam titik terakhir 'panggilan balik' (redirect_url)." + Ralat muncul selepas anda mengemas kini client_id dan client_secret di Openproject, tetapi belum mengemas kini ruangan 'URI Kembali' dalam pembekal OAuth2. + oauth_code_not_present: "'Kod' OAuth2 tidak ditemui dalam titik terakhir 'panggilan balik' (redirect_url)." oauth_code_not_present_explanation: > Ralat ini muncul jika anda telah memilih response_type yang salah dalam pembekal OAuth2. Response_type perlu 'kod' atau serupa. - oauth_state_not_present: "'Kondisi' OAuth2 tidak dijumpai dalam titik terakhir 'panggilan balik' (ubah hala_url)." + oauth_state_not_present: "'Kondisi' OAuth2 tidak ditemui dalam titik terakhir 'panggilan balik' (ubah hala_url)." oauth_state_not_present_explanation: > - 'Kondisi' digunakan untuk menunjukkan ke OpenProject tempat untuk meneruskan selepas kebenaran OAuth2 yang berjaya. Ketiadaan 'Kondisi' adalah ralat dalaman yang mungkin muncul semasa setup. Sila hubungi pentadbir sistem anda. + 'Kondisi' digunakan untuk menunjukkan ke OpenProject tempat untuk meneruskan selepas kebenaran OAuth2 berjaya. Ketiadaan 'Kondisi' adalah ralat dalaman yang mungkin muncul semasa penyediaan. Sila hubungi pentadbir sistem anda. rack_oauth2: client_secret_invalid: "Rahsia pelanggan adalah tidak sah (rahsia_pelanggan_tidak sah)" invalid_request: > - Pelayan Pengesahan OAuth2 menjawab dengan 'permintaan_tidak sah'. Ralat ini muncul jika anda cuba untuk mendapatkan kebenaran beberapa kali atau dalam kes masalah teknikal. - invalid_response: "Pelayan Pengesahan OAuth2 menyediakan respons yang tidak sah (respons_tidak sah)" - invalid_grant: "Pelayan Pengesahan OAuth2 tersebut meminta anda untuk mengesahkan semula (pemberian_tidak sah)." - invalid_client: "Pelayan Pengesahan OAuth2 tidak mengenali OpenProject (pelanggan_tidak sah)." - unauthorized_client: "Pelayan Pengesahan OAuth2 tersebut menolak jenis pemberian (pelanggan_tidak berkebenaran)" - unsupported_grant_type: "Pelayan Pengesahan OAuth2 tersebut meminta anda untuk mengesahkan semula (jenis_pemberian_tidak disokong)." + Server Pengesahan OAuth2 menjawab dengan 'permintaan_tidak sah'. Ralat ini muncul jika anda cuba untuk mendapatkan kebenaran beberapa kali atau dalam kes masalah teknikal. + invalid_response: "Server Pengesahan OAuth2 menyediakan tindak balas yang tidak sah (respons_tidak sah)" + invalid_grant: "Server Pengesahan OAuth2 tersebut meminta anda untuk mengesahkan semula (pemberian_tidak sah)." + invalid_client: "Server Pengesahan OAuth2 tidak mengenali OpenProject (pelanggan_tidak sah)." + unauthorized_client: "Server Pengesahan OAuth2 tersebut menolak jenis pemberian (pelanggan_tidak berkebenaran)" + unsupported_grant_type: "Server Pengesahan OAuth2 tersebut meminta anda untuk mengesahkan semula (jenis_pemberian_tidak disokong)." invalid_scope: "Anda tidak dibenarkan untuk mengakses sumber yang diminta (skop_tidak sah)." http: request: - failed_authorization: "Permintaan dari pihak pelayan gagal mengesahkan dirinya sendiri." - missing_authorization: "Permintaan dari pihak pelayan gagal disebabkan maklumat pengesahan yang hilang." + failed_authorization: "Permintaan dari pihak server gagal mengesahkan dirinya sendiri." + missing_authorization: "Permintaan dari pihak server gagal disebabkan maklumat pengesahan yang hilang." response: - unexpected: "Respons yang tidak dijangka diterima." + unexpected: "Tindak balas yang tidak dijangka diterima." you: anda link: pautan plugin_openproject_auth_plugins: name: "Plugin Auth OpenProject" - description: "Integrasi penyedia strategi OmniAuth untuk pengesahan di OpenProject." + description: "Integrasi penyedia strategi OmniAuth untuk pengesahan dalam OpenProject." plugin_openproject_auth_saml: name: "SAML OmniAuth / Daftar Masuk Tunggal" - description: "Tambah penyedia SAML OmniAuth ke OpenProject" + description: "Tambah penyediaan SAML OmniAuth ke OpenProject" diff --git a/config/locales/crowdin/ne.seeders.yml b/config/locales/crowdin/ne.seeders.yml index cb0d41e5a6ea..8d4922e59d53 100644 --- a/config/locales/crowdin/ne.seeders.yml +++ b/config/locales/crowdin/ne.seeders.yml @@ -251,6 +251,21 @@ ne: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/ne.yml b/config/locales/crowdin/ne.yml index 5ece1b71500f..153d5bc4778f 100644 --- a/config/locales/crowdin/ne.yml +++ b/config/locales/crowdin/ne.yml @@ -264,6 +264,7 @@ ne: lists: active: "Active projects" my: "My projects" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ ne: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: There are currently no members part of this project. @@ -322,6 +330,7 @@ ne: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Groups" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -484,7 +493,7 @@ ne: no_common_statuses_exists: "There is no status available for all selected work packages. Their status cannot be changed." unsupported_for_multiple_projects: "Bulk move/copy is not supported for work packages from multiple projects" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -782,6 +791,7 @@ ne: not_an_iso_date: "is not a valid date. Required format: YYYY-MM-DD." not_same_project: "doesn't belong to the same project." odd: "must be odd." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "could not be validated with the associated regular expression." smaller_than_or_equal_to_max_length: "must be smaller than or equal to maximum length." taken: "has already been taken." @@ -1263,6 +1273,7 @@ ne: button_edit: "Edit" button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}" button_expand_all: "Expand all" + button_favorite: "Add to favorites" button_filter: "Filter" button_generate: "Generate" button_list: "List" @@ -1290,6 +1301,7 @@ ne: button_unarchive: "Unarchive" button_uncheck_all: "Uncheck all" button_unlock: "Unlock" + button_unfavorite: "Remove from favorites" button_unwatch: "Unwatch" button_update: "Update" button_upgrade: "Upgrade" @@ -1575,6 +1587,7 @@ ne: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "छवि निर्यात गरिएको छैन।" units: @@ -1722,17 +1735,6 @@ ne: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "News" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Accessibility" label_account: "खाता" label_active: "Active" @@ -1913,7 +1915,7 @@ ne: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Environment" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "is" label_everywhere: "सबैतिर" label_example: "Example" @@ -1927,7 +1929,7 @@ ne: label_expanded_click_to_collapse: "Expanded. Click to collapse" label_f_hour: "%{value} hour" label_f_hour_plural: "%{value} hours" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Feeds" label_feeds_access_key: "RSS access key" label_feeds_access_key_created_on: "RSS access key created %{value} ago" @@ -2000,6 +2002,7 @@ ne: label_learn_more: "Learn more" label_less_or_equal: "<=" label_less_than_ago: "less than days ago" + label_link_url: "Link (URL)" label_list: "List" label_loading: "Loading..." label_lock_user: "Lock user" @@ -2025,6 +2028,7 @@ ne: label_membership_plural: "Memberships" lable_membership_added: "Member added" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2126,6 +2130,7 @@ ne: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Total number of projects" label_project_copy_notifications: "Send email notifications during the project copy" label_project_latest: "Latest projects" @@ -2140,7 +2145,7 @@ ne: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projects using %{storage} disk storage" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "View all projects" label_project_show_details: "Show project details" label_project_hide_details: "प्रोजेक्ट विवरण लुकाउनुहोस्" @@ -2197,6 +2202,7 @@ ne: label_setting_plural: "Settings" label_system_settings: "System settings" label_show_completed_versions: "Show completed versions" + label_columns: "Columns" label_sort: "Sort" label_sort_by: "Sort by %{value}" label_sorted_by: "sorted by %{value}" @@ -2741,7 +2747,7 @@ ne: member_of_group: "Assignee's group" name_or_identifier: "Name or identifier" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2886,6 +2892,7 @@ ne: setting_app_subtitle: "Application subtitle" setting_app_title: "Application title" setting_attachment_max_size: "Attachment max. size" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Autofetch repository changes" @@ -2987,6 +2994,8 @@ ne: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
    Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
    Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3223,6 +3232,10 @@ ne: input_label: "Add columns" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Additional resources" getting_started: "Getting started" @@ -3570,7 +3583,7 @@ ne: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/nl.seeders.yml b/config/locales/crowdin/nl.seeders.yml index 9687cb84f48e..681676cbb1e8 100644 --- a/config/locales/crowdin/nl.seeders.yml +++ b/config/locales/crowdin/nl.seeders.yml @@ -251,6 +251,21 @@ nl: * [ ] Even more beer item_4: subject: Einde van project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/nl.yml b/config/locales/crowdin/nl.yml index 3c771e1040da..63fa93647c18 100644 --- a/config/locales/crowdin/nl.yml +++ b/config/locales/crowdin/nl.yml @@ -261,6 +261,7 @@ nl: lists: active: "Active projects" my: "Mijn projecten" + favored: "Favorite projects" archived: "Gearchiveerde projecten" my_private: "My private project lists" new: @@ -301,7 +302,14 @@ nl: storage: no_results_title_text: Er is geen extra opgenomen schijfruimte verbruikt door dit project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: Er zijn momenteel geen leden onderdeel van dit project. @@ -319,6 +327,7 @@ nl: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Groepen" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -481,7 +490,7 @@ nl: no_common_statuses_exists: "Er is geen status beschikbaar voor alle geselecteerde werkpakketten. Hun status kan niet worden gewijzigd." unsupported_for_multiple_projects: "Bulk verplaatsen/kopiëren wordt niet ondersteund voor werkpakketten uit meerdere projecten" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -779,6 +788,7 @@ nl: not_an_iso_date: "is geen geldige datum. Vereist formaat: JJJJ-MM-DD." not_same_project: "hoort niet bij hetzelfde project." odd: "moet oneven zijn." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "kon niet worden gevalideerd met de bijbehorende reguliere expressie." smaller_than_or_equal_to_max_length: "moet kleiner zijn dan of even groot zijn als de maximale lengte." taken: "is al in gebruik." @@ -1022,7 +1032,7 @@ nl: numeric: "numerieke (bijvoorbeeld ' 1')" special: "speciale (bijvoorbeeld ' %')" reused: - one: "is reeds eerder gebruikt. Kies er één die verschilt van uw laatste %{count}." + one: "is reeds eerder gebruikt. Kies er één die verschilt van uw vorige." other: "is reeds eerder gebruikt. Kies er één die verschilt van uw laatste %{count}." match: confirm: "Bevestig nieuw wachtwoord." @@ -1260,6 +1270,7 @@ nl: button_edit: "Wijzig" button_edit_associated_wikipage: "Bewerk gekoppelde wikipagina: %{page_title}" button_expand_all: "Alles uitklappen" + button_favorite: "Add to favorites" button_filter: "Filter" button_generate: "Genereer" button_list: "Lijst" @@ -1287,6 +1298,7 @@ nl: button_unarchive: "Uit archief halen" button_uncheck_all: "Deselecteer alles" button_unlock: "Ontgrendelen" + button_unfavorite: "Remove from favorites" button_unwatch: "Niet meer volgen" button_update: "Bijwerken" button_upgrade: "Upgrade" @@ -1572,6 +1584,7 @@ nl: pdf_overview_table: "PDF Tabel" pdf_report_with_images: "PDF Rapport met afbeeldingen" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Afbeelding niet geëxporteerd." units: @@ -1719,17 +1732,6 @@ nl: mentioned: "U bent genoemd in %{work_package}" responsible: "Je bent verantwoordelijk geworden voor %{work_package}" watched: "Je volgt %{work_package}" - update_info_mail: - body: > - We zijn enthousiast om de release van OpenProject 12.0 aan te kondigen. Het is een belangrijke versie die hopelijk de manier waarop je OpenProject gebruikt aanzienlijk zal verbeteren. - Vanaf deze release, introduceren we in-app meldingen. Vanaf nu ontvangt u meldingen voor updates voor werkpakketten rechtstreeks in OpenProject. Je kunt deze meldingen als gelezen markeren, reageren op een reactie of zelfs direct de werkpakket kenmerken aanpassen zonder het notificatiecentrum te verlaten. - Dit betekent ook dat we geen e-mails meer gebruiken voor meldingen. Wij vinden dat het nieuwe meldingscentrum een betere plek is om deze updates te bekijken en op te volgen. Als u updates wilt blijven ontvangen via e-mail, kunt u ervoor kiezen dagelijks e-mailherinneringen te ontvangen op bepaalde momenten dat u wilt. - Zorg ervoor dat u uw nieuwe standaardinstellingen voor meldingen verifieert en uw voorkeuren voor herinneringen per e-mail via uw accountinstellingen instelt. U kunt dit doen via de knop "E-mail instellingen wijzigen" hieronder. - We hopen dat je in-app meldingen nuttig vindt en dat ze je nog productiever maken. - Met vriendelijke groet, Het OpenProject team - body_header: "Versie 12.0 met Notificatie Centrum" - body_subheader: "Nieuws" - subject: "Belangrijke wijzigingen in meldingen met de release van 12.0" label_accessibility: "Toegankelijkheid" label_account: "Account" label_active: "Actief" @@ -1910,7 +1912,7 @@ nl: label_enterprise_support: "Ondernemingsondersteuning" label_enterprise_addon: "Enterprise add-on" label_environment: "Omgeving" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "is" label_everywhere: "overal" label_example: "Voorbeeld" @@ -1924,7 +1926,7 @@ nl: label_expanded_click_to_collapse: "Uitgebreid. Klik op samenvouwen" label_f_hour: "%{value} uur" label_f_hour_plural: "%{value} uren" - label_favoured: "Favoriet" + label_favorite: "Favoriete" label_feed_plural: "Feeds" label_feeds_access_key: "RSS toegangssleutel" label_feeds_access_key_created_on: "RSS toegangssleutel %{value} geleden gemaakt" @@ -1997,6 +1999,7 @@ nl: label_learn_more: "Meer informatie" label_less_or_equal: "<=" label_less_than_ago: "minder dan dagen geleden" + label_link_url: "Link (URL)" label_list: "Lijst" label_loading: "Laden..." label_lock_user: "Gebruiker vergrendelen" @@ -2022,6 +2025,7 @@ nl: label_membership_plural: "Memberships" lable_membership_added: "Lid toegevoegd" lable_membership_updated: "Lid bijgewerkt" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alfa" @@ -2123,6 +2127,7 @@ nl: label_percent_complete: "% Complete" label_project_activity: "Projectactiviteit" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Totale aantal projecten" label_project_copy_notifications: "Verzenden van e-mailmeldingen tijdens het project kopiëren" label_project_latest: "Meest recente projecten" @@ -2137,7 +2142,7 @@ nl: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "Bestandsopslag" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projecten die %{storage}-schijfopslag gebruiken" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "Bekijk alle projecten" label_project_show_details: "Toon project details" label_project_hide_details: "Verberg project details" @@ -2194,6 +2199,7 @@ nl: label_setting_plural: "Instellingen" label_system_settings: "Systeeminstellingen" label_show_completed_versions: "Toon voltooide versies" + label_columns: "Kolommen" label_sort: "Sorteren" label_sort_by: "Sorteren op %{value}" label_sorted_by: "gesorteerd op %{value}" @@ -2737,7 +2743,7 @@ nl: member_of_group: "Werknemer's groep" name_or_identifier: "Naam of id" only_subproject_id: "Alleen subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Inclusief subproject" repositories: @@ -2882,6 +2888,7 @@ nl: setting_app_subtitle: "Applicatie ondertitel" setting_app_title: "Toepassingsnaam" setting_attachment_max_size: "Bijlage max. grootte" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Haal automatisch repository wijzigingen op" @@ -2983,6 +2990,8 @@ nl: attachments: whitelist_text_html: > Definieer een lijst met geldige bestandsextensies en/of MIME-types voor geüploade bestanden.
    Vul de bestandsextensies in (bijv. %{ext_example}) of MIME-types (bijv. ., %{mime_example}).
    Laat leeg om elk bestandstype te kunnen uploaden. Meerdere waarden toegestaan (één regel voor elke waarde). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3219,6 +3228,10 @@ nl: input_label: "Kolommen toevoegen" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Extra middelen" getting_started: "Aan de slag" @@ -3565,7 +3578,7 @@ nl: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/no.seeders.yml b/config/locales/crowdin/no.seeders.yml index d867a3cb959e..1db76e706e40 100644 --- a/config/locales/crowdin/no.seeders.yml +++ b/config/locales/crowdin/no.seeders.yml @@ -251,6 +251,21 @@ * [ ] Enda mer øl item_4: subject: Slutten av prosjektet + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum prosjekt status_explanation: Alle oppgaver er i rute. Personene som er involvert kjenner sine oppgaver. Systemet er ferdig satt opp. diff --git a/config/locales/crowdin/no.yml b/config/locales/crowdin/no.yml index 178688113384..80a9d93a9868 100644 --- a/config/locales/crowdin/no.yml +++ b/config/locales/crowdin/no.yml @@ -264,6 +264,7 @@ lists: active: "Aktive prosjekter" my: "Mine prosjekter" + favored: "Favorite projects" archived: "Arkiverte prosjekter" my_private: "Mine private prosjektlister" new: @@ -304,7 +305,14 @@ storage: no_results_title_text: Det er ingen ekstra registrert diskplass brukt av dette prosjektet. lists: - can_be_saved_as: "Endringene kan bare lagres i en ny liste." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: Det er ingen medlemmer i prosjektet. @@ -322,6 +330,7 @@ project_roles: "Prosjekt roller" wp_shares: "Delte arbeidspakker" groups: "Grupper" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Fjern medlem" will_remove_the_users_role: "Dette vil fjerne brukerens rolle fra dette prosjektet." @@ -484,10 +493,10 @@ no_common_statuses_exists: "Det er ingen status tilgjengelig for alle valgte arbeidspakker. Status kan ikke endres." unsupported_for_multiple_projects: "Bulk flytt/kopi er ikke støttet for arbeidspakker fra flere prosjekter" sharing: - missing_workflow_waring: - title: "Arbeidsflyt mangler for deling av arbeidspakker" - message: "Ingen arbeidsflyt er konfigurert for rollen 'Arbeidspakke redaktør'. Uten en arbeidsflyt kan ikke brukeren endre status på arbeidspakken. Arbeidsflyt kan kopieres. Velg en kildetype (f.eks. 'oppgave') og en kilderolle (f.eks. 'medlem'). Velg så måltyper. Til å begynne med, kan du velge alle typene som mål. Til slutt velger du \"Redigeringsprogrammet for arbeidspakke\" som mål og press \"Copy\". Etter å ha opprettet standardinnstillingene, kan du finjustere arbeidsflytene som du gjør for hver annen rolle." - link_message: "Konfigurer arbeidsmetodene i administrasjonen." + missing_workflow_warning: + title: "Workflow missing for work package sharing" + message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." + link_message: "Configure the workflows in the administration." summary: reports: category: @@ -782,6 +791,7 @@ not_an_iso_date: "er ikke en gyldig dato. Påkrevd format: ÅÅÅÅ-MM-DD." not_same_project: "hører ikke til samme prosjekt." odd: "må være oddetall." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "kunne ikke valideres med det tilhørende regulære uttrykket." smaller_than_or_equal_to_max_length: "må være mindre enn eller lik maksimumslengden." taken: "er allerede tatt." @@ -1025,7 +1035,7 @@ numeric: "numerisk (f.eks. \"1\")" special: "spesialtegn (f.eks. \"%\")" reused: - one: "har blitt brukt tidligere. Vennligst velg en som er forskjellig fra den forrige %{count}." + one: "har blitt brukt tidligere. Vennligst velg en som er forskjellig fra den forrige." other: "har blitt brukt tidligere. Vennligst velg et som er forskjellig fra dine siste %{count}." match: confirm: "Bekreft nytt passord." @@ -1263,6 +1273,7 @@ button_edit: "Rediger" button_edit_associated_wikipage: "Rediger tilknyttet Wiki-side: %{page_title}" button_expand_all: "Utvid alle" + button_favorite: "Add to favorites" button_filter: "Filter" button_generate: "Generer" button_list: "Liste" @@ -1290,6 +1301,7 @@ button_unarchive: "Pakk ut" button_uncheck_all: "Avmerk alle" button_unlock: "Lås opp" + button_unfavorite: "Fjern fra favoritter" button_unwatch: "Stopp overvåking" button_update: "Oppdatèr" button_upgrade: "Oppgrader" @@ -1575,6 +1587,7 @@ pdf_overview_table: "PDF tabell" pdf_report_with_images: "PDF rapport med bilder" pdf_report: "PDF rapport" + pdf_gantt: "PDF Gantt" image: omitted: "Bilde ikke eksportert." units: @@ -1722,17 +1735,6 @@ mentioned: "Du har blitt nevnt i %{work_package}" responsible: "Du har blitt ansvarlig for %{work_package}" watched: "Du ser på %{work_package}" - update_info_mail: - body: > - Vi kan med stolthet annonsere utgivelsen av OpenProject 12.0. Dette er en stor utgivelse som forhåpentligvis gir en betydelig forbedring av måten du bruker OpenProject. - I denne utgivelsen introduserer vi in-app varslinger. Fra nå av vil du motta varslinger for oppdateringer i arbeidspakker dirkete i OpenProject. Du kan merke varslene som lest, svare på en kommentar og til og med endre arbeidspakkens egenskapet uten å forlate varslingssenteret. - Dette betyr også at vi ikke lenger vil bruke epost for varslinger. Vi mener det nye varslingssenteret er bedre egnet til å se og behandle disse oppdateringene. Uansett, om du skulle ønske å fortsatt motta varslinger på epost, kan du velge å motta daglige påminnelser på epost til tider du velger selv. - Vennligst pass på å bekrefte dine nye standard varslingsinnstillinger, og velg dine preferanser ofr varsler og epostvarslinger i dine kontoinnstillinger. Du kan gjøre dette ved å velge knappen "Endre epost innstillinger" nednfor. - Vi håper du finner de nye varslingene nyttige og at de gjør deg enda mer produktiv. - Med vennlig hilsen OpenProject teamet - body_header: "Versjon 12.0 med varslingssenter" - body_subheader: "Nyheter" - subject: "Viktige endringer i varsler ved utgivelse av 12.0" label_accessibility: "Tilgjengelighet" label_account: "Konto" label_active: "Aktiv" @@ -1913,7 +1915,7 @@ label_enterprise_support: "Bedriftsstøtte" label_enterprise_addon: "Enterprise utvidelse" label_environment: "Miljø" - label_estimates_and_time: "Estimater og fremdrift" + label_estimates_and_progress: "Estimater og fremdrift" label_equals: "er" label_everywhere: "overalt" label_example: "Eksempel" @@ -1927,7 +1929,7 @@ label_expanded_click_to_collapse: "Utvidet. Klikk for å skjule" label_f_hour: "%{value} time" label_f_hour_plural: "%{value} timer" - label_favoured: "Favoritter" + label_favorite: "Favoritt" label_feed_plural: "Feeds" label_feeds_access_key: "RSS tilgangsnøkkel" label_feeds_access_key_created_on: "RSS tilgangsnøkkel opprettet for %{value} siden" @@ -2000,6 +2002,7 @@ label_learn_more: "Lær mer" label_less_or_equal: "<=" label_less_than_ago: "mindre enn dager siden" + label_link_url: "Link (URL)" label_list: "Liste" label_loading: "Laster..." label_lock_user: "Lås bruker" @@ -2025,6 +2028,7 @@ label_membership_plural: "Medlemskap" lable_membership_added: "Medlem lagt til" lable_membership_updated: "Medlem oppdatert" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2126,6 +2130,7 @@ label_percent_complete: "% Ferdig" label_project_activity: "Aktivitet i prosjektet" label_project_attribute_plural: "Prosjekt egenskaper" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Antall prosjekter" label_project_copy_notifications: "Send e-postvarsler mens prosjektkopieringen pågår" label_project_latest: "Siste prosjekter" @@ -2140,7 +2145,7 @@ label_project_attributes_settings: "Innstillinger for prosjektegenskaper" label_project_storage_plural: "Fillagringer" label_project_storage_project_folder: "Fillagringer: Prosjektmapper" - label_projects_storage_information: "%{count} prosjekter som bruker %{storage} lagringsplass" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "Vis alle prosjekter" label_project_show_details: "Vis prosjektdetaljer" label_project_hide_details: "Skjul prosjektdetaljer" @@ -2197,6 +2202,7 @@ label_setting_plural: "Innstillinger" label_system_settings: "Systeminnstillinger" label_show_completed_versions: "Vis fullførte versjoner" + label_columns: "Kolonner" label_sort: "Sortèr" label_sort_by: "Sorter på %{value}" label_sorted_by: "sortert på %{value}" @@ -2741,7 +2747,7 @@ member_of_group: "Deltakers gruppe" name_or_identifier: "Navn eller identifikator" only_subproject_id: "Bare underprosjekt" - shared_with_user: "Delt med bruker" + shared_with_user: "Shared with users" shared_with_me: "Delt med meg" subproject_id: "Inkludert underprosjekt" repositories: @@ -2886,6 +2892,7 @@ setting_app_subtitle: "Undertittel for applikasjon" setting_app_title: "Applikasjonsnavn" setting_attachment_max_size: "Maksstørrelse for vedlegg" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Skannemodus" setting_antivirus_scan_action: "Handling for infisert fil" setting_autofetch_changesets: "Autofetch kodelagerendringer" @@ -2987,6 +2994,8 @@ attachments: whitelist_text_html: > Definer en liste over gydlige fil-typer og/eller mime typer for opplastingsfiler.
    Sett inn fil-typer (f.eks. %{ext_example}) eller mime typer (f.eks. %{mime_example}).
    La stå tom for å godta at alle filtyper kan lastes opp. Flere verdier er tillatt (en linje for hver verdi). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virusskanning" clamav_ping_failed: "Kan ikke koble til ClamAV daemon. Dobbeltsjekk konfigurasjonen og prøv på nytt." @@ -3223,6 +3232,10 @@ input_label: "Legg til kolonner" input_placeholder: "Velg en kolonne" drag_area_label: "Behandle og endre rekkefølgen på kolonner" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Tilleggsressurser" getting_started: "Komme i gang" @@ -3570,7 +3583,7 @@ link: kobling plugin_openproject_auth_plugins: name: "OpenProject Auth utvidelse" - description: "Integrering av OmniAuth strategileverandører for autentisering i Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Enkeltpålogging på" description: "Legger til OmniAuth SAML leverandør til OpenProject" diff --git a/config/locales/crowdin/pl.seeders.yml b/config/locales/crowdin/pl.seeders.yml index 45b50fd2844d..d071756e497a 100644 --- a/config/locales/crowdin/pl.seeders.yml +++ b/config/locales/crowdin/pl.seeders.yml @@ -251,6 +251,21 @@ pl: * [ ] Jeszcze więcej piwa item_4: subject: Zakończenie projektu + wiki: | + _W tej wiki można wspólnie tworzyć i edytować strony i podstrony, aby stworzyć wiki projektu._ + + **Można:** + + * Wstawiać tekst i obrazy, również za pomocą kopiowania i wklejania z innych dokumentów + * Utworzyć hierarchię stron ze stronami nadrzędnymi + * Dołączyć strony wiki do menu projektu + * Użyć makr do dołączania np. spisu treści, listy pakietów roboczych lub wykresów Gantta + * Dołączyć strony wiki do innych pól tekstowych, np. strony przeglądu projektu + * Dołączyć linki do innych dokumentów + * Wyświetlić historię zmian + * Wyświetlić jako znaczniki języka Markdown + + Więcej informacji: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Projekt Scrum status_explanation: Wszystkie zadania są zaplanowane. Odpowiedni ludzie znają swoje zadania. System jest całkowicie skonfigurowany. diff --git a/config/locales/crowdin/pl.yml b/config/locales/crowdin/pl.yml index c2779cdedac9..70490aee03f3 100644 --- a/config/locales/crowdin/pl.yml +++ b/config/locales/crowdin/pl.yml @@ -261,6 +261,7 @@ pl: lists: active: "Aktywne projekty" my: "Moje projekty" + favored: "Ulubione projekty" archived: "Zarchiwizowane projekty" my_private: "Moje prywatne listy projektów" new: @@ -301,7 +302,14 @@ pl: storage: no_results_title_text: Nie ma dodatkowego zarejestrowanego miejsca na dysku zużytego przez ten projekt. lists: - can_be_saved_as: "Modyfikacje można zapisać tylko na nowej liście." + create: + success: "Zmodyfikowana lista została zapisana jako nowa lista" + failure: "Nie można zapisać zmodyfikowanej listy: %{errors}" + update: + success: "Zmodyfikowana lista została zapisana" + failure: "Nie można zapisać zmodyfikowanej listy: %{errors}" + can_be_saved: "Zmodyfikowano listę:" + can_be_saved_as: "Modyfikacje można zapisać tylko na nowej liście:" members: index: no_results_title_text: Nie ma jeszcze żadnych członków projektu. @@ -319,6 +327,7 @@ pl: project_roles: "Role w projekcie" wp_shares: "Udostępnienia pakietu roboczego" groups: "Grupy" + no_modify_on_shared: "Obecnie nie możesz modyfikować ani usuwać współdzielonych członkostw za pośrednictwem strony członka. Zamiast tego użyj okna modalnego udostępniania." delete_member_dialog: title: "Usuń członka" will_remove_the_users_role: "Spowoduje to usunięcie roli użytkownika z tego projektu." @@ -495,7 +504,7 @@ pl: no_common_statuses_exists: "Brak stanu dostępnego dla wszystkich wybranych pakietów roboczych. Ich stanu nie można zmienić." unsupported_for_multiple_projects: "Hurtowe przenoszenie / kopiowanie nie jest obsługiwane dla Zestawu zadań z różnych projektów" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Brak przepływu pracy udostępniania pakietu roboczego" message: "Dla roli „Edytor pakietów roboczych” nie skonfigurowano przepływu pracy. Bez przepływu pracy użytkownik, któremu ją udostępniono nie może zmienić statusu pakietu roboczego. Przepływy pracy można kopiować. Wybierz typ źródłowy (np. „Zadanie”) i rolę źródłową (np. „Członek”). Następnie wybierz typy docelowe. Na początek możesz wybrać wszystkie typy jako docelowe. Na koniec wybierz rolę „Edytor pakietów roboczych” jako cel i naciśnij przycisk „Kopiuj”. Po utworzeniu ustawień domyślnych dostosuj przepływy pracy tak, jak w przypadku każdej innej roli." link_message: "Skonfiguruj przepływy pracy w administracji." @@ -793,6 +802,7 @@ pl: not_an_iso_date: "wprowadzono nieprawidłową datę. Wymagany format: RRRR-MM-DD." not_same_project: "nie należy do tego samego projektu." odd: "musi być nieparzyste." + regex_match_failed: "nie pasuje do wyrażenia regularnego %{expression}." regex_invalid: "nie może być zastosowany z zastosowanym wyrażeniem regularnym." smaller_than_or_equal_to_max_length: "musi być mniejsze niż lub równe z maksymalnej długości." taken: "zostały już podjęte." @@ -1004,13 +1014,13 @@ pl: only_same_project_categories_allowed: "Kategoria pakietu roboczego musi znajdować się w tym samym projekcie co pakiet roboczy." does_not_exist: "Podana kategoria nie istnieje." estimated_hours: - cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work." - must_be_set_when_remaining_work_is_set: "Required when Remaining work is set." - only_values_greater_or_equal_zeroes_allowed: "Must be >= 0." + cant_be_inferior_to_remaining_work: "Nie może być mniejsza niż wartość pozostałej pracy." + must_be_set_when_remaining_work_is_set: "Wymagane, gdy ustawiona jest opcja Pozostała praca." + only_values_greater_or_equal_zeroes_allowed: "Musi być >= 0." format: "%{message}" remaining_hours: - cant_exceed_work: "Cannot be higher than Work." - must_be_set_when_work_is_set: "Required when Work is set." + cant_exceed_work: "Nie może być wyższa niż wartość pracy." + must_be_set_when_work_is_set: "Wymagane, gdy ustawiona jest opcja Praca." format: "%{message}" readonly_status: "Pakiet roboczy ma status tylko do odczytu, więc jego atrybutów nie można zmienić." type: @@ -1290,6 +1300,7 @@ pl: button_edit: "Edycja" button_edit_associated_wikipage: "Edytuj powiązaną stronę Wiki: %{page_title}" button_expand_all: "Rozwiń wszystkie" + button_favorite: "Dodaj do ulubionych" button_filter: "Filtr" button_generate: "Utwórz" button_list: "Lista" @@ -1317,6 +1328,7 @@ pl: button_unarchive: "Unarchive" button_uncheck_all: "Odznacz wszystko" button_unlock: "Odblokuj" + button_unfavorite: "Usuń z ulubionych" button_unwatch: "Nie obserwuj" button_update: "Aktualizacja" button_upgrade: "Aktualizuj" @@ -1638,6 +1650,7 @@ pl: pdf_overview_table: "Tabela PDF" pdf_report_with_images: "Raport PDF z obrazami" pdf_report: "Raport PDF" + pdf_gantt: "Wykres Gantta w formacie PDF" image: omitted: "Nie wyeksportowano obrazu" units: @@ -1716,11 +1729,11 @@ pl: file_links_journal: > Od teraz aktywność związana z linkami do plików (plików przechowywanych w magazynach zewnętrznych) będzie wyświetlana na karcie Aktywność. Poniżej przedstawiono aktywność dotyczącą linków, które już istniały: progress_calculation_adjusted_from_disabled_mode: >- - Progress calculation automatically set to work-based mode and adjusted with version update. + Obliczanie postępu jest automatycznie ustawiane na tryb oparty na pracy i dostosowywane wraz z aktualizacją wersji. progress_calculation_adjusted: >- - Progress calculation automatically adjusted with version update. + Obliczanie postępu jest automatycznie dostosowywane wraz z aktualizacją wersji. totals_removed_from_childless_work_packages: >- - Work and progress totals automatically removed for non-parent work packages with version update. This is a maintenance task and can be safely ignored. + Sumy pracy i postępu są automatycznie usuwane dla pakietów pracy innych niż nadrzędne wraz z aktualizacją wersji. Jest to zadanie konserwacyjne i można je bezpiecznie zignorować. links: configuration_guide: "Przewodnik po konfiguracji" get_in_touch: "Masz pytania? Skontaktuj się z nami." @@ -1785,17 +1798,6 @@ pl: mentioned: "Wspomniano o tobie w %{work_package}" responsible: "Odpowiadasz za %{work_package}" watched: "Obserwujesz %{work_package}" - update_info_mail: - body: > - Z radością ogłaszamy wydanie wersji OpenProject 12.0. Mamy nadzieję, że to niezwykle ważne wydanie znacznie usprawni sposób korzystania z OpenProject. - Począwszy od tej wersji, wprowadzamy powiadomienia w aplikacji. Od teraz będziesz otrzymywać powiadomienia o aktualizacjach pakietów roboczych bezpośrednio w OpenProject. Możesz oznaczyć te powiadomienia jako przeczytane, odpowiedzieć na komentarze lub nawet bezpośrednio modyfikować atrybuty pakietu roboczego bez opuszczania centrum powiadomień. - Oznacza to również, że nie będziemy już używać wiadomości e-mail do wysyłania powiadomień. Naszym zdaniem nowe centrum powiadomień jest lepszym miejscem do przeglądania tych aktualizacji i podejmowania działań. Niemniej jednak, jeśli zależy ci na otrzymywaniu aktualizacji pocztą elektroniczną, możesz otrzymywać codzienne przypomnienia e-mail w wybranych przez siebie porach. - Pamiętaj, aby zweryfikować nowe domyślne ustawienia powiadomień i ustawić swoje preferencje dotyczące powiadomień i przypomnień e-mail w ustawieniach konta. W celu dokonania zmian wybierz poniższy przycisk "Zmień ustawienia poczty elektronicznej". - Mamy nadzieję, że z powodzeniem będziesz korzystać z powiadomień w aplikacji, a Twoja wydajność dzięki nim znacznie się zwiększy. - Pozdrawiamy, Zespół OpenProject - body_header: "Wersja 12.0 z Centrum powiadomień" - body_subheader: "Aktualności" - subject: "Ważne zmiany w powiadomieniach w wydaniu 12.0" label_accessibility: "Dostępność" label_account: "Konto" label_active: "Aktywne" @@ -1976,7 +1978,7 @@ pl: label_enterprise_support: "Wsparcie Enterprise" label_enterprise_addon: "Dodatek wersji Enterprise" label_environment: "Środowisko" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Szacunki i postęp" label_equals: "jest" label_everywhere: "wszędzie" label_example: "Przykład" @@ -1990,7 +1992,7 @@ pl: label_expanded_click_to_collapse: "Rozwinięto. Kliknij, aby zwinąć" label_f_hour: "%{value} godzin" label_f_hour_plural: "%{value} godzin" - label_favoured: "Ulubione" + label_favorite: "Ulubione" label_feed_plural: "Kanały" label_feeds_access_key: "Klucz dostępu RSS" label_feeds_access_key_created_on: "Klucz dostępu RSS utworzony %{value} temu" @@ -2063,6 +2065,7 @@ pl: label_learn_more: "Dowiedz się więcej" label_less_or_equal: "≤" label_less_than_ago: "mniej niż dni temu" + label_link_url: "Link (adres URL)" label_list: "Lista" label_loading: "Ładowanie..." label_lock_user: "Zablokuj użytkownika" @@ -2088,6 +2091,7 @@ pl: label_membership_plural: "Uczestnictwa" lable_membership_added: "Dodano członka" lable_membership_updated: "Zaktualizowano członka" + label_menu: "Menu" label_menu_badge: pre_alpha: "wczesna alfa" alpha: "alfa" @@ -2189,6 +2193,7 @@ pl: label_percent_complete: "% ukończenia" label_project_activity: "Aktywność projektu" label_project_attribute_plural: "Cechy projektu" + label_project_attribute_manage_link: "Zarządzaj atrybutami projektu" label_project_count: "Całkowita liczba projektów" label_project_copy_notifications: "Wyślij powiadomienia e-mail podczas kopiowania projektów" label_project_latest: "Najnowsze projekty" @@ -2203,7 +2208,7 @@ pl: label_project_attributes_settings: "Ustawienia atrybutów projektu" label_project_storage_plural: "Magazyny plików" label_project_storage_project_folder: "Magazyny plików: foldery projektów" - label_projects_storage_information: "%{count} projektów zużywających %{storage} przestrzeni dyskowej" + label_projects_disk_usage_information: "Projekty (%{count}) zajmują %{used_disk_space} miejsca na dysku" label_project_view_all: "Zobacz wszystkie projekty" label_project_show_details: "Pokaż szczegóły projektu" label_project_hide_details: "Ukryj szczegóły projektu" @@ -2260,6 +2265,7 @@ pl: label_setting_plural: "Ustawienia" label_system_settings: "Ustawienia" label_show_completed_versions: "Pokaż zakończone wersje" + label_columns: "Kolumny" label_sort: "Sortowanie" label_sort_by: "Sortuj wg %{value}" label_sorted_by: "kolejność wg %{value}" @@ -2807,7 +2813,7 @@ pl: member_of_group: "Przypisany do grupy" name_or_identifier: "Nazwa lub identyfikator" only_subproject_id: "Tylko podprojekt" - shared_with_user: "Udostępniono użytkownikowi" + shared_with_user: "Udostępnione użytkownikom" shared_with_me: "Udostępnione dla mnie" subproject_id: "Uwzględniając podprojekt" repositories: @@ -2950,6 +2956,7 @@ pl: setting_app_subtitle: "Podtytuł" setting_app_title: "Tytuł" setting_attachment_max_size: "Maks. rozmiar załącznika" + setting_show_work_package_attachments: "Domyślnie pokazuj załączniki na karcie plików" setting_antivirus_scan_mode: "Tryb skanowania" setting_antivirus_scan_action: "Działanie wobec zainfekowanego pliku" setting_autofetch_changesets: "Autopobieranie zmian repozytorium" @@ -3051,6 +3058,8 @@ pl: attachments: whitelist_text_html: > Zdefiniuj listę poprawnych rozszerzeń plików i/lub typów mime dla przesłanych plików.
    Wprowadź rozszerzenia plików (np. %{ext_example}) lub typy mime (np. %{mime_example}).
    Pozostaw puste, aby umożliwić przesłanie dowolnego typu pliku. Dozwolone wielokrotne wartości (jeden wiersz dla każdej wartości). + show_work_package_attachments: > + Wyłączenie tej opcji spowoduje ukrycie listy załączników na karcie plików pakietów roboczych dla nowych projektów. Pliki załączone w opisie pakietu roboczego będą nadal przesyłane do wewnętrznego magazynu załączników. antivirus: title: "Skanowanie antywirusowe" clamav_ping_failed: "Nie udało się połączyć z demonem ClamAV. Proszę sprawdzić konfigurację i spróbować ponownie." @@ -3287,6 +3296,10 @@ pl: input_label: "Dodaj kolumny" input_placeholder: "Wybierz kolumnę" drag_area_label: "Zarządzaj kolumnami i zmieniaj ich kolejność" + sort_by: + automatic: + heading: "Automatycznie" + description: "Ustaw kolejność %{plural} według jednego lub więcej kryteriów sortowania. Poprzednie sortowanie zostanie utracone." top_menu: additional_resources: "Dodatkowe zasoby" getting_started: "Pierwsze kroki" @@ -3638,7 +3651,7 @@ pl: link: link plugin_openproject_auth_plugins: name: "Wtyczki uwierzytelniające OpenProject" - description: "Integracja dostawców strategii OmniAuth w celu uwierzytelniania w Openproject." + description: "Integracja dostawców strategii OmniAuth w celu uwierzytelniania w OpenProject." plugin_openproject_auth_saml: name: "SAML OmniAuth / pojedyncze logowanie" description: "Dodaje dostawcę SAML OmniAuth do OpenProject" diff --git a/config/locales/crowdin/pt-BR.seeders.yml b/config/locales/crowdin/pt-BR.seeders.yml index 70607b6171e3..c2ddce3c203a 100644 --- a/config/locales/crowdin/pt-BR.seeders.yml +++ b/config/locales/crowdin/pt-BR.seeders.yml @@ -251,6 +251,21 @@ pt-BR: * [ ] Ainda mais cerveja item_4: subject: Fim do projeto + wiki: | + _Nesta wiki, você pode criar e editar páginas e subpáginas de forma colaborativa para criar uma wiki do projeto._ + + **Você pode:** + + * Inserir texto e imagens, inclusive copiando e colando de outros documentos + * Criar uma hierarquia de páginas com páginas pai + * Incluir páginas da wiki no menu do projeto + * Usar macros para incluir, por exemplo, índice, listas de pacotes de trabalho ou gráficos de Gantt + * Incluir páginas da wiki em outros campos de texto, como na página de visão geral do projeto + * Incluir links para outros documentos + * Visualizar o histórico de alterações + * Visualizar como Markdown + + Mais informações: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Projeto Scrum status_explanation: Todas as tarefas estão dentro do cronograma. As pessoas envolvidas conhecem suas tarefas. O sistema está completamente configurado. diff --git a/config/locales/crowdin/pt-BR.yml b/config/locales/crowdin/pt-BR.yml index b992bc347cea..9b08354cb8b4 100644 --- a/config/locales/crowdin/pt-BR.yml +++ b/config/locales/crowdin/pt-BR.yml @@ -263,6 +263,7 @@ pt-BR: lists: active: "Projetos ativos" my: "Meus projetos" + favored: "Projetos favoritos" archived: "Projetos arquivados" my_private: "Minhas listas de projetos privados" new: @@ -303,7 +304,14 @@ pt-BR: storage: no_results_title_text: Não há espaço adicional gravado em disco que seja consumido por este projeto. lists: - can_be_saved_as: "As modificações só podem ser salvas em uma nova lista." + create: + success: "A lista modificada foi salva como uma nova lista" + failure: "Não foi possível salvar a lista modificada: %{errors}" + update: + success: "A lista modificada foi salva" + failure: "Não foi possível salvar a lista modificada: %{errors}" + can_be_saved: "Lista modificada:" + can_be_saved_as: "As modificações só podem ser salvas em uma nova lista:" members: index: no_results_title_text: Atualmente, não há membros deste projeto. @@ -321,6 +329,7 @@ pt-BR: project_roles: "Papel no projeto" wp_shares: "Compartilhamento de pacote de trabalho" groups: "Grupos" + no_modify_on_shared: "No momento, você não pode modificar ou remover associações compartilhadas através da página de membros. Em vez disso, use o modal de compartilhamento." delete_member_dialog: title: "Remover membro" will_remove_the_users_role: "Isto removerá a função do usuário deste projeto." @@ -483,9 +492,9 @@ pt-BR: no_common_statuses_exists: "Não há situação disponível para todos os pacotes de trabalho selecionados. Sua situação não pode ser alterada." unsupported_for_multiple_projects: "Movimentação/cópia em massa não é suportada para pacotes de trabalho de vários projetos" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Fluxo de trabalho ausente para compartilhamento de pacotes de trabalho" - message: "Nenhum fluxo de trabalho está configurado para a função 'Editor de pacote de trabalho'. Sem um fluxo de trabalho, o compartilhado com o usuário não pode alterar o status do pacote de trabalho. Os fluxos de trabalho podem ser copiados. Selecione um tipo de fonte (ex. 'Tarefa') e função de origem (ex. 'Membro'). Em seguida, selecione os tipos de destino. Para começar, você pode selecionar todos os tipos como alvos. Por fim, selecione a função 'Editor de pacote de trabalho' como o destino e pressione 'Copiar'. Depois de ter criado os padrões, ajuste os fluxos de trabalho da mesma forma que faz para todas as outras funções." + message: "Nenhum fluxo de trabalho está configurado para a função \"Editor de pacote de trabalho\". Sem um fluxo de trabalho, o usuário compartilhado não pode alterar o status do pacote de trabalho. Os fluxos de trabalho podem ser copiados. Selecione um tipo de origem (ex.: \"Tarefa\") e uma função de origem (ex.: \"Membro\"). Em seguida, selecione os tipos de destino. Para começar, você pode selecionar todos os tipos como alvos. Por fim, selecione a função \"Editor de pacote de trabalho\" como o destino e pressione \"Copiar\". Depois de criar os padrões, ajuste os fluxos de trabalho da mesma forma que faz para todas as outras funções." link_message: "Configure os fluxos de trabalho na administração." summary: reports: @@ -781,6 +790,7 @@ pt-BR: not_an_iso_date: "não é uma data válida. Formato exigido: AAAA-MM-DD." not_same_project: "não pertence ao mesmo projeto." odd: "deve ser ímpar." + regex_match_failed: "não corresponde à expressão regular %{expression}." regex_invalid: "não pode ser validado com a expressão regular associada." smaller_than_or_equal_to_max_length: "deve ser menor ou igual ao tamanho máximo." taken: "já está sendo utilizado." @@ -992,13 +1002,13 @@ pt-BR: only_same_project_categories_allowed: "A categoria de um pacote de trabalho deve estar dentro do mesmo projeto do pacote de trabalho." does_not_exist: "Categoria especificada não existe." estimated_hours: - cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work." - must_be_set_when_remaining_work_is_set: "Required when Remaining work is set." - only_values_greater_or_equal_zeroes_allowed: "Must be >= 0." + cant_be_inferior_to_remaining_work: "Não pode ser menor do que o Trabalho restante." + must_be_set_when_remaining_work_is_set: "Necessário quando o Trabalho restante for definido." + only_values_greater_or_equal_zeroes_allowed: "Deve ser >= 0." format: "%{message}" remaining_hours: - cant_exceed_work: "Cannot be higher than Work." - must_be_set_when_work_is_set: "Required when Work is set." + cant_exceed_work: "Não pode ser maior do que o Trabalho." + must_be_set_when_work_is_set: "Necessário quando o Trabalho for definido." format: "%{message}" readonly_status: "O pacote de trabalho está em estado somente leitura, então seus atributos não podem ser alterados." type: @@ -1262,6 +1272,7 @@ pt-BR: button_edit: "Editar" button_edit_associated_wikipage: "Editar página wiki associada: %{page_title}" button_expand_all: "Expandir todos" + button_favorite: "Adicionar aos favoritos" button_filter: "Filtro" button_generate: "Gerar" button_list: "Lista" @@ -1289,6 +1300,7 @@ pt-BR: button_unarchive: "Desarquivar" button_uncheck_all: "Desmarcar todos" button_unlock: "Desbloquear" + button_unfavorite: "Remover dos favoritos" button_unwatch: "Não observar" button_update: "Atualizar" button_upgrade: "Atualizar" @@ -1574,6 +1586,7 @@ pt-BR: pdf_overview_table: "Tabela PDF" pdf_report_with_images: "Relatório em PDF com imagens" pdf_report: "Relatório em PDF" + pdf_gantt: "Gantt em PDF" image: omitted: "Imagem não exportada." units: @@ -1652,11 +1665,11 @@ pt-BR: file_links_journal: > A partir de agora, a atividade relacionada a links de arquivos (arquivos armazenados em armazenamentos externos) aparecerá aqui na guia Atividade. O seguinte representa a atividade relacionada aos links que já existiam: progress_calculation_adjusted_from_disabled_mode: >- - Progress calculation automatically set to work-based mode and adjusted with version update. + Cálculo de progresso automaticamente definido para o modo com base em trabalho e ajustado com a atualização de versão. progress_calculation_adjusted: >- - Progress calculation automatically adjusted with version update. + Cálculo de progresso automaticamente ajustado com a atualização de versão. totals_removed_from_childless_work_packages: >- - Work and progress totals automatically removed for non-parent work packages with version update. This is a maintenance task and can be safely ignored. + Os totais de trabalho e progresso foram removidos automaticamente para pacotes de trabalho que não são principais com a atualização de versão. Esta é uma tarefa de manutenção e pode ser ignorada com segurança. links: configuration_guide: "Guia de configuração" get_in_touch: "Com dúvidas? Entre em contato conosco." @@ -1721,17 +1734,6 @@ pt-BR: mentioned: "Você foi mencionado em %{work_package}" responsible: "Você se tornou responsável por %{work_package}" watched: "Você está assistindo %{work_package}" - update_info_mail: - body: > - Estamos ansiosos para anunciar o lançamento do OpenProject 12.0. É um grande lançamento que esperamos que melhore significativamente a forma como você usa o OpenProject. - Neste lançamento, estamos apresentando as notificações no aplicativo. de agora em diante, você receberá notificações para as atualizações nos pacotes de trabalho diretamente no OpenProject. Você pode marcas estas notificações como lidas, responder a um comentário ou até mesmo modificar diretamente atributos do pacote de trabalho sem sair do centro de notificações. - Isto também significa que não iremos mais utilizar e-mail para notificações. Achamos que um novo centro de notificações é o melhor lugar para visualizar e tomar as ações necessárias para estas atualizações. No entanto, se você deseja continuar a receber atualizações por e-mail, opte por receber lembretes diários por e-mail em horários específicos de sua escolha. - Certifique-se de verificar suas novas configurações de notificação padrão e de definir suas preferências sobre notificações e lembretes por e-mail nas configurações de sua conta. Você pode fazer isso através do botão “Alterar configurações de e-mail” abaixo. - Esperamos que você ache nossas notificações no aplicativo útil e que ela aumente sua produtividade. - Atenciosamente, Equipe OpenProject - body_header: "Versão 12.0 com a Central de Notificações" - body_subheader: "Notícias" - subject: "Alterações importantes das notificações com o lançamento da versão 12.0" label_accessibility: "Acessibilidade" label_account: "Conta" label_active: "Ativo" @@ -1912,7 +1914,7 @@ pt-BR: label_enterprise_support: "Suporte corporativo" label_enterprise_addon: "Complemento empresarial" label_environment: "Ambiente" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimativas e progresso" label_equals: "é" label_everywhere: "em todos os lugares" label_example: "Exemplo" @@ -1926,7 +1928,7 @@ pt-BR: label_expanded_click_to_collapse: "Expandido. Clique para recolher" label_f_hour: "%{value} hora" label_f_hour_plural: "%{value} horas" - label_favoured: "Favoritado" + label_favorite: "Favorito" label_feed_plural: "Feeds" label_feeds_access_key: "Chave de acesso RSS" label_feeds_access_key_created_on: "Chave de acesso RSS criada %{value} atrás" @@ -1999,6 +2001,7 @@ pt-BR: label_learn_more: "Saiba mais" label_less_or_equal: "<=" label_less_than_ago: "menos dias atrás" + label_link_url: "Link (URL)" label_list: "Lista" label_loading: "Carregando..." label_lock_user: "Bloquear usuário" @@ -2024,6 +2027,7 @@ pt-BR: label_membership_plural: "Associações" lable_membership_added: "Membro adicionado" lable_membership_updated: "Membro atualizado" + label_menu: "Menu" label_menu_badge: pre_alpha: "pré-alfa" alpha: "alfa" @@ -2125,6 +2129,7 @@ pt-BR: label_percent_complete: "% de conclusão" label_project_activity: "Atividade do projeto" label_project_attribute_plural: "Atributos do projeto" + label_project_attribute_manage_link: "Gerenciar atributos do projeto" label_project_count: "Número total de projetos" label_project_copy_notifications: "Enviar notificações por email durante a cópia do projeto" label_project_latest: "Últimos projetos" @@ -2139,7 +2144,7 @@ pt-BR: label_project_attributes_settings: "Configurações de atributos de projeto" label_project_storage_plural: "Armazenamentos de arquivo" label_project_storage_project_folder: "Armazenamentos de arquivos: pastas do Projeto" - label_projects_storage_information: "%{count} projetos usando %{storage} de armazenamento em disco" + label_projects_disk_usage_information: "%{count} projetos usando %{used_disk_space} do espaço em disco" label_project_view_all: "Ver todos os projetos" label_project_show_details: "Mostrar detalhes do projeto" label_project_hide_details: "Ocultar detalhes do projeto" @@ -2196,6 +2201,7 @@ pt-BR: label_setting_plural: "Configurações" label_system_settings: "Configurações do sistema" label_show_completed_versions: "Mostrar versões concluídas" + label_columns: "Colunas" label_sort: "Ordenar" label_sort_by: "Ordenar por %{value}" label_sorted_by: "ordenados por %{value}" @@ -2738,7 +2744,7 @@ pt-BR: member_of_group: "Atribuído ao grupo" name_or_identifier: "Nome ou identificador" only_subproject_id: "Apenas subprojeto" - shared_with_user: "Compartilhado com o usuário" + shared_with_user: "Compartilhado com usuários" shared_with_me: "Compartilhados comigo" subproject_id: "Incluindo Subprojeto" repositories: @@ -2883,6 +2889,7 @@ pt-BR: setting_app_subtitle: "Subtítulo do aplicativo" setting_app_title: "Título da aplicação" setting_attachment_max_size: "Tamanho máximo dos anexos" + setting_show_work_package_attachments: "Exibir anexos na aba de arquivos por padrão" setting_antivirus_scan_mode: "Modo escanear" setting_antivirus_scan_action: "Ação do arquivo infectado" setting_autofetch_changesets: "Busca automática de alterações no repositório" @@ -2984,6 +2991,8 @@ pt-BR: attachments: whitelist_text_html: > Defina uma lista de extensões de arquivo válidas e/ou tipos MIME para arquivos carregados.
    Insira as extensões de arquivo (e.x., %{ext_example}) ou tipos de mime (e.x., %{mime_example}).
    Deixe em branco para permitir que qualquer tipo de arquivo seja carregado. Vários valores permitidos (uma linha para cada valor). + show_work_package_attachments: > + Desativar esta opção ocultará a lista de anexos na aba Arquivos dos pacotes de trabalho para novos projetos. Os arquivos anexados na descrição de um pacote de trabalho ainda serão carregados no armazenamento interno de anexos. antivirus: title: "Verificação de vírus" clamav_ping_failed: "Não foi possível conectar ao daemon do ClamAV. Verifique novamente a configuração e tente novamente." @@ -3220,6 +3229,10 @@ pt-BR: input_label: "Adicionar colunas" input_placeholder: "Selecionar uma coluna" drag_area_label: "Gerenciar e reordenar colunas" + sort_by: + automatic: + heading: "Automático" + description: "Ordene os %{plural} por um ou mais critérios de ordenação. A ordenação anterior será perdida." top_menu: additional_resources: "Recursos adicionais" getting_started: "Guia de introdução" @@ -3566,7 +3579,7 @@ pt-BR: link: link plugin_openproject_auth_plugins: name: "Plugins OpenProject Auth" - description: "Integração de fornecedores de estratégias OmniAuth para autenticação no Openproject." + description: "Integração de fornecedores de estratégias OmniAuth para autenticação no OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML/Início de sessão único" description: "Adiciona o fornecedor SAML OmniAuth ao OpenProject" diff --git a/config/locales/crowdin/pt-PT.seeders.yml b/config/locales/crowdin/pt-PT.seeders.yml index 97e72a7f968c..be3c019eb5b4 100644 --- a/config/locales/crowdin/pt-PT.seeders.yml +++ b/config/locales/crowdin/pt-PT.seeders.yml @@ -251,6 +251,21 @@ pt-PT: * [ ] Ainda mais cerveja item_4: subject: Fim do projeto + wiki: | + _Neste wiki pode criar e editar páginas e subpáginas de forma colaborativa para criar um projeto wiki._ + + **Pode:** + + * Inserir texto e imagens, inclusive ao copiar e colar de outros documentos + * Criar uma hierarquia de páginas com páginas principais + * Incluir páginas wiki no menu do projeto + * Utilizar macros para incluir, por exemplo, índice, listas de pacotes de trabalho ou gráficos de Gantt + * Incluir páginas wiki noutros campos de texto, por exemplo, na página de visão geral do projeto + * Incluir ligações para outros documentos + * Ver o histórico de alterações + * Ver como Markdown + + Mais informações: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Projeto Scrum status_explanation: Todas as tarefas estão agendadas. As pessoas envolvidas conhecem as suas tarefas. O sistema está configurado por completo. diff --git a/config/locales/crowdin/pt-PT.yml b/config/locales/crowdin/pt-PT.yml index 073665b5e7d8..a4e071399f0e 100644 --- a/config/locales/crowdin/pt-PT.yml +++ b/config/locales/crowdin/pt-PT.yml @@ -262,6 +262,7 @@ pt-PT: lists: active: "Projetos ativos" my: "Os meus projetos" + favored: "Projetos favoritos" archived: "Projetos arquivados" my_private: "As minhas listas de projetos privados" new: @@ -302,7 +303,14 @@ pt-PT: storage: no_results_title_text: Não há espaço adicional gravado em disco que seja consumido por este projeto. lists: - can_be_saved_as: "As alterações só podem ser guardadas numa nova lista." + create: + success: "A lista modificada foi guardada como uma nova lista" + failure: "Não foi possível guardar a lista modificada: %{errors}" + update: + success: "A lista modificada foi guardada" + failure: "Não foi possível guardar a lista modificada: %{errors}" + can_be_saved: "Lista modificada:" + can_be_saved_as: "As alterações só podem ser guardadas numa nova lista:" members: index: no_results_title_text: Atualmente, não existem membros pertencentes a este projeto. @@ -320,6 +328,7 @@ pt-PT: project_roles: "Funções no projeto" wp_shares: "Partilhas do pacote de trabalho" groups: "Grupos" + no_modify_on_shared: "Atualmente, não é possível modificar ou remover associações partilhadas na página do membro. Em vez disso, utilize o modal de partilha." delete_member_dialog: title: "Remover membro" will_remove_the_users_role: "Isto irá remover a função do utilizador deste projeto." @@ -482,7 +491,7 @@ pt-PT: no_common_statuses_exists: "Não há nenhum status disponível para todos os pacotes de trabalho selecionados. O seu status não pode ser alterado." unsupported_for_multiple_projects: "Mover/copiar em massa não é suportado por pacotes de trabalho de vários projetos" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Falta um fluxo de trabalho para a partilha de pacotes de trabalho" message: "Nenhum fluxo de trabalho está configurado para a função \"Editor do pacote de trabalho\". Sem um fluxo de trabalho, o utilizador não pode alterar o estado do pacote de trabalho. Os fluxos de trabalho podem ser copiados. Selecione um tipo de fonte (por exemplo, \"Tarefa\") e uma função da fonte (por exemplo, \"Membro\"). Em seguida, selecione os tipos de destino. Para começar, pode selecionar todos os tipos como alvos. Por fim, selecione a função \"Editor do pacote de trabalho\" como destino e prima \"Copiar\". Depois de ter criado as predefinições, ajuste os fluxos de trabalho como faz para todas as outras funções." link_message: "Configure os fluxos de trabalho na administração." @@ -780,6 +789,7 @@ pt-PT: not_an_iso_date: "não é uma data válida. Formato exigido: AAAA-MM-DD." not_same_project: "não pertence ao mesmo projeto." odd: "deve ser ímpar." + regex_match_failed: "não corresponde à expressão regular %{expression}." regex_invalid: "não pode ser validado com a expressão regular associada." smaller_than_or_equal_to_max_length: "deve ser menor ou igual ao comprimento máximo." taken: "já está a ser utilizado." @@ -991,13 +1001,13 @@ pt-PT: only_same_project_categories_allowed: "A categoria de um pacote de trabalho deve estar dentro do mesmo projeto que o pacote de trabalho." does_not_exist: "A categoria especificada não existe." estimated_hours: - cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work." - must_be_set_when_remaining_work_is_set: "Required when Remaining work is set." - only_values_greater_or_equal_zeroes_allowed: "Must be >= 0." + cant_be_inferior_to_remaining_work: "Não pode ser inferior a Trabalho restante." + must_be_set_when_remaining_work_is_set: "Obrigatório quando o Trabalho restante está definido." + only_values_greater_or_equal_zeroes_allowed: "Tem de ser >= 0." format: "%{message}" remaining_hours: - cant_exceed_work: "Cannot be higher than Work." - must_be_set_when_work_is_set: "Required when Work is set." + cant_exceed_work: "Não pode ser superior a Trabalho." + must_be_set_when_work_is_set: "Obrigatório quando o Trabalho é definido." format: "%{message}" readonly_status: "O pacote de trabalho está em estado de apenas leitura, por isso os seus atributos não podem ser alterados." type: @@ -1261,6 +1271,7 @@ pt-PT: button_edit: "Editar" button_edit_associated_wikipage: "Editar página Wiki associada: %{page_title}" button_expand_all: "Expandir Tudo" + button_favorite: "Adicionar aos favoritos" button_filter: "Filtro" button_generate: "Gerar" button_list: "Lista" @@ -1288,6 +1299,7 @@ pt-PT: button_unarchive: "Desarquivar" button_uncheck_all: "Anular selecção" button_unlock: "Desbloquear" + button_unfavorite: "Remover dos favoritos" button_unwatch: "Não observar" button_update: "Atualizar" button_upgrade: "Atualizar" @@ -1573,6 +1585,7 @@ pt-PT: pdf_overview_table: "Tabela PDF" pdf_report_with_images: "Relatório PDF com imagens" pdf_report: "Relatório PDF" + pdf_gantt: "PDF Gantt" image: omitted: "Imagem não exportada." units: @@ -1651,11 +1664,11 @@ pt-PT: file_links_journal: > A partir de agora, a atividade relacionada a links de arquivos (arquivos armazenados em armazenamentos externos) aparecerá aqui na guia Atividade. O seguinte representa a atividade relacionada aos links que já existiam: progress_calculation_adjusted_from_disabled_mode: >- - Progress calculation automatically set to work-based mode and adjusted with version update. + O cálculo do progresso é automaticamente definido no modo baseado no trabalho e ajustado com a atualização da versão. progress_calculation_adjusted: >- - Progress calculation automatically adjusted with version update. + O cálculo do progresso é automaticamente ajustado com a atualização da versão. totals_removed_from_childless_work_packages: >- - Work and progress totals automatically removed for non-parent work packages with version update. This is a maintenance task and can be safely ignored. + Os totais de trabalho e de progresso são automaticamente removidos dos pacotes de trabalho que não são principais com a atualização da versão. Esta é uma tarefa de manutenção e pode ser ignorada com segurança. links: configuration_guide: "Guia de configuração" get_in_touch: "Tem questões? Entre em contato conosco." @@ -1720,17 +1733,6 @@ pt-PT: mentioned: "Foi mencionado em %{work_package}" responsible: "Tornou-se responsável por %{work_package}" watched: "Está a observar %{work_package}" - update_info_mail: - body: > - Estamos contentes por anunciar o lançamento do OpenProject 12.0. É uma grande versão que esperamos melhore significativamente a forma como usa o OpenProject. - A partir desta versão, introduzimos notificações na aplicação, e pode receber notificações de atualizações de pacotes de trabalho diretamente no OpenProject. Pode marcar estas notificações como lidas, responder a um comentário ou até mesmo modificar diretamente os atributos do pacote de trabalho sem sair do centro de notificação. - Também significa que já não vamos utilizar e-mails para notificações. Acreditamos que o novo centro de notificação é o melhor sítio para ver e agir de acordo com as atualizações. No entanto, se quiser continuar a receber atualizações por e-mail, pode optar por receber lembretes diários de e-mail em horários específicos à sua escolha. - Verifique as novas definições padrão de notificações e configure as suas preferências de notificações e lembretes por e-mail nas definições de conta. Pode fazê-lo através do botão "Alterar definições de email" abaixo. - Esperamos que considere úteis as notificações na aplicação, e que ajudem a aumentar ainda mais a sua produtividade. - Atenciosamente, A equipa do OpenProject - body_header: "Versão 12.0 com Centro de Notificações" - body_subheader: "Noticias" - subject: "Alterações importantes nas notificações com o lançamento de 12.0" label_accessibility: "Accessibilidade" label_account: "Conta" label_active: "Ativo" @@ -1911,7 +1913,7 @@ pt-PT: label_enterprise_support: "Suporte Enterprise" label_enterprise_addon: "Suplemento Enterprise" label_environment: "Ambiente" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimativas e progresso" label_equals: "é" label_everywhere: "em todo o lado" label_example: "Exemplo" @@ -1925,7 +1927,7 @@ pt-PT: label_expanded_click_to_collapse: "Expandido. Clique para ocultar" label_f_hour: "%{value} hora" label_f_hour_plural: "%{value} horas" - label_favoured: "Nos favoritos" + label_favorite: "Favorito" label_feed_plural: "Feeds" label_feeds_access_key: "Chave de acesso RSS" label_feeds_access_key_created_on: "Chave de acesso RSS criada %{value} atrás" @@ -1998,6 +2000,7 @@ pt-PT: label_learn_more: "Saber mais" label_less_or_equal: "<=" label_less_than_ago: "menos que dias atrás" + label_link_url: "Link (URL)" label_list: "Lista" label_loading: "A carregar..." label_lock_user: "Bloquear utilizador" @@ -2023,6 +2026,7 @@ pt-PT: label_membership_plural: "Associações" lable_membership_added: "Membro adicionado" lable_membership_updated: "Membro atualizado" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2124,6 +2128,7 @@ pt-PT: label_percent_complete: "% de conclusão" label_project_activity: "Atividade do projeto" label_project_attribute_plural: "Atributos do projeto" + label_project_attribute_manage_link: "Gerir atributos do projeto" label_project_count: "Número total de projetos" label_project_copy_notifications: "Envie notificações por correio eletrónico durante a cópia do projeto" label_project_latest: "Últimos projetos" @@ -2138,7 +2143,7 @@ pt-PT: label_project_attributes_settings: "Definições dos atributos do projeto" label_project_storage_plural: "Armazenamentos de ficheiros" label_project_storage_project_folder: "Armazenamentos de ficheiros: pastas do projeto" - label_projects_storage_information: "%{count} projetos a utilizar %{storage} de armazenamento em disco" + label_projects_disk_usage_information: "%{count} projetos utilizam %{used_disk_space} espaço no disco" label_project_view_all: "Ver todos os projetos" label_project_show_details: "Mostrar detalhes do projeto" label_project_hide_details: "Ocultar detalhes do projeto" @@ -2195,6 +2200,7 @@ pt-PT: label_setting_plural: "Definições" label_system_settings: "Configurações do Sistema" label_show_completed_versions: "Mostrar versões concluídas" + label_columns: "Colunas" label_sort: "Ordenar" label_sort_by: "Ordenar por %{value}" label_sorted_by: "ordenado por %{value}" @@ -2738,7 +2744,7 @@ pt-PT: member_of_group: "Grupo do titular" name_or_identifier: "Nome ou identificador" only_subproject_id: "Apenas sub-projeto" - shared_with_user: "Compartilhado com o usuário" + shared_with_user: "Partilhado com utilizadores" shared_with_me: "Partilhados comigo" subproject_id: "Incluindo sub-projeto" repositories: @@ -2881,6 +2887,7 @@ pt-PT: setting_app_subtitle: "Subtítulo da aplicação" setting_app_title: "Título da aplicação" setting_attachment_max_size: "Tamanho máx. do anexo" + setting_show_work_package_attachments: "Mostrar anexos no separador dos ficheiros por padrão" setting_antivirus_scan_mode: "Modo de digitalização" setting_antivirus_scan_action: "Ação para ficheiro infetado" setting_autofetch_changesets: "Alterações do repositório autofetch" @@ -2982,6 +2989,8 @@ pt-PT: attachments: whitelist_text_html: > Defina uma lista de extensões de ficheiros e/ou de tipos mime para ficheiros carregados.
    Insira extensões de ficheiro (por exemplo, %{ext_example}) ou tipos mime (ex., %{mime_example}).
    Deixe em branco para permitir que qualquer tipo de ficheiro seja carregado. Vários valores permitidos (uma linha para cada valor). + show_work_package_attachments: > + Se desativar esta opção, irá ocultar a lista de anexos no separador de ficheiros dos pacotes de trabalho para novos projetos. Os ficheiros anexados na descrição de um pacote de trabalho irão continuar a ser carregados no armazenamento interno de anexos. antivirus: title: "Verificação de vírus" clamav_ping_failed: "Não foi possível ligar o daemon do ClamAV. Verifique novamente a configuração e tente novamente." @@ -3218,6 +3227,10 @@ pt-PT: input_label: "Adicionar colunas" input_placeholder: "Selecione uma coluna" drag_area_label: "Gerir e reordenar colunas" + sort_by: + automatic: + heading: "Automático" + description: "Ordene o %{plural} por um ou mais critérios de ordenação. Irá perder a ordenação anterior." top_menu: additional_resources: "Recursos adicionais" getting_started: "Por onde começar" @@ -3565,7 +3578,7 @@ pt-PT: link: link plugin_openproject_auth_plugins: name: "Plugins de autenticação OpenProject" - description: "Integração de fornecedores de estratégias OmniAuth para autenticação no Openproject." + description: "Integração de fornecedores de estratégias OmniAuth para autenticação no OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML/Início de sessão único" description: "Adiciona o fornecedor SAML OmniAuth ao OpenProject" diff --git a/config/locales/crowdin/ro.seeders.yml b/config/locales/crowdin/ro.seeders.yml index c4f0fdf5de14..2841a400bfbd 100644 --- a/config/locales/crowdin/ro.seeders.yml +++ b/config/locales/crowdin/ro.seeders.yml @@ -251,6 +251,21 @@ ro: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/ro.yml b/config/locales/crowdin/ro.yml index 356be14746f6..a5dd53af1223 100644 --- a/config/locales/crowdin/ro.yml +++ b/config/locales/crowdin/ro.yml @@ -264,6 +264,7 @@ ro: lists: active: "Active projects" my: "Proiectele mele" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ ro: storage: no_results_title_text: Acest proiect nu consumă spațiu suplimentar pe disc înregistrat. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: În acest moment nu există niciun participant la acest proiect. @@ -322,6 +330,7 @@ ro: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Grupuri" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -491,7 +500,7 @@ ro: no_common_statuses_exists: "Nu există o stare disponibilă pentru toate pachetele de lucru selectate. Starea acestora nu poate fi modificată." unsupported_for_multiple_projects: "Mutarea/copierea în masă nu este suportată pentru pachete de lucru din proiecte multiple" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -789,6 +798,7 @@ ro: not_an_iso_date: "nu este o dată validă. Formatul necesar: AAAA-MM-ZZ." not_same_project: "nu aparține aceluiași proiect." odd: "trebuie să fie impar." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "nu a putut fi validată cu expresia regulată asociată." smaller_than_or_equal_to_max_length: "trebuie să fie mai mic sau egal cu lungimea maximă." taken: "a fost luat deja." @@ -1278,6 +1288,7 @@ ro: button_edit: "Editare" button_edit_associated_wikipage: "Editare pagină wiki asociată: %{page_title}" button_expand_all: "Extindere totală" + button_favorite: "Add to favorites" button_filter: "Filtrare" button_generate: "Generare" button_list: "Listă" @@ -1305,6 +1316,7 @@ ro: button_unarchive: "Dezarhivare" button_uncheck_all: "Deselecteaza tot" button_unlock: "Deblocare" + button_unfavorite: "Remove from favorites" button_unwatch: "Stop monitorizare" button_update: "Actualizare" button_upgrade: "Actualizare" @@ -1608,6 +1620,7 @@ ro: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Imaginea nu a fost exportată." units: @@ -1755,17 +1768,6 @@ ro: mentioned: "Ai fost menționat în %{work_package}" responsible: "Ați devenit responsabil pentru %{work_package}" watched: "Urmăriți %{work_package}" - update_info_mail: - body: > - Suntem încântați să anunțăm lansarea OpenProject 12.0. Este o versiune majoră care sperăm că va îmbunătăți semnificativ modul în care utilizați OpenProject. - Începând cu această versiune, introducem notificări în aplicație. De acum înainte, veți primi notificări pentru actualizările pachetelor de lucru direct în OpenProject. Puteți marca aceste notificări ca fiind citite, puteți răspunde la un comentariu sau chiar modifica direct atributele pachetului de lucru fără a părăsi centrul de notificări. - Acest lucru înseamnă, de asemenea, că nu vom mai folosi e-mailurile pentru notificări. Credem că noul centru de notificări este un loc mai bun pentru a vizualiza și a acționa asupra acestor actualizări. Cu toate acestea, dacă doriți să continuați să primiți actualizări prin e-mail, puteți alege să primiți memento-uri zilnice prin e-mail la anumite ore la alegere. - Vă rugăm să vă asigurați că ați verificat noile setări de notificare implicite și că v-ați setat preferințele pentru notificări și memento-uri prin e-mail prin intermediul setărilor contului dumneavoastră. Puteți face acest lucru prin intermediul butonului "Change email settings" de mai jos. - Sperăm că veți găsi utile notificările din aplicație și că acestea vă fac și mai productiv. - Cu stimă, Echipa OpenProject - body_header: "Versiunea 12.0 cu Centrul de Notificări" - body_subheader: "Noutăţi" - subject: "Modificări importante la notificări cu versiunea de 12.0" label_accessibility: "Accesibilitate" label_account: "Cont" label_active: "Activ" @@ -1946,7 +1948,7 @@ ro: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Mediu" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "este" label_everywhere: "Peste tot" label_example: "Exemplu" @@ -1960,7 +1962,7 @@ ro: label_expanded_click_to_collapse: "Extinse. Faceți clic pentru a restrânge" label_f_hour: "%{value} oră" label_f_hour_plural: "%{value} ore" - label_favoured: "Favoured" + label_favorite: "Favorit" label_feed_plural: "Fluxuri" label_feeds_access_key: "Cheie de acces RSS" label_feeds_access_key_created_on: "Cheia de acces RSS a fost creată acum %{value}" @@ -2033,6 +2035,7 @@ ro: label_learn_more: "Aflați mai multe" label_less_or_equal: "<=" label_less_than_ago: "acum mai puțin de zile" + label_link_url: "Link (URL)" label_list: "Listă" label_loading: "Se încarcă..." label_lock_user: "Blocați utilizatorul" @@ -2058,6 +2061,7 @@ ro: label_membership_plural: "Memberships" lable_membership_added: "Membru adăugat" lable_membership_updated: "Membru actualizat" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alfa" @@ -2159,6 +2163,7 @@ ro: label_percent_complete: "% Complete" label_project_activity: "Activitate proiect" label_project_attribute_plural: "Atributele proiectului" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Număr total de proiecte" label_project_copy_notifications: "Trimitere notificări e-mail în timpul copierii proiectului" label_project_latest: "Ultimele proiecte" @@ -2173,7 +2178,7 @@ ro: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} proiecte folosind %{storage} spațiu pe disc" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "Vizualizare toate proiectele" label_project_show_details: "Arată detaliile proietului" label_project_hide_details: "Ascunde detaliile proiectului" @@ -2230,6 +2235,7 @@ ro: label_setting_plural: "Setări" label_system_settings: "Setări de sistem" label_show_completed_versions: "Afișare versiuni complete" + label_columns: "Coloane" label_sort: "Sortare" label_sort_by: "Sortare după %{value}" label_sorted_by: "sortate după %{value}" @@ -2775,7 +2781,7 @@ ro: member_of_group: "Grupul executantului" name_or_identifier: "Nume sau identificator" only_subproject_id: "Numai subproiect" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Inclusiv subproiectul" repositories: @@ -2920,6 +2926,7 @@ ro: setting_app_subtitle: "Subtitlu aplicație" setting_app_title: "Titlu aplicație" setting_attachment_max_size: "Dimensiune maximă atașament" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Preluare automată a schimbărilor din repo" @@ -3021,6 +3028,8 @@ ro: attachments: whitelist_text_html: > Definește o listă validă de extensii de fișiere și/sau tipuri mime pentru fișierele încărcate.
    Introduceți extensii de fișiere (de ex. %{ext_example}) sau tipuri mime (e. ., %{mime_example}).
    Lăsați gol pentru a permite oricărui tip de fișier să fie încărcat. Valori multiple permise (o linie pentru fiecare valoare). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3257,6 +3266,10 @@ ro: input_label: "Adaugați coloane" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Resurse suplimentare" getting_started: "Noţiuni de bază" @@ -3606,7 +3619,7 @@ ro: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/ru.seeders.yml b/config/locales/crowdin/ru.seeders.yml index a7b49002a785..697dc4b5d52a 100644 --- a/config/locales/crowdin/ru.seeders.yml +++ b/config/locales/crowdin/ru.seeders.yml @@ -251,6 +251,21 @@ ru: * [ ] Еще больше пива item_4: subject: Окончание проекта + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum-проект status_explanation: Все задачи выполнены по расписанию. Участвующие в них люди знают свои задачи. Система полностью настроена. diff --git a/config/locales/crowdin/ru.yml b/config/locales/crowdin/ru.yml index 38276e5c02a8..fcf932cfdaed 100644 --- a/config/locales/crowdin/ru.yml +++ b/config/locales/crowdin/ru.yml @@ -26,8 +26,8 @@ ru: no_results_title_text: В течение этого периода времени не было никакой деятельности по проекту. admin: plugins: - no_results_title_text: There are currently no plugins installed. - no_results_content_text: See our integrations and plugins page for more information. + no_results_title_text: В настоящее время плагины не установлены. + no_results_content_text: Более подробную информацию см. на странице "Наши интеграции и плагины". custom_styles: color_theme: "Цветовая тема" color_theme_custom: "(Пользовательская)" @@ -263,6 +263,7 @@ ru: lists: active: "Активные проекты" my: "Мои проекты" + favored: "Избранные проекты" archived: "Архивные проекты" my_private: "Списки моих личных проектов" new: @@ -285,14 +286,14 @@ ru: project_custom_fields: header: title: "Атрибуты проекта" - description: "These project attributes will be displayed in your project overview page under their respective sections. You can enable or disable individual attributes. Project attributes and sections are defined in the administration settings by the administrator of the instance. " + description: "Эти атрибуты проекта будут отображаться на Вашей странице обзора проекта в соответствующих разделах. Вы можете включить или отключить отдельные атрибуты. Атрибуты проекта и разделы определяются в настройках администрирования администратором экземпляра." filter: - label: "Search project attribute" + label: "Поиск атрибута проекта" actions: - label_enable_single: "Active in this project, click to disable" - label_disable_single: "Inactive in this project, click to enable" - label_enable_all: "Enable all" - label_disable_all: "Disable all" + label_enable_single: "Активно в этом проекте, нажмите для отключения" + label_disable_single: "Неактивно в этом проекте, нажмите для включения" + label_enable_all: "Включить всё" + label_disable_all: "Выключить всё" types: no_results_title_text: На данный момент доступных типов нет. form: @@ -303,7 +304,14 @@ ru: storage: no_results_title_text: Для этого проекта дополнительного дискового пространства не требуется. lists: - can_be_saved_as: "Изменения могут быть сохранены только в новом списке." + create: + success: "Измененный список был сохранен как новый" + failure: "Измененный список не может быть сохранен: %{errors}" + update: + success: "Измененный список был сохранен" + failure: "Измененный список не может быть сохранен: %{errors}" + can_be_saved: "Список изменён:" + can_be_saved_as: "Изменения могут быть сохранены только в новом списке:" members: index: no_results_title_text: На данный момент у этого проекта нет участников. @@ -321,56 +329,57 @@ ru: project_roles: "Роли проекта" wp_shares: "Пакеты работ используемые совместно" groups: "Группы" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: - title: "Remove member" - will_remove_the_users_role: "This will remove the user’s role from this project." - will_remove_the_groups_role: "This will remove the group role from this project." + title: "Удалить участника" + will_remove_the_users_role: "Это удалит роль пользователя из этого проекта." + will_remove_the_groups_role: "Это удалит роль группы из этого проекта." however_work_packages_shared_with_user_html: - one: "However, %{shared_work_packages_link} has also been shared with this user." - few: "However, %{shared_work_packages_link} have also been shared with this user." + one: "Однако, %{shared_work_packages_link} также был разделен с этим пользователем." + few: "Однако, %{shared_work_packages_link} также был разделен с этим пользователем." many: "However, %{shared_work_packages_link} have also been shared with this user." other: "However, %{shared_work_packages_link} have also been shared with this user." however_work_packages_shared_with_group_html: - one: "However, %{shared_work_packages_link} has also been shared with this group." + one: "Однако, %{shared_work_packages_link} также был разделен с этой группой." few: "However, %{shared_work_packages_link} have also been shared with this group." many: "However, %{shared_work_packages_link} have also been shared with this group." other: "However, %{shared_work_packages_link} have also been shared with this group." - remove_work_packages_shared_with_user_too: "A user that has been removed as member can still access shared work packages. Would you like to remove the shares too?" - remove_work_packages_shared_with_group_too: "A group that has been removed as member can still access shared work packages. Would you like to remove the shares too?" - will_not_affect_inherited_shares: "(This will not affect work packages shared with their group)." - can_remove_direct_but_not_shared_roles: "You can remove this user as a direct project member but a group they are in is also a member of this project, so they will continue being a member via the group." + remove_work_packages_shared_with_user_too: "Пользователь, который был удален как участник по-прежнему может получить доступ к общим пакетам работ. Вы хотели бы также удалить эти ресурсы?" + remove_work_packages_shared_with_group_too: "Группа, которая была удалена как участник, все еще может получить доступ к общим пакетам работ. Вы хотели бы также удалить эти ресурсы?" + will_not_affect_inherited_shares: "(Это не повлияет на пакеты работ, разделенные с их группой)." + can_remove_direct_but_not_shared_roles: "Вы можете удалить этого пользователя как непосредственного участника проекта, но группа, в которой он состоит, также является участником этого проекта, поэтому он будет продолжать оставаться участником через группу." also_work_packages_shared_with_user_html: - one: "Also, %{shared_work_packages_link} has been shared with this user." + one: "Также, %{shared_work_packages_link} был разделен с этим пользователем." few: "Also, %{shared_work_packages_link} have been shared with this user." many: "Also, %{shared_work_packages_link} have been shared with this user." other: "Also, %{shared_work_packages_link} have been shared with this user." - remove_project_membership_or_work_package_shares_too: "Do you want to remove just the user as a direct member (and keep the shares) or remove the work package shares too?" - will_remove_all_user_access_priveleges: "Deleting this member will remove all access privileges of the user to the project. The user will still exist as part of the instance." - will_remove_all_group_access_priveleges: "Deleting this member will remove all access privileges of the group to the project. The group will still exist as part of the instance." - cannot_delete_inherited_membership: "You cannot delete this member because they belong to a group that is itself a member of this project." - cannot_delete_inherited_membership_note_admin_html: "You can either remove the group as a member of the project or this specific member from the group in the %{administration_settings_link}." - cannot_delete_inherited_membership_note_non_admin: "You can either remove the group as a member of the project or contact your administrator to remove this specific member from the group." + remove_project_membership_or_work_package_shares_too: "Вы хотите удалить только пользователя как непосредственного члена (и сохранить ресурсы) или также удалить пакет работ?" + will_remove_all_user_access_priveleges: "Удаление этого участника удалит все права доступа пользователя к проекту. Пользователь по-прежнему будет существовать как часть экземпляра." + will_remove_all_group_access_priveleges: "Удаление этого участника удалит все права доступа группы к проекту. Группа по-прежнему будет существовать как часть экземпляра." + cannot_delete_inherited_membership: "Вы не можете удалить этого участника, потому что он принадлежит к группе, которая сама является участником этого проекта." + cannot_delete_inherited_membership_note_admin_html: "Вы можете либо удалить группу как члена проекта, либо удалить этого конкретного члена из группы на странице %{administration_settings_link}." + cannot_delete_inherited_membership_note_non_admin: "Вы можете либо удалить группу в качестве члена проекта, либо связаться с администратором, чтобы удалить этого конкретного участника из группы." delete_work_package_shares_dialog: - title: "Revoke work package shares" + title: "Отменить общий доступ к пакету работ" shared_with_this_user_html: - one: "%{all_shared_work_packages_link} has been shared with this user." + one: "%{all_shared_work_packages_link} был разделен с этим пользователем." few: "%{all_shared_work_packages_link} have been shared with this user." many: "%{all_shared_work_packages_link} have been shared with this user." other: "%{all_shared_work_packages_link} have been shared with this user." shared_with_this_group_html: - one: "%{all_shared_work_packages_link} has been shared with this group." + one: "%{all_shared_work_packages_link} был разделен с этой группой." few: "%{all_shared_work_packages_link} have been shared with this group." many: "%{all_shared_work_packages_link} have been shared with this group." other: "%{all_shared_work_packages_link} have been shared with this group." shared_with_permission_html: - one: "Only %{shared_work_packages_link} has been shared with %{shared_role_name} permissions." + one: "Только %{shared_work_packages_link} был предоставлен общий доступ с правами %{shared_role_name}." few: "Only %{shared_work_packages_link} have been shared with %{shared_role_name} permissions." many: "Only %{shared_work_packages_link} have been shared with %{shared_role_name} permissions." other: "Only %{shared_work_packages_link} have been shared with %{shared_role_name} permissions." - revoke_all_or_with_role: "Would you like to revoke access to all shared work packages, or only those with %{shared_role_name} permissions?" - will_not_affect_inherited_shares: "(This will not affect work packages shared with their group)." - cannot_remove_inherited: "The work packages shares shared via groups cannot be removed." - cannot_remove_inherited_with_role: "The work packages shares with role %{shared_role_name} are shared via groups and cannot be removed." + revoke_all_or_with_role: "Хотите ли Вы отменить доступ ко всем общим пакетам работ или только к тем, которые имеют разрешения %{shared_role_name}?" + will_not_affect_inherited_shares: "(Это не повлияет на пакеты работ, разделенные с их группой)." + cannot_remove_inherited: "Общие пакеты работ, к которым предоставлен общий доступ через группы, не могут быть удалены." + cannot_remove_inherited_with_role: "Общие пакеты работ с ролью %{shared_role_name} доступны через группы и не могут быть удалены.\n\n\n\n" cannot_remove_inherited_note_admin_html: "You can either revoke the share to the group or remove this specific member from the group in the %{administration_settings_link}." cannot_remove_inherited_note_non_admin: "You can either revoke the share to the group or contact your administrator to remove this specific member from the group." will_revoke_directly_granted_access: "This action will revoke their access to all of them, but the work packages shared with a group." @@ -497,10 +506,10 @@ ru: no_common_statuses_exists: "Статус не доступен для всех выбранных пакетов работ. Их статус изменен быть не может." unsupported_for_multiple_projects: "Массовое перемещение/копирование не поддерживается при работе с пакетами из нескольких проектов" sharing: - missing_workflow_waring: - title: "Отсутствует рабочий процесс для совместного использования пакета работ" - message: "Рабочий процесс не настроен для роли 'Редактора пакетов работ'. Без рабочего процесса, общий с пользователем не может изменить статус рабочего пакета. Рабочие процессы могут быть скопированы. Выберите исходный тип (например, «Задача») и исходную роль (например, «Участник»). Затем выберите нужные типы. Чтобы начать, можно выбрать все типы в качестве целей. Наконец, выберите роль 'Редактор пакетов работ' в качестве цели и нажмите 'Копировать'. После создания таким образом по умолчанию, тонкая настройка рабочих процессов как вы делаете для каждой другой роли." - link_message: "Настройка рабочих процессов в администрации." + missing_workflow_warning: + title: "Workflow missing for work package sharing" + message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." + link_message: "Configure the workflows in the administration." summary: reports: category: @@ -611,7 +620,7 @@ ru: oauth_client: client: "ID клиента" relation: - lag: "Lag" + lag: "Задержка" from: "Пакет работ" to: "Похожий пакет работ" status: @@ -705,7 +714,7 @@ ru: planning_element_type_color: hexcode: Шестнадцатеричный код project_custom_field: - custom_field_section: Section + custom_field_section: Раздел work_package: begin_insertion: "Начало вставки" begin_deletion: "Начало удаления" @@ -795,6 +804,7 @@ ru: not_an_iso_date: "недопустимая дата. Требуемый формат: гггг-мм-дд." not_same_project: "не принадлежит тому же проекту." odd: "должно быть нечетным." + regex_match_failed: "не соответствует регулярному выражению %{expression}." regex_invalid: "не может быть проверен связанным регулярным выражением." smaller_than_or_equal_to_max_length: "должно быть меньше или равно максимальной длине." taken: "уже принято." @@ -1006,9 +1016,9 @@ ru: only_same_project_categories_allowed: "Категория пакета работ должна быть в рамках того же проекта, что и пакет работ." does_not_exist: "Указанная категория не существует." estimated_hours: - cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work." - must_be_set_when_remaining_work_is_set: "Required when Remaining work is set." - only_values_greater_or_equal_zeroes_allowed: "Must be >= 0." + cant_be_inferior_to_remaining_work: "Не может быть меньше, чем Оставшаяся работа." + must_be_set_when_remaining_work_is_set: "Требуется, если установлен параметр Оставшаяся работа." + only_values_greater_or_equal_zeroes_allowed: "Должно быть >= 0." format: "%{message}" remaining_hours: cant_exceed_work: "Cannot be higher than Work." @@ -1127,7 +1137,7 @@ ru: updated_by_on: "обновлено %{user} %{datetime}" updated_by_on_time_entry: "зарегистрированное время, обновленное %{user} в %{datetime}" updated_on: "обновлено %{datetime}" - updated_on_time_entry: "зарегистрированное время обновлено в %{дата-время}" + updated_on_time_entry: "зарегистрированное время обновлено в %{datetime}" deleted_on: "deleted on %{datetime}" deleted_by_on: "deleted by %{user} on %{datetime}" added_on: "added on %{datetime}" @@ -1292,6 +1302,7 @@ ru: button_edit: "Правка" button_edit_associated_wikipage: "Редактирование связанной wiki-страницы: %{page_title}" button_expand_all: "Развернуть все" + button_favorite: "Add to favorites" button_filter: "Фильтр" button_generate: "Генерировать" button_list: "Список" @@ -1319,6 +1330,7 @@ ru: button_unarchive: "Разархивировать" button_uncheck_all: "Снять все отметки" button_unlock: "Разблокировать" + button_unfavorite: "Remove from favorites" button_unwatch: "Прекратить наблюдение" button_update: "Обновление" button_upgrade: "Обновить" @@ -1640,6 +1652,7 @@ ru: pdf_overview_table: "PDF таблица" pdf_report_with_images: "PDF отчёт с изображениями" pdf_report: "PDF отчёт" + pdf_gantt: "PDF Gantt" image: omitted: "Изображение не экспортировано." units: @@ -1787,17 +1800,6 @@ ru: mentioned: "Вы были назначены %{work_package}" responsible: "Вы отвечаете за %{work_package}" watched: "Вы просматриваете %{work_package}" - update_info_mail: - body: > - Мы рады объявить о выпуске OpenProject 12.0. Это основной релиз, который, как мы надеемся, значительно улучшит процесс использования OpenProject. - Начиная с этого выпуска, мы представляем Центр уведомлений. Теперь вы будете получать уведомления об обновлениях для пакетов работ непосредственно в OpenProject. Вы можете отметить эти уведомления как прочитанные, ответить на комментарий или даже напрямую изменить атрибуты пакетов работ не выходя из Центра уведомлений. - Это также означает, что мы больше не будем использовать электронные письма для уведомлений. Мы считаем, что Центр уведомлений лучше просматривать и реагировать на эти обновления. Тем не менее, если вы хотите продолжать получать обновления по электронной почте, вы можете ежедневно получать напоминания по электронной почте в определенные моменты по вашему выбору. - Вы можете установить настройки уведомлений и напоминаний по электронной почте через настройки учетной записи, или оставить их без изменений, чтобы сохранить стандартные. Вы можете сделать это с помощью кнопки «Изменить настройки электронной почты» ниже. - Мы надеемся, что вы найдете Центр уведомлений полезным и что он сделает вас еще более продуктивным. - Искренне Команда OpenProject - body_header: "Версия 12.0 с центром уведомлений" - body_subheader: "Новости" - subject: "Важные изменения в уведомлениях с релизом 12.0" label_accessibility: "Спец. возможности" label_account: "Учетная запись" label_active: "Активен" @@ -1846,7 +1848,7 @@ ru: label_ldap_auth_source_new: "Новое LDAP соединение" label_ldap_auth_source: "Подключение к LDAP" label_ldap_auth_source_plural: "Соединения LDAP" - label_attribute_expand_text: "The complete text for '%{attribute}'" + label_attribute_expand_text: "Полный текст для '%{attribute}'" label_authentication: "Аутентификация" label_available_global_roles: "Доступные глобальные роли" label_available_project_forums: "Доступные форумы" @@ -1978,7 +1980,7 @@ ru: label_enterprise_support: "Поддержка корпоративной версии" label_enterprise_addon: "Корпоративное дополнение" label_environment: "Переменные среды" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Оценки и прогресс" label_equals: "—" label_everywhere: "везде" label_example: "Пример" @@ -1992,7 +1994,7 @@ ru: label_expanded_click_to_collapse: "Развернуто. Кликните для сворачивания" label_f_hour: "%{value} часов" label_f_hour_plural: "%{value} часов" - label_favoured: "Избранное" + label_favorite: "Избранное" label_feed_plural: "Ленты" label_feeds_access_key: "Ключ доступа к RSS" label_feeds_access_key_created_on: "Ключ доступа RSS, созданный %{value} назад" @@ -2065,6 +2067,7 @@ ru: label_learn_more: "Узнать больше" label_less_or_equal: "<=" label_less_than_ago: "меньше чем день назад" + label_link_url: "Ссылка (URL)" label_list: "Список" label_loading: "Загрузка..." label_lock_user: "Заблокировать пользователя" @@ -2090,6 +2093,7 @@ ru: label_membership_plural: "Членство" lable_membership_added: "Участник добавлен" lable_membership_updated: "Участник обновлен" + label_menu: "Меню" label_menu_badge: pre_alpha: "пред-альфа" alpha: "альфа" @@ -2180,7 +2184,7 @@ ru: label_precedes: "Предшествует" label_preferences: "Предпочтения" label_preview: "Предварительный просмотр" - label_preview_not_available: "Preview not available" + label_preview_not_available: "Предварительный просмотр недоступен" label_previous: "Предыдущие" label_previous_week: "Предыдущая неделя" label_principal_invite_via_email: " или пригласить новых пользователей по электронной почте" @@ -2191,6 +2195,7 @@ ru: label_percent_complete: "% Готово" label_project_activity: "Деятельность" label_project_attribute_plural: "Атрибуты проекта" + label_project_attribute_manage_link: "Управление атрибутами проекта" label_project_count: "Общее количество проектов" label_project_copy_notifications: "Уведомлять по электронной почте по ходу копирования проекта" label_project_latest: "Последние проекты" @@ -2202,10 +2207,10 @@ ru: label_project_attributes_plural: "Атрибуты проекта" label_project_custom_field_plural: "Атрибуты проекта" label_project_settings: "Настройки проекта" - label_project_attributes_settings: "Project attributes settings" + label_project_attributes_settings: "Настройки атрибутов проекта" label_project_storage_plural: "Файловые хранилища" label_project_storage_project_folder: "Файловые хранилища: Папки проекта" - label_projects_storage_information: "%{count} проектов используют %{storage} дискового пространства" + label_projects_disk_usage_information: "%{count} проектов, использующих %{used_disk_space} дискового пространства" label_project_view_all: "Просмотреть все проекты" label_project_show_details: "Показать детали проекта" label_project_hide_details: "Скрыть детали проекта" @@ -2262,6 +2267,7 @@ ru: label_setting_plural: "Настройки" label_system_settings: "Настройки системы" label_show_completed_versions: "Показать завершённые этапы" + label_columns: "Столбцы" label_sort: "Сортировать" label_sort_by: "Сортировать по %{value}" label_sorted_by: "отсортировано по %{value}" @@ -2402,7 +2408,7 @@ ru: other: "%{count} файлов" zero: "нет файлов" label_yesterday: "вчера" - label_zen_mode: "Zen mode" + label_zen_mode: "Режим «Дзен» (только доска и часы)" label_role_type: "Тип" label_member_role: "Роль в проекте" label_global_role: "Глобальная роль" @@ -2476,37 +2482,37 @@ ru: subject: "Пакет работ #%{id} был разделен с вами" enterprise_text: "Поделитесь пакетами работ с пользователями, не являющимися участниками проекта." summary: - user: "%{user} shared a work package with you with %{role_rights} rights" + user: "%{user} поделился с вами пакетом работ с правами %{role_rights}" group: "%{user} поделился пакетом работ с группой %{group}, членом которой вы являетесь " storages: health: plaintext: storage: "Хранилище" healthy: - summary: "Good news! The status of your storage, %{storage_name}, is currently displaying as \"Healthy\"." - error-solved-on: "Solved On" - recommendation: "We will continue monitoring the system to ensure it remains in good health. In case of any discrepancies, we will notify you." - details: "For more details or to make any necessary amendments, you can visit your storage configuration" + summary: "Хорошие новости! Статус вашего хранилища, %{storage_name}, в настоящее время отображается как \"Здоровый\"." + error-solved-on: "Решено на" + recommendation: "Мы будем продолжать следить за системой, чтобы она оставалась в хорошем состоянии. В случае каких-либо несоответствий мы сообщим Вам об этом." + details: "Для получения более подробной информации или внесения необходимых изменений Вы можете посетить раздел конфигурации вашего хранилища" unhealthy: - summary: "The status of your storage, %{storage_name}, is currently displaying as \"Error\". We've detected an issue that might require your attention." - error-details: "Error Details" - error-message: "Error Message" - error-occurred-on: "Occurred On" - recommendation: "We recommend heading over to the storage configuration page to address this issue" - unsubscribe: "If you would no longer like to receive these notifications, you can unsubscribe at any time. To unsubscribe, please follow the instructions on this page" - email_notification_settings: "Storage email notification settings" - see_storage_settings: "See storage settings" + summary: "Статус Вашего хранилища %{storage_name}, в настоящее время отображается как \"Ошибка\". Мы обнаружили проблему, которая может потребовать Вашего внимания." + error-details: "Детали ошибки" + error-message: "Сообщение об ошибке" + error-occurred-on: "Произошло на" + recommendation: "Мы рекомендуем перейти на страницу конфигурации хранилища для решения этой проблемы" + unsubscribe: "Если вы больше не хотите получать эти уведомления, вы можете отписаться от них в любое время. Чтобы отписаться, следуйте инструкциям на этой странице" + email_notification_settings: "Настройки уведомлений по электронной почте" + see_storage_settings: "Настройки хранилища" healthy: - subject: "Storage \"%{name}\" is now healthy!" - solved_at: "solved at" - summary: "The problem with your %{storage_name} storage integration is now solved" + subject: "Хранилище \"%{name}\" теперь здорово!" + solved_at: "решено в" + summary: "Проблема с интеграцией хранилища %{storage_name} решена." unhealthy: - subject: "Storage \"%{name}\" is unhealthy!" - since: "since" - summary: "There is a problem with your %{storage_name} storage integration" + subject: "Хранилище \"%{name}\" нездорово!" + since: "с" + summary: "Проблема с интеграцией хранилища %{storage_name} " troubleshooting: - text: "For more information, check file storages" - link_text: "troubleshooting documentation" + text: "Для получения дополнительной информации проверьте хранилище файлов" + link_text: "документация по устранению неполадок" mail_body_account_activation_request: "Новый пользователь (%{value}) зарегистрирован. Учетная запись ожидает вашего подтверждения:" mail_body_account_information: "Информация о вашей учетной записи" mail_body_account_information_external: "Вы можете использовать учетную запись %{value} для входа." @@ -2738,7 +2744,7 @@ ru: permission_save_queries: "Сохранить представления" permission_search_project: "Поиск проекта" permission_select_custom_fields: "Выберите настраиваемые поля" - permission_select_project_custom_fields: "Select project attributes" + permission_select_project_custom_fields: "Выберите атрибуты проекта" permission_select_project_modules: "Выбор модулей проекта" permission_share_work_packages: "Поделиться пакетами работ" permission_manage_types: "Выберите типы" @@ -2767,7 +2773,7 @@ ru: default: "-" project: destroy: - confirmation: "If you continue, the project %{identifier} will be permanently destroyed. To confirm this action please introduce the project name in the field below, this will:" + confirmation: "Если вы продолжите, проект %{identifier} будет уничтожен навсегда. Чтобы подтвердить это действие, пожалуйста, введите название проекта в поле ниже:" project_delete_result_1: "Удалить все связанные данные." project_delete_result_2: "Удалить все папки управляемых проектов в приложенных хранилищах." info: "Удаление проекта – действие необратимое." @@ -2788,9 +2794,9 @@ ru: are_you_sure: "Уверены, что хотите архивизировать проект %{name}%?" archived: "Архивирован" count: - zero: "0 Projects" - one: "1 Project" - other: "%{count} Projects" + zero: "0 проектов" + one: "1 проект" + other: "%{count} проектов" project_module_activity: "Деятельность" project_module_forums: "Форумы" project_module_work_package_tracking: "Комплекс работ" @@ -2809,7 +2815,7 @@ ru: member_of_group: "Группа назначенного" name_or_identifier: "Имя или идентификатор" only_subproject_id: "Только подпроект" - shared_with_user: "Доступно пользователю" + shared_with_user: "Shared with users" shared_with_me: "В общем доступе с" subproject_id: "Включая подпроект" repositories: @@ -2926,7 +2932,7 @@ ru: setting_apiv3_cors_origins: "Разделение ресурсов (CORS) разрешено в API V3" setting_apiv3_cors_origins_text_html: > Если CORS включен, то это источники, которым разрешен доступ к OpenProject API.
    Пожалуйста, проверьте документацию по происхождению о том, как указывать ожидаемые значения. - setting_apiv3_write_readonly_attributes: "Write access to read-only attributes" + setting_apiv3_write_readonly_attributes: "Доступ на запись к атрибутам, доступным только для чтения" setting_apiv3_write_readonly_attributes_instructions_html: > If enabled, the API will allow administrators to write static read-only attributes during creation, such as createdAt and author.
    Warning: This setting has a use-case for e.g., importing data, but allows administrators to impersonate the creation of items as other users. All creation requests are being logged however with the true author.
    For more information on attributes and supported resources, please see the %{api_documentation_link}. setting_apiv3_max_page_size: "Максимальный размер страницы API" @@ -2952,6 +2958,7 @@ ru: setting_app_subtitle: "Второе название приложения" setting_app_title: "Название приложения" setting_attachment_max_size: "Максимальный размер вложения" + setting_show_work_package_attachments: "По умолчанию показывать вложения на вкладке \"Файлы\"." setting_antivirus_scan_mode: "Режим сканирования" setting_antivirus_scan_action: "Действие с зараженным файлом" setting_autofetch_changesets: "Автоматическое получение изменений репозитория" @@ -2991,9 +2998,9 @@ ru: setting_file_max_size_displayed: "Максимальная длина строки текстовых файлов" setting_host_name: "Имя компьютера в сети" setting_invitation_expiration_days: "Действие письма активации истекает после" - setting_work_package_done_ratio: "Progress calculation" - setting_work_package_done_ratio_field: "Work-based" - setting_work_package_done_ratio_status: "Status-based" + setting_work_package_done_ratio: "Расчет прогресса" + setting_work_package_done_ratio_field: "Рабочий" + setting_work_package_done_ratio_status: "Статус" setting_work_package_done_ratio_explanation_html: > In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete. setting_work_package_properties: "Свойства пакета работ" @@ -3053,6 +3060,8 @@ ru: attachments: whitelist_text_html: > Определите список допустимых расширений файлов и/или mime типов для загруженных файлов.
    Введите расширения файлов (например, %{ext_example}) или mime типы (e. ., %{mime_example}).
    Оставьте пустым, чтобы разрешить загрузку любого типа файла. Допустимы несколько значений (одна строка для каждого значения). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Сканирование вирусов" clamav_ping_failed: "Не удалось подключиться к сервису ClamAV. Проверьте настройки и повторите попытку." @@ -3102,10 +3111,10 @@ ru: passwords: "Пароли" project_attributes: heading: "Атрибуты проекта" - label_new_attribute: "Project attribute" - label_new_section: "Section" - label_edit_section: "Edit title" - label_section_actions: "Section actions" + label_new_attribute: "Атрибут проекта" + label_new_section: "Раздел" + label_edit_section: "Переименовать" + label_section_actions: "Действия в разделе" heading_description: "These project attributes appear in the overview page of each project. You can add new attributes, group them into sections and re-order them as you please. These attributes can be enabled or disabled but not re-ordered at a project level." label_project_custom_field_actions: "Project attribute actions" label_no_project_custom_fields: "No project attributes defined in this section" @@ -3289,6 +3298,10 @@ ru: input_label: "Добавить столбцы" input_placeholder: "Выберите столбец" drag_area_label: "Управляйте колонками и изменяйте их порядок" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Дополнительные ресурсы" getting_started: "Приступая к работе" @@ -3639,7 +3652,7 @@ ru: link: ссылка plugin_openproject_auth_plugins: name: "Плагины аутентификации OpenProject" - description: "Интеграция поставщиков стратегий OmniAuth для аутентификации в Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Однозначный вход" description: "Добавляет поставщика OmniAuth SAML в OpenProject" diff --git a/config/locales/crowdin/rw.seeders.yml b/config/locales/crowdin/rw.seeders.yml index 4c3137c6708e..3fb8bc4f258b 100644 --- a/config/locales/crowdin/rw.seeders.yml +++ b/config/locales/crowdin/rw.seeders.yml @@ -251,6 +251,21 @@ rw: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/rw.yml b/config/locales/crowdin/rw.yml index 7678b7bdd5e6..92d17687e405 100644 --- a/config/locales/crowdin/rw.yml +++ b/config/locales/crowdin/rw.yml @@ -264,6 +264,7 @@ rw: lists: active: "Active projects" my: "My projects" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ rw: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: There are currently no members part of this project. @@ -322,6 +330,7 @@ rw: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Groups" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -484,7 +493,7 @@ rw: no_common_statuses_exists: "There is no status available for all selected work packages. Their status cannot be changed." unsupported_for_multiple_projects: "Bulk move/copy is not supported for work packages from multiple projects" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -782,6 +791,7 @@ rw: not_an_iso_date: "is not a valid date. Required format: YYYY-MM-DD." not_same_project: "doesn't belong to the same project." odd: "must be odd." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "could not be validated with the associated regular expression." smaller_than_or_equal_to_max_length: "must be smaller than or equal to maximum length." taken: "has already been taken." @@ -1263,6 +1273,7 @@ rw: button_edit: "Edit" button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}" button_expand_all: "Expand all" + button_favorite: "Add to favorites" button_filter: "Filter" button_generate: "Generate" button_list: "List" @@ -1290,6 +1301,7 @@ rw: button_unarchive: "Unarchive" button_uncheck_all: "Uncheck all" button_unlock: "Unlock" + button_unfavorite: "Remove from favorites" button_unwatch: "Unwatch" button_update: "Update" button_upgrade: "Upgrade" @@ -1575,6 +1587,7 @@ rw: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1722,17 +1735,6 @@ rw: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "News" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Accessibility" label_account: "Account" label_active: "Active" @@ -1913,7 +1915,7 @@ rw: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Environment" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "is" label_everywhere: "everywhere" label_example: "Example" @@ -1927,7 +1929,7 @@ rw: label_expanded_click_to_collapse: "Expanded. Click to collapse" label_f_hour: "%{value} hour" label_f_hour_plural: "%{value} hours" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Feeds" label_feeds_access_key: "RSS access key" label_feeds_access_key_created_on: "RSS access key created %{value} ago" @@ -2000,6 +2002,7 @@ rw: label_learn_more: "Learn more" label_less_or_equal: "<=" label_less_than_ago: "less than days ago" + label_link_url: "Link (URL)" label_list: "List" label_loading: "Loading..." label_lock_user: "Lock user" @@ -2025,6 +2028,7 @@ rw: label_membership_plural: "Memberships" lable_membership_added: "Member added" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2126,6 +2130,7 @@ rw: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Total number of projects" label_project_copy_notifications: "Send email notifications during the project copy" label_project_latest: "Latest projects" @@ -2140,7 +2145,7 @@ rw: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projects using %{storage} disk storage" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "View all projects" label_project_show_details: "Show project details" label_project_hide_details: "Hide project details" @@ -2197,6 +2202,7 @@ rw: label_setting_plural: "Settings" label_system_settings: "System settings" label_show_completed_versions: "Show completed versions" + label_columns: "Columns" label_sort: "Sort" label_sort_by: "Sort by %{value}" label_sorted_by: "sorted by %{value}" @@ -2741,7 +2747,7 @@ rw: member_of_group: "Assignee's group" name_or_identifier: "Name or identifier" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2886,6 +2892,7 @@ rw: setting_app_subtitle: "Application subtitle" setting_app_title: "Application title" setting_attachment_max_size: "Attachment max. size" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Autofetch repository changes" @@ -2987,6 +2994,8 @@ rw: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
    Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
    Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3223,6 +3232,10 @@ rw: input_label: "Add columns" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Additional resources" getting_started: "Getting started" @@ -3570,7 +3583,7 @@ rw: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/si.seeders.yml b/config/locales/crowdin/si.seeders.yml index 702deffe02e6..048a1f199e67 100644 --- a/config/locales/crowdin/si.seeders.yml +++ b/config/locales/crowdin/si.seeders.yml @@ -251,6 +251,21 @@ si: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/si.yml b/config/locales/crowdin/si.yml index 434429dc16d3..1682dd42bdb5 100644 --- a/config/locales/crowdin/si.yml +++ b/config/locales/crowdin/si.yml @@ -264,6 +264,7 @@ si: lists: active: "Active projects" my: "මගේ ව්යාපෘති" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ si: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: මෙම ව්යාපෘතියේ සාමාජිකයන් කොටසක් දැනට නොමැත. @@ -322,6 +330,7 @@ si: project_roles: "Project roles" wp_shares: "Work package shares" groups: "කණ්ඩායම්" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -484,7 +493,7 @@ si: no_common_statuses_exists: "තෝරාගත් සියලුම වැඩ පැකේජ සඳහා කිසිදු තත්වයක් නොමැත. ඔවුන්ගේ තත්වය වෙනස් කළ නොහැක." unsupported_for_multiple_projects: "බහු ව්යාපෘති වලින් වැඩ පැකේජ සඳහා තොග චලනය/පිටපතක් සහාය නොදක්වයි" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -782,6 +791,7 @@ si: not_an_iso_date: "වලංගු දිනයක් නොවේ. අවශ්ය ආකෘතිය: YYY-MM-DD." not_same_project: "එකම ව්යාපෘතියට අයත් නොවේ." odd: "අමුතු විය යුතුය." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "ආශ්රිත නිත්ය ප්රකාශනය සමඟ වලංගු කළ නොහැකි විය." smaller_than_or_equal_to_max_length: "උපරිම දිගට වඩා කුඩා හෝ සමාන විය යුතුය." taken: "දැනටමත් ගෙන ඇත." @@ -1263,6 +1273,7 @@ si: button_edit: "සංස්කරණය කරන්න" button_edit_associated_wikipage: "ආශ්රිත විකි පිටුව සංස්කරණය කරන්න: %{page_title}" button_expand_all: "සියල්ල පුළුල්" + button_favorite: "Add to favorites" button_filter: "පෙරහන්" button_generate: "උත්පාදනය" button_list: "ලැයිස්තුව" @@ -1290,6 +1301,7 @@ si: button_unarchive: "අක්රීය කරන්න" button_uncheck_all: "සියල්ල ඉවත් කරන්න" button_unlock: "අගුළු ඇරීමට" + button_unfavorite: "Remove from favorites" button_unwatch: "අසන්න" button_update: "යාවත්කාලීන" button_upgrade: "උත්ශ්රේණි කිරීම" @@ -1575,6 +1587,7 @@ si: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "රූපය අපනයනය කර නැත." units: @@ -1722,17 +1735,6 @@ si: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "පුවත්" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "ප්රවේශ්යතාව" label_account: "ගිණුම" label_active: "ක්රියාකාරී" @@ -1913,7 +1915,7 @@ si: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "පරිසරය" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "වේ" label_everywhere: "සෑම තැනකම" label_example: "උදාහරණය" @@ -1927,7 +1929,7 @@ si: label_expanded_click_to_collapse: "පුළුල්. කඩා වැටීමට ක්ලික් කරන්න" label_f_hour: "පැය%{value}" label_f_hour_plural: "පැය%{value}" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "පෝෂණය" label_feeds_access_key: "RSS ප්රවේශ යතුර" label_feeds_access_key_created_on: "%{value} පෙර නිර්මාණය කරන ලද RSS ප්රවේශ යතුර" @@ -2000,6 +2002,7 @@ si: label_learn_more: "වැඩිදුර ඉගෙන ගන්න" label_less_or_equal: "<=" label_less_than_ago: "දින ගණනකට පෙර" + label_link_url: "Link (URL)" label_list: "ලැයිස්තුව" label_loading: "පැටවීම..." label_lock_user: "පරිශීලක අගුළු" @@ -2025,6 +2028,7 @@ si: label_membership_plural: "Memberships" lable_membership_added: "Member added" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2126,6 +2130,7 @@ si: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "මුළු ව්යාපෘති සංඛ්යාව" label_project_copy_notifications: "ව්යාපෘති පිටපත තුළ විද්යුත් තැපැල් දැනුම්දීම් යවන්න" label_project_latest: "නවතම ව්යාපෘති" @@ -2140,7 +2145,7 @@ si: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{storage} තැටි ගබඩාව භාවිතා කරමින් ව්යාපෘති%{count} ක්" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "සියලුම ව්යාපෘති බලන්න" label_project_show_details: "ව්යාපෘති විස්තර පෙන්වන්න" label_project_hide_details: "ව්යාපෘති විස්තර සඟවන්න" @@ -2197,6 +2202,7 @@ si: label_setting_plural: "සැකසුම්" label_system_settings: "පද්ධති සැකසුම්" label_show_completed_versions: "සම්පූර්ණ කළ අනුවාද පෙන්වන්න" + label_columns: "තීරු" label_sort: "වර්ග" label_sort_by: "%{value}විසින් වර්ග කරන්න" label_sorted_by: "%{value}විසින් වර්ග කර ඇත" @@ -2741,7 +2747,7 @@ si: member_of_group: "අස්සිග්නි කණ්ඩායම" name_or_identifier: "නම හෝ හඳුනාගැනීමේ" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2886,6 +2892,7 @@ si: setting_app_subtitle: "අයදුම් උප සිරැසි" setting_app_title: "අයදුම් මාතෘකාව" setting_attachment_max_size: "ඇමුණුමක් උපරිම. ප්රමාණය" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "ඔටෝෆෙච් නිධි වෙනස්කම්" @@ -2987,6 +2994,8 @@ si: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
    Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
    Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3223,6 +3232,10 @@ si: input_label: "තීරු එකතු කරන්න" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "අතිරේක සම්පත්" getting_started: "ආරම්භ කිරීම" @@ -3570,7 +3583,7 @@ si: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/sk.seeders.yml b/config/locales/crowdin/sk.seeders.yml index ef15e03e5355..3a6021512d2a 100644 --- a/config/locales/crowdin/sk.seeders.yml +++ b/config/locales/crowdin/sk.seeders.yml @@ -251,6 +251,21 @@ sk: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/sk.yml b/config/locales/crowdin/sk.yml index bb4877562351..d5c1c0b5b332 100644 --- a/config/locales/crowdin/sk.yml +++ b/config/locales/crowdin/sk.yml @@ -264,6 +264,7 @@ sk: lists: active: "Active projects" my: "Moje projekty" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ sk: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: Tento projekt nemá momentálne pridelených žiadnych členov. @@ -322,6 +330,7 @@ sk: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Skupiny" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -498,7 +507,7 @@ sk: no_common_statuses_exists: "Pre všetky vybraté pracovné balíčky nie je k dispozícii žiadny stav. Ich stav nemožno zmeniť." unsupported_for_multiple_projects: "Hromadné premiestnenie alebo kopírovanie nie je podporované pre pracovné balíky z viacerých projektov" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -796,6 +805,7 @@ sk: not_an_iso_date: "nie je platný dátum. Požadovaný formát: RRRR-MM-DD." not_same_project: "nepodlieha rovnakému projektu." odd: "musí byť nepárne." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "nebolo možné overiť s príslušným regulárnym výrazom." smaller_than_or_equal_to_max_length: "musí byť menšie alebo rovné ako maximálne dĺžka." taken: "už existuje v systéme." @@ -1293,6 +1303,7 @@ sk: button_edit: "Upraviť" button_edit_associated_wikipage: "Upraviť naviazanú Wiki stránku: %{page_title}" button_expand_all: "Rozbaliť všetko" + button_favorite: "Add to favorites" button_filter: "Filtrovať" button_generate: "Generovať" button_list: "Zoznam" @@ -1320,6 +1331,7 @@ sk: button_unarchive: "Odarchivovať" button_uncheck_all: "Odznačiť všetky" button_unlock: "Odomknúť" + button_unfavorite: "Remove from favorites" button_unwatch: "Prestať pozorovať" button_update: "Aktualizovať" button_upgrade: "Aktualizovať" @@ -1641,6 +1653,7 @@ sk: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1788,17 +1801,6 @@ sk: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "Novinky" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Prístupnosť" label_account: "Účet" label_active: "Aktívny" @@ -1979,7 +1981,7 @@ sk: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Prostredie" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "je" label_everywhere: "všade" label_example: "Príklad" @@ -1993,7 +1995,7 @@ sk: label_expanded_click_to_collapse: "Rozbalené. Kliknutí zbalíte" label_f_hour: "%{value} hodina" label_f_hour_plural: "%{value} hodín" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "RSS správy (Feeds?)" label_feeds_access_key: "Prístupový kľúč pre RSS" label_feeds_access_key_created_on: "Prístupový kľúč pre RSS vytvorený %{value} vzad" @@ -2066,6 +2068,7 @@ sk: label_learn_more: "Zistiť viac" label_less_or_equal: "<=" label_less_than_ago: "pred necelým dňom" + label_link_url: "Link (URL)" label_list: "Zoznam" label_loading: "Načítava sa..." label_lock_user: "Zamknúť užívateľa" @@ -2091,6 +2094,7 @@ sk: label_membership_plural: "Memberships" lable_membership_added: "Member added" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2192,6 +2196,7 @@ sk: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Celkový počet projektov" label_project_copy_notifications: "Odoslať e-mail notifikácie počas kopírovania projektu" label_project_latest: "Najnovšie projekty" @@ -2206,7 +2211,7 @@ sk: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "projekty %{count} využívajú celkom %{storage} diskového priestoru" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "Zobraziť všetky projekty" label_project_show_details: "Zobraziť detaily projektu" label_project_hide_details: "Skryť detaily projektu" @@ -2263,6 +2268,7 @@ sk: label_setting_plural: "Nastavenia" label_system_settings: "Nastavenia systému" label_show_completed_versions: "Zobraziť dokončené verzie" + label_columns: "Stĺpce" label_sort: "Zoradiť" label_sort_by: "Zoradiť podľa %{value}" label_sorted_by: "zoradené podľa %{value}" @@ -2810,7 +2816,7 @@ sk: member_of_group: "Skupina priradeného používateľa" name_or_identifier: "Meno alebo identifikátor" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2955,6 +2961,7 @@ sk: setting_app_subtitle: "Podtitulok aplikácie" setting_app_title: "Názov aplikácie" setting_attachment_max_size: "Maximálna veľkosť prílohy" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Automaticky načítať zmeny úložiska" @@ -3056,6 +3063,8 @@ sk: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
    Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
    Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3292,6 +3301,10 @@ sk: input_label: "Pridať stĺpce" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Dodatočné zdroje" getting_started: "Začíname" @@ -3643,7 +3656,7 @@ sk: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/sl.seeders.yml b/config/locales/crowdin/sl.seeders.yml index 9dd1f13fb92e..4eb0b03b765d 100644 --- a/config/locales/crowdin/sl.seeders.yml +++ b/config/locales/crowdin/sl.seeders.yml @@ -251,6 +251,21 @@ sl: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/sl.yml b/config/locales/crowdin/sl.yml index 7df827a3b6e7..99460270d5e1 100644 --- a/config/locales/crowdin/sl.yml +++ b/config/locales/crowdin/sl.yml @@ -263,6 +263,7 @@ sl: lists: active: "Active projects" my: "Moji projekti" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -303,7 +304,14 @@ sl: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: Trenutno ni nobenega člana tega projekta. @@ -321,6 +329,7 @@ sl: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Skupine" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -495,7 +504,7 @@ sl: no_common_statuses_exists: "Za vse izbrane delovne pakete ni na voljo nobenega statusa. Njihovega statusa ni mogoče spremeniti." unsupported_for_multiple_projects: "Prenašanje / kopiranje v velikem obsegu ni podprto za delovne pakete iz več projektov" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -793,6 +802,7 @@ sl: not_an_iso_date: "neveljaven čas. Potreben format: YYYY-MM-DD." not_same_project: "ne pripada istemu projektu" odd: "mora biti liho. " + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "ni bilo mogoče potrditi s pripadajočim stalnim izrazom." smaller_than_or_equal_to_max_length: "mora biti manjše ali enako največji dolžini." taken: "je že zasedeno." @@ -1290,6 +1300,7 @@ sl: button_edit: "Uredi" button_edit_associated_wikipage: "Uredi povezano Wiki stran: %{page_title}" button_expand_all: "Razširi vse" + button_favorite: "Add to favorites" button_filter: "Filtriraj" button_generate: "Ustvari" button_list: "Seznam" @@ -1317,6 +1328,7 @@ sl: button_unarchive: "Odarhiviraj" button_uncheck_all: "Odznači vse" button_unlock: "Odkleni" + button_unfavorite: "Remove from favorites" button_unwatch: "Prenehaj slediti" button_update: "Posodobi" button_upgrade: "Nadgradi" @@ -1638,6 +1650,7 @@ sl: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Slika ni izvožena." units: @@ -1785,17 +1798,6 @@ sl: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "Novice" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Dostopnost" label_account: "Račun" label_active: "Aktivno" @@ -1976,7 +1978,7 @@ sl: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Okolje" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "je" label_everywhere: "Povsod" label_example: "Primer" @@ -1990,7 +1992,7 @@ sl: label_expanded_click_to_collapse: "Razširjeno. Kliknite, če želite strniti" label_f_hour: "%{value} ura" label_f_hour_plural: "%{value} ur" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Viri" label_feeds_access_key: "RSS dostopni ključ" label_feeds_access_key_created_on: "RSS dostopni ključ narejen pred %{value}" @@ -2063,6 +2065,7 @@ sl: label_learn_more: "Več o tem" label_less_or_equal: "<=" label_less_than_ago: "pred manj kot nekaj dnevi" + label_link_url: "Link (URL)" label_list: "Seznam" label_loading: "Nalaganje..." label_lock_user: "Zakleni uporabnika" @@ -2088,6 +2091,7 @@ sl: label_membership_plural: "Memberships" lable_membership_added: "Član dodan" lable_membership_updated: "Član posodobljen" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2189,6 +2193,7 @@ sl: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Skupno število projektov" label_project_copy_notifications: "Med kopijo projekta pošljite obvestila po e-pošti" label_project_latest: "Zadnji projekti" @@ -2203,7 +2208,7 @@ sl: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projektov, ki uporabljajo %{storage} diskovni pomnilnik" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "Prikaži vse projekte" label_project_show_details: "Prikaži podrobnosti projekta" label_project_hide_details: "Skrij podrobnosti projekta" @@ -2260,6 +2265,7 @@ sl: label_setting_plural: "Nastavitve" label_system_settings: "Sistemske nastavitve" label_show_completed_versions: "Prikaži zaključene različice" + label_columns: "Stolpci" label_sort: "Razvrsti" label_sort_by: "Razporedi po %{value}" label_sorted_by: "Razporejeno po %{value}" @@ -2808,7 +2814,7 @@ sl: member_of_group: "Pooblaščenčeva skupina" name_or_identifier: "Ime ali identifikator" only_subproject_id: "Samo podprojekt" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2952,6 +2958,7 @@ sl: setting_app_subtitle: "Podnaslov aplikacije" setting_app_title: "Naslov aplikacije" setting_attachment_max_size: "Največja velikost priponke" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Samodejno pridobi spremembe odlagališča" @@ -3053,6 +3060,8 @@ sl: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
    Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
    Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3289,6 +3298,10 @@ sl: input_label: "Dodaj stolpce" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Dodatna sredstva\n" getting_started: "Začnite" @@ -3641,7 +3654,7 @@ sl: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/sr.seeders.yml b/config/locales/crowdin/sr.seeders.yml index dae05442bb2a..250f6f6eddb0 100644 --- a/config/locales/crowdin/sr.seeders.yml +++ b/config/locales/crowdin/sr.seeders.yml @@ -251,6 +251,21 @@ sr: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/sr.yml b/config/locales/crowdin/sr.yml index 7951fd8e0065..38547ec5ded9 100644 --- a/config/locales/crowdin/sr.yml +++ b/config/locales/crowdin/sr.yml @@ -264,6 +264,7 @@ sr: lists: active: "Active projects" my: "My projects" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ sr: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: There are currently no members part of this project. @@ -322,6 +330,7 @@ sr: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Groups" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -491,7 +500,7 @@ sr: no_common_statuses_exists: "There is no status available for all selected work packages. Their status cannot be changed." unsupported_for_multiple_projects: "Bulk move/copy is not supported for work packages from multiple projects" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -789,6 +798,7 @@ sr: not_an_iso_date: "is not a valid date. Required format: YYYY-MM-DD." not_same_project: "doesn't belong to the same project." odd: "must be odd." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "could not be validated with the associated regular expression." smaller_than_or_equal_to_max_length: "must be smaller than or equal to maximum length." taken: "has already been taken." @@ -1278,6 +1288,7 @@ sr: button_edit: "Edit" button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}" button_expand_all: "Expand all" + button_favorite: "Add to favorites" button_filter: "Filter" button_generate: "Generate" button_list: "List" @@ -1305,6 +1316,7 @@ sr: button_unarchive: "Unarchive" button_uncheck_all: "Uncheck all" button_unlock: "Unlock" + button_unfavorite: "Remove from favorites" button_unwatch: "Unwatch" button_update: "Ažuriranje" button_upgrade: "Upgrade" @@ -1608,6 +1620,7 @@ sr: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1755,17 +1768,6 @@ sr: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "News" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Accessibility" label_account: "Account" label_active: "Active" @@ -1946,7 +1948,7 @@ sr: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Environment" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "is" label_everywhere: "everywhere" label_example: "Example" @@ -1960,7 +1962,7 @@ sr: label_expanded_click_to_collapse: "Expanded. Click to collapse" label_f_hour: "%{value} hour" label_f_hour_plural: "%{value} hours" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Feeds" label_feeds_access_key: "RSS access key" label_feeds_access_key_created_on: "RSS access key created %{value} ago" @@ -2033,6 +2035,7 @@ sr: label_learn_more: "Learn more" label_less_or_equal: "<=" label_less_than_ago: "less than days ago" + label_link_url: "Link (URL)" label_list: "List" label_loading: "Loading..." label_lock_user: "Lock user" @@ -2058,6 +2061,7 @@ sr: label_membership_plural: "Memberships" lable_membership_added: "Member added" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2159,6 +2163,7 @@ sr: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Total number of projects" label_project_copy_notifications: "Send email notifications during the project copy" label_project_latest: "Latest projects" @@ -2173,7 +2178,7 @@ sr: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projects using %{storage} disk storage" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "View all projects" label_project_show_details: "Show project details" label_project_hide_details: "Hide project details" @@ -2230,6 +2235,7 @@ sr: label_setting_plural: "Settings" label_system_settings: "System settings" label_show_completed_versions: "Show completed versions" + label_columns: "Columns" label_sort: "Sort" label_sort_by: "Sort by %{value}" label_sorted_by: "sorted by %{value}" @@ -2776,7 +2782,7 @@ sr: member_of_group: "Assignee's group" name_or_identifier: "Name or identifier" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2921,6 +2927,7 @@ sr: setting_app_subtitle: "Application subtitle" setting_app_title: "Application title" setting_attachment_max_size: "Attachment max. size" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Autofetch repository changes" @@ -3022,6 +3029,8 @@ sr: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
    Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
    Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3258,6 +3267,10 @@ sr: input_label: "Add columns" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Additional resources" getting_started: "Getting started" @@ -3607,7 +3620,7 @@ sr: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/sv.seeders.yml b/config/locales/crowdin/sv.seeders.yml index 789b51776fed..f718bc5898b1 100644 --- a/config/locales/crowdin/sv.seeders.yml +++ b/config/locales/crowdin/sv.seeders.yml @@ -251,6 +251,21 @@ sv: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/sv.yml b/config/locales/crowdin/sv.yml index e75465492012..6645e2ada866 100644 --- a/config/locales/crowdin/sv.yml +++ b/config/locales/crowdin/sv.yml @@ -264,6 +264,7 @@ sv: lists: active: "Aktiva projekt" my: "Mina projekt" + favored: "Favorite projects" archived: "Arkiverade projekt" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ sv: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: Det finns för närvarande inga medlemmar i detta projekt. @@ -322,6 +330,7 @@ sv: project_roles: "Projektroller" wp_shares: "Work package shares" groups: "Grupper" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -483,7 +492,7 @@ sv: no_common_statuses_exists: "Det finns ingen status för alla valda arbetspaket. Deras status kan inte ändras." unsupported_for_multiple_projects: "Att flytta/kopiera i bulk stöds inte för arbetspaket från flera projekt" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -781,6 +790,7 @@ sv: not_an_iso_date: "är inte ett giltigt datum. Använd formatet ÅÅÅÅ-MM-DD." not_same_project: "tillhör inte samma projekt." odd: "måste vara udda." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "kunde inte valideras med det associerade reguljära uttrycket." smaller_than_or_equal_to_max_length: "måste vara mindre än eller lika med maximal längd." taken: "har redan använts." @@ -1262,6 +1272,7 @@ sv: button_edit: "Redigera" button_edit_associated_wikipage: "Redigerade associerad wikisida: %{page_title}" button_expand_all: "Expandera alla" + button_favorite: "Lägg till i favoriter" button_filter: "Filter" button_generate: "Generera" button_list: "Lista" @@ -1289,6 +1300,7 @@ sv: button_unarchive: "Hämta från Arkiv" button_uncheck_all: "Avmarkera alla" button_unlock: "Lås upp" + button_unfavorite: "Remove from favorites" button_unwatch: "Sluta bevaka" button_update: "Uppdatera" button_upgrade: "Uppgradera" @@ -1574,6 +1586,7 @@ sv: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1721,17 +1734,6 @@ sv: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "Nyheter" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Tillgänglighet" label_account: "Konto" label_active: "Aktiv" @@ -1912,7 +1914,7 @@ sv: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Miljö" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "är" label_everywhere: "överallt" label_example: "Exempel" @@ -1926,7 +1928,7 @@ sv: label_expanded_click_to_collapse: "Expanderat. Klicka för att dölja" label_f_hour: "%{value} timme" label_f_hour_plural: "%{value} timmar" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Flöden" label_feeds_access_key: "RSS access key" label_feeds_access_key_created_on: "RSS access key skapad %{value} sen" @@ -1999,6 +2001,7 @@ sv: label_learn_more: "Lär dig mer" label_less_or_equal: "<=" label_less_than_ago: "mindre än dagar sedan" + label_link_url: "Länk (URL)" label_list: "Lista" label_loading: "Laddar..." label_lock_user: "Lås användare" @@ -2024,6 +2027,7 @@ sv: label_membership_plural: "Memberships" lable_membership_added: "Member added" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2125,6 +2129,7 @@ sv: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Totalt antal projekt" label_project_copy_notifications: "Skicka e-postaviseringar under projekt kopian" label_project_latest: "Senaste projekt" @@ -2139,7 +2144,7 @@ sv: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projekt använder %{storage} lagringsutrymme" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "Visa alla projekt" label_project_show_details: "Visa projektdetaljer" label_project_hide_details: "Dölj projektdetaljer" @@ -2196,6 +2201,7 @@ sv: label_setting_plural: "Inställningar" label_system_settings: "Systeminställningar" label_show_completed_versions: "Visa slutförda versioner" + label_columns: "Kolumner" label_sort: "Sortera" label_sort_by: "Sortera efter %{value}" label_sorted_by: "sorterade efter %{value}" @@ -2740,7 +2746,7 @@ sv: member_of_group: "Den tilldelades grupp" name_or_identifier: "Namn eller identifierare" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2883,6 +2889,7 @@ sv: setting_app_subtitle: "Undertitel för applikation" setting_app_title: "Programnamn" setting_attachment_max_size: "Bilaga max. storlek" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Automatiskt hämtning av databasförändringar" @@ -2984,6 +2991,8 @@ sv: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
    Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
    Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3220,6 +3229,10 @@ sv: input_label: "Lägg till kolumner" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Ytterligare resurser" getting_started: "Komma igång" @@ -3566,7 +3579,7 @@ sv: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/th.seeders.yml b/config/locales/crowdin/th.seeders.yml index 2e9fe5122f8a..dcca2ea7c6b4 100644 --- a/config/locales/crowdin/th.seeders.yml +++ b/config/locales/crowdin/th.seeders.yml @@ -251,6 +251,21 @@ th: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/th.yml b/config/locales/crowdin/th.yml index 3b56a56d0b30..e33d59d2ae7a 100644 --- a/config/locales/crowdin/th.yml +++ b/config/locales/crowdin/th.yml @@ -264,6 +264,7 @@ th: lists: active: "Active projects" my: "โครงการของฉัน" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ th: storage: no_results_title_text: ไม่มีการระบุ พื้นที่ดิสก์ ไว้ในโปรเจ็กต์นี้ lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: There are currently no members part of this project. @@ -322,6 +330,7 @@ th: project_roles: "Project roles" wp_shares: "Work package shares" groups: "กลุ่ม" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -477,7 +486,7 @@ th: no_common_statuses_exists: "There is no status available for all selected work packages. Their status cannot be changed." unsupported_for_multiple_projects: "Bulk move/copy is not supported for work packages from multiple projects" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -775,6 +784,7 @@ th: not_an_iso_date: "is not a valid date. Required format: YYYY-MM-DD." not_same_project: "doesn't belong to the same project." odd: "must be odd." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "could not be validated with the associated regular expression." smaller_than_or_equal_to_max_length: "must be smaller than or equal to maximum length." taken: "has already been taken." @@ -1248,6 +1258,7 @@ th: button_edit: "แก้ไข" button_edit_associated_wikipage: "แก้ไขหน้าวิกิที่เกี่ยวข้อง: %{page_title}" button_expand_all: "ขยายทั้งหมด" + button_favorite: "Add to favorites" button_filter: "ตัวกรอง" button_generate: "Generate" button_list: "รายการ" @@ -1275,6 +1286,7 @@ th: button_unarchive: "เอาออกจากอาร์ไคฟ์" button_uncheck_all: "เอาเครื่องหมายออกทั้งหมด" button_unlock: "ปลดล็อก" + button_unfavorite: "Remove from favorites" button_unwatch: "ไม่เข้าชม" button_update: "ปรับปรุง" button_upgrade: "Upgrade" @@ -1542,6 +1554,7 @@ th: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1689,17 +1702,6 @@ th: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "ข่าวสาร" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Accessibility" label_account: "บัญชี" label_active: "ใช้งานอยู่" @@ -1880,7 +1882,7 @@ th: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "สภาพแวดล้อม" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "เป็น" label_everywhere: "everywhere" label_example: "ตัวอย่าง" @@ -1894,7 +1896,7 @@ th: label_expanded_click_to_collapse: "Expanded. Click to collapse" label_f_hour: "%{value} ชั่วโมง" label_f_hour_plural: "%{value} ชั่วโมง" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "ตัวดึงข้อมูล" label_feeds_access_key: "คีย์การเข้าถึง RSS" label_feeds_access_key_created_on: "คีย์การเข้าถึง API ซึ่งสร้างเมื่อ %{value} ที่ผ่านมา" @@ -1967,6 +1969,7 @@ th: label_learn_more: "เรียนรู้เพิ่มเติม" label_less_or_equal: "<=" label_less_than_ago: "น้อยกว่าสามวันที่ผ่านมา" + label_link_url: "Link (URL)" label_list: "รายการ" label_loading: "กำลังโหลด..." label_lock_user: "Lock user" @@ -1992,6 +1995,7 @@ th: label_membership_plural: "Memberships" lable_membership_added: "เพิ่มสมาชิกแล้ว" lable_membership_updated: "ปรับปรุงข้อมูลสมาชิกแล้ว" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2093,6 +2097,7 @@ th: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Total number of projects" label_project_copy_notifications: "ส่งอีเมล์แจ้งเตือนในระหว่างที่คัดลอกโครงการ" label_project_latest: "โครงการล่าสุด" @@ -2107,7 +2112,7 @@ th: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projects using %{storage} disk storage" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "ดูโครงการทั้งหมด" label_project_show_details: "Show project details" label_project_hide_details: "Hide project details" @@ -2164,6 +2169,7 @@ th: label_setting_plural: "การตั้งค่า" label_system_settings: "System settings" label_show_completed_versions: "แสดงเวอร์ชันที่เสร็จสมบูรณ์" + label_columns: "คอลัมน์" label_sort: "เรียงลำดับ" label_sort_by: "เรียงตาม %{value}" label_sorted_by: "เรียงตาม %{value}" @@ -2706,7 +2712,7 @@ th: member_of_group: "กลุ่มของผู้รับผิดชอบ" name_or_identifier: "Name or identifier" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2851,6 +2857,7 @@ th: setting_app_subtitle: "หัวข้อย่อยของแอบพลิเคชั่น" setting_app_title: "หัวข้อแอบพลิเคชั่น" setting_attachment_max_size: "ขนาดสูงสุดของไฟล์แนบ" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Autofetch repository changes" @@ -2952,6 +2959,8 @@ th: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
    Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
    Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3188,6 +3197,10 @@ th: input_label: "Add columns" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Additional resources" getting_started: "Getting started" @@ -3533,7 +3546,7 @@ th: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/tr.seeders.yml b/config/locales/crowdin/tr.seeders.yml index b4bf2817dcdd..567edc751a03 100644 --- a/config/locales/crowdin/tr.seeders.yml +++ b/config/locales/crowdin/tr.seeders.yml @@ -251,6 +251,21 @@ tr: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/tr.yml b/config/locales/crowdin/tr.yml index 43e576c23344..94977ab9b6a2 100644 --- a/config/locales/crowdin/tr.yml +++ b/config/locales/crowdin/tr.yml @@ -264,6 +264,7 @@ tr: lists: active: "Active projects" my: "Projelerim" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ tr: storage: no_results_title_text: Bu proje tarafından tüketilen ek kayıtlı disk alanı yoktur. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: Bu projenini parçası olan mevcut bir üye bulunmamakta. @@ -322,6 +330,7 @@ tr: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Gruplar" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -483,7 +492,7 @@ tr: no_common_statuses_exists: "Seçilen tüm iş paketleri için uygun bir durum yoktur. Durumları değiştirilemez." unsupported_for_multiple_projects: "Birden çok projeden iş paketi için toplu taşıma / kopyalama desteklenmiyor" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -781,6 +790,7 @@ tr: not_an_iso_date: "geçerli bir tarih değil. Gerekli biçim:: YYYY-AA-GG." not_same_project: "aynı projeye ait değil." odd: "tek sayı olmalı." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "atanmış düzenli ifadeler ile doğrulanamadı." smaller_than_or_equal_to_max_length: "en fazla uzunluğa eşit veya daha küçük olmalıdır." taken: "zaten alınmıştır." @@ -876,7 +886,7 @@ tr: types: in_use_by_work_packages: "hala iş paketleri tarafından kullanılmaktadır:%{types}" enabled_modules: - dependency_missing: "'%{dependency}' modülü buna bağlı olduğundan, '%{dependency}' modülünün de etkinleştirilmesi gerekiyor." + dependency_missing: "'%{module}' modülü buna bağlı olduğundan, '%{dependency}' modülünün de etkinleştirilmesi gerekiyor." format: "%{message}" query: attributes: @@ -1262,6 +1272,7 @@ tr: button_edit: "Düzenle" button_edit_associated_wikipage: "İlişkili Wiki sayfasını düzenle: %{page_title}" button_expand_all: "Tümünü genişlet" + button_favorite: "Add to favorites" button_filter: "Filtre" button_generate: "Üretmek" button_list: "Liste" @@ -1289,6 +1300,7 @@ tr: button_unarchive: "Arşivden çıkar" button_uncheck_all: "Tüm işaretleri kaldır" button_unlock: "Kilidi kaldır" + button_unfavorite: "Remove from favorites" button_unwatch: "İzleme" button_update: "Güncelle" button_upgrade: "Yükselt" @@ -1574,6 +1586,7 @@ tr: pdf_overview_table: "PDF Tablosu" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Raporu" + pdf_gantt: "PDF Gantt" image: omitted: "Görüntü dışa aktarılmadı." units: @@ -1721,17 +1734,6 @@ tr: mentioned: "%{work_package} içinde sizden bahsedildi" responsible: "%{work_package} için sorumlu hale geldiniz" watched: "%{work_package} izliyorsunuz" - update_info_mail: - body: > - OpenProject 12.0'ın yayınlandığını duyurmaktan heyecan duyuyoruz. OpenProject'i kullanma şeklinizi önemli ölçüde iyileştireceğini umduğumuz büyük bir sürüm. - Bu sürümden başlayarak, uygulama içi bildirimleri kullanıma sunuyoruz. Bundan sonra, doğrudan OpenProject'te iş paketleriyle ilgili güncellemeler için bildirim alacaksınız. Bu bildirimleri okundu olarak işaretleyebilir, bir yorumu yanıtlayabilir ve hatta bildirim merkezinden ayrılmadan doğrudan iş paketi özelliklerini değiştirebilirsiniz. - Bu aynı zamanda artık bildirimler için e-posta kullanmayacağımız anlamına da geliyor. Yeni bildirim merkezinin bu güncellemeleri görüntülemek ve bunlara göre hareket etmek için daha iyi bir yer olduğunu düşünüyoruz. Bununla birlikte, güncellemeleri e-posta yoluyla almaya devam etmek istiyorsanız, seçtiğiniz belirli zamanlarda günlük e-posta hatırlatıcıları almayı seçebilirsiniz. - Lütfen yeni varsayılan bildirim ayarlarınızı doğruladığınızdan emin olun ve hesap ayarlarınız yoluyla bildirimler ve e-posta hatırlatıcıları için tercihlerinizi belirleyin. Bunu aşağıdaki "E-posta ayarlarını değiştir" düğmesiyle yapabilirsiniz. - Uygulama içi bildirimleri yararlı bulacağınızı ve sizi daha da üretken kılacağını umuyoruz. - Saygılarımızla, OpenProject ekibi - body_header: "Bildirim Merkezi ile Sürüm 12.0" - body_subheader: "Haberler" - subject: "12.0 sürümü ile bildirimlerde önemli değişiklikler" label_accessibility: "Erişilebilirlik" label_account: "Hesap" label_active: "Aktif" @@ -1912,7 +1914,7 @@ tr: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Ortam" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "şuysa" label_everywhere: "heryer" label_example: "Örnek" @@ -1926,7 +1928,7 @@ tr: label_expanded_click_to_collapse: "Genişletilmiş. Daraltmak için tıklayın" label_f_hour: "%{value} saat" label_f_hour_plural: "%{value} saat" - label_favoured: "Favoured" + label_favorite: "Sık Kullanılan" label_feed_plural: "Akışlar" label_feeds_access_key: "RSS erişim anahtarı" label_feeds_access_key_created_on: "RSS erişim anahtarı %{value} önce oluşturuldu" @@ -1999,6 +2001,7 @@ tr: label_learn_more: "Daha fazla bilgi edin" label_less_or_equal: "<=" label_less_than_ago: "bir haftadan kısa bir süre önce" + label_link_url: "Link (URL)" label_list: "Liste" label_loading: "Yükleniyor..." label_lock_user: "Kullanıcıyı kilitle" @@ -2024,6 +2027,7 @@ tr: label_membership_plural: "Memberships" lable_membership_added: "Üye eklendi" lable_membership_updated: "Üye güncellendi" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alfa" @@ -2125,6 +2129,7 @@ tr: label_percent_complete: "% Complete" label_project_activity: "Proje etkinliği" label_project_attribute_plural: "Proje öznitelikleri" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Toplam proje sayısı" label_project_copy_notifications: "Proje kopyalaması esnasında bilgilendirme e-postaları gönder" label_project_latest: "Son projeler" @@ -2139,7 +2144,7 @@ tr: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} proje %{storage} disk alanı kullanıyor" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "Tüm projeleri görüntüle" label_project_show_details: "Proje detaylarını göster" label_project_hide_details: "Proje detaylarını gizle" @@ -2196,6 +2201,7 @@ tr: label_setting_plural: "Ayarlar" label_system_settings: "Sistem ayarları" label_show_completed_versions: "Tamamlanmış sürümleri göster" + label_columns: "Sütunlar" label_sort: "Sırala" label_sort_by: "%{value} ile sırala" label_sorted_by: "%{value} göre sıralandı" @@ -2449,7 +2455,7 @@ tr: mail_body_backup_waiting_period: Yeni jeton %{hours} saat içinde etkinleştirilecek. mail_body_backup_token_warning: Bu siz değildiyseniz, hemen OpenProject'te oturum açın ve yeniden sıfırlayın. mail_body_incoming_email_error: OpenProject'e gönderdiğiniz e-posta işlenemedi. - mail_body_incoming_email_error_in_reply_to: "%{required_at} adresinde %{from_email} yazdı" + mail_body_incoming_email_error_in_reply_to: "%{received_at} adresinde %{from_email} yazdı" mail_body_incoming_email_error_logs: "Günlükler" mail_body_lost_password: "Parolanızı değiştirmek için aşağıdaki bağlantıyı tıklayın:" mail_password_change_not_possible: @@ -2737,7 +2743,7 @@ tr: member_of_group: "Atama grubunun grubu" name_or_identifier: "İsim veya tanımlayıcı" only_subproject_id: "Sadece alt proje" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Alt proje dahil" repositories: @@ -2882,6 +2888,7 @@ tr: setting_app_subtitle: "Uygulama alt başlığı" setting_app_title: "Uygulama başlığı" setting_attachment_max_size: "En büyük ek boyutu" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Autofetch depo değişiklikleri" @@ -2983,6 +2990,8 @@ tr: attachments: whitelist_text_html: > Yüklenen dosyalar için geçerli dosya uzantılarının ve/veya mim türlerinin bir listesini tanımlayın.
    Dosya uzantılarını (ör. %{ext_example}) veya mime türlerini (ör. %{mime_example}) girin.
    Herhangi bir dosya türünün yüklenmesine izin vermek için boş bırakın. Birden çok değere izin verilir (her değer için bir satır). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3219,6 +3228,10 @@ tr: input_label: "Sütunlar ekle" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Ek Kaynaklar" getting_started: "Başlarken" @@ -3565,7 +3578,7 @@ tr: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/uk.seeders.yml b/config/locales/crowdin/uk.seeders.yml index d141b925c75b..b43c04f2e8ea 100644 --- a/config/locales/crowdin/uk.seeders.yml +++ b/config/locales/crowdin/uk.seeders.yml @@ -251,6 +251,21 @@ uk: * [ ] Більше пива item_4: subject: Кінець проєкту + wiki: | + _На цій вікі-сторінці можна спільно створювати та редагувати сторінки й підсторінки вікі-проєкту._ + + **Ви можете:** + + * Копіювати й вставляти текст і зображення, зокрема з інших документів + * Створювати ієрархію сторінок із батьківськими сторінками + * Включати вікі-сторінки в меню проєкту + * Використовувати макроси, щоб додавати, наприклад, зміст, списки пакетів робіт або діаграми Ґанта + * Включати вікі-сторінки в інші текстові поля, наприклад сторінку огляду проєкту + * Включати посилання на інші документи + * Переглядати історію змін + * Переглядати контент у режимі розмітки + + Докладна інформація: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Проект Scrum status_explanation: Усі завдання заплановано. Виконавців повідомлено про їхні завдання. Систему повністю налаштовано. diff --git a/config/locales/crowdin/uk.yml b/config/locales/crowdin/uk.yml index a7e1133faf10..f5e3992c5cc5 100644 --- a/config/locales/crowdin/uk.yml +++ b/config/locales/crowdin/uk.yml @@ -259,6 +259,7 @@ uk: lists: active: "Активні проєкти" my: "Мої проєкти" + favored: "Обрані проєкти" archived: "Заархівовані проєкти" my_private: "Особисті списки проєктів" new: @@ -283,7 +284,7 @@ uk: title: "Атрибути проєкту" description: "Ці атрибути проєкту відображатимуться на вашій сторінці огляду проєкту у відповідних розділах. Ви можете ввімкнути або вимкнути окремі атрибути. Атрибути проєкту й розділи визначає адміністратор екземпляра в налаштуваннях адміністрування. " filter: - label: "Search project attribute" + label: "Пошук атрибутів проєкту" actions: label_enable_single: "Увімкнено в цьому проєкті; натисніть, щоб вимкнути" label_disable_single: "Вимкнено в цьому проєкті; натисніть, щоб увімкнути" @@ -299,7 +300,14 @@ uk: storage: no_results_title_text: Цей проєкт не потребує додаткового дискового простору. lists: - can_be_saved_as: "Зміни можна зберегти лише в новому списку." + create: + success: "Змінений список збережено як новий" + failure: "Неможливо зберегти змінений список: %{errors}" + update: + success: "Змінений список збережено" + failure: "Неможливо зберегти змінений список: %{errors}" + can_be_saved: "Список змінено:" + can_be_saved_as: "Зміни можна зберегти лише в новому списку:" members: index: no_results_title_text: Наразі учасників цього проекту немає. @@ -317,6 +325,7 @@ uk: project_roles: "Ролі в проєкті" wp_shares: "Поширення пакета робіт" groups: "Групи" + no_modify_on_shared: "Зараз ви не можете змінювати або вилучати спільний доступ через сторінку учасника. Використайте натомість модальний спосіб поширення." delete_member_dialog: title: "Вилучити учасника" will_remove_the_users_role: "Роль користувача буде вилучено із цього проєкту." @@ -355,22 +364,22 @@ uk: other: "Цьому користувачу надано доступ до %{all_shared_work_packages_link}." shared_with_this_group_html: one: "Цій групі надано доступ до %{all_shared_work_packages_link}." - few: "Цій групі надано доступ до %{shared_work_packages_link}." - many: "Цій групі надано доступ до %{shared_work_packages_link}." - other: "Цій групі надано доступ до %{shared_work_packages_link}." + few: "Цій групі надано доступ до %{all_shared_work_packages_link}." + many: "Цій групі надано доступ до %{all_shared_work_packages_link}." + other: "Цій групі надано доступ до %{all_shared_work_packages_link}." shared_with_permission_html: one: "Доступ із дозволами ролі «%{shared_role_name}» надано лише до %{shared_work_packages_link}." few: "Доступ із дозволами ролі «%{shared_role_name}» надано лише до %{shared_work_packages_link}." many: "Доступ із дозволами ролі «%{shared_role_name}» надано лише до %{shared_work_packages_link}." other: "Доступ із дозволами ролі «%{shared_role_name}» надано лише до %{shared_work_packages_link}." - revoke_all_or_with_role: "Хочете відкликати доступ до всіх спільних пакетів робіт чи тільки до тих, доступ до яких надано з дозволами ролі %«{shared_role_name}»?" + revoke_all_or_with_role: "Хочете відкликати доступ до всіх спільних пакетів робіт чи тільки до тих, доступ до яких надано з дозволами ролі «%{shared_role_name}»?" will_not_affect_inherited_shares: "(Це не вплине на пакети робіт, які спільно використовуються в межах відповідних груп)." cannot_remove_inherited: "Дозволи на доступ до пакетів робіт, надані на рівні груп, не можна вилучити." cannot_remove_inherited_with_role: "Пакети робіт, до яких надано доступ із дозволами ролі «%{shared_role_name}», використовуються в групах, і їх не можна вилучити." cannot_remove_inherited_note_admin_html: "Ви можете відкликати дозвіл на доступ групи або вилучити цього конкретного учасника з групи в %{administration_settings_link}." cannot_remove_inherited_note_non_admin: "Ви можете або відкликати дозвіл на доступ групи або звернутися до адміністратора з проханням вилучити цього конкретного учасника з групи." - will_revoke_directly_granted_access: "This action will revoke their access to all of them, but the work packages shared with a group." - will_revoke_access_to_all: "This action will revoke their access to all of them." + will_revoke_directly_granted_access: "Доступ учасника буде відкликано до всіх пакетів робіт, крім тих, до яких доступ надано групі." + will_revoke_access_to_all: "Доступ учасника буде відкликано до всіх пакетів робіт." my: access_token: failed_to_reset_token: "Не вдалося відновити маркер доступу: %{error}" @@ -493,9 +502,9 @@ uk: no_common_statuses_exists: "Немає доступного статусу для всіх вибраних робочих пакетів. Їх статус не може бути змінений." unsupported_for_multiple_projects: "Масове переміщення/копіювання не підтримується для робочих пакетів з декількох проектів" sharing: - missing_workflow_waring: - title: "Відсутній робочий процес для спільного використання пакета робіт" - message: "Для ролі «Редактора пакета робіт» не налаштовано жодного робочого процесу. Без робочого процесу користувач, якому надано доступ, не може змінити статус пакета робіт. Робочі процеси можна копіювати. Виберіть вихідний тип (напр., «Завдання») і роль (напр., «Учасник»). Потім виберіть цільові типи. Для початку радимо вибирати всі типи як цільові. Нарешті, виберіть роль «Редактор пакета робіт» і натисніть «Копіювати». Після цього ви зможете налаштовувати робочі процеси для кожної ролі, як ви це зазвичай робите." + missing_workflow_warning: + title: "Відсутній робочий процес для надання доступу до пакета робіт" + message: "Для ролі «Редактор пакета робіт» не налаштовано жодного робочого процесу. Без робочого процесу користувач, якому надано доступ, не може змінити статус пакета робіт. Робочі процеси можна копіювати. Виберіть вихідний тип (напр., «Завдання») і роль (напр., «Учасник»). Потім виберіть цільові типи. Для початку радимо вибирати всі типи як цільові. Нарешті, виберіть роль «Редактор пакета робіт» і натисніть «Копіювати». Після цього ви зможете налаштовувати робочі процеси для кожної ролі, як ви це зазвичай робите." link_message: "Налаштуйте робочі процеси на панелі адміністрування." summary: reports: @@ -791,6 +800,7 @@ uk: not_an_iso_date: "не є дійсною датою. Необхідний формат: YYYY-MM-DD." not_same_project: "не належить до одного проекту." odd: "має бути непарним." + regex_match_failed: "не збігається з регулярним виразом %{expression}." regex_invalid: "неможливо перевірити з відповідним регулярним виразом." smaller_than_or_equal_to_max_length: "має бути меншою або дорівнює максимальній довжині." taken: "вже прийнято." @@ -1002,13 +1012,13 @@ uk: only_same_project_categories_allowed: "Категорія комплекс робіт повинен бути в межах одного проекту як комплексу робіт." does_not_exist: "Указана категорія не існує." estimated_hours: - cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work." - must_be_set_when_remaining_work_is_set: "Required when Remaining work is set." - only_values_greater_or_equal_zeroes_allowed: "Must be >= 0." + cant_be_inferior_to_remaining_work: "Має дорівнювати значенню «Залишок робіт» або перевищувати його." + must_be_set_when_remaining_work_is_set: "Потрібно вказати, якщо визначено атрибут «Залишок робіт»." + only_values_greater_or_equal_zeroes_allowed: "Має бути >= 0." format: "%{message}" remaining_hours: - cant_exceed_work: "Cannot be higher than Work." - must_be_set_when_work_is_set: "Required when Work is set." + cant_exceed_work: "Не може перевищувати значення «Робота»." + must_be_set_when_work_is_set: "Потрібно вказати, якщо визначено атрибут «Робота»." format: "%{message}" readonly_status: "Пакет робіт перебуває в стані лише для читання, тому його атрибути не можна змінити." type: @@ -1120,7 +1130,7 @@ uk: created_by_on_time_entry: "час зареєстровано о %{datetime} користувачем %{user}" created_on: "створено %{datetime}" created_on_time_entry: "час зареєстровано о %{datetime}" - updated_by_on: "оновлено %{date} користувачем %{user}" + updated_by_on: "оновлено %{datetime} користувачем %{user}" updated_by_on_time_entry: "зареєстрований час оновлено о %{datetime} користувачем %{user}" updated_on: "оновлено %{datetime}" updated_on_time_entry: "зареєстрований час оновлено о %{datetime}" @@ -1288,6 +1298,7 @@ uk: button_edit: "Редагувати" button_edit_associated_wikipage: "Редагувати пов'язану Wiki сторінку: %{page_title}" button_expand_all: "Розгорнути все" + button_favorite: "Додати в обране" button_filter: "Фільтр" button_generate: "Згенерувати" button_list: "Список" @@ -1315,6 +1326,7 @@ uk: button_unarchive: "Розпакувати" button_uncheck_all: "Зняти усі відмітки" button_unlock: "Розблокувати" + button_unfavorite: "Вилучити з обраного" button_unwatch: "Перестати відстежувати" button_update: "Оновити" button_upgrade: "Оновити" @@ -1636,6 +1648,7 @@ uk: pdf_overview_table: "Таблиця PDF" pdf_report_with_images: "Звіт PDF із зображеннями" pdf_report: "Звіт PDF" + pdf_gantt: "Діаграма Ґанта (PDF)" image: omitted: "Зображення не експортовано." units: @@ -1705,8 +1718,8 @@ uk: working: "%{day} зараз робочий" non_working: "%{day} зараз неробочий" dates: - working: "%{day} – зараз робочий день" - non_working: "%{day} – зараз неробочий день" + working: "%{date} – зараз робочий день" + non_working: "%{date} – зараз неробочий день" progress_mode_changed_to_status_based: Установлено режим обчислення прогресу на основі статусу status_p_complete_changed: >- Значення параметра «% завершення» для статусу «%{status_name}» змінилося з %{old_value} на %{new_value} @@ -1714,11 +1727,11 @@ uk: file_links_journal: > Тепер дії, пов’язані з посиланнями на файли (файли, що зберігаються в зовнішніх сховищах), з’являтимуться на вкладці «Активність». Наявні дії, пов’язані із посиланнями: progress_calculation_adjusted_from_disabled_mode: >- - Progress calculation automatically set to work-based mode and adjusted with version update. + Обчислення прогресу автоматично переведено в режим на основі робіт, і його результати скориговано відповідно до оновленої версії. progress_calculation_adjusted: >- - Progress calculation automatically adjusted with version update. + Результати обчислення прогресу автоматично скориговано відповідно до оновленої версії. totals_removed_from_childless_work_packages: >- - Work and progress totals automatically removed for non-parent work packages with version update. This is a maintenance task and can be safely ignored. + Результати обчислення обсягу й прогресу виконання роботи автоматично вилучено з небатьківських пакетів робіт з оновленням версії. Це завдання з технічного обслуговування, і його можна ігнорувати. links: configuration_guide: "Посібник з налаштування" get_in_touch: "У вас виникли запитання? Зв'яжіться з нами." @@ -1783,17 +1796,6 @@ uk: mentioned: "Вас було згадано у %{work_package}" responsible: "Ви стали відповідальними за %{work_package}" watched: "Ви переглядаєте %{work_package}" - update_info_mail: - body: > - Ми з задоволенням оголошуємо про випуск нової версії OpenProject 12.0. Це одне із найбільших наших оновлень, яке ми сподіваємося значно покращить ваш досвід використання OpenProject. - Починаючи із цього оновлення, ми вводимо сповіщення у самій програмі. Від сьогодні ви будете отримувати сповіщення про оновлення робочих блоків прямо у OpenProject. Ви зможете позначати ці сповіщення як прочитані, коментувати їх чи навіть прямо редагувати зміни у робочих блоках не залишаючи центр сповіщень. - Це також означає, що ми не будемо більш використовувати електронні листи для сповіщень. Гадаємо, що новий центр сповіщень є кращим місцем, щоб переглянути і відреагувати на усі оновлення. Проте, якщо ви бажаєте отримувати сповіщення на свою електронну адресу і надалі, ви можете обрати отримання загальний лист із усіма оновленнями за день у певний час. - Будь ласка, перегляньте новий центр сповіщень та налаштуйте його, оберіть чи бажаєте отримувати оновлення на пошту в налаштуваннях свого профілю. Ви можете зробити це натиснувши на кнопку "Змінити налаштування електронної пошти", що знаходиться внизу. - Сподіваємося, що центр сповіщень буде корисним для вас та допоможе вам стати значно продуктивнішими. - З повагою, команда OpenProject - body_header: "Версія 12.0 з Центром Сповіщень" - body_subheader: "Новини" - subject: "Важливі зміни в системі сповіщень у випуску 12.0" label_accessibility: "Розробникам також потрібно оплачувати свої рахунки. З доступністю" label_account: "Обліковий запис" label_active: "Активний" @@ -1974,7 +1976,7 @@ uk: label_enterprise_support: "Корпоративна підтримка" label_enterprise_addon: "Доповнення версії Enterprise" label_environment: "Навколишнє середовище" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Оцінки й прогрес виконання" label_equals: "є" label_everywhere: "скрізь" label_example: "Приклад" @@ -1988,7 +1990,7 @@ uk: label_expanded_click_to_collapse: "Розширено. Натисніть, щоб згорнути" label_f_hour: "%{value} година" label_f_hour_plural: "%{value} годин(и)" - label_favoured: "Улюблене" + label_favorite: "Обрані" label_feed_plural: "Канали" label_feeds_access_key: "Клавіша доступу RSS" label_feeds_access_key_created_on: "Створено ключ доступу RSS %{value} тому" @@ -2061,6 +2063,7 @@ uk: label_learn_more: "Докладніше" label_less_or_equal: "<=" label_less_than_ago: "менше, ніж день тому" + label_link_url: "Посилання (URL)" label_list: "Список" label_loading: "Завантаження..." label_lock_user: "Заблокувати користувача" @@ -2086,6 +2089,7 @@ uk: label_membership_plural: "Членство" lable_membership_added: "Учасника додано" lable_membership_updated: "Учасника оновлено" + label_menu: "Меню" label_menu_badge: pre_alpha: "попередня альфа" alpha: "альфа" @@ -2187,6 +2191,7 @@ uk: label_percent_complete: "% завершення" label_project_activity: "Дії в проєкті" label_project_attribute_plural: "Атрибути проєкту" + label_project_attribute_manage_link: "Керувати атрибутами проєкту" label_project_count: "Загальна кількість проектів" label_project_copy_notifications: "Відправлення повідомлень по електронній пошті в ході реалізації проекту копія" label_project_latest: "Останні проекти" @@ -2201,7 +2206,7 @@ uk: label_project_attributes_settings: "Налаштування атрибутів проєкту" label_project_storage_plural: "Файлові сховища" label_project_storage_project_folder: "Файлові сховища: папки проєкту" - label_projects_storage_information: "%{count} використання проектів %{storage} дискового сховища" + label_projects_disk_usage_information: "Проєктів, що використовують %{used_disk_space} місця на диску: %{count}" label_project_view_all: "Переглянути всi проекти" label_project_show_details: "Показати деталі проекту" label_project_hide_details: "Приховати деталі проекту" @@ -2258,6 +2263,7 @@ uk: label_setting_plural: "Налаштування" label_system_settings: "Параметри системи" label_show_completed_versions: "Показати завершені версії" + label_columns: "Стовпці" label_sort: "Сортувати" label_sort_by: "Сортувати за %{value}" label_sorted_by: "відсортовані за %{value}" @@ -2487,7 +2493,7 @@ uk: summary: "Зараз статус вашого сховища, %{storage_name}, – «Помилка». Ми виявили проблему, яка може потребувати вашої уваги." error-details: "Деталі помилки" error-message: "Повідомлення про помилку" - error-occurred-on: "Occurred On" + error-occurred-on: "Сталася в" recommendation: "Щоб вирішити цю проблему, рекомендуємо перейти на сторінку конфігурації сховища" unsubscribe: "Щоб більше не отримувати ці сповіщення, можете відписатися. Для цього виконайте вказівки на цій сторінці" email_notification_settings: "Налаштування сповіщень електронною поштою для сховища" @@ -2803,7 +2809,7 @@ uk: member_of_group: "Група виконавця" name_or_identifier: "Ім'я або ідентифікатор" only_subproject_id: "Лише підпроєкт" - shared_with_user: "Надано доступ користувачу" + shared_with_user: "Надано доступ користувачам" shared_with_me: "Доступ надано мені" subproject_id: "Включно з підпроєктом" repositories: @@ -2948,6 +2954,7 @@ uk: setting_app_subtitle: "Підзаголовок додатку" setting_app_title: "Назва додатку" setting_attachment_max_size: "Максимальний розмір вкладення" + setting_show_work_package_attachments: "За замовчуванням показувати вкладення на вкладці «Файли»" setting_antivirus_scan_mode: "Режим перевірки" setting_antivirus_scan_action: "Дія із зараженим файлом" setting_autofetch_changesets: "Змінюється сховище автозбірки" @@ -3049,6 +3056,8 @@ uk: attachments: whitelist_text_html: > Визначте список дійсних розширень файлів і/або типів MIME для завантажених файлів.
    Введіть розширення файлу (напр., %{ext_example}) або типи MIME (напр., %{mime_example}). Не вказуйте нічого, щоб дозволити завантаження будь-яких типів файлів. Ви можете вводити кілька значень (по одному в кожному рядку). + show_work_package_attachments: > + Якщо вимкнути цей параметр, список вкладень буде приховано на вкладці «Файли» пакетів робіт для нових проєктів. Файли, вкладені в опис пакета робіт, усе одно буде додано у внутрішнє сховище вкладень. antivirus: title: "Перевірка на віруси" clamav_ping_failed: "Не вдалося підключити демон ClamAV. Перевірте конфігурацію і повторіть спробу." @@ -3285,6 +3294,10 @@ uk: input_label: "Додати стовпці" input_placeholder: "Вибрати стовпець" drag_area_label: "Керування стовпцями і їх перевпорядкування" + sort_by: + automatic: + heading: "Автоматично" + description: "Упорядкуйте %{plural} за одним або кількома критеріями сортування. Результати попереднього сортування буде втрачено." top_menu: additional_resources: "Додаткові ресурси" getting_started: "Починаємо" diff --git a/config/locales/crowdin/uz.seeders.yml b/config/locales/crowdin/uz.seeders.yml index f697c9815539..657ccd267f16 100644 --- a/config/locales/crowdin/uz.seeders.yml +++ b/config/locales/crowdin/uz.seeders.yml @@ -251,6 +251,21 @@ uz: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/uz.yml b/config/locales/crowdin/uz.yml index 56dd3a3c737c..d05f3b36d76d 100644 --- a/config/locales/crowdin/uz.yml +++ b/config/locales/crowdin/uz.yml @@ -264,6 +264,7 @@ uz: lists: active: "Active projects" my: "My projects" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -304,7 +305,14 @@ uz: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: There are currently no members part of this project. @@ -322,6 +330,7 @@ uz: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Groups" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -484,7 +493,7 @@ uz: no_common_statuses_exists: "There is no status available for all selected work packages. Their status cannot be changed." unsupported_for_multiple_projects: "Bulk move/copy is not supported for work packages from multiple projects" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -782,6 +791,7 @@ uz: not_an_iso_date: "is not a valid date. Required format: YYYY-MM-DD." not_same_project: "doesn't belong to the same project." odd: "must be odd." + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "could not be validated with the associated regular expression." smaller_than_or_equal_to_max_length: "must be smaller than or equal to maximum length." taken: "has already been taken." @@ -1263,6 +1273,7 @@ uz: button_edit: "Edit" button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}" button_expand_all: "Expand all" + button_favorite: "Add to favorites" button_filter: "Filter" button_generate: "Generate" button_list: "List" @@ -1290,6 +1301,7 @@ uz: button_unarchive: "Unarchive" button_uncheck_all: "Uncheck all" button_unlock: "Unlock" + button_unfavorite: "Remove from favorites" button_unwatch: "Unwatch" button_update: "Update" button_upgrade: "Upgrade" @@ -1575,6 +1587,7 @@ uz: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Image not exported." units: @@ -1722,17 +1735,6 @@ uz: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "News" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Accessibility" label_account: "Account" label_active: "Active" @@ -1913,7 +1915,7 @@ uz: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Environment" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "is" label_everywhere: "everywhere" label_example: "Example" @@ -1927,7 +1929,7 @@ uz: label_expanded_click_to_collapse: "Expanded. Click to collapse" label_f_hour: "%{value} hour" label_f_hour_plural: "%{value} hours" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Feeds" label_feeds_access_key: "RSS access key" label_feeds_access_key_created_on: "RSS access key created %{value} ago" @@ -2000,6 +2002,7 @@ uz: label_learn_more: "Learn more" label_less_or_equal: "<=" label_less_than_ago: "less than days ago" + label_link_url: "Link (URL)" label_list: "List" label_loading: "Loading..." label_lock_user: "Lock user" @@ -2025,6 +2028,7 @@ uz: label_membership_plural: "Memberships" lable_membership_added: "Member added" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2126,6 +2130,7 @@ uz: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Total number of projects" label_project_copy_notifications: "Send email notifications during the project copy" label_project_latest: "Latest projects" @@ -2140,7 +2145,7 @@ uz: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} projects using %{storage} disk storage" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "View all projects" label_project_show_details: "Show project details" label_project_hide_details: "Hide project details" @@ -2197,6 +2202,7 @@ uz: label_setting_plural: "Settings" label_system_settings: "System settings" label_show_completed_versions: "Show completed versions" + label_columns: "Columns" label_sort: "Sort" label_sort_by: "Sort by %{value}" label_sorted_by: "sorted by %{value}" @@ -2741,7 +2747,7 @@ uz: member_of_group: "Assignee's group" name_or_identifier: "Name or identifier" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2886,6 +2892,7 @@ uz: setting_app_subtitle: "Application subtitle" setting_app_title: "Application title" setting_attachment_max_size: "Attachment max. size" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Autofetch repository changes" @@ -2987,6 +2994,8 @@ uz: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
    Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
    Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3223,6 +3232,10 @@ uz: input_label: "Add columns" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Additional resources" getting_started: "Getting started" @@ -3570,7 +3583,7 @@ uz: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/vi.seeders.yml b/config/locales/crowdin/vi.seeders.yml index 0ea5a56c7e22..05c1c8eb2248 100644 --- a/config/locales/crowdin/vi.seeders.yml +++ b/config/locales/crowdin/vi.seeders.yml @@ -251,6 +251,21 @@ vi: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum project status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/vi.yml b/config/locales/crowdin/vi.yml index 57cc17794b42..70748da8decc 100644 --- a/config/locales/crowdin/vi.yml +++ b/config/locales/crowdin/vi.yml @@ -266,6 +266,7 @@ vi: lists: active: "Active projects" my: "Dự án của tôi" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -306,7 +307,14 @@ vi: storage: no_results_title_text: There is no additional recorded disk space consumed by this project. lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: Hiện có không có thành viên của dự án này. @@ -324,6 +332,7 @@ vi: project_roles: "Project roles" wp_shares: "Work package shares" groups: "Các Nhóm" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "Remove member" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -479,7 +488,7 @@ vi: no_common_statuses_exists: "Có là tình trạng không có sẵn cho tất cả các gói đã chọn công việc. Tình trạng của họ không thể thay đổi." unsupported_for_multiple_projects: "Bulk move/copy is not supported for work packages from multiple projects" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -777,6 +786,7 @@ vi: not_an_iso_date: "không phải là một ngày hợp lệ. Yêu cầu định dạng: YYYY-MM-DD." not_same_project: "không thuộc cùng dự án." odd: "phải là số lẻ" + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "có thể không được xác nhận với các biểu hiện thường xuyên liên kết." smaller_than_or_equal_to_max_length: "phải nhỏ hơn hoặc bằng với chiều dài tối đa" taken: "đã bị dùng rồi." @@ -1250,6 +1260,7 @@ vi: button_edit: "Chỉnh sửa" button_edit_associated_wikipage: "Chỉnh sửa trang Wiki liên quan: %{page_title}" button_expand_all: "Mở rộng tất cả" + button_favorite: "Add to favorites" button_filter: "Bộ lọc" button_generate: "Tạo" button_list: "Danh sách" @@ -1277,6 +1288,7 @@ vi: button_unarchive: "Ngừng lưu trữ" button_uncheck_all: "Bỏ chọn tất cả" button_unlock: "Mở khoá" + button_unfavorite: "Remove from favorites" button_unwatch: "Ngừng theo dõi" button_update: "Cập Nhật" button_upgrade: "Nâng cấp" @@ -1544,6 +1556,7 @@ vi: pdf_overview_table: "PDF Table" pdf_report_with_images: "PDF Report with images" pdf_report: "PDF Report" + pdf_gantt: "PDF Gantt" image: omitted: "Hình ảnh không được xuất" units: @@ -1691,17 +1704,6 @@ vi: mentioned: "You have been mentioned in %{work_package}" responsible: "You have become accountable for %{work_package}" watched: "You are watching %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "Tin tức" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Trợ năng" label_account: "Tài khoản" label_active: "Đang hoạt động" @@ -1882,7 +1884,7 @@ vi: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "Môi trường" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "là" label_everywhere: "mọi nơi" label_example: "Ví dụ" @@ -1896,7 +1898,7 @@ vi: label_expanded_click_to_collapse: "Mở rộng. Bấm vào để thu gọn" label_f_hour: "%{value} giờ" label_f_hour_plural: "%{value} giờ" - label_favoured: "Favoured" + label_favorite: "Favorite" label_feed_plural: "Nguồn cấp dữ liệu" label_feeds_access_key: "Khóa truy cập RSS" label_feeds_access_key_created_on: "Khoá truy cập API đựơc tạo cách đây %{value}" @@ -1969,6 +1971,7 @@ vi: label_learn_more: "Learn more" label_less_or_equal: "<=" label_less_than_ago: "less than days ago" + label_link_url: "Link (URL)" label_list: "Danh sách" label_loading: "Loading..." label_lock_user: "Lock user" @@ -1994,6 +1997,7 @@ vi: label_membership_plural: "Memberships" lable_membership_added: "Thành viên đã thêm" lable_membership_updated: "Thành viên đã cập nhật" + label_menu: "Menu" label_menu_badge: pre_alpha: "pre-alpha" alpha: "alpha" @@ -2095,6 +2099,7 @@ vi: label_percent_complete: "% Complete" label_project_activity: "Project activity" label_project_attribute_plural: "Project attributes" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "Tổng số dự án" label_project_copy_notifications: "Gửi email thông báo trong quá trình sao chép dự án" label_project_latest: "Dự án mới nhất" @@ -2109,7 +2114,7 @@ vi: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} dự án sử dụng %{storage} ổ lưu trữ" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "Xem tất cả các dự án" label_project_show_details: "Hiển thị chi tiết dự án" label_project_hide_details: "Ẩn chi tiết Dự án" @@ -2166,6 +2171,7 @@ vi: label_setting_plural: "Cài đặt" label_system_settings: "Cài đặt hệ thống" label_show_completed_versions: "Xem phiên bản đã hoàn thành" + label_columns: "Cột" label_sort: "Sắp xếp" label_sort_by: "Sắp xếp theo %{value}" label_sorted_by: "sắp xếp theo %{value}" @@ -2708,7 +2714,7 @@ vi: member_of_group: "Assignee's group" name_or_identifier: "Name or identifier" only_subproject_id: "Only subproject" - shared_with_user: "Shared with user" + shared_with_user: "Shared with users" shared_with_me: "Shared with me" subproject_id: "Including subproject" repositories: @@ -2853,6 +2859,7 @@ vi: setting_app_subtitle: "Application subtitle" setting_app_title: "Application title" setting_attachment_max_size: "Attachment max. size" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "Scan mode" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "Autofetch repository changes" @@ -2954,6 +2961,8 @@ vi: attachments: whitelist_text_html: > Define a list of valid file extensions and/or mime types for uploaded files.
    Enter file extensions (e.g., %{ext_example}) or mime types (e.g., %{mime_example}).
    Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3190,6 +3199,10 @@ vi: input_label: "Add columns" input_placeholder: "Select a column" drag_area_label: "Manage and reorder columns" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "Tài nguyên bổ sung" getting_started: "Bắt đầu" @@ -3534,7 +3547,7 @@ vi: link: link plugin_openproject_auth_plugins: name: "OpenProject Auth Plugins" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/crowdin/zh-CN.seeders.yml b/config/locales/crowdin/zh-CN.seeders.yml index 00a07d513b07..4110817e86f9 100644 --- a/config/locales/crowdin/zh-CN.seeders.yml +++ b/config/locales/crowdin/zh-CN.seeders.yml @@ -251,6 +251,21 @@ zh-CN: * [ ] 甚至更多啤酒 item_4: subject: 项目结束 + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum 项目 status_explanation: 所有任务都按计划进行。相关人员均知晓各自任务。系统已完全建立。 diff --git a/config/locales/crowdin/zh-CN.yml b/config/locales/crowdin/zh-CN.yml index 5777b088cce3..ec3444c05cac 100644 --- a/config/locales/crowdin/zh-CN.yml +++ b/config/locales/crowdin/zh-CN.yml @@ -261,6 +261,7 @@ zh-CN: lists: active: "有效项目" my: "我的项目" + favored: "收藏的项目" archived: "归档项目" my_private: "我的私有项目列表" new: @@ -301,6 +302,13 @@ zh-CN: storage: no_results_title_text: 此项目没有已记录的额外磁盘空间消耗。 lists: + create: + success: "已将修改后的列表保存为新列表" + failure: "无法保存修改后的列表: %{errors}" + update: + success: "已保存修改后的列表" + failure: "无法保存修改后的列表: %{errors}" + can_be_saved: "列表已修改:" can_be_saved_as: "修改内容只能保存在新列表中。" members: index: @@ -319,6 +327,7 @@ zh-CN: project_roles: "项目角色" wp_shares: "工作包共享" groups: "组" + no_modify_on_shared: "您目前不能通过会员页面修改或删除共享会员资格。请使用共享模式。" delete_member_dialog: title: "删除成员" will_remove_the_users_role: "这将从该项目中删除用户的角色。" @@ -473,7 +482,7 @@ zh-CN: no_common_statuses_exists: "所有选中的工作包都没有可用的状态,因此无法更改其状态。" unsupported_for_multiple_projects: "不支持多个项目工作包的大批量移动/复制" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "工作包共享缺少工作流" message: "没有为\"工作包编辑者\"角色配置工作流。没有工作流,共享用户就无法更改工作包的状态。工作流可以复制。选择一个源类型(例如\"任务\")和源角色(例如\"成员\")。然后选择目标类型。一开始,您可以将所有类型都选择为目标类型。最后,选择\"工作包编辑者\"角色作为目标,然后点击\"复制\"。在创建默认设置之后,像对其他角色一样进行微调,对工作流进行详细调整。" link_message: "在管理中配置工作流。" @@ -771,6 +780,7 @@ zh-CN: not_an_iso_date: "不是有效日期。所需格式:YYYY-MM-DD。" not_same_project: "不属于同一个项目。" odd: "必须是奇数。" + regex_match_failed: "与正则表达式 %{expression}不匹配。" regex_invalid: "无法与关联的正则表达式进行验证。" smaller_than_or_equal_to_max_length: "必须小于或等于最大长度。" taken: "已经采取。" @@ -1244,6 +1254,7 @@ zh-CN: button_edit: "编辑" button_edit_associated_wikipage: "编辑关联的维基页面: %{page_title}" button_expand_all: "全部展开" + button_favorite: "添加至收藏夹" button_filter: "筛选器" button_generate: "生成" button_list: "列表" @@ -1271,6 +1282,7 @@ zh-CN: button_unarchive: "取消归档" button_uncheck_all: "全部不选" button_unlock: "解锁​​​​" + button_unfavorite: "取消收藏" button_unwatch: "取消关注" button_update: "更新" button_upgrade: "升级" @@ -1538,6 +1550,7 @@ zh-CN: pdf_overview_table: "PDF 表" pdf_report_with_images: "带图像的 PDF 报告" pdf_report: "PDF 报告" + pdf_gantt: "PDF 甘特图" image: omitted: "图像未导出。" units: @@ -1620,7 +1633,7 @@ zh-CN: progress_calculation_adjusted: >- 进度计算自动设置为基于工时的模式,并随版本更新而调整。 totals_removed_from_childless_work_packages: >- - Work and progress totals automatically removed for non-parent work packages with version update. This is a maintenance task and can be safely ignored. + 使用 版本更新的非父工作包的工作和进度总计自动移除。 这是一个维护任务,可以安全地被忽略。 links: configuration_guide: "配置指南" get_in_touch: "遇到问题了?与我们联系。" @@ -1685,17 +1698,6 @@ zh-CN: mentioned: "您在 %{work_package} 中被提及" responsible: "您已成为 %{work_package} 的负责人" watched: "您正在关注 %{work_package}" - update_info_mail: - body: > - 我们十分高兴地宣布 OpenProject 12.0 现已发布。这一主要版本有望显著改善您使用 OpenProject 的方式。 - 从此版本开始,我们将引入应用内通知。现在起,您将直接在 OpenProject 中接收有关工作包更新的通知。您可以将这些通知标记为已读、回复评论,甚至直接修改工作包属性,而无需离开通知中心。 - 这也意味着我们将不再使用电子邮件进行通知。我们认为新通知中心是查看这些更新并采取行动的最佳场所。不过,如果您想继续通过电子邮件接收更新,可以选择在您选取的特定时间接收每日电子邮件提醒。 - 请确保验证您的新默认通知设置,在帐户设置中对通知和电子邮件提醒进行偏好设置。您可以通过下方的“更改电子邮件设置”按钮执行此操作。 - 我们希望应用内通知能够满足您的使用需求,帮助您提高效率。 - 谨上, OpenProject 团队 - body_header: "包含通知中心的 12.0 版本" - body_subheader: "新闻" - subject: "12.0 版本中加入了针对通知的重要更改" label_accessibility: "辅助功能" label_account: "帐户" label_active: "激活" @@ -1876,7 +1878,7 @@ zh-CN: label_enterprise_support: "企业支持" label_enterprise_addon: "企业版附加组件" label_environment: "环境" - label_estimates_and_time: "预估和进度" + label_estimates_and_progress: "预估和进度" label_equals: "是" label_everywhere: "任何位置" label_example: "示例" @@ -1890,7 +1892,7 @@ zh-CN: label_expanded_click_to_collapse: "展开。点击折叠" label_f_hour: "%{value} 小时" label_f_hour_plural: "%{value} 小时" - label_favoured: "收藏项" + label_favorite: "收藏夹" label_feed_plural: "订阅源" label_feeds_access_key: "RSS 访问密钥" label_feeds_access_key_created_on: "RSS 访问密钥创建于 %{value} 前" @@ -1963,9 +1965,10 @@ zh-CN: label_learn_more: "了解更多信息" label_less_or_equal: "<=" label_less_than_ago: "小于数日前" + label_link_url: "链接(URL)" label_list: "列表" label_loading: "正在加载..." - label_lock_user: "锁住用户" + label_lock_user: "锁定用户" label_logged_as: "登录用户名" label_login: "登录" label_custom_logo: "自定义徽标" @@ -1988,6 +1991,7 @@ zh-CN: label_membership_plural: "成员资格" lable_membership_added: "已添加成员" lable_membership_updated: "已更新成员" + label_menu: "菜单" label_menu_badge: pre_alpha: "pre-beta" alpha: "alpha" @@ -2089,6 +2093,7 @@ zh-CN: label_percent_complete: "% 完成" label_project_activity: "项目活动" label_project_attribute_plural: "项目属性" + label_project_attribute_manage_link: "管理项目属性" label_project_count: "项目总数" label_project_copy_notifications: "在项目复制期间发送电子邮件通知" label_project_latest: "最新的项目" @@ -2103,7 +2108,7 @@ zh-CN: label_project_attributes_settings: "项目属性设置" label_project_storage_plural: "文件存储区" label_project_storage_project_folder: "文件存储区:项目文件夹" - label_projects_storage_information: "%{count} 项目使用 %{storage} 磁盘存储" + label_projects_disk_usage_information: "%{count} 个项目正在使用 %{used_disk_space} 磁盘空间" label_project_view_all: "查看所有项目" label_project_show_details: "显示项目详细信息" label_project_hide_details: "隐藏项目详细信息" @@ -2160,6 +2165,7 @@ zh-CN: label_setting_plural: "设置" label_system_settings: "系统设置" label_show_completed_versions: "显示已完成的版本" + label_columns: "列" label_sort: "排序" label_sort_by: "排序按 %{value}" label_sorted_by: "排序按 %{value}" @@ -2841,6 +2847,7 @@ zh-CN: setting_app_subtitle: "应用副标题" setting_app_title: "应用程序标题" setting_attachment_max_size: "最大的附件大小" + setting_show_work_package_attachments: "默认在文件选项卡中显示附件" setting_antivirus_scan_mode: "扫描模式" setting_antivirus_scan_action: "受感染文件的操作" setting_autofetch_changesets: "自动提取存储库更改" @@ -2942,6 +2949,8 @@ zh-CN: attachments: whitelist_text_html: > 为上传的文件定义有效文件扩展名和/或 MIME 类型列表。
    输入文件扩展名(例如 %{ext_example})或 MIME 类型(例如 %{mime_example})。
    留空以允许上传任何文件类型。允许输入多个值(每个值一行)。 + show_work_package_attachments: > + 禁用此选项将会为新项目隐藏工作包文件标签上的附件列表。 工作包描述中的文件仍将上传到内部附件存储。 antivirus: title: "病毒扫描" clamav_ping_failed: "无法连接 ClamAV 守护进程。请仔细检查配置,然后重试。" @@ -3178,6 +3187,10 @@ zh-CN: input_label: "添加列" input_placeholder: "选择列" drag_area_label: "管理列并对其重新排序" + sort_by: + automatic: + heading: "自动" + description: "按一个或多个排序标准对 %{plural} 进行排序。您将失去之前的排序。" top_menu: additional_resources: "其他资源" getting_started: "入门指南" diff --git a/config/locales/crowdin/zh-TW.seeders.yml b/config/locales/crowdin/zh-TW.seeders.yml index c217d72020ce..cce305bcc9ac 100644 --- a/config/locales/crowdin/zh-TW.seeders.yml +++ b/config/locales/crowdin/zh-TW.seeders.yml @@ -251,6 +251,21 @@ zh-TW: * [ ] Even more beer item_4: subject: End of project + wiki: | + _In this wiki you can collaboratively create and edit pages and sub-pages to create a project wiki._ + + **You can:** + + * Insert text and images, also with copy and paste from other documents + * Create a page hierarchy with parent pages + * Include wiki pages to the project menu + * Use macros to include, e.g. table of contents, work package lists, or Gantt charts + * Include wiki pages in other text fields, e.g. project overview page + * Include links to other documents + * View the change history + * View as Markdown + + More information: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Scrum 專案 status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. diff --git a/config/locales/crowdin/zh-TW.yml b/config/locales/crowdin/zh-TW.yml index a1b367fb5135..c172e0719a9d 100644 --- a/config/locales/crowdin/zh-TW.yml +++ b/config/locales/crowdin/zh-TW.yml @@ -26,7 +26,7 @@ zh-TW: no_results_title_text: 在這一時限內, 該專案沒有任何活動。 admin: plugins: - no_results_title_text: There are currently no plugins installed. + no_results_title_text: 現主時沒有安裝任何外掛程式 no_results_content_text: See our integrations and plugins page for more information. custom_styles: color_theme: "色彩佈景主題" @@ -47,9 +47,9 @@ zh-TW: main-menu-hover-font-color: "主功能表字型(當滑鼠移入時)" main-menu-border-color: "主功能表邊框" custom_colors: "自訂顏色" - customize: "Customize your OpenProject installation with your own logo and colors." + customize: "客製OpenProject中專屬您的標誌(logo)與顏色" enterprise_notice: "這個插件僅對企業版支持訂閱者開放,以感謝他們對開發 OpenProject 的贊助。" - enterprise_more_info: "Note: the used logo will be publicly accessible." + enterprise_more_info: "備註:Logo可被公開存取" manage_colors: "編輯顏色選擇選項" instructions: primary-button-color: "Strong accent color, used for the most important button on a screen." @@ -76,9 +76,9 @@ zh-TW: get_quote: "獲取報價" buttons: upgrade: "立即更新" - contact: "Contact us for a demo" + contact: "聯絡我們取得試用" enterprise_info_html: "是企業版功能 。" - upgrade_info: "Please upgrade to a paid plan to activate and start using it in your team." + upgrade_info: "請升級到付費版以啟用此功能" journal_aggregation: explanation: text: "使用者操作(例如\"更新\"工作項目兩次),如果時間差異小於指定的時間間隔,則將整合為單次操作。它們將在應用程序中顯示為單個操作。這也會套用在電子郵件通知,以及 %{webhook_link} delay。" @@ -214,7 +214,7 @@ zh-TW: is_for_all: "將客製欄位標記為「所有現有專案」和「新專案」中可用。" searchable: "使用全域搜尋功能時包含此欄位。" editable: "允許使用者自行編輯此欄位" - visible: "Make field visible for all users (non-admins) in the project overview and displayed in the project details widget on the Project Overview." + visible: "讓欄位對專案總覽中所有使用者(非管理員)皆可見,並詳細顯示在專案總覽中的小工具程式。" is_filter: > 允許在工作項目檢視中的篩選條件使用客製欄位。請注意,僅在選擇「所有專案」的情況下,客製欄位才會出現在所有檢視中。 tab: @@ -263,6 +263,7 @@ zh-TW: lists: active: "啟用中的專案" my: "我的專案" + favored: "Favorite projects" archived: "封存專案" my_private: "我的私人專案" new: @@ -303,7 +304,14 @@ zh-TW: storage: no_results_title_text: 該專案沒有額外消耗磁碟空間。 lists: - can_be_saved_as: "The modifications can only be saved in a new list." + create: + success: "The modified list has been saved as a new list" + failure: "The modified list cannot be saved: %{errors}" + update: + success: "The modified list has been saved" + failure: "The modified list cannot be saved: %{errors}" + can_be_saved: "List modified:" + can_be_saved_as: "The modifications can only be saved in a new list:" members: index: no_results_title_text: 目前這個專案沒有成員 @@ -321,6 +329,7 @@ zh-TW: project_roles: "專案角色" wp_shares: "共享之工作項目" groups: "群組" + no_modify_on_shared: "You currently cannot modify or remove shared memberships through the member page. Use the sharing modal instead." delete_member_dialog: title: "移除成員" will_remove_the_users_role: "This will remove the user’s role from this project." @@ -476,7 +485,7 @@ zh-TW: no_common_statuses_exists: "被選取的工作項目沒有可用的狀態。他們的狀態不可以變更。" unsupported_for_multiple_projects: "工作項目不支援從多個專案的大區塊的移動/複製" sharing: - missing_workflow_waring: + missing_workflow_warning: title: "Workflow missing for work package sharing" message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role." link_message: "Configure the workflows in the administration." @@ -500,7 +509,7 @@ zh-TW: account: delete: "刪除帳號" delete_confirmation: "您確定要刪除這個帳號嗎?" - deletion_pending: "Account has been locked and was scheduled for deletion. Note that this process takes place in the background. It might take a few moments until the user is fully deleted." + deletion_pending: "帳戶已被鎖定且預計刪除。 請注意,此過程背景執行。 可能需要一些時間才能完全刪除使用者。" deletion_info: data_consequences: other: '您創建的資料 (例如電子郵件、 我的最愛、 工作項目,維基條目) 一樣可能會被刪除。但是請注意像工作項目和維基條目的資料刪除可能導致阻礙其他使用者的工作。這種資料因此重新分配到稱為"刪除使用者"的帳戶。由每筆被刪除而分配到這帳戶將不可能再從刪除帳戶中分配資料給你創建。' @@ -684,7 +693,7 @@ zh-TW: planning_element_type_color: hexcode: 十六進位碼 project_custom_field: - custom_field_section: Section + custom_field_section: 區段 work_package: begin_insertion: "開始插入" begin_deletion: "開始刪除" @@ -774,6 +783,7 @@ zh-TW: not_an_iso_date: "不是有效日期。所需格式:YYYY-MM-DD。" not_same_project: "不屬於相同的專案" odd: "必須是奇數" + regex_match_failed: "does not match the regular expression %{expression}." regex_invalid: "不能被相關聯的正則運算式驗證。" smaller_than_or_equal_to_max_length: "必須小於或等於最大長度。" taken: "已經被使用" @@ -957,7 +967,7 @@ zh-TW: is_not_a_valid_target_for_time_entries: "工作項目 #%{id} 不是重新分配時間項目有效的目標" attributes: assigned_to: - format: " %訊息" + format: "%{message}" due_date: not_start_date: "儘管日期是里程碑所必需的,但不是開始日期。" cannot_be_null: "can not be set to null as start date and duration are known." @@ -1247,6 +1257,7 @@ zh-TW: button_edit: "編輯" button_edit_associated_wikipage: "編輯關聯的維基頁面:%{page_title}" button_expand_all: "全部展開" + button_favorite: "Add to favorites" button_filter: "篩選條件" button_generate: "產生" button_list: "清單" @@ -1274,6 +1285,7 @@ zh-TW: button_unarchive: "取消封存" button_uncheck_all: "取消全選" button_unlock: "解除鎖定" + button_unfavorite: "Remove from favorites" button_unwatch: "取消監看" button_update: "更新" button_upgrade: "升級" @@ -1541,6 +1553,7 @@ zh-TW: pdf_overview_table: "PDF(表格)" pdf_report_with_images: "PDF報表(含圖)" pdf_report: "PDF 報表" + pdf_gantt: "PDF Gantt" image: omitted: "影像沒有匯出。" units: @@ -1595,7 +1608,7 @@ zh-TW: caused_changes: dates_changed: "日期變更" default_attribute_written: "Read-only attributes written" - progress_mode_changed_to_status_based: "Progress calculation updated" + progress_mode_changed_to_status_based: "更新計算後的進度" status_p_complete_changed: "Status % Complete changed" system_update: "OpenProject 系統更新:" cause_descriptions: @@ -1612,16 +1625,16 @@ zh-TW: dates: working: "%{date} 已是工作日" non_working: "%{date} 已非工作日" - progress_mode_changed_to_status_based: Progress calculation mode set to status-based + progress_mode_changed_to_status_based: 自動計算模式設定成「Status-based」 status_p_complete_changed: >- % complete value for status '%{status_name}' changed from %{old_value}% to %{new_value}% system_update: file_links_journal: > From now on, activity related to file links (files stored in external storages) will appear here in the Activity tab. The following represent activity concerning links that already existed: progress_calculation_adjusted_from_disabled_mode: >- - Progress calculation automatically set to work-based mode and adjusted with version update. + 自動計算進度設定為「Work-based」模式並隨著版本更新進行調整。 progress_calculation_adjusted: >- - Progress calculation automatically adjusted with version update. + 自動計算進度隨版本更新調整。 totals_removed_from_childless_work_packages: >- Work and progress totals automatically removed for non-parent work packages with version update. This is a maintenance task and can be safely ignored. links: @@ -1688,17 +1701,6 @@ zh-TW: mentioned: "您在工作項目「%{work_package}」中被提到" responsible: "您已對 %{work_package} 負責" watched: "您正在監看 %{work_package}" - update_info_mail: - body: > - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - We hope you find in-app notifications useful and that they makes you even more productive. - Sincerely, The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "最新消息" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "輔助功能" label_account: "帳號" label_active: "啟用" @@ -1879,7 +1881,7 @@ zh-TW: label_enterprise_support: "Enterprise support" label_enterprise_addon: "Enterprise add-on" label_environment: "環境" - label_estimates_and_time: "Estimates and progress" + label_estimates_and_progress: "Estimates and progress" label_equals: "是" label_everywhere: "全部" label_example: "範例" @@ -1893,7 +1895,7 @@ zh-TW: label_expanded_click_to_collapse: "已擴大。按一下可折疊" label_f_hour: "%{value} 小時" label_f_hour_plural: "%{value} 個小時" - label_favoured: "收藏" + label_favorite: "最愛" label_feed_plural: "串流" label_feeds_access_key: "RSS 金鑰" label_feeds_access_key_created_on: "RSS 金鑰在 %{value} 前已建立" @@ -1966,6 +1968,7 @@ zh-TW: label_learn_more: "了解更多" label_less_or_equal: "之後" label_less_than_ago: "幾天內" + label_link_url: "Link (URL)" label_list: "清單" label_loading: "讀取中..." label_lock_user: "鎖定使用者" @@ -1991,6 +1994,7 @@ zh-TW: label_membership_plural: "Memberships" lable_membership_added: "成員加入" lable_membership_updated: "Member updated" + label_menu: "Menu" label_menu_badge: pre_alpha: "早期開發版本" alpha: "開發版本" @@ -2092,6 +2096,7 @@ zh-TW: label_percent_complete: "完成度(%)" label_project_activity: "專案活動" label_project_attribute_plural: "專案屬性" + label_project_attribute_manage_link: "Manage project attributes" label_project_count: "專案總數" label_project_copy_notifications: "在專案複製期間發送電子郵件通知" label_project_latest: "最新的專案" @@ -2106,7 +2111,7 @@ zh-TW: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "文件儲存空間" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_storage_information: "%{count} 個專案,使用了 %{storage} 磁碟空間" + label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" label_project_view_all: "檢視所有專案" label_project_show_details: "顯示專案詳細資訊" label_project_hide_details: "隱藏專案詳細資訊" @@ -2163,6 +2168,7 @@ zh-TW: label_setting_plural: "設定" label_system_settings: "系統設置" label_show_completed_versions: "顯示已完成的版本" + label_columns: "欄位" label_sort: "排序" label_sort_by: "按 %{value} 排序" label_sorted_by: "以 %{value} 排序" @@ -2704,7 +2710,7 @@ zh-TW: member_of_group: "執行者的群組" name_or_identifier: "名稱或識別碼" only_subproject_id: "只限子專案" - shared_with_user: "分配給成員" + shared_with_user: "Shared with users" shared_with_me: "與我共用" subproject_id: "包含子專案" repositories: @@ -2849,6 +2855,7 @@ zh-TW: setting_app_subtitle: "應用程式副標題" setting_app_title: "應用程式標題" setting_attachment_max_size: "附件最大容量" + setting_show_work_package_attachments: "Show attachments in the files tab by default" setting_antivirus_scan_mode: "掃描模式" setting_antivirus_scan_action: "Infected file action" setting_autofetch_changesets: "自動擷取版本庫的變更" @@ -2888,7 +2895,7 @@ zh-TW: setting_file_max_size_displayed: "直接显示文字文件內容的最大檔案容量" setting_host_name: "主機名稱" setting_invitation_expiration_days: "啟動信件在......天後過期" - setting_work_package_done_ratio: "Progress calculation" + setting_work_package_done_ratio: "進度計算" setting_work_package_done_ratio_field: "Work-based" setting_work_package_done_ratio_status: "Status-based" setting_work_package_done_ratio_explanation_html: > @@ -2914,7 +2921,7 @@ zh-TW: setting_plain_text_mail: "純文字郵件(不含 HTML)" setting_protocol: "Protocol" setting_project_gantt_query: "專案含甘特圖檢視" - setting_project_gantt_query_text: "You can modify the query that is used to display Gantt chart from the project overview page." + setting_project_gantt_query_text: "您可以從專案總覽頁面修改用於顯示甘特圖查詢條件。" setting_security_badge_displayed: "顯示安全徽章" setting_registration_footer: "註冊頁腳" setting_repositories_automatic_managed_vendor: "自動版本控制類型" @@ -2943,13 +2950,15 @@ zh-TW: setting_welcome_text: "歡迎區塊文字" setting_welcome_title: "歡迎區塊標題" setting_welcome_on_homescreen: "在主頁面上顯示歡迎區塊" - setting_work_package_list_default_highlighting_mode: "預設突出顯示模式" - setting_work_package_list_default_highlighted_attributes: "預設內聯突出顯示的屬性" + setting_work_package_list_default_highlighting_mode: "預設突顯模式" + setting_work_package_list_default_highlighted_attributes: "預設突顯屬性" setting_working_days: "工作日" settings: attachments: whitelist_text_html: > 為上傳的文件定義有效文件副檔名和/或 MIME 類型的列表。
    輸入文件副檔名(例如 %{ext_example})或 MIME 類型(例如 %{mime_example})。
    留空以允許上傳任何文件類型。允許多個值(每個值一行)。 + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "病毒掃描中:" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -2960,7 +2969,7 @@ zh-TW: remaining_rescanned_files: > Virus scanning has been enabled successfully. There are %{file_count} that were uploaded previously and still need to be scanned. This process has been scheduled in the background. The files will remain accessible during the scan. upsale: - description: "Ensure uploaded files in OpenProject are scanned for viruses before being accessible by other users." + description: "確保在其他使用者存取 OpenProject 中上傳的檔案前,對其進行病毒掃描。" actions: delete: "刪除檔案" quarantine: "隔離該檔案" @@ -2984,11 +2993,11 @@ zh-TW: general: "一般" highlighting: mode_long: - inline: "顯示內聯屬性" - none: "不強調" - status: "按狀態的整個行" - type: "按類型劃分的整行" - priority: "按優先順序的整個行" + inline: "專案屬性" + none: "不須突顯" + status: "依工作項目狀態區分" + type: "依工作項目類型區分" + priority: "依工作項目優先順序區分" icalendar: enable_subscriptions_text_html: 允許有相關權限用戶通過外部日曆客戶端訂閱 OpenProject 日曆並存取工作項目訊息。注意:在啓用此功能之前,請閱讀關於 iCalendar 訂閱的信息以瞭解潛在的安全風險。 language_name_being_default: "%{language_name} (預設)" @@ -2999,18 +3008,18 @@ zh-TW: passwords: "密碼" project_attributes: heading: "專案屬性" - label_new_attribute: "Project attribute" - label_new_section: "Section" - label_edit_section: "Edit title" + label_new_attribute: "專案屬性" + label_new_section: "區段" + label_edit_section: "編輯標題" label_section_actions: "Section actions" - heading_description: "These project attributes appear in the overview page of each project. You can add new attributes, group them into sections and re-order them as you please. These attributes can be enabled or disabled but not re-ordered at a project level." + heading_description: "這些專案屬性顯示在每個專案的總覽頁面中。 您可以新增屬性,將它們分組並根據需要重新排序。 這些屬性可以啟用或停用,但不能在專案層級重新排序。" label_project_custom_field_actions: "Project attribute actions" - label_no_project_custom_fields: "No project attributes defined in this section" + label_no_project_custom_fields: "此區段沒有定義專案屬性" edit: - description: "Changes to this project attribute will be reflected in all projects where it is enabled. Required attributes cannot be disabled on a per-project basis." + description: "專案屬性的變更將套用在已啟用該屬性專案中。 若為必要屬性,無法個別專案停用。" new: - heading: "New attribute" - description: "Changes to this project attribute will be reflected in all projects where it is enabled. Required attributes cannot be disabled on a per-project basis." + heading: "新屬性" + description: "專案屬性的變更將套用在已啟用該屬性專案中。 若為必要屬性,無法個別專案停用。" projects: missing_dependencies: "Project module %{module} was checked which depends on %{dependencies}. You need to check these dependencies as well." section_new_projects: "Settings for new projects" @@ -3186,6 +3195,10 @@ zh-TW: input_label: "增加欄位" input_placeholder: "選取欄位" drag_area_label: "重新排列" + sort_by: + automatic: + heading: "Automatic" + description: "Order the %{plural} by one or more sorting criteria. You will lose the previous sorting." top_menu: additional_resources: "其他資源" getting_started: "開始" @@ -3270,7 +3283,7 @@ zh-TW: modal: work_based_help_text: "% Complete is automatically derived from Work and Remaining work." status_based_help_text: "% Complete is set by work package status." - migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first." + migration_warning_text: "在「Work-based」進度計算模式下,完成百分比無法手動設置,並且與「Work」相關聯。目前手動輸入數值已保留,無法編輯。 請務必輸入「Work」才能進行。" sharing: count: zero: "0個用戶" @@ -3306,7 +3319,7 @@ zh-TW: Adding additional users will exceed the current limit. Please contact an administrator to increase the user limit to ensure external users are able to access this work package. warning_user_limit_reached_admin: > Adding additional users will exceed the current limit. Please upgrade your plan to be able to ensure external users are able to access this work package. - warning_no_selected_user: "Please select users to share this work package with" + warning_no_selected_user: "請選擇使用者與此工作項目共享" warning_locked_user: "使用者 %{user} 已停用,無法共享" user_details: locked: "使用者已停用" @@ -3321,7 +3334,7 @@ zh-TW: additional_privileges_project_or_group: "Might have additional privileges (as project or group member)" working_days: info: > - Days that are not selected are skipped when scheduling work packages (and not included in the day count). These can be overriden at a work-package level. + 安排工作項目時,未選擇的天數將被跳過(並且不包含在天數計數中)。 這些設定可以在工作項目被改寫覆蓋。 instance_wide_info: > 加到下面列表中的日期被視為非工作日,設定工作項目時程時跳過。 change_button: "修改工作日" @@ -3531,7 +3544,7 @@ zh-TW: link: 連結 plugin_openproject_auth_plugins: name: "OpenProject 認證外掛" - description: "Integration of OmniAuth strategy providers for authentication in Openproject." + description: "Integration of OmniAuth strategy providers for authentication in OpenProject." plugin_openproject_auth_saml: name: "OmniAuth SAML / Single-Sign On" description: "Adds the OmniAuth SAML provider to OpenProject" diff --git a/config/locales/en.yml b/config/locales/en.yml index ae9083733a23..b5f0bf8751cf 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -296,6 +296,7 @@ en: lists: active: "Active projects" my: "My projects" + favored: "Favorite projects" archived: "Archived projects" my_private: "My private project lists" new: @@ -338,7 +339,14 @@ Project attributes and sections are defined in the - We are excited to announce the release of OpenProject 12.0. It's a major release that will hopefully significantly improve the way you use OpenProject. - - - Starting with this release, we are introducing in-app notifications. From now on, you will receive notifications for updates to work packages directly in OpenProject. You can mark these notifications as read, reply to a comment or even directly modify work package attributes without leaving the notification center. - - - This also means that we will no longer be using emails for notifications. We think the new notification center is a better place to view and act upon these updates. Nevertheless, if you would like continue receiving updates via email, you can choose to receive daily email reminders at particular times of your choosing. - - - Please make sure to verify your new default notification settings, and set your preferences for notifications and email reminders via your account settings. You can do this through the “Change email settings” button bellow. - - - We hope you find in-app notifications useful and that they makes you even more productive. - - - Sincerely, - - The OpenProject team - body_header: "Version 12.0 with Notification Center" - body_subheader: "News" - subject: "Important changes to notifications with the release of 12.0" label_accessibility: "Accessibility" label_account: "Account" @@ -2041,7 +2031,7 @@ Project attributes and sections are defined in the Leave empty to allow any file type to be uploaded. Multiple values allowed (one line for each value). + show_work_package_attachments: > + Deactivating this option will hide the attachments list on the work packages files tab for new projects. The + files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: title: "Virus scanning" clamav_ping_failed: "Failed to connect the the ClamAV daemon. Double-check the configuration and try again." @@ -3460,6 +3458,10 @@ Project attributes and sections are defined in the Select the initial zoom level that should be shown when autozoom is not available. + export: + title: "Gantt chart PDF options" + button_export: "Export" + column_widths: + narrow: "Narrow" + medium: "Medium" + wide: "Wide" + very_wide: "Very wide" + options: + date_zoom: "Date zoom" + paper_size: "Paper size" + column_widths: "Column widths" + general_text_no: "no" general_text_yes: "yes" general_text_No: "No" @@ -384,21 +397,17 @@ en: learn_about: "Learn more about the new features" # Include the version to invalidate outdated translations in other locales. # Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. - "14_0": + "14_1": standard: - learn_about_link: https://www.openproject.org/blog/openproject-14-0-release/ new_features_html: > The release contains various new features and improvements:
      -
    • Implement progress reporting across work package hierarchies.
    • -
    • Manage project attributes in a structured way on the project overview page.
    • -
    • Streamlined view of custom fields in project list and project overview.
    • -
    • Unified page headers with the sleek Primer design.
    • -
    • Enhance meetings with new features like attachment uploads, responsible, and meeting history.
    • -
    • Automatic alerts for unhealthy file storages, and gain control with toggle options.
    • -
    • Copy automatically managed project folder for OneDrive/SharePoint when copying projects.
    • -
    • Ask admins to remove shares on work packages when revoking a project membership.
    • -
    • Enhance planning with 4 and 8-week display modes in the team planner.
    • +
    • PDF export of Gantt view, e.g. for printing (Enterprise add-on)
    • +
    • Favorite projects
    • +
    • Sections in Meetings
    • +
    • Showing meetings on the My page and project overview pages
    • +
    • Possibility to hide attachments in the Files tab
    • +
    • Custom fields of the type Link (URL)
    ical_sharing_modal: @@ -427,6 +436,7 @@ en: label_added_time_by: 'Added by
    %{author} at %{age}' label_ago: "days ago" label_all: "all" + label_all_uppercase: "All" label_all_work_packages: "all work packages" label_and: "and" label_ascending: "Ascending" @@ -468,6 +478,7 @@ en: label_expand_project_menu: "Expand project menu" label_export: "Export" label_export_preparing: "The export is being prepared and will be downloaded shortly." + label_favorites: "Favorites" label_filename: "File" label_filesize: "Size" label_general: "General" @@ -1123,7 +1134,7 @@ en: sharing: share: "Share" title: "Share work package" - show_all_users: "Show all shared users" + show_all_users: "Show all users with whom the work package has been shared with" selected_count: "%{count} selected" selection: mixed: "Mixed" @@ -1368,6 +1379,10 @@ en: group: "The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance." next_button: "Continue" + favorite_projects: + no_results: "You have no favorite projects" + no_results_subtext: "Add one or multiple projects as favorite through their overview or in a project list." + include_projects: toggle_title: "Include projects" title: "Projects" diff --git a/config/routes.rb b/config/routes.rb index 6c95f681534b..e5c9878726af 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -167,17 +167,21 @@ resource :wiki_menu_item, only: %i[edit update] end - # generic route for adding/removing watchers. - # Models declared as acts_as_watchable will be automatically added to - # OpenProject::Acts::Watchable::Routes.watched + # generic route for adding/removing watchers scope ":object_type/:object_id", constraints: OpenProject::Acts::Watchable::Routes do post "/watch" => "watchers#watch" delete "/unwatch" => "watchers#unwatch" end + # generic route for adding/removing favorites + scope ":object_type/:object_id", constraints: OpenProject::Acts::Favorable::Routes do + post "/favorite" => "favorites#favorite" + delete "/favorite" => "favorites#unfavorite" + end + namespace :projects do resource :menu, only: %i[show] - resources :queries, only: %i[new create destroy] + resources :queries, only: %i[new create update destroy] end resources :projects, except: %i[show edit create update] do @@ -216,6 +220,7 @@ # Destroy uses a get request to prompt the user before the actual DELETE request get :destroy_info, as: "confirm_destroy" + post :deactivate_work_package_attachments end resources :versions, only: %i[new create] do diff --git a/db/migrate/20200903064009_enable_current_project_custom_fields_columns.rb b/db/migrate/20200903064009_enable_current_project_custom_fields_columns.rb index b568154c5d7c..126a3be7643a 100644 --- a/db/migrate/20200903064009_enable_current_project_custom_fields_columns.rb +++ b/db/migrate/20200903064009_enable_current_project_custom_fields_columns.rb @@ -28,7 +28,7 @@ class EnableCurrentProjectCustomFieldsColumns < ActiveRecord::Migration[6.0] def up - return unless Setting.where(name: "enabled_projects_column").exists? # rubocop:disable Rails/WhereExists + return unless Setting.where(name: "enabled_projects_columns").exists? # rubocop:disable Rails/WhereExists columns = Setting.enabled_projects_columns cf_columns = ProjectCustomField.pluck(:id).map { |id| "cf_#{id}" } diff --git a/db/migrate/20230731153909_add_file_link_journals_to_existing_containers.rb b/db/migrate/20230731153909_add_file_link_journals_to_existing_containers.rb index 6e0882581719..50c7d72dbe08 100644 --- a/db/migrate/20230731153909_add_file_link_journals_to_existing_containers.rb +++ b/db/migrate/20230731153909_add_file_link_journals_to_existing_containers.rb @@ -37,7 +37,7 @@ def up next unless container.class.journaled? Journals::CreateService.new(container, system_user) - .call(cause: { "type" => 'system_update', "feature" => 'file_links_journal' }) + .call(cause: Jounal::CausedBySystemUpdate.new(feature: "file_links_journal")) end end diff --git a/db/migrate/20240404074025_create_favorite.rb b/db/migrate/20240404074025_create_favorite.rb new file mode 100644 index 000000000000..2827dea096c8 --- /dev/null +++ b/db/migrate/20240404074025_create_favorite.rb @@ -0,0 +1,13 @@ +class CreateFavorite < ActiveRecord::Migration[7.1] + def change + create_table :favorites do |t| + t.references :user, null: false, foreign_key: true, index: true + t.references :favored, null: false, polymorphic: true + + t.timestamps + end + + add_index :favorites, %i[favored_type favored_id] + add_index :favorites, %i[user_id favored_type favored_id], unique: true + end +end diff --git a/db/migrate/20240410060041_remove_virtual_delay_column.rb b/db/migrate/20240410060041_remove_virtual_delay_column.rb new file mode 100644 index 000000000000..69c75e4083dd --- /dev/null +++ b/db/migrate/20240410060041_remove_virtual_delay_column.rb @@ -0,0 +1,5 @@ +class RemoveVirtualDelayColumn < ActiveRecord::Migration[7.1] + def change + remove_column :relations, :delay, :virtual, type: :integer, as: 'lag', stored: true + end +end diff --git a/db/migrate/20240422141623_rename_estimate_and_time_attribute_group.rb b/db/migrate/20240422141623_rename_estimate_and_time_attribute_group.rb new file mode 100644 index 000000000000..fbc4a01debc1 --- /dev/null +++ b/db/migrate/20240422141623_rename_estimate_and_time_attribute_group.rb @@ -0,0 +1,15 @@ +class RenameEstimateAndTimeAttributeGroup < ActiveRecord::Migration[7.1] + def up + execute <<~SQL.squish + UPDATE types + SET attribute_groups = REPLACE(attribute_groups, '- - :estimates_and_time', '- - :estimates_and_progress') + SQL + end + + def down + execute <<~SQL.squish + UPDATE types + SET attribute_groups = REPLACE(attribute_groups, '- - :estimates_and_progress', '- - :estimates_and_time') + SQL + end +end diff --git a/db/migrate/20240424160513_add_hide_attachments_to_projects.rb b/db/migrate/20240424160513_add_hide_attachments_to_projects.rb new file mode 100644 index 000000000000..2aee142d7c14 --- /dev/null +++ b/db/migrate/20240424160513_add_hide_attachments_to_projects.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +class AddHideAttachmentsToProjects < ActiveRecord::Migration[7.1] + def change + add_column :projects, :settings, :jsonb, null: false, default: {} + end +end diff --git a/db/migrate/20240430143313_update_default_project_columns.rb b/db/migrate/20240430143313_update_default_project_columns.rb new file mode 100644 index 000000000000..ec1fce0fc51a --- /dev/null +++ b/db/migrate/20240430143313_update_default_project_columns.rb @@ -0,0 +1,43 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +class UpdateDefaultProjectColumns < ActiveRecord::Migration[7.1] + def up + return unless Setting.where(name: "enabled_projects_columns").exists? # rubocop:disable Rails/WhereExists + + columns = Setting.enabled_projects_columns + columns.unshift("name") if columns.exclude?("name") + columns.unshift("favored") if columns.exclude?("favored") + + Setting.enabled_projects_columns = columns + end + + def down + # Nothing to do + end +end diff --git a/docker/ci/Dockerfile b/docker/ci/Dockerfile index 8af9d1bb8f19..0dac605ece8f 100644 --- a/docker/ci/Dockerfile +++ b/docker/ci/Dockerfile @@ -3,7 +3,7 @@ ARG RUBY_VERSION FROM ruby:${RUBY_VERSION}-bullseye ENV NODE_VERSION="20.9.0" -ENV BUNDLER_VERSION="2.5.5" +ENV BUNDLER_VERSION="2.5.10" ENV DEBIAN_FRONTEND=noninteractive ENV BUNDLE_WITHOUT="development:production:docker" diff --git a/docker/dev/backend/Dockerfile b/docker/dev/backend/Dockerfile index 1734bb13b8b9..b32ebf0c5f9e 100644 --- a/docker/dev/backend/Dockerfile +++ b/docker/dev/backend/Dockerfile @@ -1,4 +1,4 @@ -FROM ruby:3.2.3-bullseye as develop +FROM ruby:3.3.1-bullseye as develop MAINTAINER operations@openproject.com ARG DEV_UID=1000 @@ -8,7 +8,7 @@ ENV USER=dev ENV RAILS_ENV=development ENV NODE_MAJOR=20 -ENV BUNDLER_VERSION "2.5.5" +ENV BUNDLER_VERSION "2.5.10" # `--no-log-init` is required as a workaround to avoid disk exhaustion. # diff --git a/docker/dev/tls/docker-compose.yml b/docker/dev/tls/docker-compose.yml index a4ab21cebd30..d9172f23f87e 100644 --- a/docker/dev/tls/docker-compose.yml +++ b/docker/dev/tls/docker-compose.yml @@ -1,5 +1,3 @@ -version: "3.9" - services: traefik: image: traefik:latest diff --git a/docker/prod/Dockerfile b/docker/prod/Dockerfile index 58a30472ae7d..ad0924077404 100644 --- a/docker/prod/Dockerfile +++ b/docker/prod/Dockerfile @@ -1,4 +1,4 @@ -ARG RUBY_VERSION="3.2.3" +ARG RUBY_VERSION="3.3.1" FROM ruby:${RUBY_VERSION}-bullseye as base LABEL maintainer="operations@openproject.com" @@ -103,7 +103,7 @@ RUN ./docker/prod/setup/postinstall-onprem.sh RUN ln -s /app/docker/prod/setup/.irbrc /root/ # Expose ports for apache and postgres -EXPOSE 80 5432 +EXPOSE 80 # Expose the postgres data directory and OpenProject data directory as volumes VOLUME ["$PGDATA", "$APP_DATA_PATH"] diff --git a/docker/prod/setup/postinstall.sh b/docker/prod/setup/postinstall.sh deleted file mode 100755 index f1d9c75fd281..000000000000 --- a/docker/prod/setup/postinstall.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash - -set -e -set -o pipefail - -display_error() { - echo " !--> ERROR on postinstall:" - tail -n 200 /tmp/dockerize.log - exit 1 -} - -echo " ---> POSTINSTALL" - -# Ensure we can write in /tmp/op_uploaded_files (cf. #29112) -mkdir -p /tmp/op_uploaded_files/ && chown -R $APP_USER:$APP_USER /tmp/op_uploaded_files/ - -rm -f ./config/database.yml - -if test -f ./docker/prod/setup/postinstall-$PLATFORM.sh ; then - echo " ---> Executing postinstall for $PLATFORM..." - ./docker/prod/setup/postinstall-$PLATFORM.sh -fi - -echo " ---> Precompiling assets. This will take a while..." -./docker/prod/setup/postinstall-common.sh - -echo " OK." diff --git a/docker/prod/setup/preinstall-on-prem.sh b/docker/prod/setup/preinstall-on-prem.sh deleted file mode 100755 index 95e6878dc330..000000000000 --- a/docker/prod/setup/preinstall-on-prem.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -set -e -set -o pipefail - -# postfix.postinst tries to generate a hostname based on /etc/resolv.conf, which -# gets copied in to the docker environment from the host system. On systems -# that are not on a network with a domain, this will result in a failed install. -# -# See https://salsa.debian.org/postfix-team/postfix-dev/-/blob/debian/buster-updates/debian/postfix.postinst#L40 -if [ -f /run/.containerenv -o -f /.dockerenv ]; then - mv /bin/hostname /bin/x-hostname - echo openproject.local > /etc/hostname - apt-get install -y postfix - mv /bin/x-hostname /bin/hostname -fi - -apt-get install -y \ - postfix \ - apache2 \ - supervisor - -a2enmod proxy proxy_http -rm -f /etc/apache2/sites-enabled/000-default.conf diff --git a/docker/prod/setup/preinstall.sh b/docker/prod/setup/preinstall.sh deleted file mode 100755 index 8a4fd099000f..000000000000 --- a/docker/prod/setup/preinstall.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash -set -e -set -o pipefail - -echo " ---> PREINSTALL" - -display_error() { - echo " !--> ERROR on preinstall:" - tail -n 200 /tmp/dockerize.log - exit 1 -} - -echo " ---> Setting up common dependencies. This will take a while..." -./docker/prod/setup/preinstall-common.sh > /tmp/dockerize.log || display_error - -if test -f ./docker/prod/setup/preinstall-$PLATFORM.sh ; then - echo " ---> Executing preinstall for $PLATFORM..." - ./docker/prod/setup/preinstall-$PLATFORM.sh >/tmp/dockerize.log || display_error -fi - -apt-get clean -rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* -truncate -s 0 /var/log/*log - -rm -f /tmp/dockerize.log -echo " OK." diff --git a/docker/prod/web b/docker/prod/web index 92d70da01707..f53e8bd937db 100755 --- a/docker/prod/web +++ b/docker/prod/web @@ -17,5 +17,8 @@ if [ "$MIGRATE" = "true" ]; then bundle exec rake db:migrate fi +# Clean up any dangling PID file +rm -f ${APP_PATH}/tmp/pids/* + # see `config/puma.rb` for configuration exec bundle exec rails server -u puma -b $BIND -p $PORT diff --git a/docs/README.md b/docs/README.md index d2b0789491fb..84d3456a947b 100644 --- a/docs/README.md +++ b/docs/README.md @@ -29,7 +29,6 @@ The guides for [upgrading](./installation-and-operations/operation/upgrading) ar * [Configure incoming mails](./installation-and-operations/configuration/incoming-emails) * [Install custom plugins](./installation-and-operations/configuration/plugins) - ## User Guides Please see our [User Guide pages](./user-guide/) for detailed documentation on the functionality of OpenProject. @@ -38,7 +37,6 @@ Please see our [User Guide pages](./user-guide/) for detailed documentation on t Please see our [Use Cases section](./use-cases/) for detailed how-to guides and step-by-step instruction on how to set up a variety of common cases and views. - ## Development * [Full development environment for developers on Ubuntu](./development/development-environment-ubuntu) and [Mac OS X](./development/development-environment-osx) @@ -48,7 +46,6 @@ Please see our [Use Cases section](./use-cases/) for detailed how-to guides and * [Code review guidelines](./development/code-review-guidelines) * [API documentation](./api) - ## APIv3 documentation sources The documentation for APIv3 is written in the [OpenAPI Format](https://www.openapis.org/) and its sources are being built from the entry point `openapi-spec.yml`. diff --git a/docs/api/README.md b/docs/api/README.md index 47873bbc9609..9bd8876aa1aa 100644 --- a/docs/api/README.md +++ b/docs/api/README.md @@ -20,7 +20,7 @@ We try to keep stable releases of OpenProject with changes to this API backwards The API v3 is a general purpose API supporting multiple use cases. -While by no means complete, a whole lot of different scenarios can be automatized which otherwise would have to be carried out by hand via the UI. +While by no means complete, a whole lot of different scenarios can be automatized which otherwise would have to be carried out by hand via the UI. Examples for this include managing work packages, projects and users. ➔ [Go to OpenProject API](./introduction/) diff --git a/docs/api/apiv3/README.md b/docs/api/apiv3/README.md index 2eb27b506050..1b48072d54d6 100644 --- a/docs/api/apiv3/README.md +++ b/docs/api/apiv3/README.md @@ -9,6 +9,6 @@ retrieve the complete, singular file from any OpenProject server under `/api/v3/ Additionally, there is a script that outputs the specification as a whole as well, either as json or yaml depending on the given format argument: -``` +```shell ./script/api/spec --format yaml > openproject-oas.yml ``` diff --git a/docs/api/apiv3/client-libraries/README.md b/docs/api/apiv3/client-libraries/README.md index 17754793b009..fbcfb5c39046 100644 --- a/docs/api/apiv3/client-libraries/README.md +++ b/docs/api/apiv3/client-libraries/README.md @@ -6,7 +6,6 @@ While we cannot endorse or vet the libraries listed below we encourage their cre If you need help developing a client library you can [contact us](mailto:support@openproject.com). If you want to have a client library listed in the list below you can again [contact us](mailto:support@openproject.com) or simply issue a PR with [changes to the source file](https://github.com/opf/openproject/blob/dev/docs/api/apiv3/client-libraries/README.md). - ## JavaScript / TypeScript * [op-client](https://www.npmjs.com/package/op-client): Client library for OpenProject server. Works both on Node.js and browser. diff --git a/docs/api/apiv3/components/examples/priority_collection.yml b/docs/api/apiv3/components/examples/priority_collection.yml new file mode 100644 index 000000000000..19cb668055f5 --- /dev/null +++ b/docs/api/apiv3/components/examples/priority_collection.yml @@ -0,0 +1,51 @@ +# Example: Priority collection +--- +value: + _embedded: + elements: + - _links: + self: + href: "/api/v3/priorities/1" + title: Low + _type: Priority + id: 1 + isActive: true + isDefault: false + name: Low + position: 1 + - _links: + self: + href: "/api/v3/priorities/2" + title: Normal + _type: Priority + id: 2 + isActive: true + isDefault: true + name: Normal + position: 2 + - _links: + self: + href: "/api/v3/priorities/3" + title: High + _type: Priority + id: 3 + isActive: true + isDefault: false + name: High + position: 3 + - _links: + self: + href: "/api/v3/priorities/4" + title: Immediate + _type: Priority + id: 4 + isActive: true + isDefault: false + name: Immediate + position: 5 + _links: + self: + href: "/api/v3/priorities" + _type: Collection + count: 4 + total: 4 diff --git a/docs/api/apiv3/components/schemas/available_assignees_model.yml b/docs/api/apiv3/components/schemas/available_assignees_model.yml index 48eecb12cf7a..5cb0d1b6949d 100644 --- a/docs/api/apiv3/components/schemas/available_assignees_model.yml +++ b/docs/api/apiv3/components/schemas/available_assignees_model.yml @@ -1,56 +1,32 @@ # Schema: Available_AssigneesModel --- -type: object -example: - _links: - self: - href: "/api/v3/projects/42/available_assignees" - total: 2 - count: 2 - _type: Collection - _embedded: - elements: - - _type: User +allOf: + - "$ref": "./collection_model.yml" + - type: object + required: + - _links + - _embedded + properties: _links: - self: - href: "/api/v3/users/1" - title: John Sheppard - j.sheppard - lock: - href: "/api/v3/users/1/lock" - title: Set lock on j.sheppard - method: POST - delete: - href: "/api/v3/users/1" - title: Delete j.sheppard - method: DELETE - id: 1 - login: j.sheppard - firstName: John - lastName: Sheppard - email: shep@mail.com - avatar: https://example.org/users/1/avatar - status: active - createdAt: '2014-05-21T08:51:20.977Z' - updatedAt: '2014-05-21T08:51:20.977Z' - - _type: User - _links: - self: - href: "/api/v3/users/2" - title: Jim Sheppard - j.sheppard2 - lock: - href: "/api/v3/users/2/lock" - title: Set lock on j.sheppard2 - method: POST - delete: - href: "/api/v3/users/2" - title: Delete j.sheppard2 - method: DELETE - id: 2 - login: j.sheppard2 - firstName: Jim - lastName: Sheppard - email: shep@mail.net - avatar: https://example.org/users/1/avatar - status: active - createdAt: '2014-05-21T08:51:20.977Z' - updatedAt: '2014-05-21T08:51:20.977Z' + type: object + required: + - self + properties: + self: + allOf: + - "$ref": "./link.yml" + - description: |- + The available assignees collection + + **Resource**: AvailableAssigneesCollection + readOnly: true + _embedded: + type: object + properties: + elements: + type: array + readOnly: true + items: + allOf: + - "$ref": "./user_model.yml" + - description: Collection of Users diff --git a/docs/api/apiv3/components/schemas/categories_by_project_model.yml b/docs/api/apiv3/components/schemas/categories_by_project_model.yml index 38460fb1a1bf..81cdcb96a475 100644 --- a/docs/api/apiv3/components/schemas/categories_by_project_model.yml +++ b/docs/api/apiv3/components/schemas/categories_by_project_model.yml @@ -1,33 +1,32 @@ # Schema: Categories_by_ProjectModel --- -type: object -example: - _links: - self: - href: "/api/v3/projects/11/categories" - total: 2 - count: 2 - _type: Collection - _embedded: - elements: - - _links: - self: - href: "/api/v3/categories/10" - title: Category with assignee - project: - href: "/api/v3/projects/11" - title: Example project - defaultAssignee: - href: "/api/v3/users/42" - title: John Sheppard - _type: Category - id: 10 - name: Foo - - _links: - self: - href: "/api/v3/categories/11" - project: - href: "/api/v3/projects/11" - _type: Category - id: 11 - name: Bar +allOf: + - "$ref": "./collection_model.yml" + - type: object + required: + - _links + - _embedded + properties: + _links: + type: object + required: + - self + properties: + self: + allOf: + - "$ref": "./link.yml" + - description: |- + The categories collection + + **Resource**: CategoriesCollection + readOnly: true + _embedded: + type: object + properties: + elements: + type: array + readOnly: true + items: + allOf: + - "$ref": "./category_model.yml" + - description: Collection of Categories diff --git a/docs/api/apiv3/components/schemas/list_available_parent_project_candidates_model.yml b/docs/api/apiv3/components/schemas/list_available_parent_project_candidates_model.yml index 587af2d26189..78f0462c5394 100644 --- a/docs/api/apiv3/components/schemas/list_available_parent_project_candidates_model.yml +++ b/docs/api/apiv3/components/schemas/list_available_parent_project_candidates_model.yml @@ -1,80 +1,32 @@ # Schema: List_available_parent_project_candidatesModel --- -type: object -example: - _links: - self: - href: "/api/v3/projects/available_parent_projects?of=123" - _type: Collection - total: 2 - count: 2 - _embedded: - elements: - - _type: Project +allOf: + - $ref: ./collection_model.yml + - type: object + required: + - _links + - _embedded + properties: _links: - self: - href: "/api/v3/projects/6" - title: A project - createWorkPackage: - href: "/api/v3/projects/6/work_packages/form" - method: post - createWorkPackageImmediate: - href: "/api/v3/projects/6/work_packages" - method: post - categories: - href: "/api/v3/projects/6/categories" - versions: - href: "/api/v3/projects/6/versions" - status: - href: "/api/v3/project_statuses/on_track" - title: On track - id: 6 - identifier: a_project - name: A project - active: true - statusExplanation: - format: markdown - raw: Everything **fine** - html: "

    Everything fine

    " - public: false - description: - format: markdown - raw: Lorem **ipsum** dolor sit amet - html: "

    Lorem ipsum dolor sit amet

    " - createdAt: '2015-07-06T13:28:14+00:00' - updatedAt: '2015-10-01T09:55:02+00:00' - type: Customer Project - - _type: Project - _links: - self: - href: "/api/v3/projects/14" - title: Another project - createWorkPackage: - href: "/api/v3/projects/14/work_packages/form" - method: post - createWorkPackageImmediate: - href: "/api/v3/projects/14/work_packages" - method: post - categories: - href: "/api/v3/projects/14/categories" - versions: - href: "/api/v3/projects/14/versions" - status: - href: "/api/v3/project_statuses/on_track" - title: On track - id: 14 - identifier: another_project - name: Another project - active: true - statusExplanation: - format: markdown - raw: Everything super **fine** - html: "

    Everything super fine

    " - public: true - description: - format: markdown - raw: '' - html: '' - createdAt: '2016-02-29T12:50:20+00:00' - updatedAt: '2016-02-29T12:50:20+00:00' - type: + type: object + required: + - self + properties: + self: + allOf: + - "$ref": ./link.yml + - description: |- + The project collection + + **Resource**: ProjectCollection + readOnly: true + _embedded: + type: object + properties: + elements: + type: array + readOnly: true + items: + allOf: + - "$ref": ./project_model.yml + - description: Collection of projects diff --git a/docs/api/apiv3/components/schemas/priorities_model.yml b/docs/api/apiv3/components/schemas/priorities_model.yml deleted file mode 100644 index 49ebbda9fba4..000000000000 --- a/docs/api/apiv3/components/schemas/priorities_model.yml +++ /dev/null @@ -1,52 +0,0 @@ -# Schema: PrioritiesModel ---- -type: object -example: - _links: - self: - href: "/api/v3/priorities" - _type: Collection - total: 4 - count: 4 - _embedded: - elements: - - _type: Priority - _links: - self: - href: "/api/v3/priorities/1" - title: Low - id: 1 - name: Low - position: 1 - isDefault: false - isActive: true - - _type: Priority - _links: - self: - href: "/api/v3/priorities/2" - title: Normal - id: 2 - name: Normal - position: 2 - isDefault: true - isActive: true - - _type: Priority - _links: - self: - href: "/api/v3/priorities/3" - title: High - id: 3 - name: High - position: 3 - isDefault: false - isActive: true - - _type: Priority - _links: - self: - href: "/api/v3/priorities/4" - title: Immediate - id: 4 - name: Immediate - position: 5 - isDefault: false - isActive: true diff --git a/docs/api/apiv3/components/schemas/priority_collection_model.yml b/docs/api/apiv3/components/schemas/priority_collection_model.yml new file mode 100644 index 000000000000..109fecf500ae --- /dev/null +++ b/docs/api/apiv3/components/schemas/priority_collection_model.yml @@ -0,0 +1,35 @@ +# Schema: PriorityCollectionModel +--- +allOf: + - $ref: "./collection_model.yml" + - type: object + required: + - _links + - _embedded + properties: + _links: + type: object + required: + - self + properties: + self: + allOf: + - $ref: "./link.yml" + - properties: + self: + allOf: + - $ref: "./link.yml" + - description: |- + This priority collection + + **Resource**: PriorityCollectionModel + readOnly: true + _embedded: + type: object + required: + - elements + properties: + elements: + type: array + items: + $ref: "./priority_model.yml" diff --git a/docs/api/apiv3/components/schemas/project_storage_model.yml b/docs/api/apiv3/components/schemas/project_storage_model.yml index 913891f27132..7f43d8c48e90 100644 --- a/docs/api/apiv3/components/schemas/project_storage_model.yml +++ b/docs/api/apiv3/components/schemas/project_storage_model.yml @@ -80,12 +80,12 @@ properties: allOf: - $ref: './link.yml' - description: |- - A link to open project strorage. + A link to OpenProject strorage. openWithConnectionEnsured: allOf: - $ref: './link.yml' - description: |- - A link to open project storage with making sure user has access to it. + A link to OpenProject storage with making sure user has access to it. # Conditions diff --git a/docs/api/apiv3/components/schemas/types_by_project_model.yml b/docs/api/apiv3/components/schemas/types_by_project_model.yml index 0dbac89a0bae..602d4f09fb6f 100644 --- a/docs/api/apiv3/components/schemas/types_by_project_model.yml +++ b/docs/api/apiv3/components/schemas/types_by_project_model.yml @@ -1,36 +1,32 @@ # Schema: Types_by_ProjectModel --- -type: object -example: - _links: - self: - href: "/api/v3/projects/11/types" - total: 2 - count: 2 - _type: Collection - _embedded: - elements: - - _links: - self: - href: "/api/v3/types/1" - _type: Type - id: 1 - name: Bug - color: "#ff0000" - position: 1 - isDefault: true - isMilestone: false - createdAt: '2014-05-21T08:51:20.745Z' - updatedAt: '2014-05-21T08:51:20.745Z' - - _links: - self: - href: "/api/v3/types/2" - _type: Type - id: 2 - name: Feature - color: "#888" - position: 2 - isDefault: false - isMilestone: false - createdAt: '2014-05-21T08:51:20.745Z' - updatedAt: '2014-05-21T08:51:20.745Z' +allOf: + - "$ref": "./collection_model.yml" + - type: object + required: + - _links + - _embedded + properties: + _links: + type: object + required: + - self + properties: + self: + allOf: + - "$ref": "./link.yml" + - description: |- + The types collection + + **Resource**: TypesCollection + readOnly: true + _embedded: + type: object + properties: + elements: + type: array + readOnly: true + items: + allOf: + - "$ref": "./type_model.yml" + - description: Collection of Types diff --git a/docs/api/apiv3/components/schemas/versions_by_project_model.yml b/docs/api/apiv3/components/schemas/versions_by_project_model.yml index efddfdd6b248..7b2fc1358ed9 100644 --- a/docs/api/apiv3/components/schemas/versions_by_project_model.yml +++ b/docs/api/apiv3/components/schemas/versions_by_project_model.yml @@ -1,63 +1,32 @@ # Schema: Versions_by_ProjectModel --- -type: object -example: - _links: - self: - href: "/api/v3/projects/11/versions" - total: 3 - count: 3 - _type: Collection - _embedded: - elements: - - _links: - self: - href: "/api/v3/versions/11" - definingProject: - href: "/api/v3/projects/11" - availableInProjects: - href: "/api/v3/versions/11/projects" - _type: Version - id: 11 - name: v3.0 Alpha - description: - format: plain - raw: This version has a description - html: This version has a description - startDate: '2014-11-20' - endDate: - status: Open - - _links: - self: - href: "/api/v3/versions/12" - definingProject: - href: "/api/v3/projects/11" - availableInProjects: - href: "/api/v3/versions/12/projects" - _type: Version - id: 12 - name: v2.0 - description: - format: plain - raw: '' - html: '' - startDate: - endDate: - status: Closed - - _links: - self: - href: "/api/v3/versions/10" - definingProject: - href: "/api/v3/projects/11" - availableInProjects: - href: "/api/v3/versions/10/projects" - _type: Version - id: 10 - name: v1.0 - description: - format: plain - raw: '' - html: '' - startDate: - endDate: - status: Open +allOf: + - "$ref": "./collection_model.yml" + - type: object + required: + - _links + - _embedded + properties: + _links: + type: object + required: + - self + properties: + self: + allOf: + - "$ref": "./link.yml" + - description: |- + The versions collection + + **Resource**: VersionsCollection + readOnly: true + _embedded: + type: object + properties: + elements: + type: array + readOnly: true + items: + allOf: + - "$ref": "./version_model.yml" + - description: Collection of Versions diff --git a/docs/api/apiv3/example/README.md b/docs/api/apiv3/example/README.md index f88046848caa..3c6e740fca48 100644 --- a/docs/api/apiv3/example/README.md +++ b/docs/api/apiv3/example/README.md @@ -188,7 +188,6 @@ The value taken for the `href` in a resource value will always be the `self` lin ![work package create schema self link](./wp-create-form-schema-self-link.png) - *The correct combination of `project` and `type` needs to be chosen. Sometimes a type is not available in every project. In that case, the type either can be added to the project in the UI or a different type needs to be chosen for the project. This is why it sometimes makes sense to first send the project within the form body as this will update the `availableValues` listed for `type`* ### Sending the create request diff --git a/docs/api/apiv3/openapi-spec.yml b/docs/api/apiv3/openapi-spec.yml index 96e2f6bc4570..be010effa5c4 100644 --- a/docs/api/apiv3/openapi-spec.yml +++ b/docs/api/apiv3/openapi-spec.yml @@ -505,6 +505,8 @@ components: $ref: "./components/examples/notification_collection.yml" PlaceholderUserResponse: $ref: "./components/examples/placeholder-user-response.yml" + PriorityCollection: + $ref: "./components/examples/priority_collection.yml" Project: $ref: "./components/examples/project.yml" ProjectBody: @@ -695,8 +697,8 @@ components: "$ref": "./components/schemas/principal_collection_model.yml" PrincipalModel: "$ref": "./components/schemas/principal_model.yml" - PrioritiesModel: - "$ref": "./components/schemas/priorities_model.yml" + PriorityCollectionModel: + "$ref": "./components/schemas/priority_collection_model.yml" PriorityModel: "$ref": "./components/schemas/priority_model.yml" ProjectCollectionModel: diff --git a/docs/api/apiv3/paths/priorities.yml b/docs/api/apiv3/paths/priorities.yml index 66b211815279..eedb8c0a2841 100644 --- a/docs/api/apiv3/paths/priorities.yml +++ b/docs/api/apiv3/paths/priorities.yml @@ -6,58 +6,10 @@ get: content: application/hal+json: examples: - response: - value: - _embedded: - elements: - - _links: - self: - href: "/api/v3/priorities/1" - title: Low - _type: Priority - id: 1 - isActive: true - isDefault: false - name: Low - position: 1 - - _links: - self: - href: "/api/v3/priorities/2" - title: Normal - _type: Priority - id: 2 - isActive: true - isDefault: true - name: Normal - position: 2 - - _links: - self: - href: "/api/v3/priorities/3" - title: High - _type: Priority - id: 3 - isActive: true - isDefault: false - name: High - position: 3 - - _links: - self: - href: "/api/v3/priorities/4" - title: Immediate - _type: Priority - id: 4 - isActive: true - isDefault: false - name: Immediate - position: 5 - _links: - self: - href: "/api/v3/priorities" - _type: Collection - count: 4 - total: 4 + 'simple priority collection': + $ref: "../components/examples/priority_collection.yml" schema: - "$ref": "../components/schemas/priorities_model.yml" + "$ref": "../components/schemas/priority_collection_model.yml" description: OK headers: {} '403': diff --git a/docs/api/bcf/bcf-rest-api.md b/docs/api/bcf/bcf-rest-api.md index 909c93ebee79..33d38b8316d3 100644 --- a/docs/api/bcf/bcf-rest-api.md +++ b/docs/api/bcf/bcf-rest-api.md @@ -1,55 +1,55 @@ # BCF REST API -![](BCFicon128.png) +![BCF REST API Icon](BCFicon128.png) -The following describes the extensions and deviations of the BCF API v2.1 implementation in OpenProject. +The following describes the extensions and deviations of the BCF API v2.1 implementation in OpenProject. -This document should be read as an extension to the [standard specification](https://github.com/buildingSMART/BCF-API/blob/release_2_1/README.md). +This document should be read as an extension to the [standard specification](https://github.com/buildingSMART/BCF-API/blob/release_2_1/README.md). The user should read the standard specification first, and then take a look at this document to be informed about OpenProject specificities. While the intent of the implementation is to follow the specification, the API builds on the existing OpenProject data -schema and by that requires to map between the concepts required in the much broader domain of project management and BCF. +schema and by that requires to map between the concepts required in the much broader domain of project management and BCF. In other parts, the BCF API specification has not been completely implemented. It will be amended where requirements dictate. OpenProject offers a second API (v3) which might be able to fill the gaps the BCF API implementation still has. The document follows the structure of the standard specification to ease comparing the two documents. -# 1. Introduction +## 1. Introduction All end points are nested within the `/api` path. So for a server listening on `https://foo.com/` the API root will be `https://foo.com/api/bcf/2.1`. For a server listening on `https://foo.com/bar` the API root will be `https://foo.com/bar/api/bcf/2.1`. -## 1.1 Paging, Sorting and Filtering +### 1.1 Paging, Sorting and Filtering _Not implemented_ -## 1.2 Caching +### 1.2 Caching _Implemented_ -## 1.3 Updating Resources via HTTP PUT +### 1.3 Updating Resources via HTTP PUT _Implemented_ -## 1.4 Cross Origin Resource Sharing (CORS) +### 1.4 Cross Origin Resource Sharing (CORS) _Not implemented_ -## 1.5 Http Status Codes +### 1.5 Http Status Codes _Implemented_ -## 1.6 Error Response Body Format +### 1.6 Error Response Body Format _Implemented_ -## 1.7 DateTime Format +### 1.7 DateTime Format _Implemented_ -## 1.8 Authorization +### 1.8 Authorization _Implemented_ @@ -58,41 +58,42 @@ data structure with WorkPackages, which enables them to be worked on by the proj a user also needs to have the _view_work_packages_ permission to have _view_linked_issues_. For _manage_bcf_ the permissions _view_work_packages_, _add_work_packages_, _edit_work_packages_ and _delete_work_packages_ are dependently required. -### 1.8.1 Per-Entity Authorization +#### 1.8.1 Per-Entity Authorization _Implemented_ The `authorization` field is always returned, regardless of an `includeAuthorization` query parameter. -### 1.8.2 Determining Authorized Entity Actions +#### 1.8.2 Determining Authorized Entity Actions _Implemented_ -## 1.9 Additional Response and Request Object Properties +### 1.9 Additional Response and Request Object Properties The implementation relies on a client to particularly adhere to this. -## 1.10 Binary File Uploads +### 1.10 Binary File Uploads _Implemented_ -# 2. Topologies +## 2. Topologies _Out of scope_ -# 3. Public Services +## 3. Public Services -## 3.1 Versions Service +### 3.1 Versions Service _Not implemented_ -## 3.2 Authentication Services +### 3.2 Authentication Services -### 3.2.1 Obtaining Authentication Information +#### 3.2.1 Obtaining Authentication Information _Implemented_ The following OAuth2 flows are supported: + * `authorization_code_grant` - [4.1 - Authorization Code Grant](https://tools.ietf.org/html/rfc6749#section-4.1) * `client_credentials` - [4.4 - Client Credentials Grant](https://tools.ietf.org/html/rfc6749#section-4.4) @@ -103,77 +104,78 @@ Before a client is able to perform the flows, they need to be [configured in Ope to be checked for the scope. That value also needs to be provided for the scope property in OAuth requests. The OAuth2 flows alternatively proposed by the specification + * `implicit_grant` - [4.2 - Implicit Grant](https://tools.ietf.org/html/rfc6749#section-4.2) * `resource_owner_password_credentials_grant` - [4.3 - Resource Owner Password Credentials Grant](https://tools.ietf.org/html/rfc6749#section-4.3) are not implemented. -### 3.2.2 OAuth2 Example +#### 3.2.2 OAuth2 Example _Out of scope_ -### 3.2.3 OAuth2 Protocol Flow - Dynamic Client Registration +#### 3.2.3 OAuth2 Protocol Flow - Dynamic Client Registration _Not implemented_ -## 3.3 User Services +### 3.3 User Services -### 3.3.1 Get current user +#### 3.3.1 Get current user _Implemented_ -# 4. BCF Services +## 4. BCF Services -## 4.1 Project Services +### 4.1 Project Services The `project_id` is an integer value. However, the API also understands requests where the project identifier, e.g. `bcf_project` is used instead of the integer within a url. So the following urls might point to the same project resource: `/api/bcf/2.1/projects/3` and `/api/bcf/2.1/projects/bcf_project`. -### 4.1.1 GET Projects Service +#### 4.1.1 GET Projects Service _Partly implemented_ The end point is implemented but lacks the `authorization` property. However, the [Project Extension Service](#414-get-project-extension-service) is completely implemented and provides the same information. -### 4.1.2 GET Project Service +#### 4.1.2 GET Project Service _Partly implemented_ The end point is implemented but lacks the `authorization` property. However, the [Project Extension Service](#414-get-project-extension-service) is completely implemented and provides the same information. -### 4.1.3 PUT Project Service +#### 4.1.3 PUT Project Service _Implemented_ -### 4.1.4 GET Project Extension Service +#### 4.1.4 GET Project Extension Service _Implemented and extended_ -However, as some end points are not implemented, the actions indicating the ability to call those end points will also not be returned, e.g. `updateDocumentReferences` +However, as some end points are not implemented, the actions indicating the ability to call those end points will also not be returned, e.g. `updateDocumentReferences` -### 4.1.5 Expressing User Authorization Through Project Extensions +#### 4.1.5 Expressing User Authorization Through Project Extensions _Out of scope_ -#### 4.1.5.1 Project +##### 4.1.5.1 Project _Implemented and extended_ * *viewTopic* - The ability to see topics (see [4.2.3 GET Topic Service](#423-get-topic-service)) -#### 4.1.5.2 Topic +##### 4.1.5.2 Topic _Implemented_ -#### 4.1.5.3 Comment +##### 4.1.5.3 Comment _Implemented_ -## 4.2 Topic Services +### 4.2 Topic Services BCF topics are tightly coupled to work packages in OpenProject. This coupling is denoted in the `reference_links` property of a topic which will always have a link to the work package resource in the API v3. e.g.: -``` +```text <-- other properties --> "reference_links": [ "/api/v3/work_packages/92" @@ -181,11 +183,12 @@ of a topic which will always have a link to the work package resource in the API <-- other properties --> ``` -### 4.2.1 GET Topics Service +#### 4.2.1 GET Topics Service _Partly implemented_ The following properties are not supported: + * `labels` (the property exists but cannot be written and is always empty) * `stage` (the property exists but cannot be written and is always null) * `bim_snippet.snippet_type` @@ -195,7 +198,7 @@ The following properties are not supported: OData sort, filtering and pagination is not supported. -### 4.2.2 POST Topic Service +#### 4.2.2 POST Topic Service _Partly implemented_ @@ -204,13 +207,13 @@ See [4.2.3 GET Topic Service](#423-get-topic-service) for details. Either a new work package is created or, if a work package is referenced in the `reference_links` section, a the referenced work package is associated to the newly created topic. A work package can only be associated to one topic and vice versa. -### 4.2.3 GET Topic Service +#### 4.2.3 GET Topic Service _Partly implemented_ See [4.2.3 GET Topic Service](#423-get-topic-service) for details. -### 4.2.4 PUT Topic Service +#### 4.2.4 PUT Topic Service _Partly implemented_ @@ -218,194 +221,194 @@ The reference to the work package cannot be altered. See [4.2.3 GET Topic Service](#423-get-topic-service) for details. -### 4.2.5 DELETE Topic Service +#### 4.2.5 DELETE Topic Service _Implemented_ The associated work package will also be deleted. -### 4.2.6 GET Topic BIM Snippet Service +#### 4.2.6 GET Topic BIM Snippet Service _Not implemented_ -### 4.2.7 PUT Topic BIM Snippet Service +#### 4.2.7 PUT Topic BIM Snippet Service _Not implemented_ -## 4.3 File Services +### 4.3 File Services -### 4.3.1 GET Files (Header) Service +#### 4.3.1 GET Files (Header) Service _Not implemented_ -### 4.3.2 PUT Files (Header) Service +#### 4.3.2 PUT Files (Header) Service _Not implemented_ -## 4.4 Comment Services +### 4.4 Comment Services -### 4.4.1 GET Comments Service +#### 4.4.1 GET Comments Service _Not implemented_ -### 4.4.2 POST Comment Service +#### 4.4.2 POST Comment Service _Not implemented_ -### 4.4.3 GET Comment Service +#### 4.4.3 GET Comment Service _Not implemented_ -### 4.4.4 PUT Comment Service +#### 4.4.4 PUT Comment Service _Not implemented_ -### 4.4.5 DELETE Comment Service +#### 4.4.5 DELETE Comment Service _Not implemented_ -### 4.4.6 Determining allowed Comment modifications +#### 4.4.6 Determining allowed Comment modifications _Not implemented_ -## 4.5 Viewpoint Services +### 4.5 Viewpoint Services -### 4.5.1 GET Viewpoints Service +#### 4.5.1 GET Viewpoints Service _Implemented_ -### 4.5.2 POST Viewpoint Service +#### 4.5.2 POST Viewpoint Service _Implemented_ -#### 4.5.2.1 Point +##### 4.5.2.1 Point _Implemented_ -#### 4.5.2.2 Direction +##### 4.5.2.2 Direction _Implemented_ -#### 4.5.2.3 Orthogonal camera +##### 4.5.2.3 Orthogonal camera _Implemented_ -#### 4.5.2.4 Perspective camera +##### 4.5.2.4 Perspective camera _Implemented_ -#### 4.5.2.5 Line +##### 4.5.2.5 Line _Implemented_ -#### 4.5.2.6 Clipping plane +##### 4.5.2.6 Clipping plane _Implemented_ -#### 4.5.2.7 Bitmap +##### 4.5.2.7 Bitmap _Implemented_ -#### 4.5.2.8 Snapshot +##### 4.5.2.8 Snapshot _Implemented_ -#### 4.5.2.9 Components +##### 4.5.2.9 Components _Implemented_ -#### 4.5.2.10 Component +##### 4.5.2.10 Component _Implemented_ -#### 4.5.2.11 Coloring +##### 4.5.2.11 Coloring _Implemented_ -#### 4.5.2.12 Visibility +##### 4.5.2.12 Visibility _Implemented_ -#### 4.5.2.13 View setup hints +##### 4.5.2.13 View setup hints _Implemented_ -### 4.5.3 GET Viewpoint Service +#### 4.5.3 GET Viewpoint Service _Implemented_ -### 4.5.4 GET Viewpoint Snapshot Service +#### 4.5.4 GET Viewpoint Snapshot Service _Implemented_ -### 4.5.6 GET selected Components Service +#### 4.5.6 GET selected Components Service _Implemented_ -### 4.5.7 GET colored Components Service +#### 4.5.7 GET colored Components Service _Implemented_ -### 4.5.8 GET visibility of Components Service +#### 4.5.8 GET visibility of Components Service _Implemented_ -## 4.6 Related Topics Services +### 4.6 Related Topics Services -### 4.6.1 GET Related Topics Service +#### 4.6.1 GET Related Topics Service _Not implemented_ -### 4.6.2 PUT Related Topics Service +#### 4.6.2 PUT Related Topics Service _Not implemented_ -## 4.7 Document Reference Services +### 4.7 Document Reference Services -### 4.7.1 GET Document References Service +#### 4.7.1 GET Document References Service _Not implemented_ -### 4.7.2 POST Document Reference Service +#### 4.7.2 POST Document Reference Service _Not implemented_ -### 4.7.3 PUT Document Reference Service +#### 4.7.3 PUT Document Reference Service _Not implemented_ -## 4.8 Document Services +### 4.8 Document Services -### 4.8.1 GET Documents Service +#### 4.8.1 GET Documents Service _Not implemented_ -### 4.8.2 POST Document Service +#### 4.8.2 POST Document Service _Not implemented_ -### 4.8.3 GET Document Service +#### 4.8.3 GET Document Service _Not implemented_ -## 4.9 Topics Events Services +### 4.9 Topics Events Services -### 4.9.1 GET Topics Events Service +#### 4.9.1 GET Topics Events Service _Not implemented_ -### 4.9.2 GET Topic Events Service +#### 4.9.2 GET Topic Events Service _Not implemented_ -## 4.10 Comments Events Services +### 4.10 Comments Events Services _Not implemented_ -### 4.10.1 GET Comments Events Service +#### 4.10.1 GET Comments Events Service _Not implemented_ -### 4.10.2 GET Comment Events Service +#### 4.10.2 GET Comment Events Service _Not implemented_ diff --git a/docs/api/faq/README.md b/docs/api/faq/README.md index 46cc49459b97..c5ab0340e0bb 100644 --- a/docs/api/faq/README.md +++ b/docs/api/faq/README.md @@ -15,7 +15,6 @@ That's not possible at the moment. You can only [retrieve](../endpoints/wiki-pag ## (How) can I add work package categories to a project via API? -The API v3 currently does not expose categories via the API. +The API v3 currently does not expose categories via the API. Please note that categories might change in the future as they have a lot of limitations, e.g. when filtering. - diff --git a/docs/bim-guide/README.md b/docs/bim-guide/README.md index 0fa67cffdf99..aa847cfca206 100644 --- a/docs/bim-guide/README.md +++ b/docs/bim-guide/README.md @@ -11,14 +11,10 @@ Welcome to the OpenProject user guide for Building Information Modeling (BIM) wi On top of the general project management functionalities, OpenProject BIM enables construction teams to better plan, communicate and collaborate in their building projects. OpenProject BIM includes a 3D model viewer (IFC viewer), support of the BIM collaboration format (BCF) for BIM issue management, and much more powerful features, e.g. a [Revit integration](revit-add-in). - > **Note**: This guide only covers the specific [BIM features and functionalities of OpenProject](https://www.openproject.org/bim-project-management/). To learn more about the core features for project management of OpenProject (which are included in the BIM edition as well), please visit our [User Guide](../user-guide/). - ![BIM Project Management](demo_project_teaser_bim.jpg) - - ## Overview of all topics regarding the OpenProject BIM edition OpenProject BIM edition provides powerful features particular designed for the needs of construction industry. Please choose the topic you want to learn more about. @@ -29,108 +25,76 @@ Upload your IFC building models and show them directly in the internet browser, Details: [IFC-Viewer](ifc-viewer) - - ## BIM issue management Create tasks directly connected to your building model, import tasks or export tasks from any other BIM application. Details: [BIM Issue Management](bim-issue-management) - - ## Revit add-in Stay always connected to OpenProject in realtime, show and create tasks while you're working in the Revit, using the Revit Add-in. Details: [Revit Add-in](revit-add-in) - - ## How to get a free trial You easily can start a new BIM trial on our [OpenProject BIM website](https://www.openproject.org/bim-project-management/). The have a look at the full description of how to start a new trial installation just follow the Link: [Create trial installation](../enterprise-guide/enterprise-cloud-guide/create-cloud-trial/). - - ## How to enable the BCF module The BCF Module and the included IFC viewer can be enabled for every single project. Here you can find the description how to [enable a module](../user-guide/projects/project-settings/modules/) within your ***project settings***. - - ## Reporting bugs You found a bug? Please [report it](../development/report-a-bug) to our [OpenProject community](https://community.openproject.org/projects/revit-add-in). Thank you! - - ## BIM FAQs - - ### Can OpenProject features be used within the OpenProject BIM edition? Yes, you are able to use all known features. Within our BIM edition you get the full functionality and additionally some features only for the building industry. - - ### Is it possible to switch my existing OpenProject installation to the BIM edition? Yes, an existing OpenProject on-premises (self-hosted) installation can easily be switched to the BIM edition without losing your settings and projects. In our [Installation & Upgrade Guide](../installation-and-operations/bim-edition/) you can find a description how to switch. - - ### Is OpenProject BIM compatible to other BIM software? Yes of course. We are of the opinion that the full potential of the BIM method only works through collaboration and the exchange of information (openBIM). For this reason we support the open BCF XML Standard. You are able to import and export all created BCF and stay interoperable with any other BCF software. - - ### Why do I need a Revit add-in? You don't need it, but it makes your BIM Issue Management much easier. The *OpenProject Revit Add-In* allows you to use the open source project management software *OpenProject BIM* directly within your Autodesk Revit environment. It lets you create, inspect and manage issues right in the moment when you can also solve them - when you have your Revit application fired up and the relevant BIM models open. Issues get stored as BIM Issues centrally and are available to every team member in real time - thanks to our browser based IFC viewer even to those team members without expensive Revit licenses. No BCF XML import/export is needed. However, you still can import and export BCF XML as you like and stay interoperable with any other BCF software. - - ### Are there any system requirements for the Revit add-in? -The OpenProject Revit Add-In does not have any special system requirements. Only a supported [version of Autodesk Revit](./revit-add-in/#system-requirements) must be installed. - - +The OpenProject Revit Add-In does not have any special system requirements. Only a supported [version of Autodesk Revit](./revit-add-in/#system-requirements) must be installed. ### Which versions of Revit are supported? The OpenProject BIM Add-in for Revit supports the following versions: -- REVIT 2019 -- REVIT 2020 +- REVIT 2019 +- REVIT 2020 - REVIT 2021 - - ### Is it possible to use OpenProject BIM without Revit? Yes! The Revit Add-In is just additional to the OpenProject BIM core functionality. It's still possible to import and export BCF XML as you like and stay interoperable with any other Software for BIM Issue Management. - - ### Are integrations with other BIM software planned? Yes, we want to develop some other integrations to stay interoperable with other BIM software and make BIM Issue Management with OpenProject BIM much easier. - - ### How to enable the BCF module -The BCF Module and the included IFC viewer can be enabled or disabled for every single project. Here you can find the description how to [enable a module](../user-guide/projects/project-settings/modules/) within the project settings. +The BCF Module and the included IFC viewer can be enabled or disabled for every single project. Here you can find the description how to [enable a module](../user-guide/projects/project-settings/modules/) within the project settings. *The BCF Module is an OpenProject BIM Enterprise add-on. Please make sure, that you are already using the OpenProject BIM edition ([switch to the BIM edition](../installation-and-operations/bim-edition/))* - - ### Why can't I see a building model? There are many potential reasons why you can't see your building model. Please check out the most common reasons and their solution: @@ -141,9 +105,6 @@ There are many potential reasons why you can't see your building model. Please c - IFC file isn't uploaded yet or is invalid (please check the status of the uploaded file within the [IFC Model management area](ifc-viewer/#import-and-export-ifc-models)). - IFC file does not have any geometry (please check if your IFC file has some geometry) - - ### Where to find the version of my Revit add-in? To see which version of the Revit AddIn you are currently using, navigate to the OpenProject tab in the Revit taskbar and open the settings. Here you can see which version you are currently using. - diff --git a/docs/bim-guide/bim-issue-management/README.md b/docs/bim-guide/bim-issue-management/README.md index 281848d31732..7c99cf423f24 100644 --- a/docs/bim-guide/bim-issue-management/README.md +++ b/docs/bim-guide/bim-issue-management/README.md @@ -8,9 +8,7 @@ keywords: BIM, BCF, IFC, BIM Issue Management, BCF-Management # BIM issue management (BIM feature) -Within the *BCF-Module* you are able to manage *BIM Issues (BCF)*. All BIM Issues get stored as BCFs centrally and are available to every team member in real time. Below you find the most important features how to use the BCF Module to create, inspect and manage issues. - - +Within the *BCF-Module* you are able to manage *BIM Issues (BCF)*. All BIM Issues get stored as BCFs centrally and are available to every team member in real time. Below you find the most important features how to use the BCF Module to create, inspect and manage issues. ## What is a BIM issue? @@ -18,13 +16,11 @@ A BIM Issue is a special kind of work package to communicate directly within the The BIM Issue is not only a description of a problem, the view of the building model is stored within the issue as well. This includes the current selection, view , rotation & zoom of the model. -OpenProject BIM supports the standard of the ***BIM Collaboration Format (BCF)***. All BIM Issues which are created within another *Open BIM* Software can be imported to work with this issue within our project management solution. - - +OpenProject BIM supports the standard of the ***BIM Collaboration Format (BCF)***. All BIM Issues which are created within another *Open BIM* Software can be imported to work with this issue within our project management solution. ## Create a BIM issue -To create a BIM Issue you don't have to configure a new type of work package. Every work package (e.g. Task, Issue, Milestone, … ) can become a BIM Issue only by adding a viewpoint to the work package. +To create a BIM Issue you don't have to configure a new type of work package. Every work package (e.g. Task, Issue, Milestone, … ) can become a BIM Issue only by adding a viewpoint to the work package. There are two ways to create new BIM Issue: @@ -35,36 +31,26 @@ BIM-Issues always belong to a project and a building model. Therefore, you first Then, navigate to the BCF module in the project navigation. - - ![BCF-Module](OpenProject_BCF_Module.png) - - ### Create a new BIM issue -To create new BIM Issues, you have to open the Model - Viewer first and create the view you want to save within the BIM Issue (e.g. zoom, [rotate](../ifc-viewer/#how-to-rotate-the-building-model), [slice](../ifc-viewer/#how-to-slice-the-building-model), [select](../ifc-viewer/#how-to-select-elements), [hide](../ifc-viewer/#show-or-hide-models-or-elements-via-model-tree), … ). +To create new BIM Issues, you have to open the Model - Viewer first and create the view you want to save within the BIM Issue (e.g. zoom, [rotate](../ifc-viewer/#how-to-rotate-the-building-model), [slice](../ifc-viewer/#how-to-slice-the-building-model), [select](../ifc-viewer/#how-to-select-elements), [hide](../ifc-viewer/#show-or-hide-models-or-elements-via-model-tree), … ). -Click on the **+ Create new work package** and select the type of work package you want. +Click on the **+ Create new work package** and select the type of work package you want. ![Create a new BIM Issue](create-a-new-BIM-issue.png) - - Now you can see a detail view of the new Issue. Describe all necessary information to work on that task and add a viewpoint by clicking on the **"+ Viewpoint"**-Button. Now the current Viewpoint of the Building Model is added to the Issue. After saving your new BIM issue is created. *Within the viewpoint the current status of your building model is saved. So please check the view before - is there everything shown within the model viewer?* ![Create a viewpoint](Create-a-viewpoint.png) - - You also have the option of adding multiple viewpoints to a work package. Rotation, selection and visibility can be changed for every viewpoint to get a better model based communication. ![Adding multiple viewpoints](adding-multiple-viewpoints.png) - - ### Add a viewpoint to an existing work package The workflow of adding a viewpoint to an existing work package is similar to creating a new BIM Issue. To switch an existing work package to a BIM Issue just follow the steps: @@ -72,53 +58,32 @@ The workflow of adding a viewpoint to an existing work package is similar to cre Open the **BCF-Module** to see the building model. ![BCF Module](bcf_module.png) - - Make sure the "Model Viewer & Maps" - View or "Model Viewer & Table" - View is selected within the **OpenProject-Toolbar**. ![Model and work package view](model_maps_view.png) - - Now open the **work package Details** by double click on the work package ("my first work-package"). Now you are able to add a viewpoint like it is described above. - - - ## BIM issue handling (details view) The handling of BIM Issues is similar to the handling of work packages (including configuration of the attribute). To jump to a viewpoint of an existing BIM Issue the model viewer has to be activated (visible in the center of your screen) or you have to open the detail view of the work package. - - - ### Jump to a viewpoint with the details view If the Model viewer isn't shown yet, open the Detail - view of the BIM Issue and follow the Cube symbol of the preview. Now the model viewer opens and the viewpoint of the BIM Issue will be displayed. ![Display BIM Issue](display_bim_issue.png) - - - - ### Switch between different viewpoints -After creating multiple BIM Issues you are able to jump between different viewpoints easily. The "Viewer and Cards" - Mode shows all of your BIM Issues. With a single click at the preview of the BIM Issue, the model viewer changes immediately. - - +After creating multiple BIM Issues you are able to jump between different viewpoints easily. The "Viewer and Cards" - Mode shows all of your BIM Issues. With a single click at the preview of the BIM Issue, the model viewer changes immediately. ![Switch_Viewpoints](Switch_Viewpoints.gif) - - ### Configuration of BIM issues To create BIM Issues you don't have to configure additional work package types. Every existing work package can become a BIM Issue by adding a viewpoint. Before you can add a viewpoint to a work package, this work package must be enabled for viewpoints in the system administration. - - - ## View and find BIM issues (cards and list view) ### Overview @@ -127,93 +92,58 @@ You can switch between different View modes within the OpenProject toolbar. Just ![Switch View Mode](Swicht_View_Mode.gif) - - - ### Viewer and cards ![Viewer and Cards](Viewer_and_Cards.png) - - The detail view of every work package can be shown by different user actions. To open the viewpoint and see the description in the details view, just double click at the BIM Issue in the card view. After double click your current viewpoint in the model viewer will be reset and the viewpoint of the BIM Issue including all details will be displayed. To view only the detail view of the BIM issue without resetting the current view of the model, you can click on the work package number ("#…") or the "information icon" on the card. - - ### Cards mode Within the cards view you are not able to jump directly to a viewpoint. First you have to open the details view by using the "information icon" or the work package number ("#…") at the card. There you can find the "Cube" which leads you to the viewpoint within the appearing model viewer. ![Cards Mode](Cards-mode.png) - - - - - ### Viewer and table To open the BIM Issue in this mode just click at the work package in the table. By double click at the BIM Issue the viewpoint will be shown and the details will appear. The details of each work package can be shown without changing the current view of the model by single click at the work package ID. ![Viewer and Table](viewer-and-table.png) - - - - ### Table Within the table view you are not able to jump directly to a viewpoint. First you have to open the details view by using the "information icon" or the work package number ("#…") or double click at the work package. At the details view you can find the "Cube" which leads you to the viewpoint within the appearing model viewer. ![Table](table.png) - - - - - ## Filter BIM issues You are able to filter BIM Issues by using the filter button in the **OpenProject toolbar**. The filter is usable in every view. ![OpenProject Toolbar](OpenProject-toolbar.png) - - ![Filter BIM Issue](Filter-BIM-Issue.png) - - - ## BIM issues in work package module BIM Issues are also listed in the work package module. This supports you to manage your building project in the best way and get an overview of all issues. To separate work packages and BIM Issues we created a new filter which enables you to filter BIM Issues. ![BIM Issues and work packages](bim-issues-and-work-packages.png) - - - - - ## Import and export BCF issues using BCF -Within the BCF module you are able to upload BIM Issues which are created within other software and download already existing files to manage them within other BIM project management solutions. Just Click on the ***"Import"-Button*** or ***"Export"-Button*** within the OpenProject Toolbar. - - +Within the BCF module you are able to upload BIM Issues which are created within other software and download already existing files to manage them within other BIM project management solutions. Just Click on the ***"Import"-Button*** or ***"Export"-Button*** within the OpenProject Toolbar. ### Import of attributes -After importing a BCF Issue (or multiple Issues at the same time) from another software, OpenProject will match existing attributes and types of the work package. +After importing a BCF Issue (or multiple Issues at the same time) from another software, OpenProject will match existing attributes and types of the work package. If attributes of the imported BCF Issue can't be matched automatically (because they are not available within your project configuration), you are able to synchronize the values manually. ![Import BCF](import-bcf.png) - - **Currently the following attributes can be synchronized and matched:** - Title & Description @@ -229,20 +159,14 @@ If attributes of the imported BCF Issue can't be matched automatically (because - Due Date - Comments +After a successful matching of the attributes the topics will be displayed in OpenProject. - -After a successful matching of the attributes the topics will be displayed in OpenProject. - -![Successful BCF Import](successfull-bcf-import.png) - - +![Successful BCF Import](successfull-bcf-import.png) ![Imported BCF Issues](imported-bcf-issues.png) - - ### Outdated BCF issues -If there are more recent changes to the work package in OpenProject than in the imported BCF ("ModifiedDate"), the import will be rejected. +If there are more recent changes to the work package in OpenProject than in the imported BCF ("ModifiedDate"), the import will be rejected. ![Outdated BCF Issues](outdated-bcf-issues.png) diff --git a/docs/bim-guide/ifc-viewer/README.md b/docs/bim-guide/ifc-viewer/README.md index 7df28aac67fb..a71bae4e8617 100644 --- a/docs/bim-guide/ifc-viewer/README.md +++ b/docs/bim-guide/ifc-viewer/README.md @@ -10,7 +10,7 @@ keywords: BIM, BCF, IFC, Viewer OpenProject BIM includes a very powerful IFC viewer to show and interact with building models in 2D & 3D. -IFC-Files can be uploaded and shown directly within your Web-Browser without installing any additional software on your computer. +IFC-Files can be uploaded and shown directly within your Web-Browser without installing any additional software on your computer. ## Basics @@ -18,69 +18,44 @@ The BCF Module has included a very powerful IFC viewer. Here is a short overview ![IFC Viewer Overview](ifc-viewer-overview.png) - - 1. **IFC Model Viewer** to have a look at the building model directly within OpenProject BIM. 2. **IFC Model Tree** to see the IFC Model Structure and show / hide elements. -3. The **OpenProject toolbar** shows the most important user actions like creating new (BIM) issues, Import & Export BCF files, Change OpenProject View and upload & download IFC-Models +3. The **OpenProject toolbar** shows the most important user actions like creating new (BIM) issues, Import & Export BCF files, Change OpenProject View and upload & download IFC-Models 4. The **View Cube** to rotate the building model. 5. The **IFC-Viewer toolbar** to interact with the building model (e.g. change perspective, hide/ show elements, select elements & slice the building model) - - ## Import and export IFC models -Within the BCF module you are able to manage your IFC files. You are able to upload new building models and download already existing files. Just Click on the ***"IFC-Models"-Button*** within the OpenProject Toolbar. - - +Within the BCF module you are able to manage your IFC files. You are able to upload new building models and download already existing files. Just Click on the ***"IFC-Models"-Button*** within the OpenProject Toolbar. ![Import and Export IFC Models](import-and-export-ifc-models.png) - - To upload your first IFC model click on the green "+ IFC Model" - Button. A new explorer Window will be opened. Just navigate to the folder where your latest building model is saved. ![Import IFC Model](import-ifc-model.png) - - Select the file you want and confirm your upload. You also the choice to set the new model as "Default model". All default models (multiple models can be set as default) are initially shown if you reload the BCF module. You are able to change this setting later as well. ![Set Model as Default](set-model-as-default.png) - - After uploading a building model you get an overview of all models within the "model management". There you are able to see their current upload status, rename the model, delete or download the existing models. ![BIM Model Management](bim-model-management.png) - - If there already exist a model in project, you don't have to open the "model manager" to upload other models. You are able to add more models by clicking the "Add-Button" in the IFC Model Tree. ![Add a new IFC Model](add-a-new-ifc-model.png) - - **Remember:** If there are multiple models you are able to hide the whole model or single elements by using the checkbox within model tree. ![Hide_Model](Hide_Model.gif) - - - - - ## How to rotate the building model To rotate the IFC model you either left-click on the building viewer and ***rotate the building model by panning*** your cursor **or** use the ***View Cube*** in the right bottom corner for navigation. ![Model_Rotation](Model_Rotation.gif) - - - - ## IFC-viewer toolbar The IFC-Viewer toolbar has many functions which are described below. The user actions all relate to the viewer and can be started by clicking on the button. @@ -89,12 +64,10 @@ The IFC-Viewer toolbar has many functions which are described below. The user ac ![Reset View](reset-view.png) -If your building model (or objects within the model) is rotated, zoomed or cut and you want to reset your current view this function will help you. All you have to do is press the button once and your your view will be reset to the default. +If your building model (or objects within the model) is rotated, zoomed or cut and you want to reset your current view this function will help you. All you have to do is press the button once and your your view will be reset to the default. ![Reset_view_button](Reset_view_button.gif) - - ### 2D / 3D view ![2D View](2-d-view.png) @@ -103,13 +76,11 @@ If your building model can easily be shown in 2D or 3D. This function is very po ![2D_3D](2D_3D.gif) - - ### Orthographic view ![Orthographic Button](orthographic-button.png) -The default behavior of the OpenProject BIM Model Viewer is a perspective view. The perspective camera gives you more information about depth. Distant objects are smaller than nearby ones. This function changes from perspective view to orthographic view. The orthographic view is widely used in engineering. All objects appear at the same scale and parallel lines remain parallel. Also a unit length appears the same length anywhere on the screen. This makes it easier to assess the relative sizes. +The default behavior of the OpenProject BIM Model Viewer is a perspective view. The perspective camera gives you more information about depth. Distant objects are smaller than nearby ones. This function changes from perspective view to orthographic view. The orthographic view is widely used in engineering. All objects appear at the same scale and parallel lines remain parallel. Also a unit length appears the same length anywhere on the screen. This makes it easier to assess the relative sizes. ![Orthographic View](orthographic-view.png) @@ -121,8 +92,6 @@ This function allows you to reset the current zoom level and the position of the ![Fit View](fit-view.gif) - - ### First person perspective ![First Person Button](first-person-button.png) @@ -131,75 +100,49 @@ The first person perspective changes the way you interact with the building mode ![First_Person_Perspective](First_Person_Perspective.gif) - - - - ## How to slice the building model ![Slice Building Model](slice-building-model.png) -To have a deeper look within the building model you are able to slice the whole building. To start slicing click on the "***scissors symbol***" within the ***IFC-Viewer toolbar*** and left-click on an element which has the same angle you want to slice (you can edit this angle later as well). Now there are shown some arrows. Grab one and slice the model by dragging the arrow to the location you want. +To have a deeper look within the building model you are able to slice the whole building. To start slicing click on the "***scissors symbol***" within the ***IFC-Viewer toolbar*** and left-click on an element which has the same angle you want to slice (you can edit this angle later as well). Now there are shown some arrows. Grab one and slice the model by dragging the arrow to the location you want. ![Slice building model](Slice_building.gif) - - ## How to clear slices You are able to clear all slices by using the ***dropdown*** menu next to the "***scissors symbol***" within the ***IFC-Viewer-Toolbar***. ![slice-building-model](slice-building-model.png) - - ![Clear slices](clear_slices.png) - - - - ## How to select elements To select elements within the building model, you have to activate the selection mode by clicking on the highlighted toggle button placed in the ***IFC-Viewer toolbar***. After activating the selection mode you are able to select a single or multiple elements within the viewer by left click. Your individual selection won't be reset after leaving the selection mode. You are able to reset your current selection with the context menu (right click). ![Select Elements Button](select-elements-button.png) - - ![Select Elements](Select_elements.png) - - ## Show properties -You are able to see the basic properties of each element (e.g. the UUID) within OpenProject BIM. After using the "information" button a new tab named "Properties" will appear. +You are able to see the basic properties of each element (e.g. the UUID) within OpenProject BIM. After using the "information" button a new tab named "Properties" will appear. ![Show Properties Button](show-properties-button.png) ![Show Properties](show-properties.png) - - In order to inspect the information for individual objects, you have to use the context menu and simply select the "Inspect Properties" Menu item. All properties of the object will appear in the new tab. ![Inspect Properties](inspect-properties.png) - - -**But be careful!** The properties of the element you just clicked on are displayed. So make sure that there are no unwanted objects (e.g. window panes) in front of your desired object. - - +**But be careful!** The properties of the element you just clicked on are displayed. So make sure that there are no unwanted objects (e.g. window panes) in front of your desired object. ![Element Properties](element-properties.png) - - - - ## Show or hide elements via viewer -There are two options to hide elements via viewer. The **first possibility** is to use the ***IFC-viewer toolbar***. Within the toolbar you will find the **"hide-button"** +There are two options to hide elements via viewer. The **first possibility** is to use the ***IFC-viewer toolbar***. Within the toolbar you will find the **"hide-button"** ![Hide Elements Button](hide-elements-button.png) @@ -207,53 +150,34 @@ After the "Hide-Mode" has been activated, each element you click (left click) on ![Hide_elements_Viewer_rubber](Hide_elements_Viewer_rubber.gif) - - - - The **second possibility** to hide single elements via viewer is to use the context menu. Here you can find the function to hide single elements. ![Hide Elements Context Menu](hide-elements-context-menu.png) +You are always able to show hidden elements by using the **"Reset-View" Button** in the Viewer toolbar or use the **"Show All"** **Button** in the IFC Model tree. - -You are always able to show hidden elements by using the **"Reset-View" Button** in the Viewer toolbar or use the **"Show All"** **Button** in the IFC Model tree. - -Sometimes it is helpful to see elements in context to other elements but a good view can be disturbed by individual elements. For this case our viewer is able to show your building model in an "X-Ray"-Mode. The mode can be activated via the context menu and enables disturbing elements to be displayed in the context of other elements without covering them. +Sometimes it is helpful to see elements in context to other elements but a good view can be disturbed by individual elements. For this case our viewer is able to show your building model in an "X-Ray"-Mode. The mode can be activated via the context menu and enables disturbing elements to be displayed in the context of other elements without covering them. ![XRay](XRay.gif) - - ## Show elements in model tree To be sure if you hide or select the element you want you are able to jump to this element in the IFC Model tree. All you have to do is open the context menu on the desired element and select the "Show in Explorer" function. Now the Model tree folds out to the desired element. - - ![Show in Explorer](show-in-explorer.png) - - ## Show or hide models or elements via model tree If you have uploaded several IFC models of one building (e.g. one for each discipline - Architecture, Structural & MEP) and want to have a look at a single model or just want to hide specific elements, you are able to hide them by changing the status of the ***checkbox within the model tree.*** -The model tree can represent the structure of the building model in different ways. This means that entire models, storeys or even similar components can be hidden with a single click. - - +The model tree can represent the structure of the building model in different ways. This means that entire models, storeys or even similar components can be hidden with a single click. ![Hide_Model](Hide_Model.gif) - - ![Hide_building_storey](Hide_building_storey.gif) - - After switching to the "Classes" tab in the model tree, you can see the grouping of all elements by IFC classification. Whole groups can be hidden as well. In the example, all elements of the type "IFCWall" will be hidden. ![Hide_IFC_classes](Hide_IFC_classes.gif) - diff --git a/docs/bim-guide/revit-add-in/README.md b/docs/bim-guide/revit-add-in/README.md index 435b81ebd668..22ce61813e77 100644 --- a/docs/bim-guide/revit-add-in/README.md +++ b/docs/bim-guide/revit-add-in/README.md @@ -12,11 +12,8 @@ The *OpenProject Revit Add-In* allows you to use the open source project managem To download the latest version (v2.2.3) of our OpenProject Revit AddIn click here: [DOWNLOAD](https://github.com/opf/openproject-revit-add-in/releases/download/v2.3.3/OpenProject.Revit.exe) - - > **Note**: OpenProject BIM Issue Management is an Enterprise add-on and can only be used with [Enterprise cloud](../../enterprise-guide/enterprise-cloud-guide/) or [Enterprise on-premises](../../enterprise-guide/enterprise-on-premises-guide/). An upgrade from the free Community edition is easily possible. - ## Before usage Please check the following steps before using the OpenProject BIM edition. @@ -27,12 +24,8 @@ Please check the following steps before using the OpenProject BIM edition. If you can answer all questions with "yes" you are ready to start using our Revit Add-in. - - ## How to install - - ### System requirements The **OpenProject Revit AddIn** does not have any special system requirements. Autodesk Revit must be installed. The following versions of Revit are supported: @@ -42,151 +35,97 @@ The **OpenProject Revit AddIn** does not have any special system requirements. A - 2021 - 2022 - - ### Download the installer To download the setup application for the **OpenProject Revit AddIn**, click here: [DOWNLOAD](https://github.com/opf/openproject-revit-add-in/releases/download/v2.3.3/OpenProject.Revit.exe) You can find the latest version of our AddIn on [Github](https://github.com/opf/openproject-revit-add-in/releases/latest) as well. - - -### Installation +### Installation After you have downloaded the file, please run it to start the installation process. 1. **Start Installation process** - In the first screen, click *Next* to continue: + In the first screen, click *Next* to continue: ![Installation Step 1](installation-step-01.png) - - 2. **Select Revit Version** Next, select the Revit version you have installed locally and click *Next* to continue. You can select multiple versions: ![Installation Step 02](installation-step-02.png) - - 3. **Start Installation** Verify the installation steps are correct in the next screen and click on *Install* to install the **OpenProject Revit AddIn**: ![Installation Step 03](installation-step-03.png) - - 4. **Ready to use** Please wait a few moments for the installation to complete and then click *Finish* to finish the installation. - - ## How to update from an earlier version If you already have an earlier version installed, simply follow the same steps as for a new installation ([How to install](#how-to-install)). The existing **OpenProject Revit AddIn** will be updated. - - - - ## How to login After Installing the OpenProject BIM AddIn you can find a new tab within the Revit taskbar named "OpenProject". To login you have to open the **settings** first. ![Revit AddIn Settings](RevitAddIn_Settings.png) - - The settings will appear in a new tab. Within this tab you have to insert your own ***OpenProject BIM URL*** and confirm with "Go". Your OpenProject account is now linked to your Revit application and you can close the tab. ![OpenProject BIM Login](OpenProject_BIM_Login.png) - - - - - - ## How to select a project -After connecting your OpenProject BIM instance you are able to start working with your BCF Tasks within Revit. Firstly you have to open the **OpenProject Tab** in the taskbar and start the application. +After connecting your OpenProject BIM instance you are able to start working with your BCF Tasks within Revit. Firstly you have to open the **OpenProject Tab** in the taskbar and start the application. ![Start OpenProject BIM Add-in](OpenProject_BIM_Start.png) - - After starting the application a new tab will be created and you are able to select the Project you want to work in. ![OpenProject BIM - Select a Project](OpenProject_BIM_Projects.png) - - ## Working with BIM issues -To work with BIM Issues, please open our AddIn and navigate to our BCF Module. +To work with BIM Issues, please open our AddIn and navigate to our BCF Module. ![OpenProject BIM - BCF Module](OpenProject_BIM_BCF_Module.png) - - Within this module all existing work packages are displayed. Within this demo project no work package exist yet. To create a new one, click on the "add new work package"-Button. ![OpenProject BIM - Create BCF](OpenProject_BIM_Create_BCF.png) - - -An empty form for new work packages is now displayed. After adding a title and detailed information describing your issue, you have to add a viewpoint. This viewpoint saves your current view & selection of the building model (so check the rotation, selection and zoom of the model before). +An empty form for new work packages is now displayed. After adding a title and detailed information describing your issue, you have to add a viewpoint. This viewpoint saves your current view & selection of the building model (so check the rotation, selection and zoom of the model before). And the most important thing: **don't forget to save** the work package. ![OpenProject BIM - Add Viewpoint](OpenProject_BIM_Add_Viewpoint.png) - - - - To open a BIM Issue and restore the viewpoint you have to navigate to the BCF Module and just click on the BIM Issue you want to open. The behavior of working with the issues is almost the same like in OpenProject. ![OpenProject BIM - Issues](OpenProject_BIM_Issues.png) - - The handling of BIM Issues within Revit is similar to OpenProject BIM. There are only a few changes to the browser based version: - **Model Viewer**: To show a BIM Issue OpenProject BIM will use your Revit Model instead of the OpenProject BIM Model Viewer. - **Reduced View**: OpenProject BIM is now used in a smaller window. That's why you are currently using a reduced view. -- **Missing Browser Toolbar**: The Browser Toolbar is missing, so you might miss some common user actions (e.g. jump to previous page) - - - - +- **Missing Browser Toolbar**: The Browser Toolbar is missing, so you might miss some common user actions (e.g. jump to previous page) ## Synchronize tasks between Revit and OpenProject OpenProject BIM and Revit automatically synchronize all BIM work packages. You don't have to pay attention to anything else and you can manage your entire project directly in OpenProject. Whatever you do, users of OpenProject BIM edition will see any changes in the browser as well. - - ![OpenProject BIM - Synchronization](OpenProject_BIM_Synchronization.png) - - - - - - - - ## How to uninstall the OpenProject Revit add-in To remove the **OpenProject Revit AddIn** remove the AddIn like any other AddIn from Revit. First close any running instance of Revit. Then you'll have to enter the directory `C:\ProgramData\Autodesk\Revit\Addins\`. There you must delete the file `OpenProject.Revit.addin` and the folder `OpenProject.Revit`. After a restart of Revit, the **OpenProject Revit AddIn** is no longer available. - - ## Troubleshooting ### 'Your computer was protected by Windows' Error Message @@ -195,22 +134,16 @@ This is an internal Windows defense mechanism called *Windows SmartScreen*. When ![Installer Windows SmartScreen 1](installer-smart-screen-01.png) - - This can happen when a new release was not yet installed by many users, so internal Microsoft services do not yet know about the trustworthiness of the **OpenProject Revit AddIn** version. To continue, please click on the highlighted part labeled *Additional Information*, then you should see a screen like the following: ![Installer Windows SmartScreen 2](installer-smart-screen-02.png) - - Ensure that publisher says *OpenProject GmbH*. That means the installer was correctly signed by OpenProject and is safe to use. To proceed with the installation, click on *Run Anyway* and the installation will start. - - ## Reporting bugs You found a bug? Please [report it](../../development/report-a-bug) to our [OpenProject community](https://community.openproject.org/projects/revit-add-in). Thank you! diff --git a/docs/development/README.md b/docs/development/README.md index ef2bafb5b77f..aee88f742be9 100644 --- a/docs/development/README.md +++ b/docs/development/README.md @@ -12,8 +12,6 @@ We are pleased that you are thinking about contributing to OpenProject! This gui Please get in touch with us using our [development forum](https://community.openproject.org/projects/openproject/forums/7) or send us an email to info@openproject.org. - - ## Issue tracking and coordination We eat our own ice cream so we use OpenProject for roadmap planning and team collaboration. Please have a look at the following pages: @@ -28,34 +26,24 @@ We eat our own ice cream so we use OpenProject for roadmap planning and team col - [Submit a feature idea](submit-feature-idea) - - ## Development Environment Take a look at the bottom under Additional resources to see how to setup your development environment. - - ## Highlighting Development Environment To make it easier to distinguish a development instance, it is using a tinted website icon and modified app header. This behavior can be disabled by setting an environment variable `OPENPROJECT_DEVELOPMENT_HIGHLIGHT_ENABLED=false` (see also [documentation on configuration](../installation-and-operations/configuration/)). - - ## Branching model and development flow Please see this separate guide for the [git branching model and core development](git-workflow/). - - ## Development concepts We prepared a set of documentation concepts for an introduction into various backend and frontend related topics of OpenProject. Please see the [concepts main page](concepts/) for more. - - ## Translations If you want to contribute to the localization of OpenProject and its plugins you can do so on the [Crowdin OpenProject page](https://crowdin.com/project/openproject). Once a day we fetch those locales and automatically upload them to GitHub. Contributing there will ensure your language will be up to date for the next release! @@ -100,16 +88,13 @@ Instances of abusive, harassing, or otherwise unacceptable behavior may be repor This code of conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/), version 1.0.0, available at [contributor-covenant.org/version/1/0/0/](https://www.contributor-covenant.org/version/1/0/0/) - - ## OpenProject Contributor License Agreement (CLA) If you want to contribute to OpenProject, please make sure to accept our Contributor License Agreement first. The contributor license agreement documents the rights granted by contributors to OpenProject. [Read and accept the Contributor License Agreement here.](https://www.openproject.org/legal/contributor-license-agreement/) -# Additional resources - +## Additional resources * [Development environment for Ubuntu 18.04](development-environment-ubuntu) * [Development environment for Mac OS X](development-environment-osx) diff --git a/docs/development/accessibility-checklist/README.md b/docs/development/accessibility-checklist/README.md index d2aed2e1ed49..fec45596f77b 100644 --- a/docs/development/accessibility-checklist/README.md +++ b/docs/development/accessibility-checklist/README.md @@ -9,6 +9,7 @@ To help development teams prioritize accessibility implementation and remediatio ## 1. Perceivable - Using senses for web content (sight, hearing and/or touch) ### 1.1. Graphics + * All images, form image buttons, and image map hot spots have appropriate, equivalent alternative text. * Every image must have an alt attribute. * Images that do not convey content, are decorative, or contain content that is already conveyed in text are given null alt text (alt="") or implemented as CSS backgrounds. All linked images have descriptive alternative text. @@ -19,6 +20,7 @@ To help development teams prioritize accessibility implementation and remediatio * When video information is used, an audio description / alternative text is supplied ### 1.2. Relations / Context + * The reading and navigation order (determined by code order) is logical and intuitive. * Instructions do not rely upon shape, size, or visual location (e.g., "Click the square icon to continue" or "Instructions are in the right-hand column"). * Color is not used as the sole method of conveying content or distinguishing visual elements. @@ -31,17 +33,20 @@ To help development teams prioritize accessibility implementation and remediatio ## 2. Operable - Interface forms, controls, and navigation are operable ### 2.1. Keyboard usability + * All page functionality is available using the keyboard, unless the functionality cannot be accomplished in any known way using a keyboard (e.g., free hand drawing). * Page-specified shortcut keys and access keys (access key should typically be avoided) do not conflict with existing browser and screen reader shortcuts. * Keyboard focus is never locked or trapped at one particular page element. The user can navigate to and from all navigable page elements using only a keyboard. * All page functionality is available using the keyboard. ### 2.2. Enough time + * If a page or application has a time limit, the user is given options to turn off, adjust, or extend that time limit. * The content and functionality has no time limits or constraints. * If an authentication session expires, the user can re-authenticate and continue the activity without losing any data from the current page. ### 2.3. Navigation + * The web page has a descriptive and informative page title. * The navigation order of links, form elements, etc. is logical and intuitive. * Page headings and labels for form and interactive controls are informative. @@ -54,17 +59,21 @@ To help development teams prioritize accessibility implementation and remediatio ## 3. Understandable - Content and interface are understandable ### 3.1. Texts + * The language of the page is identified using the HTML lang attribute (``, for example). * Words that may be ambiguous, unknown, or used in a very specific way are defined through adjacent text, a definition list, a glossary, or other suitable method. ### 3.2. Predictable + * When a page element receives focus, it does not result in a substantial change to the page, the spawning of a pop-up window, an additional change of keyboard focus, or any other change that could confuse or disorient the user. * Navigation links that are repeated on web pages do not change order when navigating through the site. ### 3.3. Errors and help + * Required form elements or form elements that require a specific format, value, or length provide this information within the element's label. * Required fields are clearly marked. * Help and documents are available. ## 4. Robust - Content can be used reliably by a wide variety of user agents, including assistive technologies + * Markup is used in a way that facilitates accessibility. This includes following the HTML/XHTML specifications and using forms, form labels, frame titles, etc. appropriately. diff --git a/docs/development/application-architecture/README.md b/docs/development/application-architecture/README.md index e85cb725700d..15a23acfae9a 100644 --- a/docs/development/application-architecture/README.md +++ b/docs/development/application-architecture/README.md @@ -30,30 +30,28 @@ flowchart TD gih["GitHub (gih)"] gil["GitLab (gil)"] cal["Calendar (cal)"] - O["API integrations (api)"] + O["API integrations (api)"] W["Outgoing webhooks"] -end + end subgraph services[Internal Services] direction TB - M[Memcached] - P[PostgreSQL] - S[Object storage or NFS] - email["Email gateways (eml)"] + M[Memcached] + P[PostgreSQL] + S[Object storage or NFS] + email["Email gateways (eml)"] end - openproject <-->|"TCP requests"| services openproject -->|"HTTPS requests"| integrations loadbalancer <-->|"HTTPS requsts"| integrations subgraph localclients[Local Client / User device] direction TB - browser - A1 - A2 - -end + browser + A1 + A2 + end ``` ## Involved services @@ -79,14 +77,14 @@ end | API integrations | Structural access to OpenProject through API endpoints. Optional access to users and third party organizations depending on authorized scopes | HTTPS | (Optional) R
    (Optional) W
    | [API configuration](../../system-admin-guide/api-and-webhooks/) | | Outgoing Webhooks | Outgoing requests for changes within the application | HTTPS | R (Outgoing webhook data) | [Webhook configuration an administration](../../system-admin-guide/api-and-webhooks/#webhooks) | -# Software +## Software OpenProject is developed as a GPLv3 licensed, open-source software. The software core is developed and maintained using [GitHub](https://github.com/opf/openproject/). OpenProject is available as several versions: - [Community Edition](https://www.openproject.org/community-edition/) - [Enterprise on-premises and Enterprise cloud](https://www.openproject.org/enterprise-edition/) -# Environments +## Environments OpenProject is continuously tested, developed, and distributed using the following environments @@ -100,23 +98,23 @@ OpenProject is continuously tested, developed, and distributed using the followi | Production
    (Helm chart) | [Official public OpenProject Helm charts](../../installation-and-operations/installation/helm-chart/)
    Stable releases | Stable releases (configurable through container tags) | Updates to Helm chart are manual, underlying deployment uses OpenProject docker images | | PullPreview | Temporary instances for development of features scope to a pull request. | Feature branches | Automatically deployed when developers/QA request a pull preview instance by labelling pull requests with the `PullPreview` tag. | -# Patch and change management +## Patch and change management OpenProject uses the Community instance [https://community.openproject.org](https://community.openproject.org) for managing the application lifecycle. For a full overview on the process of developing changes to the application, please see our [product development guide](../product-development-handbook/). This section summarizes all relevant information about the process for providing releases. -## Current release +### Current release The [release notes](../../release-notes) provide a list of all the releases including the current stable one. Administrators can identify their currently deployed version of OpenProject in the [Administration information page of their installation](../../system-admin-guide/information). -## Upcoming releases +### Upcoming releases See the [Roadmap](https://community.openproject.org/projects/openproject/roadmap) for the overview of the upcoming stable releases. -## Versioning +### Versioning OpenProject follows [Semantic Versioning](https://semver.org/). Therefore, the version is a composition of three digits in the format of e.g. 0.1.1 and can be summarized as followed: @@ -140,7 +138,7 @@ This list is not conclusive but rather serves to highlight the difference to the
    -## Version tracing in containers and packages +### Version tracing in containers and packages OpenProject embeds some release information into the packages and containers to ensure they are traceable. For all containers, the following files exist under `/app`. For packages, these files reside under `/opt/openproject/` and `/opt/openproject/config`, depending on the used version. @@ -149,43 +147,43 @@ OpenProject embeds some release information into the packages and containers to - **PRODUCT_VERSION** Commit of the flavour/product version. In case of the [openDesk container](https://hub.docker.com/r/openproject/open_desk), contains a reference to the openDesk repository https://github.com/opf/openproject-open_desk - **BUILDER_VERSION** Internal reference of the building CI repository that we use to create and publish the images. -## Support of releases +### Support of releases For the community edition, only the current stable release is maintained. The [Enterprise on-premises](https://www.openproject.org/enterprise-edition) provides extended maintenance. We recommended to update to a new stable release as soon as possible to have a supported version installed. To that end, OpenProject will show an information banner to administrators in case a new stable release is available. -## Change history +### Change history All changes made to the OpenProject software are documented via work packages bundled by the version. The [Roadmap view](https://community.openproject.org/projects/openproject/roadmap) gives a corresponding overview. A release is also summarized in the [release notes](../../release-notes). -## Distribution +### Distribution OpenProject is distributed in [various formats](../../installation-and-operations/installation). Manual installation based on the code in GitHub is possible but not supported. -## Versions in the codebase +### Versions in the codebase The version is represented as [tags](../git-workflow/#tagging) and [branches](../git-workflow/#branching-model) in the repository. The version is also manifested in the [version.rb](https://github.com/opf/openproject/blob/dev/lib/open_project/version.rb). -# Components +## Components A typical installation of OpenProject uses a web server such as NGINX or Apache to proxy requests to and from the internal [Puma](https://puma.io/) application server. All web requests are handled internally by it. A background job queue is used to execute longer running data requests or asynchronous communications. -## Puma application server +### Puma application server OpenProject uses a Puma application server to run and handle requests for the Rails stack. All HTTP(S) requests to OpenProject are handled by it. Puma is a configurable multi-process, multithreading server. The exact number of servers being operated depends on your deployment method of OpenProject. See the [process control and scaling documentation](../../installation-and-operations/operation/control/) for more information. -## External load balancer or proxying server +### External load balancer or proxying server A web server is expected to handle requests between the end-user and the internal Puma application server. It is responsible for e.g., terminating TLS and managing user-facing HTTP connections, but depending on the deployment, also for serving static assets and certain caching related functionality. This server performs a proxy-reverse proxy pattern with the internal application server. No external connections are allowed directly to the Puma server. -## Rails application +### Rails application The core application, built on the Ruby on Rails framework, handling business logic, database operations, and user interactions. Utilizes the Model-View-Controller (MVC) design pattern. Follows [secure coding guidelines](../concepts/secure-coding/) for authentication, session management, user input validation, and error logging. The application aims to return to the MVC pattern using Rails, Hotwire, and ViewComponents for UI element composition. This strategy aims for higher usability and efficient development. -## Angular frontend +### Angular frontend Some of the responses of the application include a frontend application approach using Angular. These pages communicate with a REST API to receive data and perform updates. An example of this is the work packages module. Requests within the module are handled completely in the frontend, while boundary requests are forwarded to the Rails stack, returning to a classical request/response pattern. @@ -193,7 +191,7 @@ All requests to the application are still handled by Rails. In some of the respo In the following, we'll take a look at the different components at use in the application stack of OpenProject as well as concrete examples on how these components interact. -### Exemplary frontend view request +#### Exemplary frontend view request Let's take a look at how the request to `/projects/identifier/work_packages` would be handled by Rails and Angular (excluding any external actual HTTP requests to the web server) @@ -209,7 +207,7 @@ This will result in a page on which the majority of the content has been rendere This approach has the significant disadvantage to go through the entire Rails stack first to output a response that is mostly irrelevant for the Angular application, and both systems (Rails and Angular) need a somewhat duplicated routing information. The long-term goal is to move to a single-page application and avoid the first two steps. -### Exemplary Rails view request augmented by Angular +#### Exemplary Rails view request augmented by Angular A response that is fully controlled by Rails but extended by some Angular components in the frontend might look as follows. Let's take a look at the request to [edit a type's form configuration](../../system-admin-guide/manage-work-packages/work-package-types/#work-package-form-configuration-enterprise-add-on) `/types/1/edit/form_configuration`: @@ -225,7 +223,7 @@ A response that is fully controlled by Rails but extended by some Angular compon ![Exemplary form configuration](form-configuration.png) -# Evolution of the application +## Evolution of the application Historically, OpenProject has been forked from [Redmine](https://www.redmine.org/) and modified from a primarily software-development focused flow into a general project management application suite. A Ruby on Rails monolith was used to serve the entire application, frontend and API. Javascript was used to extend some of the functionality with Prototype.js and jQuery on existing, Rails-rendered pages. diff --git a/docs/development/code-review-guidelines/README.md b/docs/development/code-review-guidelines/README.md index e56e67d0d2cb..21b6ef5b7f54 100644 --- a/docs/development/code-review-guidelines/README.md +++ b/docs/development/code-review-guidelines/README.md @@ -2,8 +2,6 @@ This guide serves as a foundation on how to prepare your work for and perform code reviews for OpenProject. - - ## Preparing your pull request ### Coding style @@ -20,8 +18,6 @@ The same is true for eslint. Your editor will likely have support for eslint che For automatically linting your files on committing them, please have a look at [Lefthook](https://github.com/evilmartians/lefthook). You can install these rules by using `bundle exec lefthook install`. - - ### Structure of commit messages - First line: less than 72 characters, this is when GitHub shows ‘…’ @@ -30,16 +26,12 @@ For automatically linting your files on committing them, please have a look at [ See the [Git Book](https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project#Commit-Guidelines). - - ### Pull Request description - Provide a clear title, optionally linking to a work package - Add steps necessary to review / reproduce / set up development data for testing - Reference the change in the OpenProject community, if ticket exists. If no ticket exists, double check if one is really optional. - - ### Testing - All GitHub workflow actions must be green on continuous integration @@ -50,8 +42,6 @@ See the [Git Book](https://git-scm.com/book/en/v2/Distributed-Git-Contributing-t - Translations: Never use a specific translation string in a test. We might want to change them in the future and do not want to fix tests when we do. - We are aware that there are some flickering specs in our codebase, that might fail randomly. We are actively trying to fix those. If you encounter test failures in code that you have not touched, try re-running the specs. - - ### Security considerations Every developer and reviewer should read the Rails Security Guide as well as the OWASP top ten. @@ -60,17 +50,13 @@ Every developer and reviewer should read the Rails Security Guide as well as the [OWASP Top 10](https://owasp.org/www-project-top-ten/) - - ### Changelog - All changes made to the OpenProject software are managed and documented via work packages in the [OpenProject project](https://community.openproject.org/projects/openproject/). - The [Roadmap view](https://community.openproject.org/projects/openproject/roadmap) gives a corresponding overview. -- For any nontrivial or pure maintenance changes (Gem bumps etc.), please ensure you have a corresponding ticket you link to in the form of `OP## `or `https://community.openproject.org/work_packages/ID` in your pull request. +- For any nontrivial or pure maintenance changes (Gem bumps etc.), please ensure you have a corresponding ticket you link to in the form of `OP##` or `https://community.openproject.org/work_packages/ID` in your pull request. - To prevent inconsistencies and avoid redundant work there is no additional change log in the source code. Releases will contain a changelog of the publicly visible tickets in the GitHub releases pages, as well as [on our release notes](../../release-notes/). - - ### Marking your code as reviewable Before requesting a review, double check your own changes: @@ -86,22 +72,16 @@ Wait for a reviewer to start. If you get feedback or requested changes, do not t Try to respond to every feedback and resolve feedback that you addressed already. Re-request a review from the same person if you addressed all remarks. - - ## Reviewing You've found a pull request you want to review. Here is how to do it: - - ### Timeliness Reviewing code from your colleagues has higher priority than picking up more work. When you start your day, or in between working on other topics, please check the above link if there is any review requested. If a review is left untouched, feel free to request a review from a group or link the pull request in question in the developers element channel. - - ### Taking a review If you're ready to perform a review for a pull request, do these things: @@ -110,16 +90,12 @@ If you're ready to perform a review for a pull request, do these things: - If there is a linked ticket that has an appropriate status workflow, set it to `in review` and assign yourself - Optionally, request yourself as a reviewer - - ### Correctness As a reviewer, your job is not to make sure that the code is what you would have written – *because it will not be*. Your job as a reviewer of a piece of code is to make sure that the code as written by its author is correct. Try to think of edge cases when testing or evaluating the code, double check the test coverage. But do not frown if you merged the pull request and something broke after all. This is the learning path to avoiding this mistake on the next attempt. Not doing a review in the first place will not move you forward either. - - ### Language Keep in mind that we're all trying to do the correct thing. Be kind and honest to one another, especially since our reviews are public for everyone to see. @@ -127,8 +103,6 @@ Keep in mind that we're all trying to do the correct thing. Be kind and honest t - Prefer questions instead of demands - When in doubt, ask for a meeting to clarify things before assuming someone made a mistake. - - ### Testing Verify that the appropriate tests have been added as documented above. @@ -141,7 +115,6 @@ If possible, add smaller documentation changes right away. If there are breaking changes (e.g., to permissions, code relevant for developers), add them to the release notes draft for the release or create a new draft if none exists yet. - ## Other - For external contributions: Check whether the author has signed a [Contributor License Agreement](../#openproject-contributor-license-agreement-cla) and kindly ask for it if not. @@ -150,8 +123,6 @@ If there are breaking changes (e.g., to permissions, code relevant for developer - Adding Gems: When adding gems, make sure not only the Gemfile is updated, but also the Gemfile.lock. - - ## Readability The reviewer should understand the code without explanations outside the code. @@ -160,8 +131,6 @@ The reviewer should understand the code without explanations outside the code. *You should not rush through a code review – but also, you need to do it promptly. Your coworkers are waiting for you.* - - ## Completing the review Once you've completed the review, you might have left feedback for the developer. In that case: @@ -169,24 +138,18 @@ Once you've completed the review, you might have left feedback for the developer - Publish the review - If any, assign the linked work package back to the developer and set to `in development` - - If there are no change requests, perform these steps: - approve the pull request - merge it using the `Merge pull request` button. - If there is a linked ticket, set it to merged (or closed for an Implementation ticket) and unassign yourself or the developer. - - **Why merge, not squashing?** We do not use squashing to retain any commit information of the original developer, which might contain valuable information. If there are a lot of bogus commits, we squash them on the PR first and then merge them. Having all information about a change is deemed more important than a strictly linear history. The only exception to this rule are single commit pull requests, which can be applied to dev using `Rebase and merge` instead. - - ## Citations [Things everyone should do: code review](https://blog.csdn.net/zhangmike/article/details/30198411) diff --git a/docs/development/concepts/README.md b/docs/development/concepts/README.md index fa6ec0ec7352..e41d5fc66eda 100644 --- a/docs/development/concepts/README.md +++ b/docs/development/concepts/README.md @@ -23,6 +23,3 @@ Please choose an area that you would like to read about: | [Resource changesets](resource-changesets) | How is change tracked to resources in the frontend? How to save the changes. | | [Inline editing](inline-editing) | How does inline editing and the edit field functionality work in OpenProject? | | [Queries and QuerySpace](queries) | What is the Query API concept and how is it used in the frontend? | - - - diff --git a/docs/development/concepts/application-architecture/README.md b/docs/development/concepts/application-architecture/README.md index 7d446a373357..0e48122469fa 100644 --- a/docs/development/concepts/application-architecture/README.md +++ b/docs/development/concepts/application-architecture/README.md @@ -3,6 +3,6 @@ sidebar_navigation: title: Application architecture --- - +# Application architecture This guide has been integrated into the [application architecture documentation](../../application-architecture/). diff --git a/docs/development/concepts/dynamic-forms/README.md b/docs/development/concepts/dynamic-forms/README.md index 5d6c0dfd71da..f385c5fab80c 100644 --- a/docs/development/concepts/dynamic-forms/README.md +++ b/docs/development/concepts/dynamic-forms/README.md @@ -5,14 +5,10 @@ description: An introduction on how to generate forms from an API form object keywords: concept, forms, dynamic forms, schemas --- - - # Dynamically generated forms Starting in OpenProject 11.3.0, the frontend application received a new mechanism to dynamically generate HTML forms from an APIv3 form response. The form response contains the model being changed/created and [a schema resource](../resource-schemas/) to describe the attributes of the resource. - - ## Key takeaways Dynamic forms are wrappers around the APIv3 form and schema objects to render a full HTML form based on the attribute definitions returned by the API. @@ -21,10 +17,7 @@ Dynamic forms are wrappers around the APIv3 form and schema objects to render a The following guides are related: -- [Schema resources](../resource-schemas/) - - - +- [Schema resources](../resource-schemas/) ## API overview @@ -32,8 +25,6 @@ Let us take a look at the new projects form API response to get an overview of h With an [access token or other means of API authentication](../../../api/introduction/#authentication), send a `POST` to `/api/v3/projects/form`. This will return a HAL form response that looks something like this: - - ```json5 { "_type": "Form", @@ -77,8 +68,6 @@ With an [access token or other means of API authentication](../../../api/introdu } ``` - - The form has four important segments: - **_embedded.payload**: This is the project being created. When you POST to the form, any payload you post will be applied to that project. It is not yet saved, but will transparently show you what the project _would_ look like if you saved it. @@ -86,9 +75,7 @@ The form has four important segments: - **_embedded.validationErrors**: This object contains any references to attributes in the payload that are currently erroneous, and a human-readable message. In the example above, the required _name_ of the project is missing. - **_links**: The links section contains HAL links and actions on the form resource itself. For example, it has a `validate` link to validate any pending changes made by the user. If the form has no validation errors, it will show a `commit` link to save the changes to the database. As the example form is invalid, this link is not present. - - -# Frontend usage +## Frontend usage Using the dynamic form is incredibly easy once you have a backend that provides a form resource with an embedded schema. @@ -98,13 +85,10 @@ The dynamic form component will request the form for you, render the form, and h In case of the projects component, there is a `fieldsSettingsPipe` that allows you to override parts of the rendering. For projects, [it is used](https://github.com/opf/openproject/blob/dev/frontend/src/app/features/projects/components/projects/projects.component.ts#L34-L44) hiding the `identifier` field of the project which is handled by the backend. - - -## Basic use case +### Basic use case For the most basic use case, simply place the `DynamicFormsModule` into your module imports and use the component as follows: ```html ``` - diff --git a/docs/development/concepts/hal-resources/README.md b/docs/development/concepts/hal-resources/README.md index 6e3b33a15f19..9519c460b82f 100644 --- a/docs/development/concepts/hal-resources/README.md +++ b/docs/development/concepts/hal-resources/README.md @@ -22,8 +22,6 @@ HAL resources are the frontend counterpart to the `HAL+JSON` API of OpenProject. HAL resources on the frontend have no explicit prerequisite on our frontend. You will likely want to take a look at the [API documentation and the section on HAL+JSON](../../../api/introduction). - - ## Primer on HAL JSON The JSON response in HAL standard can contain these things: @@ -32,22 +30,18 @@ The JSON response in HAL standard can contain these things: - Related HAL resources under `_links` that can be individually requested from the API (e.g., the link to a project the resource is contained in). Links often have a `title` attribute that is sufficient to render what the value of the link is. - Embedded HAL resources under `_embedded`. These are link properties themselves, but whose HAL JSON has been embedded into the parent JSON. You can think of this as calling the API and integrating the JSON response into the parent. This saves an additional request for resources that are often needed. - - -The following is an example HAL JSON for a work package as it is retrieved by the API. This response is abbreviated, you can see the full response of [#34250 on our community](https://community.openproject.org/api/v3/work_packages/34250). You will see the three sections: +The following is an example HAL JSON for a work package as it is retrieved by the API. This response is abbreviated, you can see the full response of [#34250 on our community](https://community.openproject.org/api/v3/work_packages/34250). You will see the three sections: 1. Immediate properties within the JSON such as `_type`, `id`, `lockVersion`, `description`. There are more properties like this, they are scalar values of the work package that are not linked to other resources 2. The `_links` section. It contains two sorts of links. For other resources such as `_links.project` and `_links.status`. Each resource link contains an `href` and most often a `title` attribute to provide a human readable name of the linked resource. - The other type of links are the action links such as `update` or `updateImmediately` which are annotated with the HTTP method to use for these actions. + The other type of links are the action links such as `update` or `updateImmediately` which are annotated with the HTTP method to use for these actions. 3. The `_embedded` section. It contains `_links` that were embedded, i.e., have their own full JSON response included into the resource. This prevents additional requests, but increases the JSON payload and rendering complexity. The frontend cannot decide which resources to embed, this is controlled by the backend and depends on the endpoint used. For example, resource collection endpoints will usually not embed links. - - ```json5 { "_type": "WorkPackage", @@ -131,14 +125,8 @@ The following is an example HAL JSON for a work package as it is retrieved by th } ``` - - In this linked example, only the `status` and `project` links and embedded resources were kept, as well as some work package properties removed. - - - - ## HalResourceService On to loading the JSON resources from the API and turning them into usable class instances. This is the job of the the [`HALResourceService`](https://github.com/opf/openproject/tree/dev/frontend/src/app/features/hal/services/hal-resource.service.ts). It has two responsibilities: @@ -146,20 +134,14 @@ On to loading the JSON resources from the API and turning them into usable class 1. It uses the Angular `HTTPModule` for performing API requests to the APIv3 2. It turns the responses of these requests (or HAL JSON generated in the frontend) into a HAL resource class - - ### Performing requests against HAL API endpoints The service has HTTP `get`, `post`, `put`, etc. methods as well as a generic `request` method that accept an URL and params/payload, and respond with an observable to the JSON transformed into a HAL resource. - - ### Error Handling For errors returned by the HAL API (specific error `_type` response in the JSON) or when erroneous HTTP statuses are being returned, the `HALResourceService` will wrap these into `ErrorResources` for identifying the cause and potentially, additional details to present to the frontend. This is used for example when saving work packages and validation errors occur. The validations are being output in details for individual attributes. - - ## Linked HAL resources The `_links` entries of a HAL resource can have a `url`, `method`, and `title` property. They can also be `templated` if the link needs to be filled out by the frontend (e.g., to set a related ID to pass into it). @@ -209,8 +191,6 @@ Instead of explicitly loading embedded resources, the frontend now usually uses However, there are still use cases where `.$load()` is used and the resource is mutated. - - ## HAL resource builder In order to turn the JSON properties from `_embedded` and `_links` into writable properties on the HAL resource, there is a set of functions called the [`HAL resource builder`](https://github.com/opf/openproject/tree/dev/frontend/src/app/features/hal/helpers/hal-resource-builder.ts). It will take care of: @@ -225,16 +205,14 @@ In order to turn the JSON properties from `_embedded` and `_links` into writable The frontend doesn't really use this anymore due to it boiling down to a large mutable object. Instead, we use `ResourceChangesets` to modify resources and save them. [Click here to see the separate concept on them](../resource-changesets). - - ## 🔗 Code references - [`HALResourceService`](https://github.com/opf/openproject/tree/dev/frontend/src/app/features/hal/services/hal-resource.service.ts) for loading and turning JSON responses into HAL resource classes - [`halResource.config.ts`](https://github.com/opf/openproject/tree/dev/frontend/src/app/features/hal/services/hal-resource.config.ts) for identifying what types in the JSON response and its members/links are being turned into which classes. - [`HalResource`](https://github.com/opf/openproject/tree/dev/frontend/src/app/features/hal/resources/hal-resource.ts) the base HAL resource class -- [`HAL resource builder`](https://github.com/opf/openproject/tree/dev/frontend/src/app/features/hal/helpers/hal-resource-builder.ts) used for wiring up the links and embedded JSON properties into members of the HAL resource classes +- [`HAL resource builder`](https://github.com/opf/openproject/tree/dev/frontend/src/app/features/hal/helpers/hal-resource-builder.ts) used for wiring up the links and embedded JSON properties into members of the HAL resource classes ## Discussions - Due to the dynamic properties of the HAL resource, it traditionally has an index map to `any` which is the source of many typing issues and in turn, quite a number of bugs: [hal-resource.ts](https://github.com/opf/openproject/blob/dev/frontend/src/app/features/hal/resources/hal-resource.ts#L63) -- The way HAL resources work by embedding and allowing to load +- The way HAL resources work by embedding and allowing to load diff --git a/docs/development/concepts/infrastructure/README.md b/docs/development/concepts/infrastructure/README.md index 2c97dc1f3588..9198b0a5272a 100644 --- a/docs/development/concepts/infrastructure/README.md +++ b/docs/development/concepts/infrastructure/README.md @@ -12,6 +12,4 @@ OpenProject is an open-source core and available for users and customers as thre - the on-premises [Community edition](https://www.openproject.org/download-and-installation/) and [Enterprise on-premises edition with Enterprise support](https://www.openproject.org/enterprise-edition/) which runs on your own hardware - the [Enterprise cloud](https://www.openproject.org/enterprise-edition/#hosting-options) hosted distribution which is hosted and maintained by OpenProject - ## Infrastructure architecture - diff --git a/docs/development/concepts/inline-editing/README.md b/docs/development/concepts/inline-editing/README.md index 1334f93543e8..3bf93fa68e88 100644 --- a/docs/development/concepts/inline-editing/README.md +++ b/docs/development/concepts/inline-editing/README.md @@ -21,8 +21,6 @@ Inline editing is a core functionality of work packages and other attributes. - can be used for work packages and other HAL resources that have a schema - `DisplayField` and `EditField` are two separate sets of classes to render attributes based on their schema type - - ## Prerequisites In order to understand Inline Editing, you will need the following concepts: @@ -33,14 +31,10 @@ In order to understand Inline Editing, you will need the following concepts: - [Changesets](../resource-changesets) - - ## Components overview In order to understand the different modes of the inline edition functionality, we will first look at the components and code that handle displaying of resource attributes, the display fields. - - ### Display fields The display fields handle showing read-only representation of a resource's attribute. For example, the work package table may contain very different kinds of attributes: A progress bar, bare text fields, formatted date fields and the like. @@ -77,8 +71,6 @@ In the frontend, multiple display field classes exist and the [`DisplayFieldServ With a resource and its schema present, there are multiple ways to render a display field for a given attribute. - - #### Rendering in plain JavaScript: `DisplayFieldRenderer` Since parts of the application are rendered in plain JavaScript (such as the work package table), most display fields are actually rendered explicitly to a DOM element through the [`DisplayFieldRenderer#render`](https://github.com/opf/openproject/blob/dev/frontend/src/app/shared/components/fields/display/display-field-renderer.ts) method. You will only need the resource with its schema loaded and the attribute name. @@ -103,18 +95,15 @@ export class ExampleComponent implements OnInit { .work_packages .id(this.workPackageId) .get() - .subscribe(workPackage => { - - const fieldRenderer = new DisplayFieldRenderer(injector, 'table'); - const displayElement = fieldRenderer.render(workPackage, 'status', null); - this.elementRef.nativeElement.appendChild(displayElement); + .subscribe(workPackage => { + const fieldRenderer = new DisplayFieldRenderer(injector, 'table'); + const displayElement = fieldRenderer.render(workPackage, 'status', null); + this.elementRef.nativeElement.appendChild(displayElement); }); } } ``` - - The third parameter of the `render` method is to provide a changeset. This allows to render the value not from the pristine work package, but from a temporary changeset of the work package: ```typescript @@ -122,8 +111,6 @@ The third parameter of the `render` method is to provide a changeset. This allow const changeset = new WorkPackageChangeset(workPackage); ``` - - #### Rendering as angular component: `DisplayFieldComponent` To render an attribute of a HAL resource explicitly, a display field can be used through the [`DisplayFieldComponent`](https://github.com/opf/openproject/blob/dev/frontend/src/app/shared/components/fields/display/display-field-renderer.ts). In most cases, you will not render the display field alone as it would expect to inline editable. This is why when it's used, it often explicitly disables the writable CSS styles with `writable: false` set. @@ -143,21 +130,17 @@ This will result in the work package status field being rendered including its s The `DisplayFieldComponent` will internally use the `DisplayFieldService` to find the matching field for the `Status` type and manually render the field to an inner HTML element. - - ### Edit fields The editable counterpart to a display field that renders the actual HTML form elements (A text or number input field, a boolean checkbox, or a WYSIWYG editor area). Edit fields are also working on a single attribute of a resource. The schema property `Type` will again determine the component type to render. - - #### `EditFieldComponent` The main component that handles rendering of the actual `` fields of the edit fields is the `EditFieldComponent`. It is subclassed for every type of edit fields, such as the `TextEditFieldComponent` or `FloatEditFieldComponent`, and so on. You can find all edit field types in the [Angular fields module](https://github.com/opf/openproject/tree/dev/frontend/src/app/shared/components/fields/edit/field-types). -##### The `EditFieldComponents` operates on a changeset of the resource that's being edited. All changes are being written into this changeset, so they can be aggregated and saved, or reset on an individual level. +The `EditFieldComponents` operates on a changeset of the resource that's being edited. All changes are being written into this changeset, so they can be aggregated and saved, or reset on an individual level. It is never directly used from within a template, but through a service that passes in the appropriate inputs. We will take a deeper look at this service later and the reasoning behind it. @@ -167,8 +150,6 @@ Inline-editing is usually connected to not only a single, but multiple fields of The `EditForm` logically groups together multiple field elements very similar to how a `
    ` tag encapsulates a set of inputs. It is tied to a (HAL) `resource` input. - - It has multiple responsibilities: - receives registration of fields within the form @@ -176,18 +157,12 @@ The `EditForm` logically groups together multiple field elements very similar to - handles submission of changes to the resource - activates erroneous fields after unsuccessfully trying to saving. - - #### EditableAttributeField The `EditableAttributeField` contains the logic to toggle between the *display* and *edit* states of a single attribute for the resource. The field will try to register to a parent form by injecting it through its constructor. Only fields within an `EditForm` parent are editable. - - The EditableAttributeField basically contains only two HTML elements that it wraps. These are used for the `display` and `edit` modes. Each is handled by their own `DisplayField` and `EditField` classes and components, as we will detail in the following. - - #### Editing portals OpenProject often renders Angular components in manually rendered DOM, prominently so in the work package table for improved rendering time. This is from the time the project was still using AngularJS and large scale rendering components was quite slow. @@ -216,7 +191,7 @@ export class ExampleComponent implements OnInit { .work_packages .id(this.workPackageId) .get() - .subscribe(workPackage => { + .subscribe(workPackage => { return this.editingPortalService.create( @@ -232,8 +207,6 @@ export class ExampleComponent implements OnInit { } ``` - - #### Edit field handler There is one more class involved in this stack, the `EditFieldHandler`. It implements an adapter pattern to break the connection between the input-only characteristics of the `EditFieldComponent` and the handling of events towards an outer wrapper such as the `EditForm`. They are regular classes that handle events from the `EditFieldComponent` to make them reusable in cases where, for example, an `EditForm` does not exist. @@ -242,8 +215,6 @@ Any user event that should trigger saving or resetting of the field is being han An example where this comes into play is the [`CustomText`](https://github.com/opf/openproject/tree/dev/frontend/src/app/shared/components/grids/widgets/custom-text/custom-text.component.ts) widget of the dashboards and my page, which use the `` manually and pass in a handler that handles saving of these widgets without access to an edit form. - - ### 🔗 Code references - [`EditForm`](https://github.com/opf/openproject/blob/dev/frontend/src/app/shared/components/fields/edit/edit-form/edit-form.ts) base class @@ -257,16 +228,10 @@ An example where this comes into play is the [`CustomText`](https://github.com/o - [`WorkPackageFullViewComponent`](https://github.com/opf/openproject/blob/dev/frontend/src/app/features/work-packages/routing/wp-full-view/wp-full-view.html) Work package full view template that uses the `edit-form` attribute to create a form for the work package full view (as seen in the Gif above) - [`ProjectDetailsComponent`](https://github.com/opf/openproject/blob/dev/frontend/src/app/shared/components/grids/widgets/project-details/project-details.component.html) Exemplary widget template that uses the form for project attributes - - - - ## Minimal example The [`ProjectDetailsComponent`](https://github.com/opf/openproject/blob/dev/frontend/src/app/shared/components/grids/widgets/project-details/project-details.component.html) is a very isolated example showing how to use the edit-form together with `EditableAttributeField` component to show the actual inline-editable field. - - On the example of a work package, this following code snippet would create an edit form for a given work package resource and an attribute for the `subject` attribute of that work package. ```html @@ -277,24 +242,16 @@ On the example of a work package, this following code snippet would create an ed ``` - - While this doesn't take care of any labels or styling, it will already provide error handling for the given field and allow proper saving of the changes to the resource. - - ![Minimal example of the edit form](basic-example.gif) - - ## Work package single view The work package single view is the boss fight of inline editing. It combines all the previous concepts with the flexibility of work package attributes and type configuration. The following screenshot is [bug report #34250](https://community.openproject.org/wp/34250), which is a work package of Type `Bug`. The Bug type has a [specific form configuration](../../../system-admin-guide/manage-work-packages/work-package-types/#work-package-form-configuration-enterprise-add-on) defined. This configuration is as follows: - - ![bug-form-configuration](bug-form-configuration.png) The Bug has three attribute groups defined with a set of attributes in it. These attributes correspond to the attribute groups in the `single view`. @@ -311,8 +268,6 @@ The type defines which type of group is being rendered. The attribute group is t The [`WorkPackageSingleViewComponent`](https://github.com/opf/openproject/blob/dev/frontend/src/app/features/work-packages/components/wp-single-view/wp-single-view.component.ts) turns this definition into a template through its method `rebuildGroupedFields`. The template iterates over these and outputs the appropriate attribute or query group. - - ![Work package single view](single-view.png) In the end, each of the attributes in the two groups above are a `EditableAttributeField`, and the entire page wraps these attributes in an `EditFormComponent`. diff --git a/docs/development/concepts/permissions/README.md b/docs/development/concepts/permissions/README.md index 5d4dde478400..17f6b1016966 100644 --- a/docs/development/concepts/permissions/README.md +++ b/docs/development/concepts/permissions/README.md @@ -60,6 +60,7 @@ The way a developer can check for permissions obviously depends on whether the b ### Desired layer While not the case throughout the application, permissions: + * should be checked in the Contracts whenever wanting to change a record. This also includes the values that are assignable (e.g. which users are available to become assignee of a work package) * should be applied to scopes whenever fetching a set of records. Even when only fetching an individual record it is best to apply a scope checking the visibility before the `find` instead of fetching the record first and then check for the visibility. * needs unfortunately to be checked in the view/representers whenever an attribute is visible for one group of users but not for another. diff --git a/docs/development/concepts/queries/README.md b/docs/development/concepts/queries/README.md index eefc9df0eb75..9dabadfb54b2 100644 --- a/docs/development/concepts/queries/README.md +++ b/docs/development/concepts/queries/README.md @@ -17,10 +17,6 @@ For the work packages table, the query object holds the way the table displays ( A query can be persisted by a user or created dynamically through a set of parameters. It can be published and shared with other users of the project or application. - - - - ## Key takeaways *Queries ...* @@ -30,8 +26,6 @@ A query can be persisted by a user or created dynamically through a set of param - can be created on the fly through URL / body parameters - can be requested through the APIv3 to get the resulting resources collection of the query in a paginated way - - ## Prerequisites The following guides are related: @@ -40,8 +34,6 @@ The following guides are related: - Backend API overview - - ## Query definition A query is an object that revolves about two types of information: @@ -51,9 +43,6 @@ A query is an object that revolves about two types of information: Currently, the Queries endpoint and object is highly specific to work packages, but this is bound to change with more resources becoming queryable. For some other resources such as projects, queries already exists in the backend, but not yet in the frontend application. - - - ## API Backend Queries are regular APIv3 grape endpoints that can be accessed through the `/api/v3/queries` namespace. In general, they can be maintained in two ways: @@ -67,8 +56,6 @@ A number of parameters can be passed to the Query through parameters as elaborat Clients can define a query once, save it and use it later on to load the same set of filters, columns, and so on. When retrieved from the database (a query id is passed), the query has been previously stored. Saved properties may be overridden through URL parameters, which override the existing saved query. - - ### Query collections responses Since queries can be saved and should be listed to the user such as in the work package sidebar, they can also be requested as a collection of resources through `/api/v3/queries`. This endpoint can also be filtered. For more details on that, see the [respective APIv3 Queries filtering section](../../../api/endpoints/queries/#query-filter-instance). @@ -103,12 +90,8 @@ A major, but complex functionality of the query is the `filters` object to deter ![Work package query filters](filters.png) - - These filters are also saved within the queries. Read the [APIv3 filters documentation guide](../../../api/filters/) to know more about how filters and their syntax work. - - ### Exemplary query response Due to the public nature of the OpenProject community, you can check out the following exemplary query response in HAL+JSON: [community.openproject.org/api/v3/queries/2453](https://community.openproject.org/api/v3/queries/2453) @@ -117,16 +100,12 @@ It returns a saved query for the OpenProject 11.0 release, with a type filter `t The resulting work packages will differ based on the visibility of the work packages and your permissions in the projects. For more information, check out [the concept on permissions](../permissions). - - ## Frontend usage As the singular Query JSON object encompasses a large amount of different concerns, the frontend splits this resource up into quite a substantial amount of services for isolating the individual behaviors. This guide will not go into too much detail on the actual components using these services, as they will be subject to change and detailed in another guide. - - ### Isolating query spaces in the frontend The work packages module can load multiple queries on a single page. If for example, you open a query and a work package with an embedded table showing (such as showing related or child work packages), the application will request and render two queries and work package tables. diff --git a/docs/development/concepts/resource-changesets/README.md b/docs/development/concepts/resource-changesets/README.md index 0b14ab41cebf..3e8094265829 100644 --- a/docs/development/concepts/resource-changesets/README.md +++ b/docs/development/concepts/resource-changesets/README.md @@ -18,8 +18,6 @@ Resource changesets allow to edit resources in a transparent way, tracking its c - provide a `Proxy` javascript object `projectedResource` to the resource with the changes applied - encapsulates a temporary schema and form resource for accessing newly added fields and errors - - ## Prerequisites In order to understand Inline Editing, you will need the following concepts: @@ -28,14 +26,10 @@ In order to understand Inline Editing, you will need the following concepts: - [Schemas](../resource-schemas) - - ## Classes overview Let's go over the classes and services used to provide access to changesets. - - ### ResourceChangeset The `ResourceChangeset` class is a temporarily created class whose lifetime is determined by the editing duration of a user to a resource such as work package. It gets created automatically when rendering inline-editable fields and is reset/destroyed/reinstantiated when a change has been submitted to the backend, or when the changes are cancelled. @@ -46,21 +40,16 @@ The changeset maintains references to * The actual `Changeset` object of changes (basically a map of `attribute -> values` of changes) * The `FormResource` for the resource (due to temporary changes such as switching types or projects in work packages) - The changeset provides a high level access to getting and writing changes as well as caching resources around editing to avoid reloading them too often. It also provides access to a `projectedResource`, which is a proxy class on the HAL resource with all overridden values returned from the changeset. It behaves as if the modified resource was saved and returned. The ResourceChangeset is possibly subclassed for specific HAL resource types. For example, by the `WorkPackageChangeset`, a resource changeset specifically for work packages to correctly handle cases like switching types or projects - which will require in a reloading of the `FormResource` and its embedded schema for identifying and showing new attributes. - - ### HalResourceEditingService In order to *create*, *remove* or *saving* changesets for a specific resource, the `HalResourceEditingService` is provided at various hierarchies of the application. The service maintains a store of available resource changesets, whose states and changes can be observed with an RXJS observable. The main entry point for editing changesets is `HalResourceEditingService#changeFor`, which will either continue editing an existing changeset, or create a new one for the given class. - - #### Minimal example on using the changeset ```typescript @@ -96,18 +85,12 @@ console.log(changeset.isEmpty()); // true console.log(changeset2.isEmpty()); // true ``` - - #### Saving the changeset In order to save a changeset, you would simply pass it to `HalResourceEditingService#save`. This will save the changes to the APIv3 and update the resource. It returns a `ResourceChangesetCommit` which is a reference to the changes and resulting resource. - - You will often see other components pushing into the changeset, such as the `EditFieldComponent`. To find out more about the inline editing functionality, see [this guide](../inline-editing). - - #### Temporary editing resources Some components such as the `WorkPackageSingleView` needs to update the view upon changes to a resource under edit. A prominent, but complex example is the work package gaining or losing attribute fields due to the `Type` or `Project` being changed. This is due to custom fields being configurable on a per-project level. @@ -118,11 +101,6 @@ Assume you start creating a new work package of type `Task`, and then switch to For this to work, the `WorkPackageSingleView` needs to have access to the work package *as if it was saved* after the type was changed. But the work package is a new resource and not yet actually saved. That's why `HalResourceEditingService#temporaryEditingResource` returns an observable state that returns either the pristine work package, or the proxied work package by the changeset to transparently access the modified-yet-unsaved work package resource. - - ## Additional resources Changesets are used in several components throughout the application. Notable examples are the [inline editing `EditForm`](../inline-editing). - - - diff --git a/docs/development/concepts/resource-schemas/README.md b/docs/development/concepts/resource-schemas/README.md index 5a808c30b035..1064689db7dd 100644 --- a/docs/development/concepts/resource-schemas/README.md +++ b/docs/development/concepts/resource-schemas/README.md @@ -11,8 +11,6 @@ keywords: concept, schemas, resource schemas In OpenProject, editable resources such as work packages or projects can be highly customized by the user. A resource can have an arbitrary number of additional custom fields. In the frontend, the associated schema to a resource needs to be loaded in many cases when rendering attributes of that resource, such as in an [inline-editable field](../inline-editing). - - ## Key takeaways Schema objects are the dictionary for the frontend application to identify the available properties of a resource. @@ -21,11 +19,9 @@ Schema objects are the dictionary for the frontend application to identify the a - a (possibly) localized name - The value type of the defined attributes -- Constraints for the authenticated user, i.e., whether the attribute is currently writable +- Constraints for the authenticated user, i.e., whether the attribute is currently writable - (optional) additional option definitions for the attribute. - - ## Prerequisites The following guides are related: @@ -34,21 +30,16 @@ The following guides are related: - Backend API overview - - - ## API Backend Schemas in the backend are regular Grape endpoints. For example, the schema of all projects is rendered through the [`::API::V3::Projects::Schemas::ProjectsSchemaAPI`](https://github.com/opf/openproject/blob/dev/lib/api/v3/projects/schemas/project_schema_api.rb). This in turn renders the associated [`::API::V3::Projects::Schemas::ProjectsSchemaRepresenter`](https://github.com/opf/openproject/blob/dev/lib/api/v3/projects/schemas/project_schema_representer.rb), which contains the set of schema properties to be rendered. The work packages' schemas are significantly more complex. Each work package type will define its own schema due to the dynamics of the [form configuration](../../../system-admin-guide/manage-work-packages/work-package-types/#work-package-form-configuration-enterprise-add-on). With it, the order and grouping of work package attributes can be defined per type, resulting in different attributes to be displayed. In addition, custom fields can be individually enable per project for even more flexibility. -This results in not a single schema for all work packages, but one schema for each project - type combination. +This results in not a single schema for all work packages, but one schema for each project - type combination. The resulting schema JSON is an object with properties that look like the following: - - ```json5 { "property": { @@ -65,20 +56,14 @@ The resulting schema JSON is an object with properties that look like the follow } ``` - - ### Schema examples This section describes some of the existing schemas. - - **Projects** For projects, there is a single APIv3 endpoint for their schemas: `/api/v3/projects/schema`. This schema is identical for all projects. You can simply request the OpenProject Community schema for projects [here](https://community.openproject.org/api/v3/projects/schema). It contains a set of static properties (name, identifier, status, etc.), as well as all project-level custom fields. - - **Work packages** The work package schema is more complicated, as work package types can be customized to define what attributes the type should show as part of the [form configuration](../../../system-admin-guide/manage-work-packages/work-package-types/#work-package-form-configuration-enterprise-add-on). Additionally, the visibility of custom fields can be controlled on a per-project level. @@ -89,8 +74,6 @@ An exemplary schema response on the Community for the OpenProject project (`ID=1 The work package schema also contains the reference to the attribute groups from the form configuration in the `_attributeGroups` property. - - ## Frontend usage The OpenProject frontend usually ensure that whenever you get access to a HAL resource, its associated schema (if there is any) is also loaded. This is done through the [`SchemaCacheService`](https://github.com/opf/openproject/blob/dev/frontend/src/app/core/schemas/schema-cache.service.ts). It will request the associated schema unless it has already been cached in the global states object to avoid loading a schema multiple times. @@ -134,8 +117,6 @@ export interface IFieldSchema { } ``` - - ### Form schemas When you try to update a resource such as a work package, you will commonly request a `Form` resource for this work package, which is a temporary resource that will have your changes applied to them, including error handling. In these forms, an embedded schema is output that represents the schema with permissions applied for the current user. @@ -143,4 +124,3 @@ When you try to update a resource such as a work package, you will commonly requ For example, if you try to update a work package type from let's say `Bug` to `Feature`, you would POST to the form with its type link updated, and are returned with a form object. The embedded schema of this form now points to the `Feature` type, and may contain additional attributes to render due to the differing form configuration. These embedded schemas are never globally cached in the frontend, as they are highly dependent on the changes pushed to the form resource. They are always contained within a `ResourceChangeset`. Please see [the separate guide on changesets](../resource-changesets/) for more information. - diff --git a/docs/development/concepts/secure-coding/README.md b/docs/development/concepts/secure-coding/README.md index 9c7840d3fecd..fa936f3fb046 100644 --- a/docs/development/concepts/secure-coding/README.md +++ b/docs/development/concepts/secure-coding/README.md @@ -126,7 +126,7 @@ At its core, permissions in OpenProject are the central key to determine who can - Implement controls and authorization checks with a *Deny by default* or *Fallback deny* rule, preventing authorization flows to miss certain steps and allowing user requests to fall through the authorization checks. - Validate the permissions of a user on every request, regardless of the origin of it. - Enforce proper authorization controls to ensure that users only access their own data. -- Provide extensive tests for permission checks, making assertions of all available cases and using visibility testing for asserting that certain actors _cannot_ access data or perform actions. +- Provide extensive tests for permission checks, making assertions of all available cases and using visibility testing for asserting that certain actors _cannot_ access data or perform actions. - Regularly review and update access controls to reflect changes in application functionality and roles. **References** @@ -145,7 +145,7 @@ OpenProject is a form-driven application, meaning that users input a lot of data - *Cross-site scripting (XSS)*: Failure to validate and sanitize user inputs can allow malicious scripts to be executed in the context of other users' browsers. Potential consequences are: Theft of sensitive user data, session hijacking, and potential defacement or compromise of the web application. - *Cross-Site Request Forgery (CSRF):* Lack of proper request validation can make it easier for attackers to trick users into performing unintended actions on their behalf. Potential consequences are unauthorized actions, such as account changes, data deletion, or fund transfers, performed without user consent. - *File Upload Vulnerabilities*: Insufficient input validation on file uploads can lead to arbitrary file uploads, enabling attackers to upload malicious files or execute code. Potential consequences are remote malware distribution, and remote code execution. -- *Open Redirects*: Insufficent validation of redirect URLs leading users to external pages, which might end in phishing attacks. +- *Open Redirects*: Insufficient validation of redirect URLs leading users to external pages, which might end in phishing attacks. **Guidelines** @@ -172,7 +172,7 @@ As OpenProject may handle and distribute sensitive user data, attack vectors suc **Risks and impacts** -- *Viruses and malware uploads*: Whenever users are able to upload files to a system, potentially malicious files could be provided and distributed through OpenProject by users with the appropriate upload permission. +- *Viruses and malware uploads*: Whenever users are able to upload files to a system, potentially malicious files could be provided and distributed through OpenProject by users with the appropriate upload permission. - *Malware in software*: OpenProject carefully selects and updates third-party dependencies. Please see the following section on [external dependencies](#external-dependencies) for more information on the best practices of external dependencies. **Guidelines** @@ -183,7 +183,7 @@ As OpenProject may handle and distribute sensitive user data, attack vectors suc - OpenProject currently does not provide a built-in virus scanner. However, using [webhooks](../../../system-admin-guide/api-and-webhooks/#webhooks) and the [attachments API](../../../api/endpoints/attachments/), users can plug existing virus scanning tools and scrub any uploaded files. - *Malware in software*: - OpenProject uses statical code analysis on every change provided to the application as well as code scanners on the artifacts generated from the source code (such as Snyk vulnerability scanner for Docker images). - - We recommend users to perform their own + - We recommend users to perform their own ## Logging and Error Handling @@ -235,7 +235,7 @@ OpenProject includes a number of external dependencies both in Ruby as well as i **Guidelines** - *Automate Updates*: Use and maintain automated tools such as Dependabot and workflows that check for dependency updates regularly, and run tests when updates are available. Before updating the dependencies, review its changelog or release notes to understand changes and potential impacts on your application. -- *Manual update checking:* For pinned versions, use `npm outdated`, `bundle outdated` or `npm-check-updates `to ensure you stay on top of new versions and see if breaking changes occurred. +- *Manual update checking:* For pinned versions, use `npm outdated`, `bundle outdated` or `npm-check-updates` to ensure you stay on top of new versions and see if breaking changes occurred. - *Lockfile integrity*: Use `package-lock.json` and `Gemfile.lock` to pin exact version for a released version of OpenProject, ensuring that all environments use the same versions. - *Stay Informed*: Subscribe to mailing lists, newsletters, or vulnerability databases to receive timely information on crucial updates or security patches so that updates can be performed as fast as possible. - *Vet new dependencies*: Before adding a new gem or package, research its maintenance history, last update, known vulnerabilities, and community reviews. Check if it's actively maintained, and evaluate all the alternatives. @@ -251,7 +251,7 @@ Packaging and containerization are critical artifacts in the delivery pipeline o Properly managed packaging and containerization pipelines ensure smooth installations, upgrades, and scaling, enhancing the deployment process and - as a result - the overall user experience. This section highlights risks connected to improper containerization or packaging as well as our main objectives and best practices to provide a secure, efficient, and reliable software delivery process. -OpenProject provides several installation mechanisms: +OpenProject provides several installation mechanisms: - [Packaged installations](../../../installation-and-operations/installation/packaged/) using the distribution's package manager for dependency control diff --git a/docs/development/concepts/state-management/README.md b/docs/development/concepts/state-management/README.md index 4c0d374c4999..b1739945efb1 100644 --- a/docs/development/concepts/state-management/README.md +++ b/docs/development/concepts/state-management/README.md @@ -9,8 +9,6 @@ keywords: state management, stores, input states State management in complex frontend applications is a topic that has been heavily evolving over the past years. Redux and stores, one-way data flow are all the rage nowadays. OpenProject is an old application, so its frontend exists way before these concepts were introduced and became popular. - - ## Key takeaways *State management in OpenProject frontend...* @@ -19,8 +17,6 @@ State management in complex frontend applications is a topic that has been heavi - `State` and `InputState` are mostly syntactic sugar over RxJS `Subject` and `BehaviorSubject` - States are used to hold and cache values with their values and non-values being observable - - ## InputState An `InputState` object is a wrapper around RxJS [`BehaviorSubject`](https://rxjs.dev/api/index/class/BehaviorSubject). It provides some syntactic sugar over it to inspect values and provide helpers to observe streams and fill in the underlying `Subject`. @@ -36,8 +32,6 @@ console.log(state.hasValue()); // false console.log(state.value); // undefined ``` - - An InputState will hold exactly one value, that you can fill explicitly: ```typescript @@ -48,16 +42,12 @@ console.log(state.hasValue()); // true console.log(state.value); // 'my value' ``` - - You can find out if a value is older than a specific amount of ms: ```typescript state.isValueOlderThan(60000); // Value is older than 60 seconds? ``` - - The value can be explicitly cleared with `state.clear()`. You can also fill the InputState with the result of a promise request. With `putFromPromiseIfPristine`, the promise will only be requested if the state is empty. This is useful for performing API requests that should not be re-executed while the value is cached. @@ -66,16 +56,12 @@ You can also fill the InputState with the result of a promise request. With `put state.putFromPromiseIfPristine(() => Promise.resolve('my new value')); ``` - - To find out if there is an active promise request, use `state.hasActivePromiseRequest()`. You can also explicitly clear and put from promise in one step: ```typescript state.clearAndPutFromPromise(Promise.resolve('overridden value')); ``` - - You can get an RxJS `Observable` to the value stream with `state.values$()`: ```typescript @@ -92,14 +78,10 @@ state .subscribe(val => console.log("Observed " + (val ? "String value" : "Undefined")); ``` - - ## MultiInputState The `MultiInputState` is basically a map with a string key and an `InputState` as its value. It is used for most of the cache stores in OpenProject. - - To create a `MultiInputState`, use the helper method `multiInput()` . To get an `InputState` member of this map, use the following: ```typescript @@ -131,10 +113,6 @@ multi // CHANGE for my identifier: new ``` - - - - ## StatesGroup The `StatesGroup` aggregates multiple States or MultiInputStates into one class. The only benefit to this is debugging capabilities of the reactivestates library. You can call the following method in development mode to see all changes to states in a StateGroup logged to console: @@ -145,19 +123,16 @@ window.enableReactiveStatesLogging(); This might then look like the following, with green color for added objects, and red color for removed values: -``` +```text [RS] Changesets.changesets[/api/v3/projects/1] {o=4} "[object Object]" ``` - - ## 🔗 Code references - [`StatesService`](https://github.com/opf/openproject/blob/dev/frontend/src/app/core/states/states.service.ts) Global `States` cache of MultiInputStates - [`IsolatedQuerySpace`](https://github.com/opf/openproject/blob/dev/frontend/src/app/features/work-packages/directives/query-space/isolated-query-space.ts) Query space `StatesGroup`. Is instantiated multiple times whenever a work package query is loaded. See [the separate concept guide](../queries) for more information. - [ReactiveStates](https://github.com/ReactiveStates/reactivestates) library we use for the StatesGroup. This was developed by Roman primarily for us during AngularJS times. - ## Discussions - In contrast to a `Store` concept of redux, the States and state groups do not have any concept of data immutability. As a caller you will need to ensure that. In OpenProject, many of the states are in fact mutable due to historic reasons and the fact that complex class instances are passed around that cannot be easily shallow copied. This will need to be refactored in the future. diff --git a/docs/development/concepts/stimulus/README.md b/docs/development/concepts/stimulus/README.md index 8f735eaf45f0..af7199d220ff 100644 --- a/docs/development/concepts/stimulus/README.md +++ b/docs/development/concepts/stimulus/README.md @@ -13,16 +13,12 @@ In a decision to move OpenProject towards the [Hotwire approach](https://hotwire This guide will outline how to add controllers and the conventions around it. This is _not_ a documentation of stimulus itself. Use their documentation instead: https://stimulus.hotwired.dev - - ## Adding controllers All controllers live under `frontend/src/stimulus/controllers/`. The naming convention is `.controller.ts`, meaning to dasherize the name of the controller. This makes it easier to generate names and classes using common IDEs. If you want to add a common pattern, manually register the controller under `frontend/src/stimulus/setup.ts`. Often you'll want to have a dynamically loaded controller instead though. - - ### Dynamically loaded controllers To dynamically load a controller, it needs to live under `frontend/src/stimulus/controllers/dynamic/.controller.ts`. @@ -33,8 +29,6 @@ In DOM, you'll tell the application the controller is dynamically loaded using t
    ``` - - #### Namespacing dynamic controllers If you want to organize your dynamic controllers in a subfolder, use the [double dash convention](https://stimulus.hotwired.dev/handbook/installing#controller-filenames-map-to-identifiers) of stimulus. For example, adding a new admin controller `settings`, you'd do the following: @@ -46,12 +40,8 @@ If you want to organize your dynamic controllers in a subfolder, use the [double
    ``` - - You need to take care to prefix all actions, values etc. with the exact same pattern, e.g., `data-admin--settings-target="foobar"`. - - ### Requiring a page controller If you have a single controller used in a partial, we have added a helper to use in a partial in order to append a controller to the `#content`tag. This is useful if your template doesn't have a single DOM root. For example, to load the dynamic `project-storage-form` controller and provide a custom value to it: @@ -61,4 +51,3 @@ If you have a single controller used in a partial, we have added a helper to use dynamic: true, 'project-storage-form-folder-mode-value': @project_storage.project_folder_mode %> ``` - diff --git a/docs/development/concepts/translations/README.md b/docs/development/concepts/translations/README.md index d4237061e9b9..c78edd4f9add 100644 --- a/docs/development/concepts/translations/README.md +++ b/docs/development/concepts/translations/README.md @@ -13,8 +13,6 @@ Not all translations are fully translated, and they will fallback to english str ![Overview of translation and their progress](translations-overview.png) - - ## Key takeaways *Translations in OpenProject...* @@ -22,8 +20,6 @@ Not all translations are fully translated, and they will fallback to english str - depend on the [I18n yaml-based Rails standard](https://guides.rubyonrails.org/i18n.html) for translation files - are split into backend and frontend strings - - ## I18n definitions The OpenProject localizable strings are stored in the [Rails-standard I18n YAML files](https://guides.rubyonrails.org/i18n.html). The core only manages english source strings in `en.yml` and `js-en.yml` files. The can be found at `config/locales/en.yml` and `config/locales/js-en.yml`, respectively. @@ -32,22 +28,16 @@ Additionally, modules can define their own translations, such as `modules/budget The `js-en.yml` are not special on their own, but are simply prefixed with the `js:` key at the beginning of the file. This means all translations within are prefixed with the `js.` key. This is picked up by [`I18n.js`](https://github.com/fnando/i18n-js), a Ruby gem and frontend library that helps outputting javascript objects for the frontend. Only strings that are prefixed with `js.` and some internals will end up in the frontend due to the config we applied in [`config/i18n.yml`](https://github.com/opf/openproject/blob/dev/config/i18n.yml). The translations are output by the rake task `./bin/rails assets:export_locales` to `frontend/src/locales/{language}.js`. - - ## Using I18n in your Rails code You are likely familiar already with the `I18n.t` helper provided by Rails. We simply use this helper to localize strings. Translations are simply loaded by Rails and available everywhere in the application. - - Let's say want to add a specific label to a work package page and use that in a HTML ruby file, you should go through this way: You have to add the below rows to the appropriate `en.yml` file. If you're editing a module, add the string to the module's `config/locales/en.yml` file. You should prefix your string unless its something very generic: - - ```yaml # ... work_packages: @@ -55,34 +45,24 @@ work_packages: my_button: "My localized button label" ``` - - You can then use the `t()` helper method in the Rails erb view to translate the string: ```erb <%= styled_button_tag t('work_packages.my_specific_page.my_button') %> ``` - - Outside of the views and controllers, you need to use the module function `I18n.t` to be used, for example in Ruby tests: ```ruby expect(page).to have_selector('button', text: I18n.t('work_packages.my_specific_page.my_button')) ``` - - The Rails guide on translations will give advanced examples on variable interpolation and the like: [guides.rubyonrails.org/i18n](https://guides.rubyonrails.org/i18n.html) - - ## Using I18n in your frontend code The frontend receives all translations prefixed with `js-` (see above) through compiled javascript files from `frontend/src/locales/{language}.js` folder generated by I18n.js. These locales are loaded early on in the application in [frontend/src/main.ts](https://github.com/opf/openproject/blob/dev/frontend/src/main.ts) to ensure they are present when the page loads. The import happens dynamically so only the language the user has selected is going to be loaded by webpack. - - If you want to create an angular component named ‘news’ and translate the text of a "save news" button and author of the news, you should go through this way: You have to add the below (exemplary) entry to the `js-en.yml` file @@ -95,11 +75,7 @@ js: label_added_by: "Added by %{author}" ``` - - -You will then need to access the Angular [ `I18nService`](https://github.com/opf/openproject/blob/dev/frontend/src/app/core/i18n/i18n.service.ts) that provides access to the `I18n.js` helper. Right now, there is also a window global `I18n` that works, but it is not recommended to use that wherever you can inject the service instead. - - +You will then need to access the Angular [`I18nService`](https://github.com/opf/openproject/blob/dev/frontend/src/app/core/i18n/i18n.service.ts) that provides access to the `I18n.js` helper. Right now, there is also a window global `I18n` that works, but it is not recommended to use that wherever you can inject the service instead. In the `news.component.ts`, you should import the `I18nService`. Then you have to define a property named ‘text’ used for all text in your component, like below: @@ -110,8 +86,6 @@ public text = { }; ``` - - Then you can use them as below in your template: ```html @@ -124,6 +98,4 @@ Then you can use them as below in your template: ``` - - For more information on formatting and other helpers of the `I18n.js` library, see [github.com/fnando/i18n-js](https://github.com/fnando/i18n-js) diff --git a/docs/development/concepts/wysiwyg-editor/README.md b/docs/development/concepts/wysiwyg-editor/README.md index c3d5e3e35931..056c5b9e7ba1 100644 --- a/docs/development/concepts/wysiwyg-editor/README.md +++ b/docs/development/concepts/wysiwyg-editor/README.md @@ -25,12 +25,14 @@ Is the HTML input data once loaded into the editor. ckEditor has a Model "DOM" w ### Views CkEditor has two types of views: + * **Data View:** the editor's input/output, the data imported to the editor and exported from the editor (HTML). * **Editing View:** the UI, the elements that the user interacts with in the editor's UI. ### Controller Layer in charge of transforming the elements from the two Views to the Model and the other way around. This means to transform: + * The Data View (input HTML elements) into Model elements and the other way around. * The Editing View (UI elements) into Model elements and the other way around. @@ -88,7 +90,6 @@ CkEditor comes with a debugger inspector that will make the development process In order to activate it, just import it (```import CKEditorInspector from '@ckeditor/ckeditor5-inspector';```) at the beginning of the ```op-config-customizer.js``` file and then attach it inside the editorClass.create method: - ```javascript return editorClass.create(wrapper, configuration).then(editor => { CKEditorInspector.attach(editor); @@ -103,13 +104,13 @@ As an example, let's take a look at our mention feature that allows mentioning c In order to get it working, we did the following steps: -#### 1 - Markdown to HTML +### 1 - Markdown to HTML Define how the markdown elements are going to be translated to HTML elements. In this case, the backend is going to send the mention elements as tags (<mention ...>...</mention>) right inside the markdown data, so we don't need to make any conversion in order to turn it into the valid HTML that the CkEditor needs. \ \ In case it would be needed, it would be defined in the CommonMarkDataProcessor class (```commonmarkdataprocessor.js```), in its "toView" method. -#### 2 - Upcast +### 2 - Upcast Define how the mention elements of the HTML input data are going to be represented in the ckEditor's Model: @@ -145,12 +146,10 @@ Here we basically say that when the ckEditor finds a 'mention' element with the This is defined in the CkEditor plugin (```mentions-caster.js```). - -#### 3 - Editing downcast +### 3 - Editing downcast Define how the mention attribute is going to be represented in the ckEditor's UI (Editing View): - ```javascript editor.conversion .for('editingDowncast') @@ -182,7 +181,7 @@ Here we say that we want to place the mention attributes of the ckEditor's model \ This is defined in the CkEditor plugin (```mentions-caster.js```). -#### 4 - Data downcast +### 4 - Data downcast Define how the mention attribute is going to be represented in the ckEditor's output (Data View): @@ -219,7 +218,7 @@ This is defined in the CkEditor plugin (```mentions-caster.js```). The model update of the mentions when the user adds or removes a mention is handled by the editor features/plugins (a third party mention plugin in this case). -#### 5 - HTML to Markdown +### 5 - HTML to Markdown Define how the HTML mention tags are going to be represented in the markdown. They should be placed as strings, so we need to turn any mention element into its string representation: diff --git a/docs/development/contribution-documentation/README.md b/docs/development/contribution-documentation/README.md index 4d8868227004..39055ad8e01f 100644 --- a/docs/development/contribution-documentation/README.md +++ b/docs/development/contribution-documentation/README.md @@ -20,23 +20,17 @@ Current and future users of the application find instructions for the set up and This documentation evolves continuously with new features and improvements to achieve clarity, accuracy, and completeness. - - ## Where to find the OpenProject documentation? -The documentation for OpenProject is published [here](https://www.openproject.org/docs/). You can also access the documentation from your OpenProject application under user guides and API documentation below the question mark at the top right in the header menu. - - +The documentation for OpenProject is published [here](https://www.openproject.org/docs/). You can also access the documentation from your OpenProject application under user guides and API documentation below the question mark at the top right in the header menu. ## Who can contribute to the documentation? -Being proudly open source, we invite anyone in our community to contribute to our software as well as the documentation to improve it even further. - - +Being proudly open source, we invite anyone in our community to contribute to our software as well as the documentation to improve it even further. ## What can you contribute to the documentation? -Documentation improvements and changes apply to the documentation described in the section above. Documentation changes are **not** changes or additions to the code of the OpenProject application. For contributions to the code, see our [product development guide](../product-development-handbook/). +Documentation improvements and changes apply to the documentation described in the section above. Documentation changes are **not** changes or additions to the code of the OpenProject application. For contributions to the code, see our [product development guide](../product-development-handbook/). We are looking forward to receiving the following contributions from you: @@ -52,8 +46,6 @@ We are looking forward to receiving the following contributions from you: - Translations into your mother tongue (coming soon). - - ## Overview | Topic | Content | @@ -62,6 +54,4 @@ We are looking forward to receiving the following contributions from you: | [Documentation style guide](documentation-style-guide) | What are the styles and other requirements to follow when contributing to the documentation? | | [Contribution support](contribution-support) | What to do if you need help regarding your contribution to the documentation? | - - -With this guide for contributing to the OpenProject documentation we followed and took inspiration from the [Contribute to GitLab guide](https://about.gitlab.com/community/contribute/). +With this guide for contributing to the OpenProject documentation we followed and took inspiration from the [Contribute to GitLab guide](https://about.gitlab.com/community/contribute/). diff --git a/docs/development/contribution-documentation/contribution-support/README.md b/docs/development/contribution-documentation/contribution-support/README.md index ac8d94e48b30..d72ae9bfd253 100644 --- a/docs/development/contribution-documentation/contribution-support/README.md +++ b/docs/development/contribution-documentation/contribution-support/README.md @@ -20,4 +20,4 @@ If you have any questions on the contribution process or encounter problems with 5. Attach a screen-shot or log-file (optional). -6. Press **Save**. \ No newline at end of file +6. Press **Save**. diff --git a/docs/development/contribution-documentation/documentation-process-internal-contributor/README.md b/docs/development/contribution-documentation/documentation-process-internal-contributor/README.md index 918a9e1f3844..f3d2f091716c 100644 --- a/docs/development/contribution-documentation/documentation-process-internal-contributor/README.md +++ b/docs/development/contribution-documentation/documentation-process-internal-contributor/README.md @@ -10,7 +10,6 @@ keywords: contribution, documentation, documentation process This guide describes how internal team members with write permissions can contribute to the OpenProject documentation. - ## Prerequisites 1. [The contributor has a user account on GitHub.com](../../../development/contribution-documentation/documentation-process/#step-1-create-user-account-on-githubcom) @@ -30,7 +29,6 @@ In the modal window select the repository ""*opf/openproject*"". Also select a f ## Step 2: Update local repository (fetch origin) - > **Important**: Before you make changes always update your local repository. 1. Select the branch you want to work on, e.g. `release/13.0` in the main toolbar. @@ -40,7 +38,7 @@ In the modal window select the repository ""*opf/openproject*"". Also select a f ## Step 3: Create a new Git branch for your change -1. Select the latest release branch e.g. `release/13.0` as the current branch. +1. Select the latest release branch e.g. `release/13.0` as the current branch. ![create new branch - step 1](create-new-branch-step-1.png) 2. In the same drop down click on **New branch**. @@ -75,9 +73,7 @@ At the moment your change is only available in your local repository. To make it A pull request is a workflow to ask for a review from the OpenProject team. With a pull request you basically ask a team member to check your changes and to merge it to the branch you want your change to merged to, e.g. `release/13.0` . After you pushed your local changes to your own repository click the button **Create Pull Request**. -![](create-pull-request-github-desktop.png) - - +![Create a pull request](create-pull-request-github-desktop.png) In the first dropdown select the base branch you want your work to be merged in e.g. `release/13.0`. In the second dropdown select the branch you created in step 3 which contains your changes. @@ -87,11 +83,11 @@ In the description field of the pull request enter a summary for the changes you ## Step 9: Request review -Select the label "*documentation*". +Select the label "*documentation*". -![add documentation label for pull request](add-documentation-label-pull-requests.png) +![add documentation label for pull request](add-documentation-label-pull-requests.png) -In the field "*Reviewers*" select "*opf/doc-writers".* +In the field "*Reviewers*" select "*opf/doc-writers".* ![select reviewer for documentation](select-reviewer-for-documentation.png) diff --git a/docs/development/contribution-documentation/documentation-process/README.md b/docs/development/contribution-documentation/documentation-process/README.md index 1962c6a0c252..93b6fc86ab35 100644 --- a/docs/development/contribution-documentation/documentation-process/README.md +++ b/docs/development/contribution-documentation/documentation-process/README.md @@ -10,7 +10,6 @@ keywords: contribution, documentation, documentation process, tool setup This guide describes how to contribute to the OpenProject documentation, including the tool setup. - ## Setup the tools to easily contribute to the OpenProject documentation This guide aims to help users that are new to Git and Markdown to contribute to the OpenProject documentation. There are a two very helpful tools that makes it extremely easy to contribute to OpenProject: @@ -26,7 +25,7 @@ You need an account on GitHub.com to contribute to the OpenProject documentation ## Step 2: Install Typora -You can download the installer from the [Typora website](https://typora.io). Follow the prompts to complete the installation. In case you need more information there are very detailed [help](https://support.typora.io/) for each supported operating systems [Linux](https://support.typora.io/Typora-on-Linux/), [macOS](https://support.typora.io/Typora-on-macOS/) and [Windows](https://support.typora.io/Typora-on-Windows/). +You can download the installer from the [Typora website](https://typora.io). Follow the prompts to complete the installation. In case you need more information there are very detailed [help](https://support.typora.io/) for each supported operating systems [Linux](https://support.typora.io/Typora-on-Linux/), [macOS](https://support.typora.io/Typora-on-macOS/) and [Windows](https://support.typora.io/Typora-on-Windows/). ## Step 3: Install GitHub Desktop @@ -40,8 +39,6 @@ To exchange data between your local repository and remote repositories you need In the next screen click on "Continue with browser". - - ![continue sign in in browser](continue-sign-in-in-browser.png) This opens your browser. To authenticate to type your GitHub.com credentials and click **Sign in**. If you have configured two-factor authentication (2FA) for GitHub enter your 2FA code in the prompt on GitHub and click **Verify**. @@ -50,7 +47,7 @@ Alternatively, if you were already signed in to GitHub, follow the prompts to re After authenticating your account, you are ready to manage and contribute to projects with GitHub Desktop. -## Step 5: Fork the OpenProject repository +## Step 5: Fork the OpenProject repository If you are an external contributor you don't have write permissions on the repository [https://github.com/opf/openproject](https://github.com/opf/openproject). In this case you first need to fork the repository by clicking the button [Fork](https://github.com/opf/openproject/fork). This basically means that you have your own copy of the repository on GitHub.com. Since it is your own repository you have write privileges here. @@ -92,8 +89,6 @@ Before you can make changes you need to create a local clone of the OpenProject ![clone repository](clone-repository.png) - - In the modal window select the repository you forked in step *Fork the OpenProject repository*. Also select a folder on your computer for the cloned repository. Click **Clone**. ![select repository to be cloned](select-repository-to-be-cloned.png) @@ -104,7 +99,7 @@ In the next screen select **To contribute to the parent project**. ## Step 10: Create a new Git branch for your change -Select the latest release branch e.g. `release/12.3` as the current branch. +Select the latest release branch e.g. `release/12.3` as the current branch. ![create new branch - step 1](create-new-branch-step-1.png) @@ -116,8 +111,6 @@ After that Publish your branch to the forked remote repository on github.com. ![create new branch - step 3](create-new-branch-step-3.png) - - ## Step 11: Open the files you want to change in Typora In Typora open the files you want to change (File -> Open). In the file picker navigate to the local folder you selected in the step *Clone the forked OpenProject repository in GitHub Desktop*. @@ -144,9 +137,7 @@ At the moment your change is only available in your local repository. To make it A pull request is a workflow to ask for a review from the OpenProject team. With a pull request you basically ask to check your changes and to copy it over to the OpenProject repository (opf/openproject). After you pushed your local changes to your own repository click the button **Create Pull Request**. -![](create-pull-request-github-desktop.png) - - +![Create a pull request](create-pull-request-github-desktop.png) Your Draft Pull Request will be created in the browser **on github.com** (the "draft" status of the pull request signals that you are still working on it and it is not yet ready for a review.) Here select the latest release branch e.g. `release/12.4` in the **"base:"** dropdown on the left side. In the **"compare:"** dropdown select the branch you have changed. @@ -154,7 +145,7 @@ Your Draft Pull Request will be created in the browser **on github.com** (the "d In the description field of the pull request enter a summary for the changes you made. If there is already a work package on https://community.openproject.org you can also add this to the description with its complete URL. This adds a relation between your pull request and the work package. -Once you have made all the changed and are certain that these are final, you can request a review. +Once you have made all the changed and are certain that these are final, you can request a review. ## Step 16: Request review @@ -166,7 +157,7 @@ In the field "Reviewers" select "opf/doc-writers". ![select reviewer for documentation](select-reviewer-for-documentation.png) -Now you can press "Ready for review" button. +Now you can press "Ready for review" button. ![ready for review](Ready-for-review.png) @@ -174,69 +165,60 @@ Now you can press "Ready for review" button. ... and hopefully it is all LGTM which means "Looks good to me(rge). Congrats to your first contribution to the OpenProject documentation. We appreciate your effort :-) - - ## Appendix A: How to import a new release branch into your fork *(e.g. Release changes from `release/12.2` to `release 12.3`)* If a new release branch is generated on the upstream opf/openproject repository, the fork will NOT automatically fetch and merge and generate this release branch. With the following 'workaround' we get the new branch from the upstream (opf) repository and push it to our new origin (forked repository). -#### A) Change Remote Repository to UPSTREAM +### A) Change Remote Repository to UPSTREAM In GitHub Desktop choose menu "Repository -> Repository settings". This will open a new window (screenshot below). Enter the URL of the upstream/original OpenProject repository (e.g. https://github.com/opf/openproject.git). Confirm with **Save** ![rebase-your-fork-step-1](rebase-your-fork-step-1.png) -#### B) Fetch origin (in this case repository 'opf') +### B) Fetch origin (in this case repository 'opf') -In GitHub Desktop **at Current branch the old branch is visible [1]** . After you press **Fetch origin [2]** you will be able to **select the new branch at Current branch** (e.g. `origin/release/12.3` +In GitHub Desktop **at Current branch the old branch is visible [1]** . After you press **Fetch origin [2]** you will be able to **select the new branch at Current branch** (e.g. `origin/release/12.3` ![rebase-your-fork-step-2](rebase-your-fork-step-2.png) -#### C) Change remote repository back to the forked repository (ORIGIN) +### C) Change remote repository back to the forked repository (ORIGIN) In Github Desktop choose menu "Repository -> Repository settings". This will open a new window (screenshot below). Enter the URL of your forked OpenProject repository (e.g. https://github.com/adam-op/openproject.git). Confirm with **Save** ![rebase-your-fork-step-3](rebase-your-fork-step-3.png) -#### D) PUSH to the forked repository (ORIGIN) +### D) PUSH to the forked repository (ORIGIN) In GitHub Desktop choose menu "Repository -> Push". ![rebase-your-fork-step-4](rebase-your-fork-step-4.png) - - - - ## Appendix B: How to change the Branch of an open Pull Request If a new release branch is generated on the upstream opf/openproject repository, **and the steps in Appendix A were done** to get the new branch to the fork. We still might have open Pull Requests on the old, now outdated, release branch. The following steps show how to re-base your open Pull Requests to the new release branch. It is important, because otherwise your changes will not be synchronized with the online documentation on the webpage -#### A) Open the Pull Request in the forked repository +### A) Open the Pull Request in the forked repository ![open-pr-in-forked-repository](./open-pr-in-forked-repository.png) -#### B) Edit the Pull Request +### B) Edit the Pull Request Click on the Edit button on the right side of the Pull Request subject ![edit-the-pull-request](./edit-the-pull-request.png) -#### C) Open the Branches drop down list +### C) Open the Branches drop down list ![branches-drop-down-list](./branches-drop-down-list.png) -#### D) Select the new release branch +### D) Select the new release branch ![select-the-new-release-branch](./select-the-new-release-branch.png) -#### E) Resolving Conflicts +### E) Resolving Conflicts It is possible that conflicts will be shown after you change the release branch, depending on how much time passed between the new release branch being created and the Pull Request being rebased. If you change the branches, you need to do a rebase to the updated target branch and remove any commits that should not be in there. It's hard to document this as what you need to remove depends on the target branches. You can read up on how this works in general by searching for "rebasing" or "interactive rebase" for the git client of your choice. Reach out to us by mentioning or assigning an OpenProject developer to your PR in github if you still need help in rebasing your branch. Over time you'll learn what is necessary. - - - diff --git a/docs/development/contribution-documentation/documentation-style-guide/README.md b/docs/development/contribution-documentation/documentation-style-guide/README.md index 17367d49ec7c..3f804689d083 100644 --- a/docs/development/contribution-documentation/documentation-style-guide/README.md +++ b/docs/development/contribution-documentation/documentation-style-guide/README.md @@ -78,7 +78,7 @@ Do not include the same information in multiple places. Instead, link through to ## References across the documentation -- When mentioning other OpenProject modules or features, link to their respective documentation, at least on first mention. +- When mentioning other OpenProject modules or features, link to their respective documentation, at least on first mention. - Please see in [links](#links) how to use links within the documentation. @@ -86,7 +86,7 @@ Do not include the same information in multiple places. Instead, link through to ## Structure in documents -- Structure content in tables or lists etc. in alphabetical order unless there is a reason to use any other order of importance. +- Structure content in tables or lists etc. in alphabetical order unless there is a reason to use any other order of importance. ## Documentation language @@ -96,7 +96,7 @@ The OpenProject documentation should be as clear and easy to understand as possi - Write in US English with US grammar. -We aim to use fair language on our language and documentation and choose gender-neutral terms whenever possible. If this is not possible due to the language, e.g. German, we use : to be as inclusive as possible. Please refer to the [fair language guide](../../translate-openproject/fair-language/) for more specific instructions. +We aim to use fair language on our language and documentation and choose gender-neutral terms whenever possible. If this is not possible due to the language, e.g. German, we use : to be as inclusive as possible. Please refer to the [fair language guide](../../translate-openproject/fair-language/) for more specific instructions. ## Capitalization @@ -131,7 +131,7 @@ Capitalize names of: Follow the capitalization style by the third party which may use non-standard case styles. For example: OpenProject, GitHub. -## Placeholders +## Placeholders ### User information @@ -205,7 +205,7 @@ Follow these steps: 3. And then finish off with something else. -Example for an unordered list: +Example for an unordered list: - Feature 1 @@ -256,7 +256,7 @@ instead of: - Start with an H2 (##) and respect the order H2 > H3. Never skip the hierarchy level, such as H3 > H2. Do not go lower in the hierarchy than H3 (###). -- Do not use symbols and special characters in headings. +- Do not use symbols and special characters in headings. - When possible, avoid including words that might change in the future. Changing a heading changes its anchor URL, which affects other pages that link to this headline. @@ -290,7 +290,7 @@ Links are important in the documentation. Use links instead of duplicating conte ### Links to internal documentation -Internal links are links within the OpenProject website which includes the OpenProject documentation. In these cases, use relative links. I.e. do not use the full URL of the linked page but instead show the current URL's relation to the linked page's URL. +Internal links are links within the OpenProject website which includes the OpenProject documentation. In these cases, use relative links. I.e. do not use the full URL of the linked page but instead show the current URL's relation to the linked page's URL. To link to internal documentation: @@ -340,9 +340,9 @@ When you take screenshots: ### Highlight specific areas and add numbered labels -You can highlight a specific area of a screenshot to draw the reader's attention to it. Additionally, add numbered labels to refer to specific parts of the screenshot in the documentation text. These should, however, be used sparingly, since any future changes to the interface require the highlighted areas and labels to be manually added to each updated screenshot. +You can highlight a specific area of a screenshot to draw the reader's attention to it. Additionally, add numbered labels to refer to specific parts of the screenshot in the documentation text. These should be used sparingly since any future changes to the interface require the highlighted areas and labels to be manually added to each updated screenshot. -A highlighted area should be marked with a green rectangle (2px width, *Accent/Accent* color in our design system: #308720). The size of the area will naturally depend on the size of the area you wish you highlight. +A highlighted area should be marked with a green rectangle (3px width, *Accent/Accent* color in our design system: #308720). The size of the area will naturally depend on the size of the area you wish you highlight. ![screenshot_highlights_example](screenshot_area_highlight.png) @@ -383,4 +383,3 @@ Use alert boxes to call attention to information. The alert boxes in the OpenPro ```markdown > **Note**: If you do not have an OpenProject installation yet, please visit our site on [how to create an OpenProject trial installation](../../enterprise-guide/enterprise-cloud-guide/#create-a-new-account). ``` - diff --git a/docs/development/contribution-documentation/documentation-style-guide/screenshot_area_highlight.png b/docs/development/contribution-documentation/documentation-style-guide/screenshot_area_highlight.png index 05a61e298173..51b7aeaa7f59 100644 Binary files a/docs/development/contribution-documentation/documentation-style-guide/screenshot_area_highlight.png and b/docs/development/contribution-documentation/documentation-style-guide/screenshot_area_highlight.png differ diff --git a/docs/development/contribution-documentation/documentation-style-guide/screenshot_highlights_example.png b/docs/development/contribution-documentation/documentation-style-guide/screenshot_highlights_example.png index e8a2a7384e32..55fa0aa2d5c0 100644 Binary files a/docs/development/contribution-documentation/documentation-style-guide/screenshot_highlights_example.png and b/docs/development/contribution-documentation/documentation-style-guide/screenshot_highlights_example.png differ diff --git a/docs/development/create-omniauth-plugin/README.md b/docs/development/create-omniauth-plugin/README.md index 866a1a5a7dc2..761788897537 100644 --- a/docs/development/create-omniauth-plugin/README.md +++ b/docs/development/create-omniauth-plugin/README.md @@ -119,4 +119,3 @@ The first line in the snippet shown above is only necessary because the `openpro ### Profit That’s it. Now users can authenticate using your own provider. - diff --git a/docs/development/create-openproject-plugin/README.md b/docs/development/create-openproject-plugin/README.md index 4a76477dd8bb..4300f774b669 100644 --- a/docs/development/create-openproject-plugin/README.md +++ b/docs/development/create-openproject-plugin/README.md @@ -53,6 +53,7 @@ Feel free to ask for help in our [Development Forum](https://community.openproje The following steps are necessary to release a new plugin: ### Code Review + A code review should check the whole code and remove glitches like: - Inappropriate comments @@ -64,6 +65,7 @@ A code review should check the whole code and remove glitches like: 1. Check the license and the copyright of the plugin to be released Usually, this should be GPLv3 and we are the copyright owner. However, some plugins might have additional authors or might originate from code with a different license. These issues have to be resolved first. Also check the years in the copyright. If you need to find all contributors of a repository including their contribution period use the following rake task: + ```shell rake copyright:authors:show['../Path/to/repository/'] ``` @@ -137,8 +139,7 @@ It is probably best to use READMEs of already released plugins as a template. 4. Twitter with a link to the news article. 5. If the plugin is referenced in our feature tour, add a download link to the plugin in the feature tour - -# Frontend plugins [WIP] +## Frontend plugins [WIP] Plugins that extend the frontend application may be packaged as **npm modules**. These plugins must contain a `package.json` in the root directory of the plugin. diff --git a/docs/development/development-environment-docker-macos/README.md b/docs/development/development-environment-docker-macos/README.md index b20f3065fedd..4457931890fc 100644 --- a/docs/development/development-environment-docker-macos/README.md +++ b/docs/development/development-environment-docker-macos/README.md @@ -21,7 +21,7 @@ As Docker runs in a virtual machine, a shared filesystem is needed and applicati The following is a benchmark performed on a _MacBook Pro, 2019 16 GB 2667 MHz DDR4 2.3 GHz 8-Core Intel Core i9_ ```shell -$ time docker compose exec backend-test bundle exec rspec spec/models/work_package_spec.rb +time docker compose exec backend-test bundle exec rspec spec/models/work_package_spec.rb ``` | Runtime | Run1 | Run2| @@ -36,7 +36,7 @@ $ time docker compose exec backend-test bundle exec rspec spec/models/work_packa _Ref Quick Start Guide [here](https://docs.orbstack.dev/quick-start)_ ```shell -$ brew install orbstack +brew install orbstack ``` **Note:** You can use Docker contexts to run OrbStack and Docker Desktop side-by-side. Switching contexts affects all Docker commands you run from that point on. [Ref: Side-by-side](https://docs.orbstack.dev/install#reverting) @@ -51,5 +51,5 @@ docker context use desktop-linux To view the list of docker contexts run: ```shell -$ docker context ls +docker context ls ``` diff --git a/docs/development/development-environment-docker/README.md b/docs/development/development-environment-docker/README.md index dbfe1b08f6cb..5c509b74e3cd 100644 --- a/docs/development/development-environment-docker/README.md +++ b/docs/development/development-environment-docker/README.md @@ -47,7 +47,6 @@ docker compose run --rm backend-test bundle exec rspec spec/features/work_packag More details and options follow in the next section. - > **Note**: docker compose needs access to at least 4GB of RAM. E.g. for Mac, this requires > to [increase the default limit of the virtualized host](https://docs.docker.com/docker-for-mac/). > Signs of lacking memory include an "Exit status 137" in the frontend container. @@ -456,7 +455,7 @@ When a dependency of the image or the base image itself is changed you may need Ruby version is updated you may run into an error like the following when running `docker compose run --rm backend setup`: -``` +```text Your Ruby version is 2.7.6, but your Gemfile specified ~> 3.2.3 ``` diff --git a/docs/development/development-environment-osx/README.md b/docs/development/development-environment-osx/README.md index ea57e1fd59fd..47103efbf0ee 100644 --- a/docs/development/development-environment-osx/README.md +++ b/docs/development/development-environment-osx/README.md @@ -17,19 +17,19 @@ OpenProject will be installed with a PostgreSQL database. If you find any bugs or you have any recommendations for improving this tutorial, please, feel free to send a pull request or comment in the [OpenProject forums](https://community.openproject.org/projects/openproject/boards). -# Prepare your environment +## Prepare your environment We'll use [homebrew](https://brew.sh/) to install most of our requirements. Please install that first using the guide on their homepage. -## Install Ruby +### Install Ruby Use [rbenv](https://github.com/rbenv/rbenv) and [ruby-build](https://github.com/rbenv/ruby-build#readme) to install Ruby. We always require the latest ruby versions, and you can check which version is required by [checking the Gemfile](https://github.com/opf/openproject/blob/dev/Gemfile#L31) for the `ruby "~> X.Y"` statement. At -the time of writing, this version is "3.2.3" +the time of writing, this version is "3.3.1" -### Install rbenv and ruby-build +#### Install rbenv and ruby-build rbenv is a ruby version manager that lets you quickly switch between ruby versions. ruby-build is an addon to rbenv that installs ruby versions. @@ -41,11 +41,11 @@ $ brew install rbenv ruby-build $ rbenv init ``` -### Installing ruby +#### Installing ruby With both installed, we can now install the actual ruby version. You can check available ruby versions with `rbenv install --list`. -At the time of this writing, the latest stable version is `3.2.3`, which we also require. +At the time of this writing, the latest stable version is `3.3.1`, which we also require. We suggest you install the version we require in the [Gemfile](https://github.com/opf/openproject/blob/dev/Gemfile). Search for the `ruby '~> X.Y.Z'` line @@ -53,14 +53,14 @@ and install that version. ```shell # Install the required version as read from the Gemfile -rbenv install 3.2.3 +rbenv install 3.3.1 ``` This might take a while depending on whether ruby is built from source. After it is complete, you need to tell rbenv to globally activate this version ```shell -rbenv global 3.2.3 +rbenv global 3.3.1 ``` You also need to install [bundler](https://github.com/bundler/bundler/), the ruby gem bundler. @@ -69,7 +69,7 @@ You also need to install [bundler](https://github.com/bundler/bundler/), the rub gem install bundler ``` -## Setup PostgreSQL database +### Setup PostgreSQL database Next, install a PostgreSQL database. If you wish to use a MySQL database instead and have installed one, skip these steps. @@ -85,7 +85,7 @@ $ postgres -D /usr/local/var/postgres Then, create the OpenProject database user and accompanied database. ```shell -$ createuser -d -P openproject +createuser -d -P openproject ``` You will be prompted for a password, for the remainder of these instructions, we assume its `openproject-dev-password`. @@ -93,25 +93,25 @@ You will be prompted for a password, for the remainder of these instructions, we Now, create the database `openproject_dev` and `openproject_test` owned by the previously created user. ```shell -$ createdb -O openproject openproject_dev -$ createdb -O openproject openproject_test +createdb -O openproject openproject_dev +createdb -O openproject openproject_test ``` -## Install Node.js +### Install Node.js We will install the latest LTS version of Node.js via [nodenv](https://github.com/nodenv/nodenv). This is basically the same steps as for rbenv: -### Install nodenv and node-build +#### Install nodenv and node-build ```shell # Install -$ brew install nodenv node-build +brew install nodenv node-build # Initialize nodenv -$ nodenv init +nodenv init ``` -### Install latest LTS node version +#### Install latest LTS node version You can find the latest LTS version here: [nodejs.org/en/download](https://nodejs.org/en/download/) @@ -122,22 +122,22 @@ nodenv install 20.9.0 nodenv global 20.9.0 ``` -### Update NPM to the latest version +#### Update NPM to the latest version ```shell npm install npm@latest -g ``` -## Verify your installation +### Verify your installation You should now have an active ruby and node installation. Verify that it works with these commands. ```shell $ ruby --version -ruby 3.2.3 (2024-01-18 revision 52bb2ac0a6) [arm64-darwin23] +ruby 3.3.1 (2024-04-23 revision c56cd86388) [arm64-darwin23] $ bundler --version -Bundler version 2.5.5 +Bundler version 2.5.10 node --version v20.9.0 @@ -146,7 +146,7 @@ npm --version 10.5.0 ``` -# Install OpenProject +## Install OpenProject ```shell # Download the repository @@ -158,7 +158,7 @@ Note that we have checked out the `dev` branch of the OpenProject repository. De the `dev` branch (there is no `master` branch). So, if you want to develop a feature, create a feature branch from a current `dev` branch. -## Configure OpenProject +### Configure OpenProject Create and configure the database configuration file in `config/database.yml` (relative to the openproject-directory. @@ -190,7 +190,7 @@ To configure the environment variables such as the number of web server threads the `.env.example` to `.env` and add the environment variables you want to configure. The variables will be automatically loaded to the application's environment. -## Finish the Installation of OpenProject +### Finish the Installation of OpenProject Install code dependencies, link plugin modules and export translation files. @@ -211,7 +211,7 @@ RAILS_ENV=development bin/rails db:seed 1 -## Run OpenProject through overmind +### Run OpenProject through overmind You can run all required workers of OpenProject through `overmind`, which combines them in a single tab. Optionally, you may also @@ -243,14 +243,16 @@ documentation [usage section](https://github.com/DarthSim/overmind/tree/v2.4.0#u You can access the application with the admin-account having the following credentials: - Username: admin - Password: admin +```text +Username: admin +Password: admin +``` -## Run OpenProject manually +### Run OpenProject manually To run OpenProject manually, you need to run the rails server and the webpack frontend bundler to: -### Rails web server +#### Rails web server ```shell RAILS_ENV=development bin/rails server @@ -258,7 +260,7 @@ RAILS_ENV=development bin/rails server This will start the development server on port `3000` by default. -### Angular frontend +#### Angular frontend To run the frontend server, please run @@ -273,7 +275,7 @@ should you be working on the TypeScript / Angular frontend part. You can then access the application either through `localhost:3000` (Rails server) or through the frontend proxied `http://localhost:4200`, which will provide hot reloading for changed frontend code. -### Delayed Job background worker +#### Delayed Job background worker ```shell RAILS_ENV=development bundle exec good_job start @@ -281,12 +283,12 @@ RAILS_ENV=development bundle exec good_job start This will start a Delayed::Job worker to perform asynchronous jobs like sending emails. -## Additional test dependencies +### Additional test dependencies The test suite requires a few additional dependencies to be installed. These are not required for running OpenProject in development mode, but only for running the entire test suite. -### Java 7 or later +#### Java 7 or later To test the integration with LDAP servers, we rely on [ladle](https://github.com/NUBIC/ladle) to spin up an LDAP server when running tests. As this runs [ApacheDS](https://directory.apache.org/apacheds/) internally, it requires Java 7 or @@ -301,7 +303,7 @@ brew install openjdk sudo ln -sfn $(brew --prefix)/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk ``` -### Subversion +#### Subversion To test the integration with Subversion repositories, we rely on the `svnadmin` command to be available. If subversion is not installed, the tests *will be skipped*. To run the tests, install subversion with @@ -310,7 +312,7 @@ is not installed, the tests *will be skipped*. To run the tests, install subvers brew install subversion ``` -### Git +#### Git To test the integration with Git repositories, we rely on the `git` command to be available. Git is either installed via the Xcode Command Line Tools, with [Xcode](https://apps.apple.com/us/app/xcode/id497799835?mt=12) or via homebrew. @@ -323,9 +325,9 @@ xcode-select --install brew install git ``` -## Known issues +### Known issues -### Spawning a lot of browser tabs +#### Spawning a lot of browser tabs If you haven't run this command for a while, chances are that a lot of background jobs have queued up and might cause a significant amount of open tabs (due to the way we deliver mails with the letter_opener gem). To get rid of the jobs @@ -336,7 +338,7 @@ in a production setting.** RAILS_ENV=development bin/rails runner "Delayed::Job.delete_all" ``` -## Start Coding +### Start Coding Please have a look at [our development guidelines](../code-review-guidelines) for tips and guides on how to start coding. We have advice on how to get your changes back into the OpenProject core as smooth as possible. @@ -344,13 +346,13 @@ Also, take a look at the `doc` directory in our sources, especially the [how to run tests](https://github.com/opf/openproject/blob/dev/docs/development/running-tests) documentation (we like to have automated tests for every new developed feature). -## Troubleshooting +### Troubleshooting The OpenProject logfile can be found in `log/development.log`. If an error occurs, it should be logged there (as well as in the output to STDOUT/STDERR of the rails server process). -## Questions, Comments, and Feedback +### Questions, Comments, and Feedback If you have any further questions, comments, feedback, or an idea to enhance this guide, please tell us at the appropriate community.openproject.org [forum](https://community.openproject.org/projects/openproject/boards/9). diff --git a/docs/development/development-environment-ubuntu/README.md b/docs/development/development-environment-ubuntu/README.md index 67a208dc29bd..7d7b70f135f2 100644 --- a/docs/development/development-environment-ubuntu/README.md +++ b/docs/development/development-environment-ubuntu/README.md @@ -23,7 +23,7 @@ Remark: *At the time of writing* in this page refers to 12/10/2021 If you find any bugs or you have any recommendations for improving this tutorial, please, feel free to send a pull request or comment in the [OpenProject forums](https://community.openproject.org/projects/openproject/boards). -# Prepare your environment +## Prepare your environment We need an active Ruby and Node JS environment to run OpenProject. To this end, we need some packages installed on the system.o @@ -36,14 +36,14 @@ sudo apt-get update sudo apt-get install git curl build-essential zlib1g-dev libyaml-dev libssl-dev libpq-dev libreadline-dev ``` -## Install Ruby +### Install Ruby Use [rbenv](https://github.com/rbenv/rbenv) and [ruby-build](https://github.com/rbenv/ruby-build#readme) to install Ruby. We always require the latest ruby versions, and you can check which version is required by [checking the Gemfile](https://github.com/opf/openproject/blob/dev/Gemfile#L31) for the `ruby "~> X.Y"` statement. At -the time of writing, this version is "3.2.3" +the time of writing, this version is "3.3.1" -### Install rbenv and ruby-build +#### Install rbenv and ruby-build rbenv is a ruby version manager that lets you quickly switch between ruby versions. ruby-build is an addon to rbenv that installs ruby versions. @@ -64,7 +64,7 @@ echo 'eval "$(rbenv init - bash)"' >> ~/.bashrc source ~/.bashrc ``` -### Installing ruby-build +#### Installing ruby-build ruby-build is an addon to rbenv that installs ruby versions @@ -72,10 +72,10 @@ ruby-build is an addon to rbenv that installs ruby versions git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build ``` -### Installing ruby +#### Installing ruby With both installed, we can now install ruby. You can check available ruby versions with `rbenv install --list`. -At the time of this writing, the latest stable version is `3.2.3` which we also require. +At the time of this writing, the latest stable version is `3.3.1` which we also require. We suggest you install the version we require in the [Gemfile](https://github.com/opf/openproject/blob/dev/Gemfile). Search for the `ruby '~> X.Y.Z'` line @@ -83,14 +83,14 @@ and install that version. ```shell # Install the required version as read from the Gemfile -rbenv install 3.2.3 +rbenv install 3.3.1 ``` This might take a while depending on whether ruby is built from source. After it is complete, you need to tell rbenv to globally activate this version ```shell -rbenv global 3.2.3 +rbenv global 3.3.1 rbenv rehash ``` @@ -100,7 +100,7 @@ an error, first try with a fresh reboot). If you get `Command 'gem' not found...` here, ensure you followed the instructions `rbenv init` command to ensure it is loaded in your shell. -## Setup PostgreSQL database +### Setup PostgreSQL database Next, install a PostgreSQL database. @@ -127,12 +127,12 @@ Now, create the database `openproject_dev` and `openproject_test` owned by the p [postgres@ubuntu]# exit ``` -## Install Node.js +### Install Node.js We will install the latest LTS version of Node.js via [nodenv](https://github.com/nodenv/nodenv). This is basically the same steps as for rbenv: -### Install nodenv +#### Install nodenv ```shell # Install nodenv @@ -150,13 +150,13 @@ echo 'eval "$(nodenv init -)"' >> ~/.bashrc source ~/.bashrc ``` -### Install node-build +#### Install node-build ```shell git clone https://github.com/nodenv/node-build.git $(nodenv root)/plugins/node-build ``` -### Install latest LTS node version +#### Install latest LTS node version You can find the latest LTS version here: [nodejs.org/en/download/](https://nodejs.org/en/download/) @@ -168,22 +168,22 @@ nodenv global 20.9.0 nodenv rehash ``` -### Update NPM to the latest version +#### Update NPM to the latest version ```shell npm install npm@latest -g ``` -## Verify your installation +### Verify your installation You should now have an active ruby and node installation. Verify that it works with these commands. ```shell ruby --version -ruby 3.2.3 (2024-01-18 revision 52bb2ac0a6) [arm64-darwin23] +ruby 3.3.1 (2024-04-23 revision c56cd86388) [arm64-darwin23] bundler --version -Bundler version 2.5.5 +Bundler version 2.5.10 node --version v20.9.0 @@ -192,7 +192,7 @@ npm --version 10.5.0 ``` -# Install OpenProject Sources +## Install OpenProject Sources In order to create a pull request to the core OpenProject repository, you will want to fork it to your own GitHub account. @@ -214,7 +214,7 @@ Note that we have checked out the `dev` branch of the OpenProject repository. De the `dev` branch (there is no `master` branch). So, if you want to develop a feature, create a feature branch from a current `dev` branch. -## Configure OpenProject +### Configure OpenProject Create and configure the database configuration file in `config/database.yml` (relative to the openproject-directory. @@ -246,7 +246,7 @@ To configure the environment variables such as the number of web server threads the `.env.example` to `.env` and add the environment variables you want to configure. The variables will be automatically loaded to the application's environment. -## Finish the Installation of OpenProject +### Finish the Installation of OpenProject Install code dependencies, link plugin modules and export translation files. @@ -265,7 +265,7 @@ Now, run the following tasks to seed the dev database, and prepare the test setu RAILS_ENV=development bin/rails db:seed ``` -## Run OpenProject through overmind +### Run OpenProject through overmind You can run all required workers of OpenProject through `overmind`, which combines them in a single tab. Optionally, you may also @@ -297,14 +297,16 @@ documentation [usage section](https://github.com/DarthSim/overmind/tree/v2.4.0#u You can access the application with the admin-account having the following credentials: - Username: admin - Password: admin +```text +Username: admin +Password: admin +``` -## Run OpenProject manually +### Run OpenProject manually To run OpenProject manually, you need to run the rails server and the webpack frontend bundler to: -### Rails web server +#### Rails web server ```shell RAILS_ENV=development bin/rails server @@ -312,7 +314,7 @@ RAILS_ENV=development bin/rails server This will start the development server on port `3000` by default. -### Angular frontend +#### Angular frontend To run the frontend server, please run @@ -327,7 +329,7 @@ should you be working on the TypeScript / Angular frontend part. You can then access the application either through `localhost:3000` (Rails server) or through the frontend proxied `http://localhost:4200`, which will provide hot reloading for changed frontend code. -### Background job worker +#### Background job worker ```shell RAILS_ENV=development bundle exec good_job start @@ -335,9 +337,9 @@ RAILS_ENV=development bundle exec good_job start This will start a Delayed::Job worker to perform asynchronous jobs like sending emails. -## Known issues +### Known issues -### Spawning a lot of browser tabs +#### Spawning a lot of browser tabs If you haven't run this command for a while, chances are that a lot of background jobs have queued up and might cause a significant amount of open tabs (due to the way we deliver mails with the letter_opener gem). To get rid of the jobs @@ -348,7 +350,7 @@ in a production setting.** RAILS_ENV=development bin/rails runner "Delayed::Job.delete_all" ``` -## Start Coding +### Start Coding Please have a look at [our development guidelines](../code-review-guidelines/) for tips and guides on how to start coding. We have advice on how to get your changes back into the OpenProject core as smooth as possible. @@ -356,13 +358,13 @@ Also, take a look at the `doc` directory in our sources, especially the [how to run tests](https://github.com/opf/openproject/tree/dev/docs/development/running-tests) documentation (we like to have automated tests for every new developed feature). -## Troubleshooting +### Troubleshooting The OpenProject logfile can be found in `log/development.log`. If an error occurs, it should be logged there (as well as in the output to STDOUT/STDERR of the rails server process). -## Questions, Comments, and Feedback +### Questions, Comments, and Feedback If you have any further questions, comments, feedback, or an idea to enhance this guide, please tell us at the appropriate community.openproject.org [forum](https://community.openproject.org/projects/openproject/boards/9). diff --git a/docs/development/environments/README.md b/docs/development/environments/README.md index 6137d93b5c9f..11b7bdeaffa7 100644 --- a/docs/development/environments/README.md +++ b/docs/development/environments/README.md @@ -5,6 +5,6 @@ description: Get an overview of the different environments at play in the develo keywords: environments, CI, development --- - +# Environments This guide has been integrated into the [application architecture documentation](../application-architecture/). diff --git a/docs/development/first-look/README.md b/docs/development/first-look/README.md index c987f400a888..22a25755e2c0 100644 --- a/docs/development/first-look/README.md +++ b/docs/development/first-look/README.md @@ -9,7 +9,7 @@ keywords: first look, beta testing ## Join OpenProject beta testing -Your feedback is what makes our product stand out. We are happy if you feel like helping to optimize OpenProject. +Your feedback is what makes our product stand out. We are happy if you feel like helping to optimize OpenProject. ![OpenProject first look beta testing](openproject-first-look-beta-testing.jpg) diff --git a/docs/development/git-workflow/README.md b/docs/development/git-workflow/README.md index 5c4d679a8937..80426489aef7 100644 --- a/docs/development/git-workflow/README.md +++ b/docs/development/git-workflow/README.md @@ -5,35 +5,29 @@ description: How new features and bug fixes are developed at OpenProject keywords: development workflow, gitflow, git flow --- +# Development workflow - -# Development at GitHub +## Development at GitHub This guide will introduce you to how we at OpenProject develop OpenProject with Git, and how to contribute code. For other ways on how to contribute to OpenProject, [please see the contribution guide](../#contributor-code-of-conduct). The OpenProject core is developed fully at our [GitHub repository](https://github.com/opf/openproject). In the course of this guide, we assume that you are familiar with Git. If you need a refresher on certain topics, we recommend the [free Pro Git online book](https://git-scm.com/book/en/v2) as a resource for all topics on Git. - - -# Branching model +## Branching model OpenProject works with a git branching model similar to Git Flow to organize development and stable branches. The important branches are: - - - **`dev`**: Contains the current development version of OpenProject. Almost all development is made against this branch, with the exception of [bugfixes and minor changes](#bugs-and-hotfixes) - **`release/X.Y`**: Multiple of these branches may exist, they are maintenance branches or maintained or stale older releases of OpenProject. These branches will include bugfixes and changes for the next patch release of OpenProject. - **`stable/X`**: Multiple of these branches exist containing the latest stable `X.y.z` release of OpenProject. These branches are used for building docker images and packages from and are usually never pushed to directly except during an automated release process. - **`feature/X`**: These are temporary branches used by developers to develop features or other changes that are targeting the dev branch. They are opened as a pull request for reviewing and testing. When they are ready to merge, they will be merged into the `dev` branch. - **`(bug)fix/X`**: These are temporary branches used by developers to provide bug fixes and regression tests. They can be created against `dev` on a new major or minor release during stabilization, but most often, you will want to create a bugfix against a current production release. In this case, open the pull request against the most recent `release/X.Y` branch so that the bugfix will be available in the immediate next patch release. Ensure that the version of the corresponding OpenProject bug ticket matches the release branch version. - - The following is an overview of the processes that happen during the release of a new major release and the bug fixing phase afterwards leading to patch releases being made. ![Overview of the branches](branching-diagram.png) -# Contribution flow +## Contribution flow The basic overview of how to contribute code to OpenProject is as follows. @@ -42,9 +36,7 @@ The basic overview of how to contribute code to OpenProject is as follows. 3. [Create a pull request](#create-a-pull-request) on our repository. Please see and review [code style and review](../code-review-guidelines) for guidelines on how to submit a pull request and requirements for getting your changes merged. 4. We will evaluate your pull review and changes. - - -## Fork OpenProject +### Fork OpenProject For contributing source code, please follow the git workflow below: @@ -85,9 +77,7 @@ Make your changes, then push the branch into your **own** repository: git push origin ``` - - -## Create a Pull Request +### Create a Pull Request Create a pull request against a branch of of the `opf/openproject` repository, containing a **clear description** of what the pull request attempts to change and/or fix. @@ -95,21 +85,16 @@ If your pull request **does not contain a description** for what it does and wha The core contributor team will then review your pull request according to our [code review guideline](../code-review-guidelines/). Please note that you can add commits after the pull request has been created by pushing to the branch in your fork. - - -### Features +#### Features New features are always added to the current `dev` branch, which is the development version of the next major or minor OpenProject version. - - -### Bugs and hotfixes +#### Bugs and hotfixes Bugfixes for one of the actively supported versions of OpenProject should be issued against the respective branch. For that, we maintain at least one `release/X.Y` branch for OpenProject releases X.Y.Z. For example, the OpenProject release branch for 11.0 would be `release/11.0` and contains all releases between `11.0.0` until `11.0.X` . A fix for the current version (called "Hotfix" and the branch ideally being named `fix/XYZ`) should target `release/*` and a fix for the former version (called "Backport" and the branch ideally being named `backport/XYZ`) should target `backport/*`. We will try to merge hotfixes into dev branch but if that is no trivial task, we might ask you to create another PR for that. - -### Tagging +#### Tagging The stable/X branch with the highest number is the currently supported stable release. Its commits are tagged (e.g. v12.5.8) to pinpoint individual releases. diff --git a/docs/development/kerberos/README.md b/docs/development/kerberos/README.md index 6ba63a4c4a9b..c1e5e9370829 100644 --- a/docs/development/kerberos/README.md +++ b/docs/development/kerberos/README.md @@ -9,20 +9,14 @@ robots: index, follow **Note:** This guide is targeted only at development with OpenProject. For the Kerberos configuration guide, please see this guide: [Kerberos authentication guide](../../system-admin-guide/authentication/kerberos/) - - To test Kerberos, you'll need to setup a local kerberos admin and kdc server. This guide shows you how to do this for debian/ubuntu systems. YMMV on other distributions. - - ## Prerequisites - A debian / ubuntu VM or local machine - A local packaged installation installed using the hostname `openproject.local` - - ## Installing kerberos server First, install kdc and admin server: @@ -33,12 +27,8 @@ apt install krb5-kdc krb5-admin-server krb5-config -y During that installation, you'll be asked to enter the default realm. We'll use `TEST.LOCAL` in the course of this guide. - - ![Defining the default realm](realm.png) - - Next, you'll have to enter the hostnames used for your server. We'll assume this setup: - The development server is running under `openproject.local` @@ -56,24 +46,16 @@ For the administrative server, also enter `kerberos.local` The next dialog, you can simply continue with OK. The configuration will continue, and the krb5-kdc service will fail with a missing database. This is normal. - - ### Adding the realm Next, add the realm with the command `krb5_newrealm`. You'll be prompted for a password. Double-check that it prints this line or similar: `Initializing database '/var/lib/krb5kdc/principal' for realm 'TEST.LOCAL',` - - Enter a password and continue with enter. The realm is now setup. - - Next, you'll restart the kdc server with `systemctl restart krb5-kdc` and confirm it's running with `systemctl status krb5-kdc` - - ### Adding your principal You can now run `kadmin.local` to access the admin CLI for adding principals to kerberos. In that prompt, enter a new user for testing: @@ -84,7 +66,7 @@ This will prompt for a password for user1, which you have to confirm afterwards. To check that the user was created successfully, run this command `get_principal`: -``` +```text > kadmin.local: get_principal user1 Principal: user1@TEST.LOCAL Expiration date: [never] @@ -104,8 +86,6 @@ Attributes: REQUIRES_PRE_AUTH Policy: [none] ``` - - ### Create a service principal and output as keytab The OpenProject Apache module for kerberos will call the kerberos with its own service principal. That we will have to create and add a keytab for, so that the password can be access by Apache. @@ -125,13 +105,12 @@ ktadd -k /etc/apache2/openproject.keytab HTTP/openproject.local ``` Exit the `kadmin.local` console. Make sure the file is readable by apache2: + ```shell chown www-data:www-data /etc/apache2/openproject.keytab chmod 400 /etc/apache2/openproject.keytab ``` - - ## Set up Apache2 kerberos config First, install the GSSAPI apache module with: @@ -140,8 +119,6 @@ First, install the GSSAPI apache module with: apt install libapache2-mod-auth-gssapi ``` - - Add the customization dir `mkdir -p /etc/openproject/addons/apache2/custom/vhost` and create this file: `vim /etc/openproject/addons/apache2/custom/vhost/kerberos.conf` Add the following contents: @@ -175,16 +152,10 @@ Add the following contents: ``` - - -Save the file and check the config with `apache2ctl configtest`. If this works fine, restart apache with `systemctl restart apache2`. - - +Save the file and check the config with `apache2ctl configtest`. If this works fine, restart apache with `systemctl restart apache2`. If your OpenProject installation isn't yet running under `openproject.local`, run `openproject reconfigure` to change the hostname. - - ## Configure OpenProject The rest is the same as the production config. You need to tell OpenProject to use header based SSO: @@ -194,22 +165,14 @@ openproject config:set OPENPROJECT_AUTH__SOURCE__SSO_HEADER="X-Authenticated-Use openproject config:set OPENPROJECT_AUTH__SOURCE__SSO_SECRET="MyPassword" ``` - - Afterwards, restart the OpenProject server with `systemctl restart openproject` - - ## Use the integration If you access OpenProject now, you'll see that the SSO login is tried but fails: - - ![image-20220622164045060](image-20220622164045060.png) - - This is expected, as there is no `user1` login with an auth source connected. To fix that, open a console with `openproject run console` and run: ```ruby @@ -218,6 +181,4 @@ auth_source = LdapAuthSource.create! name: 'test', host: 'localhost', attr_login user = User.create! login: 'user1', firstname: 'user', lastname: 'one', mail: 'user1@example.org', admin: true, ldap_auth_source: auth_source ``` - - Now reload the page and you'll be logged in immediately. diff --git a/docs/development/ldap/README.md b/docs/development/ldap/README.md index 2f3a9dfb3fcd..ae87ae53ae07 100644 --- a/docs/development/ldap/README.md +++ b/docs/development/ldap/README.md @@ -8,7 +8,6 @@ sidebar_navigation: **Note:** This guide is targeted only at development with OpenProject. For the LDAP configuration guide, please see this [here](../../system-admin-guide/authentication/ldap-authentication/) - OpenProject comes with a built-in LDAP server for development purposes. This server uses [ladle gem](https://github.com/NUBIC/ladle) to run an underlying apacheDS server. @@ -23,7 +22,7 @@ This guide will show you how to set it up in your development instance. You only need to run this rake task to start the server: -```bash +```shell ./bin/rails ldap_groups:development:ldap_server ``` diff --git a/docs/development/localhost-ssl/README.md b/docs/development/localhost-ssl/README.md index 86f6c8edc139..3af70041e542 100644 --- a/docs/development/localhost-ssl/README.md +++ b/docs/development/localhost-ssl/README.md @@ -118,19 +118,21 @@ setup a reverse proxy in docker, like [traefik](https://traefik.io/). Then follo - create a `docker-compose.override.yml` - make your openproject services visible with specific host names, i.e. with `traefik` this means adding labels to the services defined host routers + ```yaml labels: - "traefik.http.routers.op-backend.rule=Host(`op-backend.local`)" ``` + - add the extra hosts to your `/etc/hosts` to redirect to `localhost` - add the extra hosts to your `backend` service with + ```yaml OPENPROJECT_DEV_EXTRA_HOSTS: 'op-backend.local,op-backend.local' ``` -#### Reminder - -This setup is still experimental and under further development. Use it only, when you know what you are doing. +> **Reminder**: + This setup is still experimental and under further development. Use it only, when you know what you are doing. ## Questions, Comments, and Feedback diff --git a/docs/development/packaging/README.md b/docs/development/packaging/README.md index 5ea7b5ddae64..98d61fbe0d5d 100644 --- a/docs/development/packaging/README.md +++ b/docs/development/packaging/README.md @@ -21,8 +21,6 @@ The packager.io website observes changes in the repository through webhooks and To see the status of a build, simply follow one of the links and choose a distribution whose logs you want to look at. - - ## Debugging an installed packager integration In some cases, you have an existing packaged installation and would like to debug or change parts of an addon to see if it breaks or works the way you expect it to. diff --git a/docs/development/product-development-handbook/README.md b/docs/development/product-development-handbook/README.md index a838a20e66e8..e6c60f96e640 100644 --- a/docs/development/product-development-handbook/README.md +++ b/docs/development/product-development-handbook/README.md @@ -8,8 +8,6 @@ keywords: product development, requirement process, RICE score # OpenProject product development - - ## 1. Overview & objectives OpenProject aims to connect distributed teams and organizations and make project management intuitive and fun. The application is continuously developed and maintained by an active international community to provide a powerful feature set and yet intuitive user interface. The overall purpose is to create customer benefit. To achieve this, OpenProject follows a requirements and product development process that empathizes identifying and building the functionality which most aligns with OpenProject’s product vision and delivers customer value. @@ -19,6 +17,7 @@ This guide is an evolving description of the steps taken from collecting require ## 2. Process overview The product development process involves various roles during the different phases: + * Product Manager (PM) * Designer * QA/Tester @@ -103,14 +102,12 @@ Product Managers and UX prepare the work together at least one version (~ 2 mont The specification phase may not be necessary for bug fixes, minor design changes, minor improvements of smaller code maintenance topics. - ### 3.1.1 Evaluation phase 1: Collection | Involved | Output | |----------------------------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------| | - Entire team (incl. PMs, UX researcher, developers, etc.)
    - Customers
    - Community
    - Other stakeholders | - Feature request in Wish List
    - Bugs in Bug backlog | - The [OpenProject Wish List](https://community.openproject.org/projects/openproject/work_packages?query_id=180) is used to collect a backlog of potential validation opportunities. Requirements may come from customers, internal usage, support messages, community forums or through other communication channels. Requirements should be captured as a **Feature** or **Epic** (for larger features which we can be broken down into smaller features) and focus on describing the customer’s problem rather than jumping ahead to a solution. @@ -150,14 +147,13 @@ Those features judged positively by the PM: For internal or customer requirements requirements may directly be created, evaluated based on the [RICE framework](#42-rice-score) and assigned to the product backlog. - ### 3.1.4 Evaluation phase 4: Requirement specification | Involved | Output | |----------------------------------------------------------------------------|:---------------------------------------------------------------------| | - Product Manager
    - UX Researcher
    - Developer
    - Designer | Specified feature (status “Specified”) in Product Backlog or version | -Based on the Product Managers judgement (taking among other things the RICE score and customer backing into account) validated and prioritized features (status: “In specification”) are specified in more detail: +Based on the Product Managers judgement (taking among other things the RICE score and customer backing into account) validated and prioritized features (status: “In specification”) are specified in more detail: 1. PM specifies the solution and creates mockups (e.g. PowerPoint, Google Docs, …). @@ -198,6 +194,7 @@ During the building phase we develop, improve and test the validated solutions. | - Developer
    - QA
    - Product Manager
    - Designer | Technical work packages ("Implementation") ready for implementation
    Test cases for quality assurance | The preparations the development team conducts consists of two parts: + * Preparing for the implementation * Preparing for the quality assurance @@ -209,7 +206,7 @@ For the implementation, prior to working on a new feature, the development team For the quality assurance, prior to testing the feature, QA analyzes the feature from a testing viewpoint: -1. A tester responsible for the quality assurance of the feature is selected. +1. A tester responsible for the quality assurance of the feature is selected. 2. The tester generates test cases out of the specification. Open topics (i.e. unclear specification and omissions in the specification) are clarified together with the PM/Designer. Ideally the preparation of both QA and development happen at the same time so that the specification can be adjusted as early as possible. At the same time, there isn't an explicit need for it to be synchronized. @@ -247,7 +244,7 @@ Changes to the technical documentation, e.g API documentation, are done in paral 1. Tester adapts test plan if acceptance criteria was altered since the original creation of the test plan. 2. Tester performs and verifies additional tests according to the [Writing and Running Tests guide](../../development/running-tests/) to ensure the application has been tested according to specifications and requirements. -3. Tester tests feature (based on test plan) +3. Tester tests feature (based on test plan) 1. Tester adjusts status when no errors in feature (status: “tested”). 2. Tester adjusts status when errors occur (status: “test failed”) and notifies developer (move back to phase 2 - Implementation) @@ -272,7 +269,7 @@ If required changes are identified or predefined acceptance criteria is not met, |------------------------------------|:-------------------| | - Product manager
    - Designer | Documented feature | -1. PM/Designer writes the user documentation for the developed feature. +1. PM/Designer writes the user documentation for the developed feature. ### 3.3.5 Building phase 5: Stabilization @@ -287,8 +284,10 @@ Developed features are bundled into a version that is released to the public via 3. QA identifies important bugs to be fixed in the release. 4. Developer fixes bugs from regression testing as well as bugs from former versions. 5. Tester retests bugs + * Tester adjusts status on errors (status: “test failed"). * Tester adjusts status when no errors are found (status: “closed"). + 6. Developer fixes bugs that were not fixed successfully. 7. DevOps deploys release candidate on community.openproject.org. 8. DevOps monitors for failures. @@ -361,15 +360,11 @@ A helpful guideline with further information on the RICE framework is provided b The RICE scoring model aims to objectively evaluate requirements (new products, features, add-ons, …) based on four different criteria to determine the RICE Score: - - > RICE Score = **R**each x **I**mpact x **C**onfidence / **E**ffort - The RICE framework is used especially in the early phases of evaluating requirements and provides an easy and fast way to prioritize feature requests. For complex requirements with a low level of confidence (80% or lower) and / or high effort (more than 1 week), an opportunity canvas should be used in addition to the RICE score. - **Reach** The first factor when determining the RICE score is the number of users reached by the feature. @@ -379,8 +374,6 @@ The reach ranges from 0.5 for minimal reach (less than 5% of users) to 10.0 for Data sources to estimate this may include queries and user data of an associated feature (e.g. number of users using the “Work packages” module on community.openproject.org to determine the value for a new work package requirement), qualitative customer interviews, customer requests, comments on work packages, surveys, etc.. - - **Impact** The second numerator is Impact which refers to the benefits for users and customers. Impact can refer to quantitative measures, such as conversion improvements, increased revenue, decreased risk or decreased cost or to qualitative measures, such as increasing customer delight. @@ -390,8 +383,6 @@ Impact ranges from “Minimal” (0.25) to “Massive” (3.0). The higher the impact, the higher the RICE score. - - **Confidence** Especially for more complex requirements it may be unclear what the reach, impact or effort is. The team may rely more on intuition for a factor. To account for this uncertainty, the confidence component is used. @@ -402,8 +393,6 @@ The confidence score ranges from 50% for low confidence to 100% for high confide If you arrive at a confidence level below 50%, consider this requirement a “Moonshot” and focus your energy on other requirements. - - **Effort** The three aforementioned factors (Reach, Impact, Confidence) represent the numerators of the RICE score. The effort score refers to the estimated resources (product, design, engineering, quality assurance, etc.) in person-months needed to implement a feature. @@ -412,56 +401,38 @@ The effort estimate is an approximate measure which uses shirt sizing. The effort score ranges from 0.03 (XS = less than a day of effort) to 20 (XXXL = more than 12 months of effort). - - ### 4.3 Opportunity Canvas One of the main artifacts used in the evaluation phase is the Opportunity Canvas. The Opportunity Canvas - [slightly adapted from GitLab](https://about.gitlab.com/handbook/product-development-flow) - provides a quick overview of a requirement and includes four main sections as well as two supplemental sections: - - **Main sections:** - - **1. Problem** States the problem that the feature request is addressing. This includes the **Customer** information (the affected persona or persona segment that experiences the problem most acutely), a **Problem** description and a description of the customer **Pain**. - - **2. Business Case** The business case is closely aligned with the RICE score. The business case section includes information on the **Reach** (number of affected customers), **Impact** (how much value do customers get from the feature) and **Confidence** (what are the top risk factors that could prevent the delivery of the solution). Additionally, the **Urgency and Priority** section provides information about the relative importance of the requirement compared to other opportunities, deadlines and other time-related information. - - **3. Solution** The solution to the problem can be laid out in this section. Define the **Minimal Viable Change** in a first version, what is **Out of scope** and the **Differentiation** from the current experience and competing solutions. As an outlook, also provide some information on the **Next iteration**. - - **4. Launch and Growth** To get a complete picture of the requirement and its impact, it is essential to consider its marketing message early on.Define how you **Measure** if you solved the problem by specifying important metrics. Additionally, you can formulate a marketing **message** to identify the value proposition as early as possible. Last but not least, briefly outline the **Go to Market** strategy. - - **Supplemental sections:** - - **1. Learnings** The Opportunity Canvas is an iterative work document. As such it is often helpful to collect some assumptions early on and validate them when conducting customer interviews and learning more about the problem and solution. The Learning section provides space to collect assumptions and validate them over time. - - **2. Learning Goals** The Learning Goals space is closely related to the Learning section. It includes assumptions and ways to validate or invalidate assumptions. @@ -470,9 +441,6 @@ The Opportunity Canvas is intended to quickly validate or invalidate ideas and t An Opportunity Canvas may not always be required - especially when a problem is well understood or small in scope. - - **References:** - [Opportunity Canvas Template](https://docs.google.com/document/d/1sgNrEx_PRCwewI9-46mN0qnyzz2AWq_SwFc6gLOcrbI/edit) - diff --git a/docs/development/profiling/README.md b/docs/development/profiling/README.md index 980c39d5ee4b..9ee193abb75d 100644 --- a/docs/development/profiling/README.md +++ b/docs/development/profiling/README.md @@ -33,10 +33,12 @@ CUSTOM_PLUGIN_GEMFILE=gemfile.profiling OPENPROJECT_RACK_PROFILER_ENABLED=true t This will start the application in development mode, which oftentimes is sufficient, but will lead to slightly distorted results since reloading and reloading checks, especially the ones for I18n, will take place. To avoid this, the application can be started in production mode but before this can happen, the code needs to be adapted slightly: + * Search for the places where `OPENPROJECT_RACK_PROFILER_ENABLED` is referenced within the code and remove the references to `Rails.env.development?` from the conditions. At the time of writing, this needs to be done at: * `config/initializers/rack_profiler.rb` * `config/initializers/secure_headers.rb` * Read the profiling gems to your `Gemfile`/`Gemfile.local`/`Gemfile.profiling` since they would otherwise only be available in the development environment: + ```ruby gem 'flamegraph' gem 'rack-mini-profiler' @@ -45,6 +47,7 @@ gem 'stackprof' ``` Start thin via: + ```shell SECRET_KEY_BASE='abcd' RAILS_ENV=production CUSTOM_PLUGIN_GEMFILE=gemfile.profiling OPENPROJECT_RACK_PROFILER_ENABLED=true thin start ``` diff --git a/docs/development/report-a-bug/README.md b/docs/development/report-a-bug/README.md index 29cf2c940d86..7b65e3b9bc73 100644 --- a/docs/development/report-a-bug/README.md +++ b/docs/development/report-a-bug/README.md @@ -17,12 +17,12 @@ If you find a bug please create a bug report. 6. Attach a screen-shot or log-file file (optional). 7. Press **Create**. +## Information you should add to the bug description -# Information you should add to the bug description - -## Preconditions to reproduce the bug +### Preconditions to reproduce the bug Prior to detailing which steps to take to reproduce the error, the necessary preconditions which have to be met should be stated. + * Which browser did you use when you experienced the error? * Do you receive any error messages in the browser console when the error occurs? Please include the error message if applicable. * Please also include the contents of the browser's developer tool's network tab where applicable. @@ -30,49 +30,49 @@ Prior to detailing which steps to take to reproduce the error, the necessary pre Example: -``` +```markdown * Forum exists * Forum messages exist with many replies ``` -## Steps to reproduce the bug +### Steps to reproduce the bug * The detailed steps that led to the bug should be listed in the description in order to replicate the bug and determine the underlying problem. Example: -``` +```markdown 1. Go to forum 2. Scroll to bottom of messages ``` -## Actual behavior +### Actual behavior * The actual, erroneous behavior should be stated briefly and concisely. Example: -``` +```markdown * Not possible to switch to next entry in pagination ``` -## Expected behavior +### Expected behavior * If known, the expected behavior of the application should be described concisely. Example: -``` +```markdown * Possible to switch to next pagination page ``` -## Screenshots +### Screenshots * If applicable, a screenshot should be added to the bug report in order to explain the bug visually. * The unintended behavior should be marked in the screenshot (e.g. by using red color). * The screenshot can be attached as a file and can be integrated in the description with the following syntax: "!Name_of_screenshot.png!" (without quotation marks) (Notice: *Name_of_screenshot* should be replaced with the respective name of the file. The file ending (here: *.png*) has to be adjusted to the appropriate file type of the screenshot.) -## Example of bug reporting +### Example of bug reporting ![bug_report_example](bug_report_example-1706822.png) diff --git a/docs/development/running-tests/README.md b/docs/development/running-tests/README.md index 0eebfa67defc..3f482e5797eb 100644 --- a/docs/development/running-tests/README.md +++ b/docs/development/running-tests/README.md @@ -2,9 +2,9 @@ OpenProject uses automated tests throughout the stack. Tests that are executed in the browser (angular frontend, rspec system tests) require to have Chrome installed. To ensure we deliver high quality code to our customers, it's essential to conduct various types of tests. +## Testing - -## Involved Roles +### Involved Roles Testing OpenProject is distributed between different roles and members, depending on the testing task. @@ -14,9 +14,7 @@ Testing OpenProject is distributed between different roles and members, dependin - **Usability testing**: UX Designer, Customers, Community members - **Accessibility testing**: Product team, Developer, External accessibility experts - - -## Functional testing +### Functional testing Functional testing ensures that the application works against the set of requirements or specifications. Tests should therefore make sure all the acceptance criteria are met. @@ -31,14 +29,10 @@ The following types of functional tests are used at OpenProject. | [Sanity and regression tests](#sanity-and-regression-tests) | Manual testing of affected or relevant components made after changes or bug fixes to the application. Performed by QA. | e.g., testing the critical path of creating work packages after a bug fix has been made in that data model
    Manual execution of test plan defined by QA | | [Acceptance tests](#acceptance-tests) | Final phase of manual testing where the system is evaluated against predefined requirements to ensure it meets user and stakeholder expectations before deployment. | Manual interactions with customers and stakeholders to identify whether we're building the correct part | - - -### Unit tests +#### Unit tests Unit testing concerns testing of isolating individual components of the application, such as individual methods within a model, service, or library, in order to verify that they perform as expected under various conditions. OpenProject uses RSpec for writing unit tests / specs. - - **Key objectives and effects** 1. **Isolated validation of individual components**: Unit tests isolate the smallest testable parts of an application, often single methods or functions, to validate that they function as intended. @@ -46,8 +40,6 @@ Unit testing concerns testing of isolating individual components of the applicat 3. **Code quality**: Unit tests shape the development of a component, ensuring that it is testable by reducing coupling between components and by that, improves code quality. Unit tests, when well written, serve as a form of documentation. 4. **Ease of maintenance**: Unit tests in an interpreted language like Ruby make it easier and safer to refactor code, add new features, or integrate new changes with confidence, knowing that existing functionality is well-tested and which functionality breaks when moving code. - - **Best practices** - Follow the Arrange-Act-Assert (AAA) Pattern @@ -63,24 +55,18 @@ Unit testing concerns testing of isolating individual components of the applicat - Use `FactoryBot` to set up test data in a structured, but randomized way to prevent brittle tests - Mock external components and services, and ensure you test the boundaries of the associated components - - **References** - https://www.browserstack.com/guide/integration-testing - https://www.codewithjason.com/difference-integration-tests-controller-tests-rails/ - https://guides.rubyonrails.org/testing.html - - -### Integration tests +#### Integration tests Integration tests focus on the interactions between different components of OpenProject to ensure they work together to deliver a specific functionality. OpenProject uses RSpec to perform integration tests to simulate real-world user behavior. In contrast to system tests, integration tests still leave out some assumptions or characteristics of the application (e.g., not running tests in an instrumented browser instance). In Rails, the difference between integration tests and feature tests can be blurry. At OpenProject, we assume every test that involves an instrumented browser instance is a *feature spec*. Integration tests can be request or controller specs, or specs in other folders explicitly marked as integration, meaning it will not use mocking to separate the involved components. - - **Key objectives and effects** 1. **Verifying interaction of components**: The primary objective of integration testing is to verify that different components or modules of the application work together as intended. @@ -97,14 +83,10 @@ In Rails, the difference between integration tests and feature tests can be blur - Be wary of long-running and brittle tests and how to avoid them. Due to the nature of integration tests, execution of tests may be prone to more flickering results when compared to unit tests. - Know the difference between integration (i.e., requests, controller) tests and system/feature tests and when to use them. - - -### Feature tests +#### Feature tests Feature tests at OpenProject drive a browser instance to act as if a user was operating the application. This includes logging in, setting session cookies, and navigating/manipulating the browser to interact as the user. - - **Key objectives and effects** 1. **End-to-end testing**: Validate the interaction between the entire stack of the application, including the frontend and backend, to ensure they work as expected. @@ -115,8 +97,6 @@ Feature tests at OpenProject drive a browser instance to act as if a user was op 4. **Responsiveness and compatibility**: Verify that the application's user interface behaves consistently across various browsers, languages, and screen sizes. - - **Best practices** - Happy paths and main errors or permission checks should always be tested with a system test. Avoid testing all edge cases or boundaries using the entire stack, as this will result in slowdown of our CI infrastructure. @@ -126,58 +106,42 @@ Feature tests at OpenProject drive a browser instance to act as if a user was op - While frowned upon in unit tests, test the entire use-case in as few examples as possible to avoid additional overhead (starting the browser, loading factories into database etc.). When using multiple examples, use `let_it_be` / `shared_let` and other improvements from the [test-prof gem](https://github.com/test-prof/test-prof) - Add automated regression tests for bug fixes that are non-trivial - - -### Smoke tests +#### Smoke tests Smoke tests are automated and manual tests to ensure the main application features and happy paths are working as expected. At OpenProject, all installation methods are automatically tested using smoke tests. Packaging processes test all distributions for successful installation of OpenProject. We run the released docker image for setting up and accessing OpenProject. - - **Key objectives and effects** 1. **Verify basic functionality**: Perform a quick check to ensure that the most critical functionalities of the application are working as expected. 2. **Find showstoppers**: Identify critical bugs early in the development process before the stabilization phase. 3. **Early feedback**: Provide quick feedback to the development team. - - **Best practices** - Automate smoke testing on top of manual testing when possible - Run after deployments to the appropriate [environments](../environments), e.g., the edge environment for features of the next release and staging environment for bug fixes to a stable release - Keep smoke tests updated so that they can evolve together with the application - - **References** - https://www.browserstack.com/guide/smoke-testing - - -### Sanity and regression tests +#### Sanity and regression tests Sanity and regression tests are manually performed tests by QA for relevant components on a stabilized version, e.g., the developed new features or components of an OpenProject release. A sanity test is a subset of a regression test, which evaluates the entire application prior to a release or production deployment. - - **Key objectives and effects** 1. **Proper scoping of the test**: For regression test, QA will evaluate the entire application, executing common use-cases of OpenProject. Sanity tests will instead test a subset of the application, e.g., a specific feature in the process of stabilization. 2. **Change impact**: Identify the impact of new code changes, updates, or bug fixes on the relevant functionality or module of OpenProject. 3. **Confidence**: Increases confidence among stakeholders that new or changed functionalities work as expected. - - **Best practices** - Document test plans for regression tests so that they can be executed easily and new QA employees can be onboarded easily - Be very selective about what you test for sanity testing. Focus only on the areas that were affected by recent changes - Stay updated to major code changes so that the regression test plan can be adapted appropriately - - **Usage at OpenProject** For writing and executing manual sanity and regression testing, especially focusing on functional requirements, one of the tools in use at OpenProject is TestLink (https://testlink.org/) to achieve the following goals: @@ -187,24 +151,18 @@ For writing and executing manual sanity and regression testing, especially focus - Test cases are updated with every change of the specifications. - Test cases have precise execution steps and expected results. - - **References** - https://www.browserstack.com/guide/sanity-testing - https://www.browserstack.com/guide/regression-testing - https://medium.com/@Jia_Le_Yeoh/difference-between-regression-sanity-and-smoke-testing-ed2129bf049 - - -### Acceptance tests +#### Acceptance tests Acceptance testing is the final phase of testing where the extension to the OpenProject application is evaluated against predefined requirements to ensure it meets user and stakeholder expectations before deployment. Acceptance tests evaluate both functional and non-functional requirements. - - **Key objectives and effects** 1. **Validation of requirements**: Ensure that the defined feature / change meets all specified requirements, as outlined by the stakeholders and defined by the product team. @@ -213,17 +171,13 @@ Acceptance tests evaluate both functional and non-functional requirements. 4. **System behavior**: Confirm that all features and functionalities behave as expected in real-world scenarios. 5. **Data integrity and workflow**: Verify the end-to-end processes, and ensure data consistency and integrity throughout the system. - - **Best practices** 1. Ensure customer provided user stories and acceptance criteria is well defined before development phase is entered, or be clear and open about the scope of what is to be built. 2. Perform acceptance test in an environment that mimics the production environment as closely as possible. This could be an isolated edge environment, or a separately deployed instance at the customer's request. 3. Maintain clear and detailed documentation of test cases, outcomes, and any *discrepancies* between expected and actual implementation and results. - - -## Non-functional testing +### Non-functional testing Non-functional testing goes beyond the functionality of the product and is aimed at end-user experience. Test cases should hence make sure to define what is expected in terms of security, performance, compatibility, accessibility etc. @@ -237,22 +191,16 @@ Examples for non-functional test cases: software should be compatible with most | [Usability tests](#usability-testing) | Evaluating the UX of the application as defined and in comparison to the requirements. Involves QA, Product, Customer. | e.g., verifying common use-cases as defined in the requirements in an early development stage (such as a PullPreview deployment), or on a pre-released version of the application. | | [Accessibility tests](#accessibility-tests) | Evaluating the accessibility of the application according to [WCAG AA](https://www.w3.org/WAI/WCAG2AA-Conformance) and similar standards | Performing automated keyboard navigation tests.
    Manually executing screen readers to ensure application can be used. | - - -### Performance tests +#### Performance tests Identify and prevent common causes of bottlenecks in the application. As OpenProject is a software where a lot of information might come together and presented in a very flexible manner, performance is an ever-present concern and consideration for the developers. - - **Key objectives and effects** 1. **Reliability**: Improve the reliability of the application by identifying bottlenecks and performance issues. 2. **Stress testing**: Identify the limits and the breaking points of the application. 3. **User satisfaction**: Ensure that users have a good experience for common use-cases. - - **Best practices** - Include performance tests, automated or manual, in the development of every feature that involves moving a lot of user data @@ -260,14 +208,10 @@ Identify and prevent common causes of bottlenecks in the application. As OpenPro - Establish a performance baseline so that you can compare how code changes impact performance over time. - OpenProject implements monitoring tools for SaaS applications to monitor performance and identify bottlenecks. - - -### Security tests +#### Security tests Automated or manual security tests for OpenProject are evaluating common weaknesses of web applications and follow the best practices of the [secure coding guidelines](../concepts/secure-coding/). - - **Key objectives and effects** 1. **Vulnerability assessment**: Identify and prevent common security vulnerabilities in the application, such as SQL injection, CSRF, and XSS vulnerabilities. @@ -275,8 +219,6 @@ Automated or manual security tests for OpenProject are evaluating common weaknes 3. **Risk mitigation**: Early identification of security vulnerabilities helps mitigate risks associated with data breaches and unauthorized access. 4. **Audit and compliance**: Ensure that the application complies with internal security guidelines, as well as any industry-specific security standards. - - **Best practices** - Use statical and dynamical code analysis for automated vulnerability testing. OpenProject uses CodeQL and Brakeman as part of the CI pipeline to give early feedback to common vulnerabilities. @@ -285,16 +227,12 @@ Automated or manual security tests for OpenProject are evaluating common weaknes - If possible, automate security tests for common vulnerabilities for input in your development. - Train on recent vulnerabilities and checklists such as [OWASP Top Ten](https://owasp.org/www-project-top-ten/) or [OWASP cheat sheets](https://cheatsheetseries.owasp.org) to stay up-to-date on security testing and extend our security test suite with new information. - - -### Installation and upgrade tests +#### Installation and upgrade tests OpenProject employs a number of automated tests for installation testing. Packaged installation build tests for various distributions, Docker installation smoke tests for verifying correct startup and basic operation of the container. Upgrade tests are manually performed for major code changes and data migrations on pre-release candidates to ensure migrations are working as expected. The [OpenProject Community](https://community.openproject.org) instance also serves as an early release candidate to allow early testing and feedback. - - **Key objectives and effects** 1. **Verify seamless installation**: Ensure that OpenProject can be installed as documented. @@ -304,8 +242,6 @@ Upgrade tests are manually performed for major code changes and data migrations 5. **Technical support**: Reduce the number of support tickets related to installation and upgrade issues. 6. **Operational efficiency**: Minimize downtime and service interruptions during the upgrade process. - - **Best practices** - Use automated testing scripts to simulate various installation and upgrade scenarios. @@ -313,14 +249,10 @@ Upgrade tests are manually performed for major code changes and data migrations - Keep up-to-date documentation for the installation and upgrade procedures, including a list of known issues and workarounds. - Example of test cases would be ensuring that software works in a satisfying manner on major browsers and operating systems which are defined in [system-requirements](../../installation-and-operations/system-requirements/) - - -### Usability testing +#### Usability testing When new features or changes to the application are available on our [Edge or Community environments](../environments), product team members, customers, and community users can provide usability feedback on how the change is perceived. - - **Key objectives and effects** 1. **User-friendliness**: Evaluate how easily end-users can navigate and perform tasks within the application, focusing on intuitiveness and accessibility. @@ -333,8 +265,6 @@ When new features or changes to the application are available on our [Edge or Co 5. **Reduced support costs**: Intuitive and user-friendly designs decrease the volume of help desk or support questions. - - **Best practices** - Involve actual users in requirements and usability feedback to collect genuine user insights. @@ -342,14 +272,10 @@ When new features or changes to the application are available on our [Edge or Co - **Real-world scenarios**: Test the application by simulating real-world tasks and scenarios that a typical user would encounter. - **Quantitative and qualitative metrics**: Use a mix of metrics like task completion rates, error rates, and user satisfaction surveys to comprehensively assess usability. - - -### Accessibility tests +#### Accessibility tests OpenProject strives to be accessible for all users while also retaining a high usability. In web applications, these two requirements can sometimes be a seemingly contradictory requirement, especially when animations or *modern* functionalities of browsers are used. - - **Key objectives and effects** 1. **Compliance with WCAG**: Standards exists to ensure and implement means of accessible interactions for all users. @@ -358,8 +284,6 @@ OpenProject strives to be accessible for all users while also retaining a high u 4. **Navigational ease**: Application can be effectively navigated using only a keyboard, without requiring a mouse. 5. **Contrast and readability**: Test text contrast, size, and spacing to ensure readability for users with visual impairments. - - **Best practices** 1. Make accessibility testing an integral part of the development lifecycle, starting with the requirements. @@ -369,8 +293,6 @@ OpenProject strives to be accessible for all users while also retaining a high u 5. Use [capybara-accessible-selectors](https://github.com/citizensadvice/capybara_accessible_selectors) in [feature tests](#feature-tests) to find UI elements using screen-reader compatible selectors. This ensures the page elements used by feature tests are accessible to assistive technologies. 6. Consult with accessibility experts to conduct audits and provide recommendations for improvements. Alternatively, consult the development colleagues with experience in accessibility testing to evaluate requirements and implementation proposals. - - **References** - https://www.deque.com/axe/browser-extensions/ @@ -379,9 +301,7 @@ OpenProject strives to be accessible for all users while also retaining a high u - https://github.com/dequelabs/axe-core-gems/blob/develop/packages/axe-core-rspec/README.md - https://github.com/citizensadvice/capybara_accessible_selectors - - -# Continuous testing workflow +## Continuous testing workflow As part of the [development flow at OpenProject](../../development/#branching-model-and-development-flow), proposed changes to the core application will be made through a GitHub pull request and the entire test suite is automatically evaluated on GitHub Actions. You will see the results as a status on your pull request. @@ -389,15 +309,12 @@ You will likely start working with the OpenProject test suite through our contin Successful test suite runs are one requirement to see your changes merged. - -## List failures +### List failures A failing status will look like the following on your pull request. You may need to click *Show all checks* to expand all checks to see the details link. ![Exemplary failing github actions test suite](github-broken-tests-pr.png) - - Here you'll see that the *GitHub Actions* check has reported an error, which likely means that your pull request contains errors. It might also result from a [temporary error running the test suite](#tests-failing-on-github-actions-ci-and-passing-locally), or from a test that was broken in the `dev` branch. The test suite is [run in parallel](#parallel-testing) to save time. The overall run time of the test suite is around *15 minutes* on GitHub. @@ -408,11 +325,10 @@ Click on the Details link to see the individual *jobs* that GitHub executes. ![Exemplary failed status details](github-broken-tests-pr-details1.png) - - Click on each job and each step to show the [log output for this job](https://github.com/opf/openproject/pull/9355/checks?check_run_id=2730782867). It will contain more information about how many tests failed and will also temporarily provide a screenshot of the browser during the occurrence of the test failure (only if a browser was involved in testing). In our example, multiple tests are reported as failing: + ```shell rspec ./spec/features/work_packages/pagination_spec.rb[1:1:1:1] # Work package pagination with project scope behaves like paginated work package list is expected not to have text "WorkPackage No. 23" rspec ./spec/features/work_packages/pagination_spec.rb[1:2:1:1] # Work package pagination globally behaves like paginated work package list is expected not to have text "WorkPackage No. 29" @@ -423,21 +339,16 @@ rspec ./spec/features/work_packages/timeline/timeline_navigation_spec.rb:317 # W ![GitHub job log showing failing test](github-broken-tests.png) - - -## Diagnose failures +### Diagnose failures Once you know which tests are failing, run them locally to try and reproduce the failures. Having reproducible failures locally is the first step to diagnose and fix them. How to do this depends on the kind of job that failed. - **Errors in the npm group** An error in the *npm* group means you likely have broken an existing Angular component spec or added an invalid new one. Please see the [Frontend tests](#frontend-tests) section on how to run them. - - **Errors in the units group** An error in the *units* group means there is a failing ruby unit test. Please see the [Unit tests](#unit-tests) section on how to run these. @@ -446,8 +357,6 @@ An error in the *units* group means there is a failing ruby unit test. Please se You will be able to run failing tests locally in a similar fashion for all errors reported in the `units` and `features` jobs. Please see the [System tests](#system-tests) section for more information. - - **Helper to extract all failing tests** There is a small ruby script that will parse the logs of a GitHub Actions run and output all `rspec` tests that failed for you to run in one command. @@ -462,8 +371,7 @@ If you want to run the tests directly to rspec, you can use this command: ./script/github_pr_errors | xargs bundle exec rspec ``` - -## Tests failing on GitHub Actions CI and passing locally +### Tests failing on GitHub Actions CI and passing locally Some tests can fail on GitHub actions CI, and pass locally which makes them harder to reproduce, diagnose, and fix. @@ -499,35 +407,25 @@ Possible reasons are: * Roll the migration back: `rails db:migrate:down VERSION=` * Switch back to where you left: `git switch -` - - -## Skip test execution on GitHub Actions CI +### Skip test execution on GitHub Actions CI Sometimes, you know you're pushing changes to a pull request that you now are work in progress or are known to break existing or new tests. To avoid additional test executions, you can include `[skip ci]` in your commit message to ensure GitHub Actions are not being triggered and skips your build. Please note that a successful merge of your pull request will require a green CI build. - - -# Running tests locally +## Running tests locally As there are multiple ways employed to test OpenProject, you may want to run a specific test or test group. - - -## Prerequisites +### Prerequisites In order to be able to run tests locally, you need to have set up a local development stack. - - -### Verifying your dependencies +#### Verifying your dependencies To ensure your local installation is up to date and prepared for development or running tests, there is a helper script `./bin/setup_dev` that installs backend and frontend dependencies. When switching branches or working on a new topic, it is recommended to run this script again. - - -### Setting up a test database +#### Setting up a test database As part of the development environment guides, you will have created a development and test database and specified it under `config/database.yml`: @@ -548,25 +446,17 @@ test: database: openproject_test ``` - - The configuration above determines that a database called `openproject_test` is used for the backend unit and system tests. The entire contents of this database is being removed during every test suite run. - - Before you can start testing, you will often need to run the database migrations first on the development and the test database. You can use the following rails command for this: ```shell RAILS_ENV=development rails db:migrate db:test:prepare ``` - - This migrates the _development_ database, outputting its schema to `db/schema.rb` and will copy this schema to the test database. This ensures your test database matches your current expected schema. - - -## Frontend tests +### Frontend tests To run JavaScript frontend tests, first ensure you have all necessary dependencies installed via npm (i.e. `npm install`). @@ -582,9 +472,7 @@ Alternatively, when in the `frontend/` folder, you can also use the watch mode o ./node_modules/.bin/ng test --watch ``` - - -## Unit tests +### Unit tests After following the prerequisites, use the following command to run individual specs: @@ -598,9 +486,7 @@ Run multiple specs by separating them with spaces: RAILS_ENV=test bundle exec rspec spec/models/work_package_spec.rb spec/models/project_spec.rb ``` - - -## System tests +### System tests System tests are also called *rspec feature specs* and use [Capybara](https://rubydoc.info/github/teamcapybara/capybara/master) and [Selenium](https://www.selenium.dev/documentation/webdriver/) to run. They are automatically executed with an actual browser when `js: true` is set. @@ -610,17 +496,13 @@ System tests are located in `spec/features`. Use the following command to run in RAILS_ENV=test bundle exec rspec spec/features/auth/login_spec.rb ``` - - -### Dependencies +#### Dependencies For the javascript dependent integration tests, you have to install Chrome and Firefox, to run them locally. Capybara uses Selenium to drive the browser and perform the actions we describe in each spec. We have tests that mostly depend on Chrome and Chromedriver, but some also require specific behavior that works better in automated Firefox browsers. - - -### Running system tests +#### Running system tests Almost all system tests depend on the browser for testing, you will need to have the Angular CLI running to serve frontend assets. @@ -632,15 +514,13 @@ RAILS_ENV=test bundle exec rspec ./modules/documents/spec/features/attachment_up The tests will generally run a lot slower due to the whole application being run end-to-end, but these system tests will provide the most elaborate tests possible. - - You can also run *all* feature specs locally with this command. This is not recommended due to the required execution time. Instead, prefer to select individual tests that you would like to test and let GitHub Actions CI test the entire suite. ```shell RAILS_ENV=test bundle exec rake parallel:features -- --group-number 1 --only-group 1 ``` -#### WSL2 +##### WSL2 In case you are on Windows using WSL2 rather than Linux directly, running tests this way will not work. You will see an error like "Failed to find Chrome binary.". The solution here is to use Selenium Grid. @@ -700,15 +580,13 @@ bundle exec rspec ./modules/documents/spec/features/attachment_upload_spec.rb[1: There is no need to prefix this with the `RAILS_ENV` here since we've exported it already before. -### Headless testing +#### Headless testing Firefox tests through Selenium are run with Chrome as `--headless` by default. This means that you do not see the browser that is being tested. Sometimes you will want to see what the test is doing to debug. To override this behavior and watch the Chrome or Firefox instance set the ENV variable `OPENPROJECT_TESTING_NO_HEADLESS=1`. +#### Troubleshooting - -### Troubleshooting - -``` +```text Failure/Error: raise ActionController::RoutingError, "No route matches [#{env['REQUEST_METHOD']}] #{env['PATH_INFO'].inspect}" ActionController::RoutingError: @@ -718,9 +596,7 @@ Failure/Error: raise ActionController::RoutingError, "No route matches [#{env['R If you get an error like this when running feature specs it means your assets have not been built. You can fix this either by accessing a page locally (if the rails server is running) once or by ensuring the `bin/setup_dev` script has been run. - - -## Entire local RSpec suite +### Entire local RSpec suite You can run the specs with the following commands: @@ -728,8 +604,7 @@ You can run the specs with the following commands: * `SPEC_OPTS="--seed 12935" bundle exec rake spec` Run the core specs with the seed 12935. Use this to control in what order the tests are run to identify order-dependent failures. You will find the seed that GitHub Actions CI used in their log output. - -## Parallel testing +### Parallel testing Running tests in parallel makes usage of all available cores of the machine. Functionality is being provided by [parallel_tests](https://github.com/grosser/parallel_tests) gem. @@ -743,8 +618,6 @@ By default, `parallel_test` will use CPU count to parallelize. This might be a b export PARALLEL_TEST_PROCESSORS=4 ``` - - Adjust `database.yml` to use different databases: ```yaml @@ -773,7 +646,7 @@ If you want to run specific tests (e.g., only those from the team planner module RAILS_ENV=test bundle exec parallel_rspec -- modules/team_planner/spec ``` -## Automatically run tests when files are modified +### Automatically run tests when files are modified To run tests automatically when a file is modified, you can use [watchexec](https://github.com/watchexec/watchexec) like this: @@ -795,18 +668,17 @@ wrspec spec/some/path/to/a_particular_spec.rb To easily change the RSpec examples being run without relaunching `watchexec` every time, you can focus a particular example or example group with `focus: true`, `fit`, `fdescribe`, and `fcontext`. More details available on [RSpec documentation](https://rspec.info/features/3-12/rspec-core/filtering/filter-run-when-matching/). - -## Manual acceptance tests +### Manual acceptance tests * Sometimes you want to test things manually. Always remember: If you test something more than once, write an automated test for it. * Assuming you do not have a version of Edge already installed on your computer, you can grab a VM with preinstalled IE's directly from [Microsoft](https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/) -## Accessing a local OpenProject instance from a VM or mobile phone +### Accessing a local OpenProject instance from a VM or mobile phone If you want to access the development server of OpenProject from a VM or your mobile phone, you need to work around the CSP `localhost` restrictions. -### Old way, fixed compilation +#### Old way, fixed compilation One way is to disable the Angular CLI that serves some of the assets when developing. To do that, run @@ -820,7 +692,7 @@ OPENPROJECT_CLI_PROXY='' ./bin/rails s -b 0.0.0.0 -p 3000 Now assuming networking is set up in your VM, you can access your app server on `:3000` from it. -### New way, with ng serve +#### New way, with ng serve **The better way** when you want to develop against your local setup is to set up your server to allow the CSP to the remote host. @@ -839,7 +711,7 @@ OPENPROJECT_CLI_PROXY='http://:4200' ./bin/rails s -b 0.0.0.0 -p You might have to also update your host name setting `bundle exec rake setting:set[host_name=yourip]`. -## Legacy LDAP tests +### Legacy LDAP tests OpenProject supports using LDAP for user authentications. To test LDAP with OpenProject, load the LDAP export from `test/fixtures/ldap/test-ldap.ldif` @@ -850,12 +722,12 @@ Setting up the test ldap server is beyond the scope of this documentation. The Apache DS project provides a simple LDAP implementation that should work good as a test server. -## Running tests locally in Docker +### Running tests locally in Docker Most of the above applies to running tests locally, with some docker specific setup changes that are discussed [in the docker development documentation](../development-environment-docker). -## Generators +### Generators In order to support developer productivity and testing confidence, we've extracted out common setup and boilerplate for good tests as RSpec generators and are encouraged to use them when adding a new spec file in OpenProject. diff --git a/docs/development/saml/README.md b/docs/development/saml/README.md index 969f62fec089..0d8d040f9c1e 100644 --- a/docs/development/saml/README.md +++ b/docs/development/saml/README.md @@ -8,37 +8,25 @@ sidebar_navigation: **Note:** This guide is targeted only at development with OpenProject. For the SAML configuration guide, please see this [here](../../system-admin-guide/authentication/saml/) - - To test the SAML integration in your development setup, you can use the following repository: [docker-test-saml-idp](https://github.com/kristophjunge/docker-test-saml-idp) - - The following guide will provide insights how to set it up in your OpenProject development instance. - - ## Prerequisites - A working docker installation - A development setup of OpenProject (or any other configurable installation) - - ## Running the SAML idP We need to run the SimpleSAMLphp idP contained in the docker container. We only extend it slightly by giving the user configuration file more attributes so that OpenProject can pick it up. The default users configuration is lacking some of the default attributes OpenProject expects. - - Create a new folder `saml-idp` and switch to it ```shell mkdir saml-idp && cd saml-idp ``` - - Create a file `users.php` with the following content ```shell @@ -70,9 +58,7 @@ $config = array( ); ``` - - -You can now run the docker container and the updated configuration with this command. +You can now run the docker container and the updated configuration with this command. ```shell docker run \ @@ -86,8 +72,6 @@ docker run \ kristophjunge/test-saml-idp ``` - - If you're not using a development installation of OpenProject, you'll need to change the ENV variables slightly: ```shell @@ -102,18 +86,12 @@ docker run \ kristophjunge/test-saml-idp ``` - - ## Configure OpenProject for SAML On the OpenProject side, you'll have to configure SAML to connect to the just started idP service: - - Here's a minimal configuration that you can put into `config/configuration.yml` - - ```yaml default: saml: @@ -134,12 +112,8 @@ default: last_name: ['sn'] ``` - - Here, again you will have to change the hostname `localhost:3000` with the hostname of your OpenProject installation, and the iDP host name if you're not running both locally. I'd recommend to run both locally though for simplicity. - - Restart OpenProject and you'll see a login button "simplesaml-docker". You will redirected to the simplesaml-php docker container and can login with either: - *login*: user1, *password*: user1pass diff --git a/docs/development/style-guide/frontend/README.md b/docs/development/style-guide/frontend/README.md index 1bb4c9fbb0d0..1b2728608c9d 100644 --- a/docs/development/style-guide/frontend/README.md +++ b/docs/development/style-guide/frontend/README.md @@ -1,23 +1,29 @@ # OpenProject development style guide - frontend ## Code format + OpenProject follows the [AirBnB's style guide](https://github.com/airbnb/javascript) regarding to the code format. ## Development patterns + ### Angularized -OpenProject follows the [Angular's style guide](https://angular.io/guide/styleguide) patterns. + +OpenProject follows the [Angular's style guide](https://angular.io/guide/styleguide) patterns. ### Declarative + Declarative Programming is a paradigm where the code describes **what to do** by encapsulating the **how to do it** (implementation details) under abstractions. The ultimate result of declarative programming is the creation of a new Domain Specific Language (DSL). #### What -* Encapsulate logic in methods with meaningful names. - * Domain/Business logic: \ + +* Encapsulate logic in methods with meaningful names. + * Domain/Business logic: \ Encapsulate the implementation details in the subdomain service (e.g., login should be placed in the AuthService and encapsulate all the login functionality). - * Presentation or interaction logic: \ -Encapsulate the implementation details in a component’s method or in a Presenter (service scoped/provided in the component). + * Presentation or interaction logic: \ +Encapsulate the implementation details in a component’s method or in a Presenter (service scoped/provided in the component). #### Example + ```javascript // Imperative programming const bestProducts = []; @@ -38,26 +44,26 @@ const bestProducts = products.filter(function(product) { const bestProducts = getBestProducts(); ``` - An example in OpenProject would be the APIV3Service that encapsulates all the logic to deal with the OpenProject API. - #### Why -* Code is easier to understand and reason about. -* Favours reusability. -* Simplifies refactoring. -* The state management becomes predictable, easy to trace, and under control. -* Aligns with unidirectional data flow (Stores) and the Components Architecture. -* Increases coding pleasure and productivity. +* Code is easier to understand and reason about. +* Favours reusability. +* Simplifies refactoring. +* The state management becomes predictable, easy to trace, and under control. +* Aligns with unidirectional data flow (Stores) and the Components Architecture. +* Increases coding pleasure and productivity. ### Immutable -Not capable of or susceptible to change. An immutable value can’t be changed, when edited a new copy is returned. +Not capable of or susceptible to change. An immutable value can’t be changed, when edited a new copy is returned. #### What + Do not mutate objects, spread the word. -* Do not edit object’s, use the immutable alternatives: + +* Do not edit object’s, use the immutable alternatives: ```javascript const copy = {...originalObject}; @@ -65,7 +71,7 @@ const add = {...originalObject, propertyToChange: 'new value'}; const remove = {propertyToDelete, ...newObjectWithoutThePropertyToDelete}; ``` -* Avoid Array mutation methods (push, pop, shift, unshift, sort, reverse, splice, delete), use their immutable alternatives: +* Avoid Array mutation methods (push, pop, shift, unshift, sort, reverse, splice, delete), use their immutable alternatives: ```javascript clone = x => [...x]; @@ -79,18 +85,19 @@ splice = (s, c, ...y) => x => [...x.slice(0, s), ...y, ...x.slice(s + c)]; ``` #### Why -* In Javascript, Objects can be [edited by reference](https://javascript.info/object-copy), opening the door to unpredictable mutations that can have unintended effects on other parts of the app. -* Makes code easier to understand because data changes become explicit and obvious. -* Avoids a set of [hard to detect bugs](https://2ality.com/2019/10/shared-mutable-state.html). -* Enables unidirectional data flow. -* Enables performance improvements through ChangeDetectionStrategy.OnPush +* In Javascript, Objects can be [edited by reference](https://javascript.info/object-copy), opening the door to unpredictable mutations that can have unintended effects on other parts of the app. +* Makes code easier to understand because data changes become explicit and obvious. +* Avoids a set of [hard to detect bugs](https://2ality.com/2019/10/shared-mutable-state.html). +* Enables unidirectional data flow. +* Enables performance improvements through ChangeDetectionStrategy.OnPush ### Unidirectional data flow -The app has a single way to read and to write the state, and both are separated ([Command Query Segregation](https://khalilstemmler.com/articles/oop-design-principles/command-query-segregation/)). +The app has a single way to read and to write the state, and both are separated ([Command Query Segregation](https://khalilstemmler.com/articles/oop-design-principles/command-query-segregation/)). #### State definition + We can differentiate two types of states in our application: * Local: belongs to a single component. Includes mainly UI state. @@ -128,132 +135,150 @@ To reduce server requests, side effects **should be** be calculated in the front **Note:** The proper solution to this problem would be a backend that can push updates for collections and entities that we are requiring. However, implementing and relying on websockets comes with its own challenges. - -#### Flow +#### Flow ![data-flow](./data-flow-diagram.png) -* Component/Service requests an update to the Store (directly or through an Action) -* Store changes the state and emits an updated copy of the state -* Component receives the update and renders the new state - +* Component/Service requests an update to the Store (directly or through an Action) +* Store changes the state and emits an updated copy of the state +* Component receives the update and renders the new state #### Unidirectional data flow in the view / component’s tree + Angular also follows the unidirectional data flow pattern in the view to improve the performance and simplify the state distribution: -* When the state could have been updated (an async operation happens), Angular performs [Change Detection](https://indepth.dev/posts/1058/a-gentle-introduction-into-change-detection-in-angular) in one way, from top to bottom, from the root component all the tree down checking every child component for changes. -* Every component that receives state updates (@Input, Services, UI...), updates itself, renders its view and then triggers Change Detection for its child components. -* If the children would trigger state changes up to the parent (bidirectional data flow (two way data binding)), the parent should update itself and then trigger Change Detection for the children, which could trigger changes up to the parent… causing a loop. -* This is why unidirectional data flow is enforced in development mode (ExpressionChangedAfterItHasBeenCheckedError) and encouraged in the Components Architecture. +* When the state could have been updated (an async operation happens), Angular performs [Change Detection](https://indepth.dev/posts/1058/a-gentle-introduction-into-change-detection-in-angular) in one way, from top to bottom, from the root component all the tree down checking every child component for changes. +* Every component that receives state updates (@Input, Services, UI...), updates itself, renders its view and then triggers Change Detection for its child components. +* If the children would trigger state changes up to the parent (bidirectional data flow (two way data binding)), the parent should update itself and then trigger Change Detection for the children, which could trigger changes up to the parent… causing a loop. +* This is why unidirectional data flow is enforced in development mode (ExpressionChangedAfterItHasBeenCheckedError) and encouraged in the Components Architecture. #### What -* Do use the chosen state management library by default. + +* Do use the chosen state management library by default. #### Why -* Stores concentrate the state management, allowing the different parts of the application to remain highly decoupled. -* Container components concentrate the state distribution through @Input and @Outputs, so the state flow is clear just by taking a look at the template. -* The state management becomes predictable, easy to trace, and under control. -* Reduces side effects and facilitates debugging. -* Encourages data normalization and avoids duplications. -* Code is easier to understand and reason about. -* Increases coding pleasure and productivity. +* Stores concentrate the state management, allowing the different parts of the application to remain highly decoupled. +* Container components concentrate the state distribution through @Input and @Outputs, so the state flow is clear just by taking a look at the template. +* The state management becomes predictable, easy to trace, and under control. +* Reduces side effects and facilitates debugging. +* Encourages data normalization and avoids duplications. +* Code is easier to understand and reason about. +* Increases coding pleasure and productivity. ### Components architecture + Mental mindset to build clearer apps based on the differentiation between Container Components (CC), Presentational Components (PC) and Services. #### Services + Are state and logic containers. ##### What -* Encapsulate logic in services: - * State (Store) + Domain logic (state CRUD) - * Complex UI logic (Presenters) -* Provide a meaningful API to access the state and logic. -* Follow the unidirectional data flow pattern + +* Encapsulate logic in services: + * State (Store) + Domain logic (state CRUD) + * Complex UI logic (Presenters) +* Provide a meaningful API to access the state and logic. +* Follow the unidirectional data flow pattern ##### Why -* Decouples state management from components. -* Allows to keep the components lean. -* Scoped Shareability: allow to share the state and logic scoped to components, modules or globally. -* Testability -* Encourages Declarative Programming -* Testability: easier to test because there are no side effects (pure). + +* Decouples state management from components. +* Allows to keep the components lean. +* Scoped Shareability: allow to share the state and logic scoped to components, modules or globally. +* Testability +* Encourages Declarative Programming +* Testability: easier to test because there are no side effects (pure). #### Container components (CC) + Represent a feature that interacts with the state. This could be a page (routed component) but also standalone components (e.g. sign-in button (tied to the AuthService)). ##### Responsibilities -* Inject the State Services (Stores). -* Contain Presentational Components (PC), usually. -* Bridge State Services (Stores) and PCs: - * Pass down state updates (from Stores) through PCs’ @Outputs - * React to PCs’ @Outputs -* Notes: - * Could contain other CCs. - * Could contain presentational logic (show/hide PCs, calculations..), in those cases are named something like Mixed Components. + +* Inject the State Services (Stores). +* Contain Presentational Components (PC), usually. +* Bridge State Services (Stores) and PCs: + * Pass down state updates (from Stores) through PCs’ @Outputs + * React to PCs’ @Outputs +* Notes: + * Could contain other CCs. + * Could contain presentational logic (show/hide PCs, calculations..), in those cases are named something like Mixed Components. ##### Example + Pages, components that are routed, are usually container components since the need to fetch state to display it. ##### What -* Concentrate the interaction with the state (Stores) in Container Components. + +* Concentrate the interaction with the state (Stores) in Container Components. ##### Why -* Separation of concerns; separates state interaction from UI (presentation and interaction). -* Concentrates state interaction; the state management becomes more predictable, easy to trace, and under control. -* Simplifies the state flow: the state distribution through @Input and @Outputs makes the state flow clear just by taking a look at the template. -* Reduces side effects and facilitates debugging. -* Code is easier to understand and reason about. -* Increases coding pleasure and productivity. + +* Separation of concerns; separates state interaction from UI (presentation and interaction). +* Concentrates state interaction; the state management becomes more predictable, easy to trace, and under control. +* Simplifies the state flow: the state distribution through @Input and @Outputs makes the state flow clear just by taking a look at the template. +* Reduces side effects and facilitates debugging. +* Code is easier to understand and reason about. +* Increases coding pleasure and productivity. #### Presentational components + Are the building blocks of the UI. ##### Responsibilities -* Present/display state that is passed via @Inputs. -* Handle user interaction: - * Implement the interaction logic - * Emit @Outputs -* Notes: - * Could contain: - * Other Presentational Components and Container Components. - * Presenter Services that encapsulate complex UI logic (computed styles, UI calculations...)). + +* Present/display state that is passed via @Inputs. +* Handle user interaction: + * Implement the interaction logic + * Emit @Outputs +* Notes: + * Could contain: + * Other Presentational Components and Container Components. + * Presenter Services that encapsulate complex UI logic (computed styles, UI calculations...)). ##### Example -Components from UI libraries are usually Presentational Components (e.g., [material button](https://github.com/angular/components/blob/master/src/material/button/button.ts)). + +Components from UI libraries are usually Presentational Components (e.g., [material button](https://github.com/angular/components/blob/master/src/material/button/button.ts)). ##### What -* Create presentational components to encapsulate UI logic (presentation or interaction). +* Create presentational components to encapsulate UI logic (presentation or interaction). ##### Why -* Reusability: \ + +* Reusability: \ Presentational components are more reusable because: - * Are not tied to a concrete business logic. - * Usually perform a generic interaction/presentation (button, tab, list, layout) -* Increase - * Productivity - * Standardization -* Align with Design Systems -* Improved testability because there are no side effects (pure). -* Are easier to replace. + * Are not tied to a concrete business logic. + * Usually perform a generic interaction/presentation (button, tab, list, layout) +* Increase + * Productivity + * Standardization +* Align with Design Systems +* Improved testability because there are no side effects (pure). +* Are easier to replace. ### Clean + Clean code is easily readable, understandable, changeable, extensible, scalable and maintainable. #### What -* Do follow clean [patterns and rules](https://github.com/labs42io/clean-code-typescript) - * [Summary of the Clean Code principles](https://gist.github.com/wojteklu/73c6914cc446146b8b533c0988cf8d29) + +* Do follow clean [patterns and rules](https://github.com/labs42io/clean-code-typescript) + * [Summary of the Clean Code principles](https://gist.github.com/wojteklu/73c6914cc446146b8b533c0988cf8d29) #### Why -* Standardizes the code. -* Increases debuggability. -* Code is easier to understand and to reason about. -* Increases coding pleasure and productivity. + +* Standardizes the code. +* Increases debuggability. +* Code is easier to understand and to reason about. +* Increases coding pleasure and productivity. ### BEM CSS + #### What -* Do follow BEM directives: - * [https://en.bem.info/methodology/css/](https://en.bem.info/methodology/css/) - * [https://en.bem.info/methodology/html/](https://en.bem.info/methodology/html/) + +* Do follow BEM directives: + * [https://en.bem.info/methodology/css/](https://en.bem.info/methodology/css/) + * [https://en.bem.info/methodology/html/](https://en.bem.info/methodology/html/) diff --git a/docs/development/translate-openproject/README.md b/docs/development/translate-openproject/README.md index 4ba689aaae00..f41c4c8913e9 100644 --- a/docs/development/translate-openproject/README.md +++ b/docs/development/translate-openproject/README.md @@ -24,7 +24,7 @@ To help us translate OpenProject, please follow the links above and follow the i ## How the translation process works -When a new OpenProject version is developed it typically contains new English text (strings). +When a new OpenProject version is developed it typically contains new English text (strings). CrowdIn facilitates the translation of those strings to different languages. Here is how the translation process works in detail: @@ -35,21 +35,19 @@ Here is how the translation process works in detail: 3. When the new OpenProject version is released users can use the translations in their own instances with the next OpenProject version. ## How to translate OpenProject via CrowdIn + You can easily help translate OpenProject by creating a (free) CrowdIn account and by joining the [OpenProject CrowdIn project](https://crowdin.com/projects/opf). Once you joined the project, you can provide translations by following these steps: Select the language for which you want to contribute (or vote for) a translation (below the language you can see the progress of the translation). ![Language overview in OpenProject CrowdIn project](crowdin-overview.png "Language overview in OpenProject CrowdIn project") +You will be shown an overview of translatable files in the `dev` and `release` channel. In the below example, the norwegian project is about 33% translated. Simply click the "Translate All" button to show an editor with all untranslated strings. - -You will be shown an overview of translatable files in the `dev` and `release ` channel. In the below example, the norwegian project is about 33% translated. Simply click the "Translate All" button to show an editor with all untranslated strings. ![Select OpenProject version to translate in CrowdIn](crowdin-language-overview.png "Language overview of translatable files") ![crowdin-editor](crowdin-editor.png "The crowdin editor view") - - On the left hand side (1), strings ordered by translation status will be shown on the left. You can search for specific strings above that list, and also change the filters. The red square next to an English string shows that a string has not been translated yet. To provide a translation, select a string on the left side, provide a translation in the target language (2) in the text box in the right side and press the save button. Some strings might have pluralization rules, in which case there is a tab that you can enter each value. @@ -60,8 +58,6 @@ As soon as a translation has been provided by another user (green square next to Once a translation has been provided, a proof reader can approve the translation and mark it for use in OpenProject. - - ## Becoming a proof reader If you are interested in becoming a proof reader, please contact one of the project managers in the OpenProject CrowdIn project or send us an email at support@openproject.org. diff --git a/docs/enterprise-guide/README.md b/docs/enterprise-guide/README.md index 4f127280401a..b366b9a1de25 100644 --- a/docs/enterprise-guide/README.md +++ b/docs/enterprise-guide/README.md @@ -10,7 +10,7 @@ keywords: manage subscription, enterprise edition, cloud edition Welcome to the OpenProject **Enterprise guide**. -> **Note**: This guide only describes the management and administration of your Enterprise cloud and Enterprise on-premises subscription. +> **Note**: This guide only describes the management and administration of your Enterprise cloud and Enterprise on-premises subscription. > The Enterprise add-on descriptions are included in the respective parts of the OpenProject [user guide](../user-guide) and [System admin guide](../system-admin-guide). The OpenProject Enterprise editions (cloud and on-premises) contain all OpenProject Community features plus the additional OpenProject [Enterprise add-ons](https://www.openproject.org/enterprise-edition/#enterprise-add-ons), as well as professional [support](https://www.openproject.org/pricing/#support). @@ -21,13 +21,12 @@ Find out more about our different [support options](./support/). ## Enterprise add-ons -This video (english only) provides an overview of the [Enterprise add-ons](https://www.openproject.org/enterprise-edition/#enterprise-add-ons). +This video (english only) provides an overview of the [Enterprise add-ons](https://www.openproject.org/enterprise-edition/#enterprise-add-ons). ![OpenProject Enterprise add-ons](https://openproject-docs.s3.eu-central-1.amazonaws.com/videos/OpenProject-Enterprise-add-ons.mp4) Find a detailed feature comparison [here](https://www.openproject.org/pricing/#features). - ## Enterprise cloud | Topic | Content | @@ -41,8 +40,6 @@ Find a detailed feature comparison [here](https://www.openproject.org/pricing/#f | [Backups](./enterprise-cloud-guide/backups) | How do backups work in the cloud. | | [GDPR](./enterprise-cloud-guide/gdpr-compliance) | Review and sign a Data Processing Agreement (DPA). | - - ## Enterprise on-premises | Topic | Content | diff --git a/docs/enterprise-guide/enterprise-cloud-guide/README.md b/docs/enterprise-guide/enterprise-cloud-guide/README.md index 591de1db57fa..2bf1e550bc92 100644 --- a/docs/enterprise-guide/enterprise-cloud-guide/README.md +++ b/docs/enterprise-guide/enterprise-cloud-guide/README.md @@ -13,7 +13,6 @@ Welcome to the OpenProject **Enterprise cloud guide**. > **Note**: This guide only describes the management of your Enterprise cloud. The feature descriptions are included in the respective parts of the OpenProject [user guide](../../user-guide). - ## Overview | Topic | Content | diff --git a/docs/enterprise-guide/enterprise-cloud-guide/backups/README.md b/docs/enterprise-guide/enterprise-cloud-guide/backups/README.md index 8de0c1cc19e1..04cf322793ed 100644 --- a/docs/enterprise-guide/enterprise-cloud-guide/backups/README.md +++ b/docs/enterprise-guide/enterprise-cloud-guide/backups/README.md @@ -12,7 +12,7 @@ keywords: backups Your Enterprise cloud data is backed up continuously and retained for 30 days. Within those 30 days we can restore your data to any point in time with a precision of 5 minutes, in case you need us to. (currently this is valid only for cloud instances located in the openproject.com cloud environment) -*Note: At the moment it is only possible to restore the complete instance into a former state. All future edits after the former state will be not available in the restored instance. In order to offer you the possibility of recreating the restored information to your productive instance, the restored version is temporarily available on a separate URL. You will have all the time you need to clone the lost information from the temporary instance to the production one. This could be done by using e.g. API calls or manual interaction.* +*Note: At the moment it is only possible to restore the complete instance into a former state. All future edits after the former state will be not available in the restored instance. In order to offer you the possibility of recreating the restored information to your productive instance, the restored version is temporarily available on a separate URL. You will have all the time you need to clone the lost information from the temporary instance to the production one. This could be done by using e.g. API calls or manual interaction.* ## Resource limitations for attachments @@ -22,8 +22,6 @@ In this case you cannot check the **Include attachments** check-box like on the ![backup-enterprise-cloud](backup-enterprise-cloud.png) - - ## Backup via GUI For detailed usage of the Backup via GUI, please navigate to the [System admin guide Backup page](../../../system-admin-guide/backup/) diff --git a/docs/enterprise-guide/enterprise-cloud-guide/book-cloud/README.md b/docs/enterprise-guide/enterprise-cloud-guide/book-cloud/README.md index d609280bba00..4187d529b2c0 100644 --- a/docs/enterprise-guide/enterprise-cloud-guide/book-cloud/README.md +++ b/docs/enterprise-guide/enterprise-cloud-guide/book-cloud/README.md @@ -13,8 +13,6 @@ Please refer to our website for the Enterprise cloud edition [pricing](https://w You can subscribe to a monthly or yearly plan. The subscription can be **paid via Credit Card or Bank transfer** (only for yearly subscriptions for customers in the EU, Switzerland and the United States). - - To upgrade your trial to the full version, **click on the BUY NOW teaser**, e.g. in the application header or project menu. ![Enterprise cloud edition](Cloud-edition-buy-now-teaser.png) @@ -51,7 +49,7 @@ Click the blue **Next** button. ![payment-details](payment-details.png) -You will once again get an overview about your subscription. +You will once again get an overview about your subscription. Here, you can edit the account or billing information if needed. Subscribe to our regular newsletter in order to keep up to date with latest product developments. diff --git a/docs/enterprise-guide/enterprise-cloud-guide/create-cloud-trial/README.md b/docs/enterprise-guide/enterprise-cloud-guide/create-cloud-trial/README.md index 692b9fdfd07b..ca5a0fd164c4 100644 --- a/docs/enterprise-guide/enterprise-cloud-guide/create-cloud-trial/README.md +++ b/docs/enterprise-guide/enterprise-cloud-guide/create-cloud-trial/README.md @@ -26,7 +26,7 @@ Click the Start Free Trial button. You will then be asked to [create an OpenProject account](../../../getting-started/sign-in-registration/#create-a-new-account). -1. Enter your first and last **name**. +1. Enter your first and last **name**. 2. Enter your **e-mail address**. 3. Choose a **password** and confirm the password. The password must at least be 10 characters long and needs to contain at least two of the following classes, uppercase letters, lowercase letters, special characters, numbers. 4. Please confirm the OpenProject [privacy policy](https://www.openproject.org/legal/privacy/) and the [terms of service](https://www.openproject.org/legal/terms-of-service/). diff --git a/docs/enterprise-guide/enterprise-cloud-guide/create-quote-cloud/README.md b/docs/enterprise-guide/enterprise-cloud-guide/create-quote-cloud/README.md index ae939cbe7070..590ddff86259 100644 --- a/docs/enterprise-guide/enterprise-cloud-guide/create-quote-cloud/README.md +++ b/docs/enterprise-guide/enterprise-cloud-guide/create-quote-cloud/README.md @@ -28,8 +28,6 @@ You will be directed to -> *Administration* -> *Billing*. ![request-a-quote-cloud](request-a-quote-cloud.png) - - You will then be asked to provide your address details. After populating the respective fields please click on **Request a quote**. After that you will receive an **email with the quote**. The email includes a link to accept the quote. Your subscription will be updated once you accept the quote. diff --git a/docs/enterprise-guide/enterprise-cloud-guide/enterprise-cloud-faq/README.md b/docs/enterprise-guide/enterprise-cloud-guide/enterprise-cloud-faq/README.md index cb18b6d33c30..c51cdf7742ed 100644 --- a/docs/enterprise-guide/enterprise-cloud-guide/enterprise-cloud-faq/README.md +++ b/docs/enterprise-guide/enterprise-cloud-guide/enterprise-cloud-faq/README.md @@ -20,7 +20,6 @@ You can do this in your OpenProject instance in the administration. The number o Please have a look at [this instruction](../manage-cloud-subscription/) for the Enterprise cloud edition to change your payment details. - ## Does OpenProject comply with GDPR? Yes. The protection of personal data is for OpenProject more than just a legal requirement. We are highly committed to data security and privacy. We are a company based in Berlin, the European Union, and the awareness and importance for data security and privacy actions have always been a major topic for us. OpenProject complies with GDPR and we handle our customer’s data with care. Get more detailed information [here](https://www.openproject.org/security-and-privacy/). @@ -31,7 +30,7 @@ The data center (AWS) we use for Enterprise cloud edition is ISO27001 certified. For more information please visit the [information regarding security measures](https://www.openproject.org/legal/data-processing-agreement/technical-and-organizational-data-security-measures) on our website. -## How to change the Open Project Enterprise cloud creators account? +## How to change the OpenProject Enterprise cloud creators account? Users (who are administrators) can change email addresses and accounts of other users, but not their own account. Single administrators can change their own account/email address by creating a second administrator account and using the new administrator to change data of the first administrator. The second administrator could be deactivated again afterwards by the first administrator. Normal users CAN change their own email address, just not their login. @@ -41,7 +40,7 @@ A list of all sub-processors used in the OpenProject Enterprise cloud can be fou Please note: For the OpenProject Enterprise cloud we currently have two SaaS infrastructures: -**OpenProject.com** +**OpenProject.com** This infrastructure is hosted at AWS in Dublin. For sending transactional emails we use the service Postmark which is based in the US. diff --git a/docs/enterprise-guide/enterprise-cloud-guide/gdpr-compliance/README.md b/docs/enterprise-guide/enterprise-cloud-guide/gdpr-compliance/README.md index 9cbd17f7aad7..586ebb668c5e 100644 --- a/docs/enterprise-guide/enterprise-cloud-guide/gdpr-compliance/README.md +++ b/docs/enterprise-guide/enterprise-cloud-guide/gdpr-compliance/README.md @@ -34,7 +34,7 @@ All OpenProject GmbH employees employ industry standard data security measuremen ## Data Management and Portability -The GDPR includes grants to every data subject the right to access, modify, receive, and delete their own data. +The GDPR includes grants to every data subject the right to access, modify, receive, and delete their own data. OpenProject customers with admin accounts on their instance act as data controllers for their team members and have elaborate means to perform these request on behalf of the data subjects they are responsible for. @@ -71,6 +71,4 @@ Please navigate to -> Administration -> GDPR and you can now online review and s ![OpenProject DPA](DPA.png) - - Find out more about [OpenProject's security features](../../../security-and-privacy/statement-on-security/#openproject-security-features). diff --git a/docs/enterprise-guide/enterprise-cloud-guide/invoices-and-billing-history/README.md b/docs/enterprise-guide/enterprise-cloud-guide/invoices-and-billing-history/README.md index 064edd4368ba..d723d985c9f7 100644 --- a/docs/enterprise-guide/enterprise-cloud-guide/invoices-and-billing-history/README.md +++ b/docs/enterprise-guide/enterprise-cloud-guide/invoices-and-billing-history/README.md @@ -12,8 +12,8 @@ You will **receive an invoice for your OpenProject Enterprise cloud edition via The invoice lists the subscription (billing) period as well as the next billing date. -You will also see the payment status. -For invoices via bank transfer, the money needs to be paid via bank transfer to the bank account listed at the bottom of the invoice. +You will also see the payment status. +For invoices via bank transfer, the money needs to be paid via bank transfer to the bank account listed at the bottom of the invoice. > **Note**: For the correct assignment of payments, please enter the invoice number on your bank transfer. @@ -31,7 +31,7 @@ In the overlay window, click on the link **Billing History**. ![cloud-billing-history](cloud-billing-history-0584990.png) -Here, you will get an overview about all your past payments for the Enterprise cloud edition. +Here, you will get an overview about all your past payments for the Enterprise cloud edition. With the **Download link** you can download the invoices. @@ -48,8 +48,8 @@ To do this, you can sign into your OpenProject environment and select the "Buy n ### When does my OpenProject contract end? -The user may terminate the contract at any time, which will apply by the end of the subscription period (including last day). In case of credit card payment the subscription period is one month or one year; in case of payment via invoice the subscription period is one year. The [agreed subscription period](https://www.openproject.org/legal/terms-of-service/) will be extended automatically if the contract was not terminated on time. +The user may terminate the contract at any time, which will apply by the end of the subscription period (including last day). In case of credit card payment the subscription period is one month or one year; in case of payment via invoice the subscription period is one year. The [agreed subscription period](https://www.openproject.org/legal/terms-of-service/) will be extended automatically if the contract was not terminated on time. ### What shall I do when I run into payment issues with OpenProject? -In case you use the bank transfer payment method please indicate the invoice number. You can find this information in the corresponding invoice (OP…). Otherwise the automatic banking system is not able to detect your payment. Please do not hesitate to contact accounting@openproject.com if you have any further questions. +In case you use the bank transfer payment method please indicate the invoice number. You can find this information in the corresponding invoice (OP…). Otherwise the automatic banking system is not able to detect your payment. Please do not hesitate to contact accounting@openproject.com if you have any further questions. diff --git a/docs/enterprise-guide/enterprise-cloud-guide/sign-in/README.md b/docs/enterprise-guide/enterprise-cloud-guide/sign-in/README.md index 266a43f9827f..152a1c2f9d99 100644 --- a/docs/enterprise-guide/enterprise-cloud-guide/sign-in/README.md +++ b/docs/enterprise-guide/enterprise-cloud-guide/sign-in/README.md @@ -24,8 +24,6 @@ Click the green **Sign in button** and you will be logged into your OpenProject ![Sign-in-enter-organization](Sign-in-enter-organization.png) - - ## Forgot organization name of OpenProject Enterprise cloud If you forgot the URL or the organization name of your OpenProject Enterprise cloud edition and need to find your organization, you can click the **Find your organization** link on the Sign in page of the website. @@ -40,8 +38,6 @@ Click the Submit button to get an email with further information. You will receive an email from OpenProject with the installations you are currently member of. - - ![E-Mail-Instances](E-Mail-Instances.png) Click the link in the email to get directed to your installation. If you are member of several OpenProject installations, they will all be listed in this email. diff --git a/docs/enterprise-guide/enterprise-on-premises-guide/activate-enterprise-on-premises/README.md b/docs/enterprise-guide/enterprise-on-premises-guide/activate-enterprise-on-premises/README.md index b333e46341bb..b8bcbb996899 100644 --- a/docs/enterprise-guide/enterprise-on-premises-guide/activate-enterprise-on-premises/README.md +++ b/docs/enterprise-guide/enterprise-on-premises-guide/activate-enterprise-on-premises/README.md @@ -11,7 +11,7 @@ The OpenProject Enterprise on-premises edition builds on top of the Community ed In order to upgrade your OpenProject Community edition to the Enterprise on-premises edition, sign into your OpenProject environment with an administrator account. -**Click on your user avatar in the upper right corner** (1) and select **Administration** from the dropdown menu (2). +**Click on your user avatar in the upper right corner** (1) and select **Administration** from the dropdown menu (2). ![Enterprise-Admin](Enterprise-Admin.png) @@ -19,8 +19,6 @@ Next, select **Enterprise edition** from the menu items (3). ![enterprise-select-menu](image-20210120113056133.png) - - Do you already have an Enterprise on-premises token? Yes: Then you can proceed entering your token as described below. @@ -39,9 +37,6 @@ If you want to **order the Enterprise on-premises edition** click on the **+ Ord ![Order-Enterprise-on-premises](Upgrade-to-Enterprise-on-premises.png) - - Once you purchased an Enterprise on-premises edition token or received a trial token you can [activate it by pasting the token in the designated area of the Enterprise edition section](#activate-the-enterprise-on-premises-edition). You can find pricing options and FAQ regarding pricing, booking and billing on our [pricing website](https://www.openproject.org/pricing/#faq). - diff --git a/docs/enterprise-guide/enterprise-on-premises-guide/enterprise-on-premises-faq/README.md b/docs/enterprise-guide/enterprise-on-premises-guide/enterprise-on-premises-faq/README.md index 07ee8417e182..4dc525f3ed5b 100644 --- a/docs/enterprise-guide/enterprise-on-premises-guide/enterprise-on-premises-faq/README.md +++ b/docs/enterprise-guide/enterprise-on-premises-guide/enterprise-on-premises-faq/README.md @@ -21,7 +21,7 @@ The Enterprise on-premises edition is an upgrade of the self-hosted Community ed 1. Navigate to [www.openproject.org/enterprise-edition/](https://www.openproject.org/enterprise-edition/). 2. Click on the "Book now" button. -3. Follow the steps to purchase the Enterprise on-premises edition license. You will then receive an Enterprise on-premises edition license key by email which you can use to upgrade your Community edition to the Enterprise on-premises edition. +3. Follow the steps to purchase the Enterprise on-premises edition license. You will then receive an Enterprise on-premises edition license key by email which you can use to upgrade your Community edition to the Enterprise on-premises edition. If you prefer to test the Enterprise on-premises edition before purchasing, you can request a 14 day trial license from within your system (*Administration -> Enterprise edition*). Simply click on the green **Start free trial** button to receive a 14 day trial license. If you want to continue, you can navigate to our [pricing page](https://www.openproject.org/pricing/) and choose a plan. Otherwise, you will automatically be downgraded to the Community edition. There is no need to cancel the trial. @@ -29,7 +29,7 @@ Find more information [here](https://www.openproject.org/blog/enterprise-edition ## How can I book additional users? -Please use the link "Manage subscription" in the email you received confirming your subscription or contact sales@openproject.com. +Please use the link "Manage subscription" in the email you received confirming your subscription or contact sales@openproject.com. ## Is it possible to only upgrade *some* users to the Enterprise edition? @@ -72,12 +72,12 @@ sudo openproject run console # if user the docker all-in-one container: docker exec -it openproject bundle exec rails console # if using docker-compose: docker-compose run --rm web bundle exec rails console ``` + Once in the console update the token like this: `EnterpriseToken.first.update encoded_token: "..."` Where `...` is the token you have copied earlier. After that you can quit the console by entering `exit`. - ## Do you have a reseller program for OpenProject? We provide a [reseller program](https://www.openproject.org/reseller-program/) exclusively for OpenProject Enterprise on-premises (currently not for the Enterprise cloud) and offer a 25% discount on the regular prices as a part of this. Once you purchased the first Enterprise on-premises license for a client, you receive an Enterprise on-premises license for 25 users free of charge for your internal use. Please refer to the link above for more information and the conditions regarding this offer. diff --git a/docs/enterprise-guide/support/README.md b/docs/enterprise-guide/support/README.md index 5e70d2719b10..7e989c7ab411 100644 --- a/docs/enterprise-guide/support/README.md +++ b/docs/enterprise-guide/support/README.md @@ -66,16 +66,16 @@ The Corporate support covers everything from the Basic, Professional and Premium Please write us an email to [support@openproject.com](mailto:support@openproject.com) to get help with your OpenProject Enterprise edition. Include a detailed description as well as screenshots, where necessary. Depending on your support level, you will receive a separate support email address with your order. -You can reach us via telephone, depending on your support service hours: +You can reach us via telephone, depending on your support service hours: - EU time zone: +49 30 288 777 07 - US time zone: +1 470 231 0041 -## Installation support for Enterprise on-premises +## Installation support for Enterprise on-premises -Our Premium and Corporate Enterprise on-premises support plans include installation support. We will contact you to get the necessary information to set up your environment. +Our Premium and Corporate Enterprise on-premises support plans include installation support. We will contact you to get the necessary information to set up your environment. -### Support Data Collector +### Support Data Collector Please run [our script](./script/op-support-data.sh) and send us the complete terminal output prior to the on-premise installation. @@ -86,6 +86,7 @@ The script should run once on the OpenProject on-premises host with or without O Also please do not forget to log your complete terminal output. Please attach the log file of the terminal output to an email reply in your ticket at [support@openproject.com](mailto:support@openproject.com) -`sudo chmod +x op-support-data.sh` - -` sudo ./op-support-data.sh` +```shell +sudo chmod +x op-support-data.sh +sudo ./op-support-data.sh +``` diff --git a/docs/enterprise-guide/support/script/op-support-data.sh b/docs/enterprise-guide/support/script/op-support-data.sh index 233cd1a8f79d..094c618438f8 100644 --- a/docs/enterprise-guide/support/script/op-support-data.sh +++ b/docs/enterprise-guide/support/script/op-support-data.sh @@ -210,7 +210,7 @@ echo "---" #CHECK FOR INSTALLED OPENPROJECT -echo "Checking for Open Project installed packages and version..." +echo "Checking for OpenProject installed packages and version..." yum_fp=`which yum` if [ -z $yum_fp ]; then yum_fp="dummynonexists"; fi @@ -223,6 +223,6 @@ if [ -z $openproject_fp ]; then openproject_fp="dummynonexists"; fi if [ -f $openproject_fp ]; then echo OpenProject is installed in Version...; $openproject_fp run bundle exec rake version else - echo "Open Project seems not to be installed." + echo "OpenProject seems not to be installed." fi diff --git a/docs/faq/README.md b/docs/faq/README.md index caffc0eab575..dad276efd923 100644 --- a/docs/faq/README.md +++ b/docs/faq/README.md @@ -19,7 +19,6 @@ Welcome to the central overview of frequently asked questions for OpenProject. | [Other](#other) | Additional questions, e.g. about contribution, training, support | | [Topic-specific FAQ](#topic-specific-faq) | Links to other FAQ sections | - ## Learn more about OpenProject ### How do I get access to the OpenProject Enterprise add-ons? @@ -33,6 +32,7 @@ If you want to run OpenProject on your own server, the OpenProject Enterprise on Have you already installed the [OpenProject Community edition](https://www.openproject.org/download-and-installation/)? If yes, you can request a trial license for the OpenProject Enterprise on-premises edition by clicking on the button "Free trial license" [here](https://www.openproject.org/de/enterprise-edition/) and test the Enterprise on-premises edition for 14 days for free. ### Can I have some users with Enterprise add-ons and some without? + As the Enterprise Enterprise add-ons affect the whole instance (e.g. with Agile Boards and project custom fields) it's not possible to upgrade only some users. ### What are the system requirements? @@ -195,7 +195,6 @@ For portfolio management or custom reporting, you can use either the project lis For more information on portfolio management options in OpenProject please refer to this [Use Case](../use-cases/portfolio-management). - ### Is there an organizational chart in OpenProject? There's no such feature. However, you can use the wiki to add information regarding your departments and employees. Furthermore, you can upload existing org charts as image or e.g. PDF to the wiki or the documents module. @@ -248,7 +247,6 @@ Yes. Take a photo with your camera and save it on your phone. Then open the corr Yes, of course. Within the BCF module you can upload multiple IFC models and create and manage BCF issues. - ## Migration ### How can I migrate from Bitnami to OpenProject? @@ -310,10 +308,6 @@ If you use the Community edition please feel free to use our [forums](https://co To learn more about OpenProject and how its features work please have a look at [this FAQ](#how-can-i-learn-more-about-openproject). -### Do you support Univention users? - -If you're an Enterprise on-premises user you're eligible for Professional Support. However, we can't support you in all Univention-related topics (e.g. server not reachable, authentication setup, ...). - ### Do you have a cyber insurance? Yes, we do. diff --git a/docs/getting-started/README.md b/docs/getting-started/README.md index 9e99d963eded..2322ed4a1c7f 100644 --- a/docs/getting-started/README.md +++ b/docs/getting-started/README.md @@ -44,4 +44,3 @@ Watch a short 3-minute introduction video to get started with OpenProject in 6 e Watch a **comprehensive OpenProject product introduction** video to learn how to work with OpenProject using traditional and agile project management. - diff --git a/docs/getting-started/boards-introduction/README.md b/docs/getting-started/boards-introduction/README.md index 7fc2bf61c3cf..22f62261bbb4 100644 --- a/docs/getting-started/boards-introduction/README.md +++ b/docs/getting-started/boards-introduction/README.md @@ -12,8 +12,6 @@ This document provides an initial introduction to the boards in OpenProject, i.e > **Note**: The basic agile boards are included in the OpenProject Community edition. OpenProject advanced Action boards are an Enterprise add-on and can only be used with [Enterprise cloud](../../enterprise-guide/enterprise-cloud-guide) or [Enterprise on-premises](../../enterprise-guide/enterprise-on-premises-guide). An upgrade from the free Community edition is easily possible. - -
    **Boards** in OpenProject enable agile project management, i.e. Kanban. Boards consist of lists (columns) with cards (work packages) on it. They help to visualize work, limit work-in-progress, and maximize efficiency (or flow).
    @@ -22,7 +20,6 @@ To find out more about the detailed functionalities of Boards, please visit our Agile boards is only one of OpenProject's features. Find a comprehensive comparison between OpenProject and Trello [here](https://www.openproject.org/project-management-software-alternatives/best-trello-alternative/). - | Topic | Content | |-------------------------------------------------------------|--------------------------------------------| | [What is a Board?](#what-is-a-board) | Find out what a Board in OpenProject is. | @@ -46,6 +43,4 @@ To manage your work in an agile board, open the boards module in the project men 4. You can edit the details of a card by **double click**ing on the card. 5. Finally the arrow brings you back to the boards view. - - ![edit-boards](edit-boards.gif) diff --git a/docs/getting-started/gantt-chart-introduction/README.md b/docs/getting-started/gantt-chart-introduction/README.md index 80b49fc9de9c..9aecb6f5ff47 100644 --- a/docs/getting-started/gantt-chart-introduction/README.md +++ b/docs/getting-started/gantt-chart-introduction/README.md @@ -39,9 +39,9 @@ Within your project menu, navigate to the **Gantt charts** module. ![Select the Gantt charts module in OpenProject](openproject-user-guide-select-gantt-charts-module.png) -The Gantt chart then displays all work package types, e.g. phases and milestones, tasks or bugs, in a timeline view. It shows dependencies between different work packages as well as additional information, e.g. subject, start or finish dates. +The Gantt chart then displays all work package types, e.g. phases and milestones, tasks or bugs, in a timeline view. It shows dependencies between different work packages as well as additional information, e.g. subject, start or finish dates. -You can also select the cross-project Gantt charts view through the [global modules](../../user-guide/home/global-modules/) menu, which will include the information, which project the work packages are part of. +You can also select the cross-project Gantt charts view through the [global modules](../../user-guide/home/global-modules/) menu, which will include the information, which project the work packages are part of. ## Create a project plan @@ -49,7 +49,7 @@ To create a project plan in OpenProject, select the [**Gantt charts** module](.. You can create new work packages directly in the table by clicking on the **create new work package** link at the bottom of the table. You can change the work package type or other attributes directly in the table view. -Click in the at the level of the line of the work package you want to map in the Gantt chart to add an element in the project plan. +Click in the at the level of the line of the work package you want to map in the Gantt chart to add an element in the project plan. You can change the duration or move the element in the project plan via drag and drop. @@ -63,4 +63,3 @@ To change the start and end date or the duration of a work package, click direct All changes will also be tracked in the work packages [Activity](../../user-guide/activity). ![edit the project plan](openproject-user-guide-edit-project-plan.gif) - diff --git a/docs/getting-started/invite-members/README.md b/docs/getting-started/invite-members/README.md index 1c3f860dcc5a..82462e165805 100644 --- a/docs/getting-started/invite-members/README.md +++ b/docs/getting-started/invite-members/README.md @@ -16,7 +16,6 @@ In order to see a project and work in it, you have to be a member of a project. > **Note**: If you are not a member of a project, you do not see the project in the Project selection nor in the project list. - | Topic | Content | | ------------------------------------------------------------ | ------------------------------------------------------------ | | [View members](#view-members) | View the list of members in your project. | @@ -31,7 +30,7 @@ In order to see a project and work in it, you have to be a member of a project. To view the list of **all project members and their roles** in the project, select Members in the project menu on the left side. It will open a list of all the project members, including groups and external users, that work packages have been shared with. -You can use both filters in the left hand menu, as well as the filter options next to the **+ Member** button. +You can use both filters in the left hand menu, as well as the filter options next to the **+ Member** button. Please also refer to [Members module guide](../../user-guide/members). @@ -85,8 +84,6 @@ You can now collaborate with your team in OpenProject. Newly invited users will > Please note that removing a member who has not accepted the invite from a project yet will lead to the deletion of this user, which can't be reversed. - - ## Behavior of groups as project members Groups have the following impact on a project members list and behave slightly different than individual users: @@ -99,11 +96,9 @@ Groups have the following impact on a project members list and behave slightly d Find out more about the management of groups [here](../../system-admin-guide/users-permissions/groups/). - - ## Behavior of placeholder users as project members Placeholder will look slightly different from regular users in a project member list: - will be shown without email address -- can't be part of a group, i.e. they will be shown without group affiliation \ No newline at end of file +- can't be part of a group, i.e. they will be shown without group affiliation diff --git a/docs/getting-started/my-account/README.md b/docs/getting-started/my-account/README.md index 59d704e31575..597acd4227fd 100644 --- a/docs/getting-started/my-account/README.md +++ b/docs/getting-started/my-account/README.md @@ -33,13 +33,13 @@ Choose **My account**. ![my account profile information](openproject_open_my_account_page.png) ## Edit your user information + To change your email address or your name, navigate to **Profile** on the left side menu of **My account** page. Here you can update the information and **save** your changes. If you're changing the email address of your account, you will be requested to confirm your account password before you can continue. (Note: This applies only to internal accounts where OpenProject can verify the password). ![openproject_my_account_profile](openproject_my_account_profile.png) - ## Profile settings Within the **Settings** on **My Account** page you can change the language of OpenProject, adapt the time zone, select which display mode you would like activate and change the order in which comments are displayed in the **Activity list** for work packages. @@ -70,9 +70,9 @@ Pressing the blue **Save** button will save your changes. ### Select the high contrast color mode -In the dropdown menu **Mode** you can pick the color mode. The default setting is the **Light mode**. You can also select the **Light high contrast mode**, which will significantly increase the contrast and override the color theme of the OpenProject instance for you. +In the dropdown menu **Mode** you can pick the color mode. The default setting is the **Light mode**. You can also select the **Light high contrast mode**, which will significantly increase the contrast and override the color theme of the OpenProject instance for you. -This mode is recommended for users with visuals impairment. +This mode is recommended for users with visuals impairment. ![High contrast mode in OpenProject](openproject_my_account_high_contrast_mode.png) @@ -104,7 +104,7 @@ Press the blue **Save** button in order to confirm the password changes. ## Two-factor authentication -In order to activate the two-factor authentication for your OpenProject installation, navigate to your **My account** and choose the **Two-factor authentication** in the menu. If you have not added any device yet, this list will be empty. +In order to activate the two-factor authentication for your OpenProject installation, navigate to your **My account** and choose the **Two-factor authentication** in the menu. If you have not added any device yet, this list will be empty. ![OpenProject my account two_factor authentication](openproject_my_account_two_factor_authentication.png) @@ -112,13 +112,13 @@ If you have already registered one or multiple 2FA devices, you will see the lis ![List of all registered 2FA devices in OpenProject](openproject_my_account_2fa_overview.png) -In order to register a new device for two-factor authentication, click the green button to add a **new 2FA device**. You will see the screen, where you will be able to see one or multiple of the following options, depending on what your system administrator has [activated for your instance](../../system-admin-guide/authentication/two-factor-authentication/): +In order to register a new device for two-factor authentication, click the green button to add a **new 2FA device**. You will see the screen, where you will be able to see one or multiple of the following options, depending on what your system administrator has [activated for your instance](../../system-admin-guide/authentication/two-factor-authentication/): - Mobile phone - App-based authenticator - WebAuthn -![](openproject_my_account_authentication_options.png) +![OpenProject My Account Authentication Options](openproject_my_account_authentication_options.png) To receive the second factor, you can use an authentication app on your mobile phone, such as Google Authenticator or Authy. You have to enter the code that is displayed in the authentication app to your login. @@ -126,11 +126,10 @@ You can remove or approve 2FA applications by confirming your password. Note tha ### Use your mobile phone -You can use your mobile phone as a 2FA device. The field *Identifier* will be pre-filled out, you will need to add your phone number and click the green **Continue** button. +You can use your mobile phone as a 2FA device. The field *Identifier* will be pre-filled out, you will need to add your phone number and click the green **Continue** button. ![Add a new mobile phone as a 2FA device in OpenProject](openproject_my_account_two_factor_authentication_mobile.png) - ### Use your app-based authenticator Register an application authenticator for use with OpenProject using the time-based one-time password authentication standard. Common examples are Google Authenticator or Authy. @@ -143,11 +142,11 @@ Click the green **Continue** button to finish the registration. ### Use the WebAuth authentication -Use Web Authentication to register a FIDO2 device (like a YubiKey) or the secure enclave of your mobile device as a second factor. After you have chosen a name, you can click the green **Continue** button. +Use Web Authentication to register a FIDO2 device (like a YubiKey) or the secure enclave of your mobile device as a second factor. After you have chosen a name, you can click the green **Continue** button. -![](openproject_my_account_authenticator_webauth.png) +![OpenProject WebAuth authentication](openproject_my_account_authenticator_webauth.png) -Your browser will prompt you to present your WebAuthn device (depending on your operational system and your browser, your options may vary). When you have done so, you are done registering the device. +Your browser will prompt you to present your WebAuthn device (depending on your operational system and your browser, your options may vary). When you have done so, you are done registering the device. ### Backup codes @@ -156,18 +155,22 @@ If you are unable to access your two-factor devices, you can use a backup code t If you have created backup codes before, they will be invalidated and will no longer work. ## Access tokens -To view and manage your OpenProject access tokens navigate to **My account** and choose **Access tokens** from the menu. -Access tokens allow you to grant external applications access to resources in OpenProject. + +To view and manage your OpenProject access tokens navigate to **My account** and choose **Access tokens** from the menu. +Access tokens allow you to grant external applications access to resources in OpenProject. ![openproject_my_account_access_tokens](openproject_my_account_access_tokens.png) ### API + API tokens allow third-party applications to communicate with this OpenProject instance via REST APIs. If you have not yet created an API token, this list will be empty. You may need admin privileges to be able to create an API. You can enable an API token under [*Administration -> API and webhooks*](../../system-admin-guide/api-and-webhooks/). Please note that you can only create a single API token. + ### iCalendar -iCalendar tokens allow users to subscribe to OpenProject calendars and view up-to-date work package information from external clients. -This list will be empty if you have no calendar subscriptions yet. Once you [subscribe to a calendar](../../user-guide/calendar/#subscribe-to-a-calendar), a list of all the calendars that you have subscribed to will appear here. The name of the calendar is clickable and will lead you directly to the respective calendar in OpenProject. + +iCalendar tokens allow users to subscribe to OpenProject calendars and view up-to-date work package information from external clients. +This list will be empty if you have no calendar subscriptions yet. Once you [subscribe to a calendar](../../user-guide/calendar/#subscribe-to-a-calendar), a list of all the calendars that you have subscribed to will appear here. The name of the calendar is clickable and will lead you directly to the respective calendar in OpenProject. ![OpenProject calendar list under my account](openproject_my_account_access_tokens_calendar_list.png) @@ -181,38 +184,36 @@ You will then see a message informing you that the the token und the iCal URL ar ### OAUTH -OAuth tokens allow third-party applications to connect with this OpenProject instance, for example Nextcloud (see [here](../../user-guide/file-management/nextcloud-integration/) how to set up Nextcloud integration). OAuth tokens can be created under [*Administration-> Authentication*](../../system-admin-guide/authentication/). +OAuth tokens allow third-party applications to connect with this OpenProject instance, for example Nextcloud (see [here](../../user-guide/file-management/nextcloud-integration/) how to set up Nextcloud integration). OAuth tokens can be created under [*Administration-> Authentication*](../../system-admin-guide/authentication/). -If no third-party application integration has been activated yet, this list will be empty. Please contact your administrator to help you set it up. Once an integration has been set up, you will see the details here and will be able to delete any OAuth tokens by clicking on the **Delete** icon. +If no third-party application integration has been activated yet, this list will be empty. Please contact your administrator to help you set it up. Once an integration has been set up, you will see the details here and will be able to delete any OAuth tokens by clicking on the **Delete** icon. ![OpenProject OAuth tokens under My Account](openproject_my_account_access_tokens_oauth.png) - - ### RSS -RSS tokens allow users to keep up with the latest changes in this OpenProject instance via an external RSS reader. You can only have one active RSS token. +RSS tokens allow users to keep up with the latest changes in this OpenProject instance via an external RSS reader. You can only have one active RSS token. -Create a new token by clicking the **+RSS token** button. This will create your token and trigger a message showing you the access token. +Create a new token by clicking the **+RSS token** button. This will create your token and trigger a message showing you the access token. -> **Note**: You will only be able to see the RSS access token once, directly after you create it. Make sure to copy it. +> **Note**: You will only be able to see the RSS access token once, directly after you create it. Make sure to copy it. ![OpenProject RSS token](openproject_my_account_access_tokens_rss.png) ## Sessions management -To view and manage your OpenProject sessions navigate to **My account** and choose **Sessions management** from the menu. +To view and manage your OpenProject sessions navigate to **My account** and choose **Sessions management** from the menu. ![openproject_my_account_sessions_management](openproject_my_account_sessions_management.png) -- **Current sessions**: here you can see all of your sessions. If for example you are logged into OpenProject from different browsers or devices, all will be shown in the list. Current session is the one you are currently using. You can terminate the sessions that are no longer in use. Inactive sessions will be removed from the list after 7 days (depending on the authentication settings they may become invalid earlier). +- **Current sessions**: here you can see all of your sessions. If for example you are logged into OpenProject from different browsers or devices, all will be shown in the list. Current session is the one you are currently using. You can terminate the sessions that are no longer in use. Inactive sessions will be removed from the list after 7 days (depending on the authentication settings they may become invalid earlier). - **Remembered devices**: here you can see a list of all devices that you are logged into using the "Stay logged in" option. You will have selected that option when [logging in](../sign-in-registration/). Whether or not that option is available and the duration of time for which you can stay logged in depends on the authentication settings of your instance. -> **Note**: Closing a browser does not necessarily terminate the session. It might still be displayed in the list and will be reactivated if you open the browser. This depends on both your browser's and the OpenProject instance's settings. +> **Note**: Closing a browser does not necessarily terminate the session. It might still be displayed in the list and will be reactivated if you open the browser. This depends on both your browser's and the OpenProject instance's settings. ## Notifications settings -To configure the notification settings which you receive from the system, navigate to **My account** and choose **Notifications settings** in the menu. +To configure the notification settings which you receive from the system, navigate to **My account** and choose **Notifications settings** in the menu. ![openproject_my_account_notifications](openproject_my_account_notifications.png) @@ -226,7 +227,7 @@ To configure the email reminders which you receive from the system, navigate to ![openproject_my_account_email_reminders](openproject_my_account_email_reminders.png) -You can choose between several email reminders. +You can choose between several email reminders. Default: Enable daily email reminders: 2am, Monday - Friday. @@ -255,7 +256,7 @@ Also, you can upload a **Custom Avatar** by choosing a Avatar to be uploaded fro > **Note**: The optimum size to upload a new profile picture is 128 by 128 pixel. Larger files will be cropped. -# Delete account +## Delete account You can delete your own account in **My account**. diff --git a/docs/getting-started/my-activity/README.md b/docs/getting-started/my-activity/README.md index 6492bd596ea4..ef8f00942778 100644 --- a/docs/getting-started/my-activity/README.md +++ b/docs/getting-started/my-activity/README.md @@ -8,21 +8,18 @@ keywords: my activity, personal changes, dashboard # My Activity -**My Activity** gives you an overview of all your latest actions and projects you are involved in. +**My Activity** gives you an overview of all your latest actions and projects you are involved in. You can open your **My Activity** page by clicking on your user avatar in the upper right corner and then selecting **My Activity** from the dropdown menu. ![Navigate to My Activity Page](openproject_select_my_actvity.png) -You will see two lists by default. +You will see two lists by default. -**Projects** will show all projects you are a member of. +**Projects** will show all projects you are a member of. -**Activity** will show all of your activities that are being recorded in OpenProject. +**Activity** will show all of your activities that are being recorded in OpenProject. >Please note that only activities from projects that have the **Activity** module enabled will be shown. ![My activity page](openproject_my_activity_overview.png) - - - diff --git a/docs/getting-started/my-page/My-page-default-view.png b/docs/getting-started/my-page/My-page-default-view.png index 60495f623112..776b69828206 100644 Binary files a/docs/getting-started/my-page/My-page-default-view.png and b/docs/getting-started/my-page/My-page-default-view.png differ diff --git a/docs/getting-started/my-page/README.md b/docs/getting-started/my-page/README.md index be7a0989773d..7ab186cc5187 100644 --- a/docs/getting-started/my-page/README.md +++ b/docs/getting-started/my-page/README.md @@ -28,8 +28,6 @@ As a default, you will see two lists of all **work packages assigned to you** an ![My-page-default-view](My-page-default-view.png) - - ## Configure the My Page ### Add widgets @@ -48,7 +46,6 @@ Once you have chosen the place where to add the new widget on My Page, you can c For a **detailed explanation of the widgets**, visit the section in the [project overview](../../user-guide/project-overview/#available-project-overview-widgets). - ### Change position of the widgets You can change the position of a widget on the dashboard with drag and drop. @@ -61,8 +58,6 @@ Click the dots next to the title and drag it to the new place. If you click the dots on the lower right hand corner in a widget you can change the size of a widget by pulling the widget left and right, up and down with the mouse. - - ### Configure the view of a widget (for work package tables) You can configure the view of a work package widget to have the information included that you need. @@ -70,11 +65,11 @@ You can configure the view of a work package widget to have the information incl
    **Work package** is a subset of a project that can be assigned to users for execution, such as Tasks, Bugs, User Stories, Milestones, and more. Work packages have a type, an ID and a subject and may have additional attributes, such as assignee, responsible, story points or target version. Work packages are displayed in a project timeline (unless they are filtered out in the timeline configuration) - either as a milestone or as a phase. In order to use the work packages, the work package module has to be activated in the project settings.
    -![change the size of a widget](change-size-of-widget.gif) +![change the size of a widget](change-size-of-widget.gif) On a work package widget, click on the button with the three dots and select **Configure view...** -You can configure the work package table (e.g. filter, group, highlight, sort) according to the [filter, sorting and grouping criteria for work packages](../../user-guide/work-packages/work-package-table-configuration/). +You can configure the work package table (e.g. filter, group, highlight, sort) according to the [filter, sorting and grouping criteria for work packages](../../user-guide/work-packages/work-package-table-configuration/). ![configure-view-widget](configure-view-widget.gif) diff --git a/docs/getting-started/my-page/image-20200211154602328.png b/docs/getting-started/my-page/image-20200211154602328.png index b18bacda74b3..6a550220c7ac 100644 Binary files a/docs/getting-started/my-page/image-20200211154602328.png and b/docs/getting-started/my-page/image-20200211154602328.png differ diff --git a/docs/getting-started/my-page/my-page-add-widget.png b/docs/getting-started/my-page/my-page-add-widget.png index 2d2072ca1d3d..a15a41e8bc91 100644 Binary files a/docs/getting-started/my-page/my-page-add-widget.png and b/docs/getting-started/my-page/my-page-add-widget.png differ diff --git a/docs/getting-started/my-page/my-page-remove-widget.png b/docs/getting-started/my-page/my-page-remove-widget.png index 1f9744644c3b..3527701e6971 100644 Binary files a/docs/getting-started/my-page/my-page-remove-widget.png and b/docs/getting-started/my-page/my-page-remove-widget.png differ diff --git a/docs/getting-started/my-page/navigate-to-my-page.png b/docs/getting-started/my-page/navigate-to-my-page.png index 6365417f34fe..fe4450428a41 100644 Binary files a/docs/getting-started/my-page/navigate-to-my-page.png and b/docs/getting-started/my-page/navigate-to-my-page.png differ diff --git a/docs/getting-started/openproject-introduction/README.md b/docs/getting-started/openproject-introduction/README.md index bebd132be088..5663fb4ec5bd 100644 --- a/docs/getting-started/openproject-introduction/README.md +++ b/docs/getting-started/openproject-introduction/README.md @@ -110,7 +110,7 @@ Document project achievements, lessons learned, best practices and easily summar ## OpenProject products -### What is the difference between the Community, Enterprise cloud and Enterprise on-premises edition? +### What is the difference between the Community, Enterprise cloud and Enterprise on-premises edition? OpenProject can be used in three different editions, either on-premises or as software-as-a-service. diff --git a/docs/getting-started/projects/README.md b/docs/getting-started/projects/README.md index 259fa1ffaaa8..758013ffecd0 100644 --- a/docs/getting-started/projects/README.md +++ b/docs/getting-started/projects/README.md @@ -16,7 +16,6 @@ A project in OpenProject can be understood as a project as defined above. Also, > **Note**: In order to see a project and work in it, you have to be a [member of the project](../invite-members). - | Topic | Content | | ------------------------------------------------------- | ------------------------------------------------------------ | | [Open a project](#open-an-existing-project) | Select and open an existing project. | @@ -34,8 +33,6 @@ You can also start typing in a project name to filter by the project's title. ![filter_for_project_in_header_menu](filter_project_header_menu.png) - - Projects and subprojects are displayed according to their hierarchy in the drop-down menu.
    @@ -43,14 +40,12 @@ Projects and subprojects are displayed according to their hierarchy in the drop-
    ![project_hierarchy](project_hierarchy-8178054.png) -Alternatively, you can open the list of all existing projects using the [**Global modules**](../../user-guide/home/global-modules/#projects) menu. +Alternatively, you can open the list of all existing projects using the [**Global modules**](../../user-guide/home/global-modules/#projects) menu. Also, you will see your newest projects on the application landing page in the **Projects** section. Here you can simply click on one of the newest visible projects to open it. ![openproject landing page](openproject-landing-page.png) - - ## Create a new project To create a new project, click the green button **+ Project** directly on the system's home screen in the **Project** section. @@ -70,7 +65,7 @@ Alternatively, you can use the green **+ button** in the header menu to create a By default, creating a new project will set you as project admin, regardless of whether you copied a project, used a template or created a project from scratch. Now, you can get started working on your project. -To configure further project information, see the documentation for [project settings](../../user-guide/projects/project-settings/project-information/). +To configure further project information, see the documentation for [project settings](../../user-guide/projects/project-settings/project-information/). ### View all projects @@ -82,11 +77,10 @@ Alternatively you can use the [**Global modules menu**](../../user-guide/home/gl ![Open a list of all existing projects in OpenProject](view_all_projects_options.png) -You will see a list with all your projects and their details. +You will see a list with all your projects and their details. ![project overview list](project-overview-list.png) ## Advanced Project Settings In our detailed user guide you can find out how to configure further [advanced project settings](../../user-guide/projects/) for your projects, e.g. description, project hierarchy or setting it to public. - diff --git a/docs/getting-started/sign-in-registration/README.md b/docs/getting-started/sign-in-registration/README.md index 587a2de2b90c..2096961f7a20 100644 --- a/docs/getting-started/sign-in-registration/README.md +++ b/docs/getting-started/sign-in-registration/README.md @@ -12,7 +12,6 @@ This page will give you an overview of how to register or sign in to an existing > **Note**: If you do not have an OpenProject installation yet, please visit our site on [how to create an OpenProject trial installation](../../enterprise-guide/enterprise-cloud-guide/create-cloud-trial/). - | Topic | Content | |-------------------------------------------------------------------------------|--------------------------------------------------------------------| | [Sign in with an existing account](#sign-in-with-an-existing-account) | Sign in with an existing account to an OpenProject installation. | @@ -97,7 +96,7 @@ If you forgot your password, you can reset your password by clicking the blue ** ![Forgot-password](1566205596114.png) -You are then asked to enter your email address with which you registered to OpenProject. +You are then asked to enter your email address with which you registered to OpenProject. ![enter-email-address](1566205903097.png) diff --git a/docs/getting-started/work-packages-introduction/README.md b/docs/getting-started/work-packages-introduction/README.md index 4eb6966526b4..34f7cce06e08 100644 --- a/docs/getting-started/work-packages-introduction/README.md +++ b/docs/getting-started/work-packages-introduction/README.md @@ -51,7 +51,7 @@ Another option to create a work package is to do it from the header menu. The [w ![create-work-package-header](create-work-package-header.png) -Once you click on the work package type that you want to create, the work package detail view opens and you have to **select the project** that you want to create the work package for. +Once you click on the work package type that you want to create, the work package detail view opens and you have to **select the project** that you want to create the work package for. ![create and name work package](create-work-package.png) @@ -75,7 +75,7 @@ To **update the status**, click on the highlighted displayed status on top of th ## Activity of work packages -To keep informed about all changes to a work package, open the **ACTIVITY** tab in the details view. +To keep informed about all changes to a work package, open the **ACTIVITY** tab in the details view. Here you will see all changes which have been made to this work package. @@ -86,4 +86,3 @@ You can also insert a comment at the end of the Activity list. To notify other people about changes in your work packages activities, you can comment and type an @" in front of the username you want to inform and when you publish your message the person you have tagged will get a notification in OpenProject. The aggregation of changes in the Activity list can be configured in the [system administration](../../system-admin-guide/calendars-and-dates/#date-format). To find out more about the work package functionalities, please visit our detailed [user guide for work packages](../../user-guide/work-packages). - diff --git a/docs/glossary/README.md b/docs/glossary/README.md index db8b879605fe..b43dee0ad2f5 100644 --- a/docs/glossary/README.md +++ b/docs/glossary/README.md @@ -119,6 +119,7 @@ In OpenProject, a custom field is defined as an additional field which can be ad ![Custom fields in OpenProject](glossary-openproject-custom-field.png) **More information on custom fields in OpenProject** + - [Read how to enable custom fields in projects to use them in work packages](../user-guide/projects/project-settings/custom-fields/) - [Read how to create custom fields as a system admin in OpenProject](../system-admin-guide/custom-fields/) @@ -134,7 +135,7 @@ A dashboard is defined as an overview page in a software. In OpenProject, you ha 1. You have the [My Page](#my-page), which shows your personal customized [widgets](#widget) on one page, for example a calendar or work package reports. -2. You have the [project overview](#project-overview) dashboard, which gives you an overview of your project. Please note that only project admins can add and remove widgets to the project overview. +2. You have the [project overview](#project-overview) dashboard, which gives you an overview of your project. Please note that only project admins can add and remove widgets to the project overview. In addition to those overview dashboard options, you can create a [custom query](#custom-query) to save a filtered work package view, which might serve you as kind of a dashboard as well. @@ -164,7 +165,7 @@ File storages can be configured in the System Administration and then be selecte ### Filters -Filters are essential for task and project management in OpenProject. You have several filtering options applicable to a [work package table](#work-package-table). Filter options can be saved via [custom queries](#custom-query). A filtered work packages table view (e.g. only open work packages) can be saved and therefore work as a [dashboard](#dashboard). +Filters are essential for task and project management in OpenProject. You have several filtering options applicable to a [work package table](#work-package-table). Filter options can be saved via [custom queries](#custom-query). A filtered work packages table view (e.g. only open work packages) can be saved and therefore work as a [dashboard](#dashboard). ### Forum @@ -251,6 +252,7 @@ OpenProject offers a OneDrive/SharePoint [integration](#integration) as an [Ente OpenProject on-premises is a self-hosted version of OpenProject. As opposed to the Cloud version, you install, run and maintain the hardware locally and manage the software application there. The on-premises [Community Edition](#community-edition) is free of charge. **More information on OpenProject on-premises** + - [See our pricing side about your options for OpenProject](https://www.openproject.org/pricing/) - [Read a blog article comparing on-premises and cloud](https://www.openproject.org/blog/why-self-hosting-software/) - [Read how to activate the Enterprise on-premises edition](../enterprise-guide/enterprise-on-premises-guide/activate-enterprise-on-premises/) @@ -266,9 +268,10 @@ A phase in OpenProject is defined as a [work package type](#work-package-types), In OpenProject, you can choose from several plugins or [integrations](#integration), or add your own plugins to the Community. In contrast to an integration, a plugin is installed on top of / as part of the OpenProject installation. As an open source software, OpenProject is open to Community-created plugins. Please note that we do not guarantee error-free and seamless use of those plugins. -Your activated plugins are listed together with your [modules](#module) in your instance under --> Administration --> Plugins. +Your activated plugins are listed together with your [modules](#module) in your instance under --> Administration --> Plugins. **More information on plugins in OpenProject** + - [See all available plugins and integrations for OpenProject](../system-admin-guide/integrations/) - [Read how to create an OpenProject plugin](../development/create-openproject-plugin/) @@ -290,7 +293,7 @@ A project attribute in OpenProject is a [custom field](#custom-field) that appli ### Project folder -Project folders help collaborating in the most efficient way. They can be used with OpenProject's [Nextcloud integration](#nextcloud-integration) or with OpenProject's [OneDrive/SharePoint integration](#onedrivesharepoint-integration). [Read more about project folders in OpenProject](../user-guide/projects/project-settings/file-storages/#project-folders). +Project folders help collaborating in the most efficient way. They can be used with OpenProject's [Nextcloud integration](#nextcloud-integration) or with OpenProject's [OneDrive/SharePoint integration](#onedrivesharepoint-integration). [Read more about project folders in OpenProject](../user-guide/projects/project-settings/files/#project-folders). ### Project identifier @@ -380,7 +383,7 @@ In OpenProject, a user is defined as a person who uses OpenProject, described by ### User guide -The OpenProject [user guide](../user-guide/) is an in-depth guide of all features in OpenProject. It offers users detailed information about how to use OpenProject's features, [modules](#module), [integrations](#integration) and more. For more technical information on how to configure your OpenProject instance, see our [system admin guide](../system-admin-guide/). +The OpenProject [user guide](../user-guide/) is an in-depth guide of all features in OpenProject. It offers users detailed information about how to use OpenProject's features, [modules](#module), [integrations](#integration) and more. For more technical information on how to configure your OpenProject instance, see our [system admin guide](../system-admin-guide/). ## V @@ -420,6 +423,7 @@ In OpenProject, a [work package](../user-guide/work-packages/#overview) is defin ![A work package in OpenProject](glossary-openproject-work-package.png) **More information on work packages in OpenProject** + - [Read our user guide on work packages](../user-guide/work-packages/) - [Read a blog article on how to work with work packages](https://www.openproject.org/blog/how-to-work-with-work-packages/) diff --git a/docs/installation-and-operations/README.md b/docs/installation-and-operations/README.md index 1478aa20bc98..f36ecf1bdaba 100644 --- a/docs/installation-and-operations/README.md +++ b/docs/installation-and-operations/README.md @@ -8,20 +8,18 @@ sidebar_navigation: This page summarizes the options for getting OpenProject, some hosted and some on-premise. With this information you should be able to decide what option is best for you. Find a full feature comparison [here](https://www.openproject.org/pricing/#features). -### On-premises +## On-premises * **Community edition** - The free, no license, edition of OpenProject that you install on-premise. The additional add-ons of the Enterprise edition are not included. See the "Installation" row of the table below. * **Enterprise on-premise edition** - Builds on top of the Community edition: Enterprise add-ons, professional support, hosted on-premises with optional installation support. See more [on the website](https://www.openproject.org/enterprise-edition/), where you can apply for a free trial, or in the [documentation](../enterprise-guide/enterprise-on-premises-guide/). The Community edition can easily be upgraded to the Enterprise on-premises edition. -### Hosted +## Hosted * **Enterprise Enterprise cloud edition** - Hosted by OpenProject in an EU Data Center, with Enterprise add-ons and professional support . See more on the [website](https://www.openproject.org/enterprise-edition/#hosting-options), where you can apply for a free trial, or in the [documentation](../enterprise-guide/enterprise-cloud-guide/). -* **Univention App Center** - Download the free Community edition as a pre-installed virtual environment and upgrade to the Enterprise edition with Enterprise add-ons and support. See the [documentation](installation/univention/) for details. - All editions can be enhanced by adding [the BIM module](../bim-guide/), including features for construction project management, i.e. 3D model viewer, BCF management. See how to [switch to that edition](bim-edition/) in the documentation or how to start a [BIM Enterprise cloud edition](https://start.openproject.com/trial/bim). -Compare the features of these versions [on the website](https://www.openproject.org/pricing/#features). +Compare the features of these versions [on the website](https://www.openproject.org/pricing/#features). > **Note**: there are some minor options given in the "Other" row of the table below. These are not recommended but you may wish to try them. @@ -39,4 +37,3 @@ Compare the features of these versions [on the website](https://www.openproject. For production environments and when using a [supported distribution](system-requirements), we recommend using the [packaged installation](installation/packaged/). This will install OpenProject as a system dependency using your distribution's package manager, and provide updates in the same fashion that all other system packages do. An OUTDATED and OLD [manual installation](installation/manual) option exists, but due to the large number of components involved and the rapid evolution of OpenProject, we cannot ensure that the procedure is either up-to-date or that it will correctly work on your machine. This means that manual installation is NOT recommended NOR supported. - diff --git a/docs/installation-and-operations/configuration/README.md b/docs/installation-and-operations/configuration/README.md index 286fb3085f20..b77b0637d13b 100644 --- a/docs/installation-and-operations/configuration/README.md +++ b/docs/installation-and-operations/configuration/README.md @@ -6,17 +6,13 @@ sidebar_navigation: # OpenProject advanced configuration - - OpenProject can be configured via environment variables. These are often helpful for automatically deploying production systems. > **NOTE:** This documentation is for OpenProject on-premises Installations only, if you would like to setup similar in your OpenProject cloud instance, please contact us at support@openproject.com > **NOTE:** Using the configuration file `config/configuration.yml` is deprecated and is **NOT** recommended anymore - - -# Packaged installation +## Packaged installation The file `/opt/openproject/.env.example` contains some information to learn more. Files stored within `/etc/openproject/conf.d/` are used for parsing the variables and your custom values to your configuration. Whenever you call `openproject config:set VARIABLE=value`, it will end up in this folder. @@ -36,9 +32,9 @@ After the file `/etc/openproject/conf.d/other` is changed the command `sudo ope Configuring OpenProject through environment variables is described in detail [in the environment variables guide](environment/). -# Docker +## Docker -## one container per process installation +### one container per process installation Add your custom configuration to `docker-compose.override.yml`. @@ -83,8 +79,6 @@ x-op-app: &app # Please use the file at https://github.com/opf/openproject-deploy/blob/stable/14/compose/docker-compose.yml ``` - - Alternatively, you can also use an env file for docker-compose like so: First, add a `.env` file with some variable: @@ -120,15 +114,13 @@ x-op-app: &app # Please use the file at https://github.com/opf/openproject-deploy/blob/stable/14/compose/docker-compose.yml ``` - - Let's say you have a `.env.prod` file with some production-specific configuration. Then, start the services with that special env file specified. ```shell docker-compose --env-file .env.prod up ``` -### Disabling services in the docker-compose file +#### Disabling services in the docker-compose file If you have a `docker-compose.override.yml` file created, it is also easy to disable certain services, such as the database container if you have an external one running anyway. @@ -143,9 +135,7 @@ services: Configuring OpenProject through environment variables is described in detail [in the environment variables guide](environment/). - - -## Docker all-in-one container installation +### Docker all-in-one container installation Environment variables can be either passed directly on the command-line to the Docker Engine, or via an environment file: @@ -158,9 +148,7 @@ docker run -d --env-file path/to/file ... Configuring OpenProject through environment variables is described in detail [in the environment variables guide](environment/). - - -# Seeding through environment +## Seeding through environment OpenProject allows some resources to be seeded/created initially through configuration variables. @@ -169,9 +157,7 @@ OpenProject allows some resources to be seeded/created initially through configu | [Initial admin user creation](#initial-admin-user-creation) | Changing attributes or passwords of the initially created administrator | | [Seeding LDAP connections](#seeding-ldap-connections) | How to create an LDAP connection through configuration | - - -## Initial admin user creation +### Initial admin user creation **Note:** These variables are only applicable during the first initial setup of your OpenProject setup. Changing or setting them later will have no effect, as the admin user will already have been created. @@ -179,8 +165,6 @@ By default, an admin user will be created with the login and password set to `ad In case of automated deployments, you might find it useful to seed an admin user with password and attributes of your choosing. For that, you can use the following set of variables: - - ```shell OPENPROJECT_SEED_ADMIN_USER_PASSWORD="admin" # Password to set for the admin user OPENPROJECT_SEED_ADMIN_USER_PASSWORD_RESET="true" # Whether to force a password reset on first login (true/false) @@ -188,9 +172,7 @@ OPENPROJECT_SEED_ADMIN_USER_NAME="OpenProject Admin" # Name to assign to that us OPENPROJECT_SEED_ADMIN_USER_MAIL="admin@example.net" # Email attribute to assign to that user. Note that in packaged installations, a wizard step will assign this variable as well. ``` - - -## Seeding LDAP connections +### Seeding LDAP connections OpenProject allows you to create and maintain an LDAP connection with optional synchronized group filters. This is relevant for e.g., automated deployments, where you want to trigger the synchronization right at the start. @@ -256,9 +238,7 @@ OPENPROJECT_SEED_LDAP_EXAMPLE_GROUPFILTER_EXAMPLEFILTER_GROUP__ATTRIBUTE="cn" When a filter is defined, synchronization happens directly during seeding for enterprise editions. Be aware of that when you create the connection that e.g., the LDAP connection needs to be reachable. - - -# Examples for common use cases +## Examples for common use cases * `attachments_storage_path` * `autologin_cookie_name` (default: 'autologin'), @@ -288,9 +268,7 @@ When a filter is defined, synchronization happens directly during seeding for en * [`web`](#web-worker-configuration) (nested configuration) * [`statsd`](#statsd) (nested configuration) - - -## Allowing public access +### Allowing public access By default, any request to the OpenProject application needs to be authenticated. If you want to enable public unauthenticated access like we do for https://community.openproject.org, you can set the `login_required` to `false`. If not provided through environment variables, this setting is also accessible in the administrative UI. Please see the [authentication settings guide](../../system-admin-guide/authentication/authentication-settings/#general-authentication-settings) for more details. @@ -302,9 +280,7 @@ To disable, set the configuration option: OPENPROJECT_LOGIN__REQUIRED="false" ``` - - -## Setting session options +### Setting session options **Delete old sessions for the same user when logging in** @@ -326,13 +302,13 @@ To disable, set the configuration option: OPENPROJECT_DROP__OLD__SESSIONS__ON__LOGOUT="false" ``` -## Attachments storage +### Attachments storage You can modify the folder where attachments are stored locally. Use the `attachments_storage_path` configuration variable for that. But ensure that you move the existing paths. To find out the current path on a packaged installation, use `openproject config:get OPENPROJECT_ATTACHMENTS__STORAGE__PATH`. To update the path, use `openproject config:set OPENPROJECT_ATTACHMENTS__STORAGE__PATH="/path/to/new/folder"`. Ensure that this is writable by the `openproject` user. Afterwards issue a restart by `sudo openproject configure` -### attachment storage type +#### attachment storage type Attachments can be stored using e.g. Amazon S3, In order to set these values through ENV variables, add to the file : @@ -347,9 +323,7 @@ OPENPROJECT_FOG_CREDENTIALS_REGION="eu-west-1" OPENPROJECT_FOG_DIRECTORY="uploads" ``` - - -## Auth source sso +### Auth source sso Can be used to automatically login a user defined through a custom header sent by a load balancer or reverse proxy in front of OpenProject, for instance in a Kerberos Single Sign-On (SSO) setup via apache. The header with the given name has to be passed to OpenProject containing the logged in user and the defined global secret as in `$login:$secret`. @@ -373,11 +347,9 @@ auth_source_sso: # optional: true ``` +### Backups - -## Backups - -### Enable backups +#### Enable backups If enabled, admins (or users with the necessary permission) can download backups of the OpenProject installation via OpenProject's web interface or via the API. @@ -388,7 +360,7 @@ via OpenProject's web interface or via the API. OPENPROJECT_BACKUP__ENABLED="false" ``` -### Backup attachment size max sum mb +#### Backup attachment size max sum mb Per default the maximum overall size of all attachments must not exceed 1GB for them to be included in the backup. If they are larger only the database dump will be included. @@ -398,7 +370,7 @@ Per default the maximum overall size of all attachments must not exceed 1GB for OPENPROJECT_BACKUP__ATTACHMENT__SIZE__MAX__SUM__MB="8192" ``` -### Additional configurations for backup +#### Additional configurations for backup ```yaml OPENPROJECT_BACKUP__DAILY__LIMIT="3" @@ -406,9 +378,7 @@ OPENPROJECT_BACKUP__INCLUDE__ATTACHMENTS="true" OPENPROJECT_BACKUP__INITIAL__WAITING__PERIOD="86400" ``` - - -## BCrypt configuration +### BCrypt configuration OpenProject uses BCrypt to derive and store user passwords securely. BCrypt uses a so-called Cost Factor to derive the computational effort required to derive a password from input. @@ -416,17 +386,15 @@ For more information, see the [Cost Factor guide of the bcrypt-ruby gem](https:/ *default: 12* -```bash +```shell OPENPROJECT_OVERRIDE__BCRYPT__COST__FACTOR="16" ``` - - -## Database configuration and SSL +### Database configuration and SSL Please see [this separate guide](./database/) on how to set a custom database connection string and optionally, require SSL/TTLS verification. -## disable password login +### disable password login If you enable this option you have to configure at least one omniauth authentication provider to take care of authentication instead of the password login. @@ -440,9 +408,7 @@ presented to the users. OPENPROJECT_DISABLE__PASSWORD__LOGIN="true" ``` - - -## omniauth direct login provider +### omniauth direct login provider Per default the user may choose the usual password login as well as several omniauth providers on the login page and in the login drop down menu. With this configuration option you can set a specific omniauth provider to be used for direct login. Meaning that the login provider selection is skipped and the configured provider is used directly (non-interactive) instead. @@ -459,7 +425,7 @@ This route is only available when the direct login provider is set. OPENPROJECT_OMNIAUTH__DIRECT__LOGIN__PROVIDER="google" ``` -## prevent omniauth remapping of existing users +### prevent omniauth remapping of existing users Per default external authentication providers through OmniAuth (such as SAML or OpenID connect providers) are allowed to take over existing accounts if the mapped login is already taken. This is usually desirable, if you have e.g., accounts created through LDAP and want these @@ -474,7 +440,7 @@ to create a new account. OPENPROJECT_OAUTH__ALLOW__REMAPPING__OF__EXISTING__USERS="false" ``` -## Gravatar images +### Gravatar images OpenProject uses gravatar images with a `404` fallback by default to render an internal, initials-based avatar. You can override this behavior by setting `gravatar_fallback_image` to a different value to always render Gravatars @@ -503,7 +469,7 @@ rake attachments:copy_to[file] > **NOTE:** that you have to configure the respective storage (i.e. fog) beforehand as described in the previous section. In the case of fog you only have to configure everything under `fog`, however. Don't change `attachments_storage` to `fog` just yet. Instead leave it as `file`. This is because the current attachments storage is used as the source for the migration. -## direct uploads +### direct uploads > **NOTE**: This only works for AWS S3 or S3-compatible storages\*. When using fog with another provider this configuration will be `false`. The same goes for when no fog storage is configured, or when the `use_iam_profile` option is used in the fog credentials when using S3. @@ -526,7 +492,7 @@ OPENPROJECT_REMOTE__STORAGE__UPLOAD__HOST=mybucket.s3.amazonaws.com OPENPROJECT_REMOTE__STORAGE__DOWNLOAD__HOST=mybucket.s3.eu-west.amazonaws.com" ``` -### fog download url expires in +#### fog download url expires in When using remote storage for attachments via fog - usually S3 (see [`attachments_storage`](#attachments-storage) option) - each attachment download will generate a temporary URL. This option determines how long these links will be valid. @@ -538,7 +504,7 @@ The default is 21600 seconds, that is 6 hours, which is the maximum expiry time OPENPROJECT_FOG__DOWNLOAD__URL__EXPIRES__IN="60" ``` -## Force help link +### Force help link You can override the default help menu of OpenProject by specifying a `force_help_link` option to the configuration. This value is used for the href of the help link, and the default dropdown is removed. @@ -549,7 +515,7 @@ the configuration. This value is used for the href of the help link, and the def OPENPROJECT_FORCE__HELP__LINK="https://it-support.example.com" ``` -## Impressum link +### Impressum link You can set a impressum link (legal notice) for your OpenProject instance by setting `impressum_link` to an absolute URL. @@ -559,7 +525,7 @@ You can set a impressum link (legal notice) for your OpenProject instance by set OPENPROJECT_IMPRESSUM__LINK="https://impressum.example.com" ``` -## Hidden menu items admin menu +### Hidden menu items admin menu You can disable specific menu items in the menu sidebar for each main menu (such as Administration and Projects). The configuration can be done through environment variables. You have to define one variable for each menu that shall be hidden. @@ -577,11 +543,9 @@ The following example disables all menu items except 'Users', 'Groups' and 'Cust OPENPROJECT_HIDDEN__MENU__ITEMS_ADMIN__MENU="roles types statuses workflows enumerations settings ldap_authentication colors project_types plugins info" ``` +### Rate limiting and blocklisting - -## Rate limiting and blocklisting - -### Rate limiting +#### Rate limiting OpenProject provides some rate limiting protections. The default configuration protects against repeated access to authentication credential resets (e.g., lost password functionality). @@ -591,7 +555,7 @@ You can optionally enable additional rules on API rate limiting as follows: Additional application-level rate limiting rules will be added in the future. Additionally to these application level rules, use your load balancer / proxying web server to apply individual rate limiting rules using modules such as `ngx_http_limit_req_module` or `mod_security`. -### Blacklisted routes +#### Blacklisted routes You can blacklist specific routes @@ -603,7 +567,7 @@ The following example forbid all routes for the second example at the 'hidden me OPENPROJECT_BLACKLISTED__ROUTES="admin/info admin/plugins project_types colors settings admin/enumerations workflows/* statuses types admin/roles" ``` -## disabled modules +### disabled modules Modules may be disabled through the configuration. Just give a list of the module names either as an array or as a string with values separated by spaces. @@ -614,7 +578,7 @@ Just give a list of the module names either as an array or as a string with valu OPENPROJECT_DISABLED__MODULES="backlogs meetings" ``` -## local checkout path +### local checkout path *default: "repositories"* @@ -624,7 +588,7 @@ Remote git repositories will be checked out here. note: to be verified, maybe option was removed, not in environement variables list ``` -## APIv3 enable basic auth +### APIv3 enable basic auth You can control basic auth access to the APIv3 with the following configuration option: @@ -634,7 +598,7 @@ You can control basic auth access to the APIv3 with the following configuration OPENPROJECT_APIV3__ENABLE__BASIC__AUTH="false" ``` -## global basic auth +### global basic auth *default: none* @@ -654,7 +618,7 @@ default: password: adminpw ``` -## Security Upgrade Badge +### Security Upgrade Badge OpenProject provides a release indicator (security badge) that will inform administrators of an OpenProject installation on whether new releases or security updates are available for your platform. If enabled, this option will display a badge with your installation status at Administration > Information right next to the release version, and on the home screen. It is only displayed to administrators. @@ -668,7 +632,7 @@ To disable rendering the badge, uncheck the setting at Administration > Syste OPENPROJECT_SECURITY__BADGE__DISPLAYED="false" ``` -## Cache configuration options +### Cache configuration options * `rails_cache_store`: `memcache` for [memcached](https://www.memcached.org/), `redis` for [Redis cache](https://redis.io/), or `memory_store` (default: `file_store`) * When using `memcached`, the following configuration option is relevant: @@ -680,17 +644,17 @@ OPENPROJECT_SECURITY__BADGE__DISPLAYED="false" * `cache_expires_in`: Expiration time for memcache entries (default: `nil`, no expiry) * `cache_namespace`: Namespace for cache keys, useful when multiple applications use a single memcache server (default: `nil`) -## rails asset host +### rails asset host `rails_asset_host`: A custom host to use to serve static assets such as javascript, CSS, images, etc. (default: `nil`) -## onboarding video url +### onboarding video url `onboarding_video_url`: An URL for the video displayed on the onboarding modal. This is only shown when the user logs in for the first time. *default="[https://player.vimeo.com/video/163426858?autoplay=1](https://player.vimeo.com/video/163426858?autoplay=1)"* -## enterprise fail fast +### enterprise fail fast If using an Enterprise token there are certain limits that apply. You can configure how these limits are enforced. @@ -717,7 +681,7 @@ enterprise: fail_fast: true ``` -## Show or hide community links +### Show or hide community links If you would like to hide the homescreen links to the OpenProject community, you can do this with the following configuration: @@ -727,7 +691,7 @@ If you would like to hide the homescreen links to the OpenProject community, you OPENPROJECT_SHOW__COMMUNITY__LINKS=false ``` -## Web worker configuration +### Web worker configuration Configuration of the main ruby web server (currently puma). Sensible *defaults* are provided. @@ -741,9 +705,9 @@ OPENPROJECT_WEB_MAX__THREADS="16" > **NOTE:** Timeouts only are supported when using at least 2 workers. -## Two-factor authentication +### Two-factor authentication -### 2fa enforced +#### 2fa enforced You can set the available 2FA strategies and/or enforce or disable 2FA system-wide. @@ -783,7 +747,7 @@ OPENPROJECT_2FA_DISABLED="true" OPENPROJECT_2FA_ACTIVE__STRATEGIES="[]" ``` -### statsd +#### statsd *default: { host: nil, port: 8125 }* @@ -796,7 +760,7 @@ OPENPROJECT_STATSD_HOST="127.0.0.1" OPENPRJOECT_STATSD_PORT="8125" ``` -## Other configuration topics +### Other configuration topics | Topic | Content | | ------------------------------------------------------------ | :----------------------------------------------------------- | diff --git a/docs/installation-and-operations/configuration/database/README.md b/docs/installation-and-operations/configuration/database/README.md index 343478f5144c..1b71e2102f99 100644 --- a/docs/installation-and-operations/configuration/database/README.md +++ b/docs/installation-and-operations/configuration/database/README.md @@ -10,22 +10,16 @@ sidebar_navigation: Simply run `sudo openproject reconfigure`, and when the database wizard is displayed, select the **Use an existing PostgreSQL database** option and fill in the required details ([cf the initial configuration section](../../installation/packaged/#step-2-postgresql-database-configuration)). - - ### Setting a custom database URL In some cases, you need flexibility in how you define the URL (e.g., specifying more options specific to PostgreSQL or using SSL certificates). In that case, you can pass the database URL as an environment variable instead: -```bash +```shell openproject config:set DATABASE_URL=postgres://user:pass@host:port/dbname ``` - - Then, you need to run `openproject reconfigure` and select "Skip" for the database wizard. Otherwise the wizard will override your DATABASE_URL environment variable again. - - ## Docker-based installation If you run the all-in-one container, you can simply pass a custom `DATABASE_URL` environment variable on the docker command-line, which could @@ -46,11 +40,9 @@ docker-compose up -d In both cases the seeder will be run when you (re)launch OpenProject to make sure that the database gets the migrations and demo data as well. - - ## Setting DATABASE_URL and options separately -OpenProject will merge the settings from `DATABASE_URL` with manually specified environment options. Here are the supported options: +OpenProject will merge the settings from `DATABASE_URL` with manually specified environment options. Here are the supported options: | Environment variable | Default | Description | Documentation | |------------------------------------|-------------|-----------------------------------------------------------------------|------------------------------------------------------------------------------------------| @@ -62,15 +54,13 @@ OpenProject will merge the settings from `DATABASE_URL` with manually specified | OPENPROJECT_DB_APPLICATION_NAME | openproject | PostgreSQL application name option | https://www.postgresql.org/docs/13/libpq-connect.html#LIBPQ-CONNECT-APPLICATION-NAME | | OPENPROJECT_DB_STATEMENT_TIMEOUT | 90s | Default statement timeout before connection statements are terminated | https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-STATEMENT-TIMEOUT | - - ## Using SSL/TLS with a PostgreSQL database By default, the packaged installation installs a local database and does not use SSL encryption. If you provide a custom PostgreSQL database that supports SSL/TLS connections for servers and/or clients, you can pass the options as part of the DATABASE_URL. See the above guides on how to set this environment variable for Docker or packaged installations. The most import option is the `sslmode` parameter. Set this to the appropriate mode as defined in the [PostgreSQL documentation](https://www.postgresql.org/docs/13/libpq-connect.html#LIBPQ-PARAMKEYWORDS). For example, to require a SSL connection with full verification of the server certificate, you can add it to the database URL: -```bash +```shell DATABASE_URL=postgres://user:pass@host:port/dbname?sslmode=require-full&sslcert=/path/to/postgresql.cert ``` @@ -86,9 +76,7 @@ Alternatively, for better readability, you can set these parameters with separat | OPENPROJECT_DB_SSLROOTCERT | ~/.postgresql/root.crt | Path to CA | [sslrootcert](https://www.postgresql.org/docs/13/libpq-connect.html#LIBPQ-CONNECT-SSLROOTCERT) | | OPENPROJECT_DB_SSLCRL | ~/.postgresql/root.crl | Path to revocation list | [sslcrl](https://www.postgresql.org/docs/13/libpq-connect.html#LIBPQ-CONNECT-SSLCRL) | - - -``` +```text ="prefer" # disable, allow, prefer, require, verify-ca, verify-full ="0" # 0 or 1 ="~/.postgresql/postgresql.crt" # Path to the certificate @@ -98,8 +86,4 @@ Alternatively, for better readability, you can set these parameters with separat ="~/.postgresql/root.crl" # Path to revocation list ``` - - - - PostgreSQL supports a wide variety of options in its connection string. This is not specific to OpenProject or Rails. See the following guide for more information: https://www.postgresql.org/docs/13/libpq-connect.html#LIBPQ-PARAMKEYWORDS diff --git a/docs/installation-and-operations/configuration/environment/README.md b/docs/installation-and-operations/configuration/environment/README.md index f2a3b5ab000e..b4d59d5b5e70 100644 --- a/docs/installation-and-operations/configuration/environment/README.md +++ b/docs/installation-and-operations/configuration/environment/README.md @@ -4,8 +4,6 @@ sidebar_navigation: priority: 10 --- - - # Environment variables > **NOTE:** This documentation is for OpenProject on-premises Installations only, if you would like to setup similar in your OpenProject cloud instance, please contact us at support@openproject.com @@ -27,7 +25,7 @@ In case you want to use environment variables, but you have no easy way to set t Please be aware that **only those variables shall be edited which are documented** as not everything is meant to be configured or bend. -### Nested values +## Nested values You can override nested configuration values as well by joining the respective hash keys with underscores. Underscores within keys have to be escaped by doubling them. @@ -51,16 +49,12 @@ storage config above like this: OPENPROJECT_STORAGE_TYPE=nfs ``` - - ## Seed variables Some of the provided variables are only applicable during the seeding of a new installation (i.e., during the first start or run of the `db:seeds` setup task). These variables are prefixed with `OPENPROJECT_SEED_*` to identify them. Changing these variables to a new value in a running system of OpenProject will likely have no effect unless explicitly marked in the configuration guides. - - ## Passing data structures to the app The configuration uses YAML to parse overrides from ENV. Using YAML inline syntax, you can: @@ -93,7 +87,7 @@ enterprise: fail_fast: true ``` -# Supported environment variables +## Supported environment variables A list of all configuration variables that can be overridden by defining them in the environment from bash could be generated by executing the following rake task: @@ -161,7 +155,7 @@ OPENPROJECT_CONSENT__DECLINE__MAIL (default=nil) Consent contact mail address OPENPROJECT_CONSENT__INFO (default={"en"=>"## Consent\n\nYou need to agree to the [privacy and security policy](https://www.openproject.org/data-privacy-and-security/) of this OpenProject instance."}) Consent information text OPENPROJECT_CONSENT__REQUIRED (default=false) Consent required OPENPROJECT_CONSENT__TIME (default=nil) Consent time -OPENPROJECT_COST__REPORTING__CACHE__FILTER__CLASSES (default=true) +OPENPROJECT_COST__REPORTING__CACHE__FILTER__CLASSES (default=true) OPENPROJECT_CROSS__PROJECT__WORK__PACKAGE__RELATIONS (default=true) Allow cross-project work package relations OPENPROJECT_CROWDIN__IN__CONTEXT__TRANSLATIONS (default=true) Add crowdin in-context translations helper OPENPROJECT_DATABASE__CIPHER__KEY (default=nil) Encryption key for repository credentials @@ -171,13 +165,14 @@ OPENPROJECT_DEFAULT__COMMENT__SORT__ORDER (default="asc") Default sort order for OPENPROJECT_DEFAULT__LANGUAGE (default="en") Default language OPENPROJECT_DEFAULT__PROJECTS__MODULES (default=["calendar", "board_view", "work_package_tracking", "news", "costs", "wiki"]) Default enabled modules for new projects OPENPROJECT_DEFAULT__PROJECTS__PUBLIC (default=false) New projects are public by default -OPENPROJECT_DEMO__PROJECTS__AVAILABLE (default=false) -OPENPROJECT_DEMO__VIEW__OF__TYPE__TEAM__PLANNER__SEEDED (default=false) -OPENPROJECT_DEMO__VIEW__OF__TYPE__WORK__PACKAGES__TABLE__SEEDED (default=false) +OPENPROJECT_DEMO__PROJECTS__AVAILABLE (default=false) +OPENPROJECT_DEMO__VIEW__OF__TYPE__TEAM__PLANNER__SEEDED (default=false) +OPENPROJECT_DEMO__VIEW__OF__TYPE__WORK__PACKAGES__TABLE__SEEDED (default=false) OPENPROJECT_DIFF__MAX__LINES__DISPLAYED (default=1500) Max number of diff lines displayed OPENPROJECT_DIRECT__UPLOADS (default=true) Enable direct uploads to AWS S3. Only applicable with enabled Fog / AWS S3 configuration OPENPROJECT_DISABLE__BROWSER__CACHE (default=true) Prevent browser from caching any logged-in responses for security reasons OPENPROJECT_DISABLE__PASSWORD__CHOICE (default=false) If enabled a user's password cannot be set to an arbitrary value, but can only be randomized. +OPENPROJECT_DISABLE__YJIT (default=false) Disables Ruby's YJIT JIT compiler. OPENPROJECT_DISABLE__PASSWORD__LOGIN (default=false) Disable internal logins and instead only allow SSO through OmniAuth. OPENPROJECT_DISABLED__MODULES (default=[]) A list of module names to prevent access to in the application OPENPROJECT_DISPLAY__SUBPROJECTS__WORK__PACKAGES (default=true) Display subprojects work packages on main projects by default @@ -185,7 +180,7 @@ OPENPROJECT_DROP__OLD__SESSIONS__ON__LOGIN (default=false) Destroy all sessions OPENPROJECT_DROP__OLD__SESSIONS__ON__LOGOUT (default=true) Destroy all sessions for current_user on logout OPENPROJECT_EDITION (default="standard") OpenProject edition mode OPENPROJECT_EE__MANAGER__VISIBLE (default=true) Show or hide the Enterprise configuration page and enterprise banners -OPENPROJECT_EMAIL__DELIVERY__CONFIGURATION (default="inapp") +OPENPROJECT_EMAIL__DELIVERY__CONFIGURATION (default="inapp") OPENPROJECT_EMAIL__DELIVERY__METHOD (default=nil) Email delivery method OPENPROJECT_EMAIL__LOGIN (default=false) Use email as login OPENPROJECT_EMAILS__FOOTER (default={"en"=>""}) Emails footer @@ -196,11 +191,11 @@ OPENPROJECT_ENABLED__SCM (default=["subversion", "git"]) Enabled SCM OPENPROJECT_ENTERPRISE__CHARGEBEE__SITE (default="openproject-enterprise") Site name for EE trial service OPENPROJECT_ENTERPRISE__PLAN (default="enterprise-on-premises---euro---1-year") Default EE selected plan OPENPROJECT_ENTERPRISE__TRIAL__CREATION__HOST (default="https://augur.openproject.com") Host for EE trial service -OPENPROJECT_FEATURE__MANAGED__PROJECT__FOLDERS__ACTIVE (default=true) -OPENPROJECT_FEATURE__MORE__GLOBAL__INDEX__PAGES__ACTIVE (default=true) -OPENPROJECT_FEATURE__SHOW__CHANGES__ACTIVE (default=true) -OPENPROJECT_FEATURE__STORAGE__FILE__PICKING__SELECT__ALL__ACTIVE (default=true) -OPENPROJECT_FEATURE__STORAGE__PROJECT__FOLDERS__ACTIVE (default=true) +OPENPROJECT_FEATURE__MANAGED__PROJECT__FOLDERS__ACTIVE (default=true) +OPENPROJECT_FEATURE__MORE__GLOBAL__INDEX__PAGES__ACTIVE (default=true) +OPENPROJECT_FEATURE__SHOW__CHANGES__ACTIVE (default=true) +OPENPROJECT_FEATURE__STORAGE__FILE__PICKING__SELECT__ALL__ACTIVE (default=true) +OPENPROJECT_FEATURE__STORAGE__PROJECT__FOLDERS__ACTIVE (default=true) OPENPROJECT_FEEDS__ENABLED (default=true) Enable Feeds OPENPROJECT_FEEDS__LIMIT (default=15) Feed content limit OPENPROJECT_FILE__MAX__SIZE__DISPLAYED (default=512) Max size of text files displayed inline @@ -222,14 +217,14 @@ OPENPROJECT_HSTS (default=true) Allow disabling of HSTS headers and http -> http OPENPROJECT_HTTPS (default=false) Set assumed connection security for the Rails processes OPENPROJECT_ICAL__ENABLED (default=true) Enable iCalendar Subscriptions OPENPROJECT_IMPRESSUM__LINK (default=nil) Impressum link to be set, hidden by default -OPENPROJECT_INSTALLATION__TYPE (default="manual") -OPENPROJECT_INSTALLATION__UUID (default=nil) +OPENPROJECT_INSTALLATION__TYPE (default="manual") +OPENPROJECT_INSTALLATION__UUID (default=nil) OPENPROJECT_INTERNAL__PASSWORD__CONFIRMATION (default=true) Require password confirmations for certain administrative actions OPENPROJECT_INVITATION__EXPIRATION__DAYS (default=7) Activation email expires after OPENPROJECT_JOURNAL__AGGREGATION__TIME__MINUTES (default=5) User actions aggregated within OPENPROJECT_LDAP__FORCE__NO__PAGE (default=nil) Force LDAP to respond as a single page, in case paged responses do not work with your server. OPENPROJECT_LDAP__GROUPS__DISABLE__SYNC__JOB (default=false) Deactivate regular synchronization job for groups in case scheduled as a separate cronjob -OPENPROJECT_LDAP__TLS__OPTIONS (default={}) +OPENPROJECT_LDAP__TLS__OPTIONS (default={}) OPENPROJECT_LDAP__USERS__DISABLE__SYNC__JOB (default=false) Deactive user attributes synchronization from LDAP OPENPROJECT_LDAP__USERS__SYNC__STATUS (default=false) Enable user status (locked/unlocked) synchronization from LDAP OPENPROJECT_LOG__LEVEL (default="debug") Set the OpenProject logger level @@ -242,7 +237,7 @@ OPENPROJECT_MAIL__HANDLER__API__KEY (default=nil) API key OPENPROJECT_MAIL__HANDLER__BODY__DELIMITER__REGEX (default="") Truncate emails matching this regex OPENPROJECT_MAIL__HANDLER__BODY__DELIMITERS (default="") Truncate emails after one of these lines OPENPROJECT_MAIL__HANDLER__IGNORE__FILENAMES (default="signature.asc") Ignored mail attachments -OPENPROJECT_MAIL__SUFFIX__SEPARATORS (default="+") +OPENPROJECT_MAIL__SUFFIX__SEPARATORS (default="+") OPENPROJECT_MAIN__CONTENT__LANGUAGE (default="english") Main content language for PostgreSQL full text features OPENPROJECT_MIGRATION__CHECK__ON__EXCEPTIONS (default=true) Check for missing migrations in internal errors OPENPROJECT_NEW__PROJECT__USER__ROLE__ID (default=nil) Role given to a non-admin user who creates a project @@ -250,7 +245,7 @@ OPENPROJECT_OAUTH__ALLOW__REMAPPING__OF__EXISTING__USERS (default=true) When set OPENPROJECT_OMNIAUTH__DIRECT__LOGIN__PROVIDER (default=nil) Clicking on login sends a login request to the specified OmniAuth provider. OPENPROJECT_ONBOARDING__ENABLED (default=true) Enable or disable onboarding guided tour for new users OPENPROJECT_ONBOARDING__VIDEO__URL (default="https://player.vimeo.com/video/163426858?autoplay=1") Onboarding guide instructional video URL -OPENPROJECT_OPENID__CONNECT (default={}) +OPENPROJECT_OPENID__CONNECT (default={}) OPENPROJECT_OVERRIDE__BCRYPT__COST__FACTOR (default=nil) Set a custom BCrypt cost factor for deriving a user's bcrypt hash. OPENPROJECT_PASSWORD__ACTIVE__RULES (default=["lowercase", "uppercase", "numeric", "special"]) Active character classes OPENPROJECT_PASSWORD__COUNT__FORMER__BANNED (default=0) Number of most recently used passwords banned for reuse @@ -259,24 +254,24 @@ OPENPROJECT_PASSWORD__MIN__ADHERED__RULES (default=0) Minimum number of required OPENPROJECT_PASSWORD__MIN__LENGTH (default=10) Minimum length OPENPROJECT_PER__PAGE__OPTIONS (default="20, 100") Objects per page options OPENPROJECT_PLAIN__TEXT__MAIL (default=false) Plain text mail (no HTML) -OPENPROJECT_PLUGIN__COSTS (default={"costs_currency"=>"EUR", "costs_currency_format"=>"%n %u"}) -OPENPROJECT_PLUGIN__OPENPROJECT__AUTH__SAML (default={"providers"=>nil}) -OPENPROJECT_PLUGIN__OPENPROJECT__AVATARS (default={"enable_gravatars"=>true, "enable_local_avatars"=>true}) -OPENPROJECT_PLUGIN__OPENPROJECT__BACKLOGS (default={"story_types"=>nil, "task_type"=>nil, "points_burn_direction"=>"up", "wiki_template"=>""}) -OPENPROJECT_PLUGIN__OPENPROJECT__BIM (default={}) -OPENPROJECT_PLUGIN__OPENPROJECT__BOARDS (default=nil) -OPENPROJECT_PLUGIN__OPENPROJECT__CALENDAR (default=nil) -OPENPROJECT_PLUGIN__OPENPROJECT__LDAP__GROUPS (default={}) -OPENPROJECT_PLUGIN__OPENPROJECT__OPENID__CONNECT (default=nil) -OPENPROJECT_PLUGIN__OPENPROJECT__RECAPTCHA (default={"recaptcha_type"=>"disabled"}) -OPENPROJECT_PLUGIN__OPENPROJECT__STORAGES (default=nil) -OPENPROJECT_PLUGIN__OPENPROJECT__TEAM__PLANNER (default=nil) -OPENPROJECT_PLUGIN__OPENPROJECT__TWO__FACTOR__AUTHENTICATION (default={"active_strategies"=>[], "enforced"=>false, "allow_remember_for_days"=>0}) +OPENPROJECT_PLUGIN__COSTS (default={"costs_currency"=>"EUR", "costs_currency_format"=>"%n %u"}) +OPENPROJECT_PLUGIN__OPENPROJECT__AUTH__SAML (default={"providers"=>nil}) +OPENPROJECT_PLUGIN__OPENPROJECT__AVATARS (default={"enable_gravatars"=>true, "enable_local_avatars"=>true}) +OPENPROJECT_PLUGIN__OPENPROJECT__BACKLOGS (default={"story_types"=>nil, "task_type"=>nil, "points_burn_direction"=>"up", "wiki_template"=>""}) +OPENPROJECT_PLUGIN__OPENPROJECT__BIM (default={}) +OPENPROJECT_PLUGIN__OPENPROJECT__BOARDS (default=nil) +OPENPROJECT_PLUGIN__OPENPROJECT__CALENDAR (default=nil) +OPENPROJECT_PLUGIN__OPENPROJECT__LDAP__GROUPS (default={}) +OPENPROJECT_PLUGIN__OPENPROJECT__OPENID__CONNECT (default=nil) +OPENPROJECT_PLUGIN__OPENPROJECT__RECAPTCHA (default={"recaptcha_type"=>"disabled"}) +OPENPROJECT_PLUGIN__OPENPROJECT__STORAGES (default=nil) +OPENPROJECT_PLUGIN__OPENPROJECT__TEAM__PLANNER (default=nil) +OPENPROJECT_PLUGIN__OPENPROJECT__TWO__FACTOR__AUTHENTICATION (default={"active_strategies"=>[], "enforced"=>false, "allow_remember_for_days"=>0}) OPENPROJECT_PROJECT__GANTT__QUERY (default=nil) Project portfolio Gantt view OPENPROJECT_RAILS__ASSET__HOST (default=nil) Custom asset hostname for serving assets (e.g., Cloudfront) OPENPROJECT_RAILS__CACHE__STORE (default=:file_store) Set cache store implemenation to use with OpenProject OPENPROJECT_RAILS__RELATIVE__URL__ROOT (default="") Set a URL prefix / base path to run OpenProject under, e.g., host.tld/openproject -OPENPROJECT_RECAPTCHA__VIA__HCAPTCHA (default=false) +OPENPROJECT_RECAPTCHA__VIA__HCAPTCHA (default=false) OPENPROJECT_REGISTRATION__FOOTER (default={"en"=>""}) Registration footer OPENPROJECT_REMOTE__STORAGE__DOWNLOAD__HOST (default=nil) Host the frontend uses to download files, which has to be added to the CSP. OPENPROJECT_REMOTE__STORAGE__UPLOAD__HOST (default=nil) Host the frontend uses to upload files to, which has to be added to the CSP. @@ -284,16 +279,16 @@ OPENPROJECT_REPORT__INCOMING__EMAIL__ERRORS (default=true) Respond to incoming m OPENPROJECT_REPOSITORIES__AUTOMATIC__MANAGED__VENDOR (default=nil) Automatic repository vendor type OPENPROJECT_REPOSITORIES__ENCODINGS (default=nil) Repositories encodings OPENPROJECT_REPOSITORY__AUTHENTICATION__CACHING__ENABLED (default=true) Enable caching for authentication request of version control software -OPENPROJECT_REPOSITORY__CHECKOUT__DATA (default={"git"=>{"enabled"=>0}, "subversion"=>{"enabled"=>0}}) +OPENPROJECT_REPOSITORY__CHECKOUT__DATA (default={"git"=>{"enabled"=>0}, "subversion"=>{"enabled"=>0}}) OPENPROJECT_REPOSITORY__LOG__DISPLAY__LIMIT (default=100) Maximum number of revisions displayed on file log OPENPROJECT_REPOSITORY__STORAGE__CACHE__MINUTES (default=720) Repository disk size cache OPENPROJECT_REPOSITORY__TRUNCATE__AT (default=500) Maximum number of files displayed in the repository browser OPENPROJECT_REST__API__ENABLED (default=true) Enable REST web service -OPENPROJECT_SAML (default=nil) -OPENPROJECT_SCM (default={}) -OPENPROJECT_SCM__GIT__COMMAND (default=nil) -OPENPROJECT_SCM__LOCAL__CHECKOUT__PATH (default="repositories") -OPENPROJECT_SCM__SUBVERSION__COMMAND (default=nil) +OPENPROJECT_SAML (default=nil) +OPENPROJECT_SCM (default={}) +OPENPROJECT_SCM__GIT__COMMAND (default=nil) +OPENPROJECT_SCM__LOCAL__CHECKOUT__PATH (default="repositories") +OPENPROJECT_SCM__SUBVERSION__COMMAND (default=nil) OPENPROJECT_SECURITY__BADGE__DISPLAYED (default=true) Display security badge OPENPROJECT_SECURITY__BADGE__URL (default="https://releases.openproject.com/v1/check.svg") URL of the update check badge OPENPROJECT_SEED__ADMIN__USER__MAIL (default="admin@example.net") E-mail to set for the initially created admin user. @@ -341,16 +336,16 @@ OPENPROJECT_WORK__PACKAGE__LIST__DEFAULT__COLUMNS (default=["id", "subject", "ty OPENPROJECT_WORK__PACKAGE__LIST__DEFAULT__HIGHLIGHTED__ATTRIBUTES (default=[]) Default inline highlighted attributes OPENPROJECT_WORK__PACKAGE__LIST__DEFAULT__HIGHLIGHTING__MODE (default="none") Default highlighting mode OPENPROJECT_WORK__PACKAGE__STARTDATE__IS__ADDDATE (default=false) Use current date as start date for new work packages -OPENPROJECT_WORK__PACKAGES__BULK__REQUEST__LIMIT (default=10) +OPENPROJECT_WORK__PACKAGES__BULK__REQUEST__LIMIT (default=10) OPENPROJECT_WORK__PACKAGES__PROJECTS__EXPORT__LIMIT (default=500) Work packages / Projects export limit OPENPROJECT_WORKING__DAYS (default=[1, 2, 3, 4, 5]) Set working days of the week (Array of 1 to 7, where 1=Monday, 7=Sunday) OPENPROJECT_YOUTUBE__CHANNEL (default="https://www.youtube.com/c/OpenProjectCommunity") Link to YouTube channel in help menu ``` -# Environment-specific configuration variables +### Environment-specific configuration variables -## Docker +#### Docker -### PostgreSQL statement_timeout +##### PostgreSQL statement_timeout In docker installations, there is a default `statement_timeout` of 90s set for the docker image. To override this value in case you're getting statement timeout errors such as "ERROR: canceling statement due to statement timeout", use the environment variable `POSTGRES_STATEMENT_TIMEOUT` diff --git a/docs/installation-and-operations/configuration/incoming-emails/README.md b/docs/installation-and-operations/configuration/incoming-emails/README.md index b96dcb11c68c..2af38b4a39cf 100644 --- a/docs/installation-and-operations/configuration/incoming-emails/README.md +++ b/docs/installation-and-operations/configuration/incoming-emails/README.md @@ -75,6 +75,7 @@ Available arguments that change how the work packages are handled: **Gmail API** In order to use the more secure Gmail API method, some extra initial setup in google cloud is required. + 1. Go to https://console.cloud.google.com/ 2. Create new project 3. Navigate to Enable APIs and Services @@ -120,7 +121,7 @@ and it will be added as a comment to the work package. You can also update attri For instance with the following reply. -``` +```text status: closed The issue is sorted then. Closing this. @@ -140,7 +141,7 @@ there. For example if you write an email with the subject "Fixing problems" and the following body: -``` +```text project: demo-project type: Task status: In Progress @@ -168,8 +169,6 @@ to create work packages, set the option `no_permission_check=1` and specify with If you're used to using mail accounts with suffix support such as Google Mail, where you can specify `account+suffix@googlemail.com`, you will receive mails to that account but respond with your regular account `account@googlemail.com` . To mitigate this, OpenProject by default will expand searching for mail addresses `account@domain` to accounts `account+suffix@domain` through regex searching the mail column. If you do not wish that behavior or want to customize the prefix, alter the setting `mail_suffix_separators` by running `bundle exec rails runner "Setting.mail_suffix_separators = ''"` - - #### Attributes The Attributes you can use in your email are the same whether you create or update a work package. @@ -212,8 +211,6 @@ If you create a work package via email and sent it to another email (to or bcc) In the administrator's setting you can specify lines after which an email will not be parsed anymore. That is useful if you want to reply to an email automatically sent to you from OpenProject. E.g. you could set it to `--Truncate here--` and insert this line into your email below the updates you want to perform. - - ## Error handling In case of receiving errors, the application will try to send an email to the user with some error details. This mail will only be sent if: @@ -224,8 +221,6 @@ In case of receiving errors, the application will try to send an email to the us - The configuration setting `report_incoming_email_errors` is true (which it is by default) - - By returning an email with error details, you can theoretically be leaking information through the error messages. As from addresses can be spoofed, please be aware of this issue and try to reduce the impact by setting up the integration appropriately. If you'd like to disable the reporting of errors to the sender, please set `report_incoming_email_errors=false`: diff --git a/docs/installation-and-operations/configuration/outbound-emails/README.md b/docs/installation-and-operations/configuration/outbound-emails/README.md index 295f506db3ac..dfff551b9bac 100644 --- a/docs/installation-and-operations/configuration/outbound-emails/README.md +++ b/docs/installation-and-operations/configuration/outbound-emails/README.md @@ -24,8 +24,6 @@ You can adjust those settings for other SMTP providers, such as Gmail, Mandrill, etc. Please refer to the documentation of the corresponding provider to see what values should be used. - - ## Configuration through the Admin UI OpenProject allows you to configure your SMTP settings through the administration UI. Using the default admin account created when you first installed OpenProject, go to Administration > Emails and notifications. @@ -50,8 +48,6 @@ These are the options that are available. Please see the [Configuration guide](. | Automatically use STARTTLS | smtp_enable_starttls_auto | `OPENPROJECT_SMTP__ENABLE__STARTTLS__AUTO` | You can enable or disable STARTTLS here in case it doesn't work. Make sure you don't login to a SMTP server over a public network when using this. Recommended to leave this on if your server supports it. Possible values: true / false | | OpenSSL verify mode | smtp_openssl_verify_mode | `OPENPROJECT_SMTP__OPENSSL__VERIFY__MODE` | Define how the SMTP server certificate is validated. Make sure you don't just disable verification here unless both, OpenProject and SMTP servers are on a private network. Possible values: `none`, `peer`, `client_once` or `fail_if_no_peer_cert`.
    Note: This setting can only be set through ENV/settings | - - ## Package-based installation (DEB/RPM) If you installed OpenProject with the package-based installation, you can configure the above settings using the config:set helper. Please note that this will disable the settings in the administration UI. @@ -67,8 +63,6 @@ openproject config:set OPENPROJECT_SMTP__USER_NAME="apikey" openproject config:set OPENPROJECT_SMTP__PASSWORD="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" ``` - - ## Docker installation If you installed OpenProject with Docker, here is how you would enable outbound emails through the use of the SMTP environment variables (with SendGrid, the `SMTP_USER_NAME` is always `apikey`. Just replace `SMTP_PASSWORD` with the API key you've generated and you should be good to diff --git a/docs/installation-and-operations/configuration/plugins/README.md b/docs/installation-and-operations/configuration/plugins/README.md index 99faac1d6a5d..09548588f596 100644 --- a/docs/installation-and-operations/configuration/plugins/README.md +++ b/docs/installation-and-operations/configuration/plugins/README.md @@ -12,7 +12,7 @@ A number of plugins exist for use with OpenProject. Most plugins that are mainta Previously, using them in a packaged installation was not possible without losing your changes on every upgrade. With the following steps, you can now use third party plugins. -> **Note**: We cannot guarantee upgrade compatibility for third party plugins nor do we provide support for them. Please carefully check whether the plugins you use are available in newer versions before upgrading your installation. +> **Note**: We cannot guarantee upgrade compatibility for third party plugins nor do we provide support for them. Please carefully check whether the plugins you use are available in newer versions before upgrading your installation. ## Add a custom Gemfile @@ -47,7 +47,6 @@ openproject config:set RECOMPILE_ANGULAR_ASSETS="true" > **Note**: Re-enabling Angular asset compilation has two implications: It will install all npm packages required for the compilation and in turn cause a higher disk and especially inode consumption. The Angular CLI production build itself then consumes a sometimes absurd amount of RAM with at least 4GB being required to compile successfully. > If you experience any issues with OpenProject not starting after setting this flag, double check that you are not running out of inodes or RAM when calling `openproject configure`. - ## Re-run the installer To re-bundle the application including the new plugins, as well as running migrations and precompiling their assets, simply re-run the installer while using the same configuration as before. @@ -57,4 +56,3 @@ sudo openproject configure ``` Using configure will take your previous decisions in the installer and simply re-apply them, which is an idempotent operation. It will detect the Gemfile config option being set and re-bundle the application with the additional plugins. - diff --git a/docs/installation-and-operations/configuration/repositories/README.md b/docs/installation-and-operations/configuration/repositories/README.md index da3869dabd40..580901ac6548 100644 --- a/docs/installation-and-operations/configuration/repositories/README.md +++ b/docs/installation-and-operations/configuration/repositories/README.md @@ -1,7 +1,12 @@ -> #### **NOTE:** This documentation is most likely outdated and needs to be used carefully +--- +sidebar_navigation: + title: Repository Integration +--- # Repository Integration in OpenProject +> **NOTE:** This documentation is most likely outdated and needs to be used carefully + OpenProject can (by default) browse Subversion and Git repositories, but it does not serve them to git/svn clients. We support integration with the Apache webserver to create and serve repositories on the fly along with contributions to the fine-grained project authorization system of OpenProject. @@ -21,47 +26,47 @@ Managed repositories need to be enabled manually for each SCM vendor individuall It contains a YAML configuration section for repository management residing under the namespace `scm`. The following is an excerpt of the configuration and contains all required information to set up your data. - - - # Configuration of Source control vendors - # client_command: - # Use this command to the default SCM vendor command (taken from path). - # Absolute path (e.g. /usr/local/bin/hg) or command name (e.g. hg.exe, bzr.exe) - # On Windows, *.cmd, *.bat (e.g. hg.cmd, bzr.bat) does not work. - # manages: - # You may either specify a local path on the filesystem or an absolute URL to call when - # repositories are to be created or deleted. - # This allows OpenProject to take control over the given path to create and delete repositories - # directly when created in the frontend. - # - # When entering a URL, OpenProject will POST to this resource when repositories are created - # using the following JSON-encoded payload: - # - action: The action to perform (create, delete) - # - identifier: The repository identifier name - # - vendor: The SCM vendor of the repository to create - # - project: identifier, name and ID of the associated project - # - old_identifier: The identifier to the old repository (used only during relocate) - # - # NOTE: Disabling :managed repositories using disabled_types takes precedence over this setting. - # - # disabled_types: - # Disable specific repository types for this particular vendor. This allows - # to restrict the available choices a project administrator has for creating repositories - # See the example below for available types - # - # Available types for git: - # - :local (Local repositories, registered using a local path) - # - :managed (Managed repositories, available IF :manages path is set below) - # Available types for subversion: - # - :existing (Existing subversion repositories by URL - local using file:/// or remote - # using one of the supported URL schemes (e.g., https://, svn+ssh:// ) - # - :managed (Managed repositories, available IF :manages path is set below) - # - # Exemplary configuration (Enables managed Git repositories at the given path) - scm: - git: - manages: /srv/repositories/git +```yaml +# Configuration of Source control vendors +# client_command: +# Use this command to the default SCM vendor command (taken from path). +# Absolute path (e.g. /usr/local/bin/hg) or command name (e.g. hg.exe, bzr.exe) +# On Windows, *.cmd, *.bat (e.g. hg.cmd, bzr.bat) does not work. +# manages: +# You may either specify a local path on the filesystem or an absolute URL to call when +# repositories are to be created or deleted. +# This allows OpenProject to take control over the given path to create and delete repositories +# directly when created in the frontend. +# +# When entering a URL, OpenProject will POST to this resource when repositories are created +# using the following JSON-encoded payload: +# - action: The action to perform (create, delete) +# - identifier: The repository identifier name +# - vendor: The SCM vendor of the repository to create +# - project: identifier, name and ID of the associated project +# - old_identifier: The identifier to the old repository (used only during relocate) +# +# NOTE: Disabling :managed repositories using disabled_types takes precedence over this setting. +# +# disabled_types: +# Disable specific repository types for this particular vendor. This allows +# to restrict the available choices a project administrator has for creating repositories +# See the example below for available types +# +# Available types for git: +# - :local (Local repositories, registered using a local path) +# - :managed (Managed repositories, available IF :manages path is set below) +# Available types for subversion: +# - :existing (Existing subversion repositories by URL - local using file:/// or remote +# using one of the supported URL schemes (e.g., https://, svn+ssh:// ) +# - :managed (Managed repositories, available IF :manages path is set below) +# +# Exemplary configuration (Enables managed Git repositories at the given path) +scm: + git: + manages: /srv/repositories/git +``` With this configuration, you can create managed repositories by selecting the `managed` Git repository in the Project repository settings tab. @@ -71,32 +76,36 @@ Part of the managed repositories functionality was previously provided with repo Reposman periodically checked for new projects and automatically created a repository of a given type. It never deleted repositories on the filesystem when their associated project was removed in OpenProject. -This script has been integrated into OpenProject and extended. For further guidance on how to migrate to managed repositories, please see the [upgrade guide to 5.0](../../operation/upgrading) +This script has been integrated into OpenProject and extended. For further guidance on how to migrate to managed repositories, please see the [upgrade guide to 5.0](../../operation/upgrading) ### Managing Repositories Remotely OpenProject comes with a simple webhook to call other services rather than management repositories itself. To enable remote managed repositories, pass an absolute URL to the `manages` key of a vendor in the `configuration.yml`. The following excerpt shows that configuration for Subversion, assuming your callback is `https://example.org/repos`. - scm: - subversion: - manages: https://example.org/repos - accesstoken: +```yaml +scm: + subversion: + manages: https://example.org/repos + accesstoken: +``` Upon creating and deleting repositories in the frontend, OpenProject will POST to this endpoint a JSON object containing information on the repository. - { - "identifier": "seeded_project.git", - "vendor": "git", - "scm_type": "managed", - "project": { - "id": 1, - "name": "Seeded Project", - "identifier": "seeded_project" - }, - "action": "create", - "token": - } +```json +{ + "identifier": "seeded_project.git", + "vendor": "git", + "scm_type": "managed", + "project": { + "id": 1, + "name": "Seeded Project", + "identifier": "seeded_project" + }, + "action": "create", + "token": "" +} +``` The endpoint is expected to return a JSON with at least a `message` property when the response is not successful (2xx). When the response is successful, it must at least return a `url` property that contains an accessible URL and optionally a `path` property to access the repository locally. @@ -110,26 +119,26 @@ It supports notifications for creating repositories (action `create`), moving re If you're interested in setting up the integration manually outside the context of packager, the following excerpt will help you: - - PerlSwitches -I/srv/www/perl-lib -T - PerlLoadModule Apache::OpenProjectRepoman - - - SetHandler perl-script - - # Sets the access token secret to check against - AccessSecret "" - - # Configure pairs of (vendor, path) to the wrapper - PerlAddVar ScmVendorPaths "git" - PerlAddVar ScmVendorPaths "/srv/repositories/git" - - PerlAddVar ScmVendorPaths "subversion" - PerlAddVar ScmVendorPaths "/srv/repositories/subversion" - - PerlResponseHandler Apache::OpenProjectRepoman - - +```apache +PerlSwitches -I/srv/www/perl-lib -T +PerlLoadModule Apache::OpenProjectRepoman + + + SetHandler perl-script + + # Sets the access token secret to check against + AccessSecret "" + + # Configure pairs of (vendor, path) to the wrapper + PerlAddVar ScmVendorPaths "git" + PerlAddVar ScmVendorPaths "/srv/repositories/git" + + PerlAddVar ScmVendorPaths "subversion" + PerlAddVar ScmVendorPaths "/srv/repositories/subversion" + + PerlResponseHandler Apache::OpenProjectRepoman + +``` ## Other Features @@ -144,9 +153,8 @@ This functionality is very basic and we hope to make it more robust over the nex * Checkout URLs are constructed from a base URL and the project identifier * On the repository page, the user is provided with a button to show/expand checkout instructions on demand. * This checkout instruction contains the checkout URL for the given repository and some further information on how the checkout works for this particular vendor (e.g., Subversion → svn checkout, Git → git clone). - * The instructions contain information regarding the capabilities a user has (read, read-write) - * The instructions are defined by the SCM vendor implementations themselves, so that the checkout instructions could be extended by some 3rd party SCM vendor plugin - +* The instructions contain information regarding the capabilities a user has (read, read-write) +* The instructions are defined by the SCM vendor implementations themselves, so that the checkout instructions could be extended by some 3rd party SCM vendor plugin ### Required Disk Storage Information @@ -158,11 +166,11 @@ It could also externally be refreshed by using a cron job using the Sys API. Exe For a future release, we are hoping to provide a webhook to update changesets and storage immediately after a change has been committed to the repository. -# Accessing repositories through Apache +## Accessing repositories through Apache With managed repositories, OpenProject takes care of the lifetime of repositories and their association with projects, however we still need to serve the repositories to the client. -## Preliminary Setup +### Preliminary Setup In the remainder of this document, we assume that you run OpenProject using a separate process, which listens for requests on `http://localhost:3000` that you serve over Apache using a proxy. @@ -172,7 +180,7 @@ authenticate against the OpenProject user database. Therefore, we use an authentication perl script located in `extra/svn/OpenProjectAuthentication.pm`. This script needs to be in your Apache perl path (for example it might be sym-linked into /etc/apache2/Apache). -To work with the authentication, you need to generate a secret repository API key, generated in your +To work with the authentication, you need to generate a secret repository API key, generated in your OpenProject instance at `Modules → Administration → Settings → Repositories`. On that page, enable *"Enable repository management web service"* and generate an API key (do not forget to save the settings). We need that API key later in our Apache configuration. @@ -180,18 +188,18 @@ forget to save the settings). We need that API key later in our Apache configura You also need a distinct filesystem path for Subversion and Git repositories. In this guide, we assume that you put your svn repositories in /srv/openproject/svn and your git repositories in /srv/openproject/git . -## Subversion Integration +### Subversion Integration Apache provides the module `mod_dav_svn` to serve Subversion repositories through HTTP(s). This method requires some apache modules to be enabled and installed. The following commands are required for Debian / Ubuntu, please adjust accordingly for other distributions: ```shell - apt-get install subversion libapache2-mod-perl2 libapache2-svn - a2enmod proxy proxy_http dav dav_svn +apt-get install subversion libapache2-mod-perl2 libapache2-svn +a2enmod proxy proxy_http dav dav_svn ``` -### Permissions +#### Permissions **Important:** If Apache and OpenProject run under separate users, you need to ensure OpenProject remains the owner of the repository in order to browse and delete it, when requested through the user interface. @@ -207,11 +215,11 @@ Without correcting the permissions, the following situation will occur: The following workarounds exist: -#### Apache running `mod_dav_svn` and OpenProject must be run with the same user +##### Apache running `mod_dav_svn` and OpenProject must be run with the same user This is a simple solution, but theoretically less secure when the server provides more than just SVN and OpenProject. -#### Use Filesystem ACLs +##### Use Filesystem ACLs You can define ACLs on the managed repository root (requires compatible FS). You'll need the the `acl` package and define the ACL. @@ -224,59 +232,57 @@ Assuming the following situation: * Repository path for SCM vendor X: `/srv/repositories/X` - - # Set existing ACL - - # Results in this ACL setting - # user::rwx - # user:www-data:rwx - # user:deploy:rwx - # group::r-x - # group:www-data:rwx - # mask::rwx - - setfacl -R -m u:www-data:rwx -m u: openproject:rwx -m d:m:rwx /srv/repositories/X - - # Promote to default ACL - # Results in - # default:user::rwx - # default:user:www-data:rwx - # default:user:deploy:rwx - # default:group::r-x - # default:group:www-data:rwx - # default:mask::rwx - # default:other::--- - - setfacl -dR -m u:www-data:rwx -m u:openproject:rwx -m m:rwx /srv/repositories/X - - - +```shell +# Set existing ACL + +# Results in this ACL setting +# user::rwx +# user:www-data:rwx +# user:deploy:rwx +# group::r-x +# group:www-data:rwx +# mask::rwx + +setfacl -R -m u:www-data:rwx -m u: openproject:rwx -m d:m:rwx /srv/repositories/X + +# Promote to default ACL +# Results in +# default:user::rwx +# default:user:www-data:rwx +# default:user:deploy:rwx +# default:group::r-x +# default:group:www-data:rwx +# default:mask::rwx +# default:other::--- + +setfacl -dR -m u:www-data:rwx -m u:openproject:rwx -m m:rwx /srv/repositories/X +``` On many file systems, ACLS are enabled by default. On others, you might need to remount affected filesystems with the `acl` option set. Note that this issue applies to mod_dav_svn only. -### Use the Apache wrapper script +#### Use the Apache wrapper script Similar to the integration we use ourselves for the packager-based installation, you can set up Apache to manage repositories using the remote hook in OpenProject. For more information, see the section 'Managing Repositories Remotely'. -### Exemplary Apache Configuration +#### Exemplary Apache Configuration We provide an example apache configuration. Some details are explained inline as comments. -​ +​ -## Git Integration +### Git Integration We can exploit git-http-backend to serve Git repositories through HTTP(s) with Apache. This method additionally requires the `cgi` Apache module to be installed. The following commands are required for Debian / Ubuntu, please adjust accordingly for other distributions: ```shell - apt-get install git libapache2-mod-perl2 - a2enmod proxy proxy_http cgi +apt-get install git libapache2-mod-perl2 +a2enmod proxy proxy_http cgi ``` You need to locate the location of the `git-http-backend` CGI wrapper shipping with the Git installation. @@ -284,12 +290,12 @@ Depending on your installation, it may reside in `/usr/libexec/git-core/git-http [More information on git-http-backend.](https://git-scm.com/docs/git-http-backend) -### Permissions +#### Permissions We create bare Git repositories in OpenProject with the [`--shared`](https://www.kernel.org/pub/software/scm/git/docs/git-init.html) option of `git-init` set to group-writable. Thus, if you use a separate user for Apache and OpenProject, they need to reside in a common group that is used for repository management. That group must be set in the `configuration.yml` (see above). -### Exemplary Apache Configuration +#### Exemplary Apache Configuration We provide an example apache configuration. Some details are explained inline as comments. diff --git a/docs/installation-and-operations/configuration/server/README.md b/docs/installation-and-operations/configuration/server/README.md index da928b4666ee..a9dc90143449 100644 --- a/docs/installation-and-operations/configuration/server/README.md +++ b/docs/installation-and-operations/configuration/server/README.md @@ -18,14 +18,14 @@ For instance you could define a new proxy server like this in the `docker-compos ```yaml services: - ... + # ... proxy: image: nginx volumes: - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro ports: - "8080:80" - ... + # ... ``` And the corresponding NginX configuration file would look like: @@ -75,5 +75,3 @@ server { } } ``` - -``` diff --git a/docs/installation-and-operations/configuration/ssl/README.md b/docs/installation-and-operations/configuration/ssl/README.md index 3ba1f7cac368..64dcedb4135c 100644 --- a/docs/installation-and-operations/configuration/ssl/README.md +++ b/docs/installation-and-operations/configuration/ssl/README.md @@ -55,7 +55,6 @@ This requires your OpenProject server to be reachable using a domain name (e.g. sudo certbot renew --dry-run ``` - ## External SSL termination If you terminate SSL externally1 before the request hits the OpenProject server, you need to let the OpenProject server know that the request being handled is https, even though SSL was terminated before. This is the most common source in problems in OpenProject when using an external server that terminates SSL. @@ -64,20 +63,15 @@ Please ensure that if you're proxying to the openproject server, you set the HOS On your outer proxying server, set these commands: -- In Apache2, set the `ProxyPreserveHost On` directive +- In Apache2, set the `ProxyPreserveHost On` directive - In NginX, use the following value: `proxy_set_header X-Forwarded-Host $host:$server_port;` - - If you're terminating SSL on the outer server, you need to set the `X-Forwarded-Proto https` header to let OpenProject know that the request is HTTPS, even though it has been terminated earlier in the request on the outer server. - In Apache2, use `RequestHeader set "X-Forwarded-Proto" https` - In Nginx, use `proxy_set_header X-Forwarded-Proto https;` - - Finally, to let OpenProject know that it should create links with 'https' when no request is available (for example, when sending emails), you need to set the Protocol setting of OpenProject to `https`. You can set this configuration by setting the ENV `OPENPROJECT_HTTPS="true"`. - _1 In the packaged installation this means you selected "no" when asked for SSL in the configuration wizard but at the same time take care of SSL termination elsewhere. This can be a manual Apache setup on the same server (not recommended) or an external server, for instance._ diff --git a/docs/installation-and-operations/installation-faq/README.md b/docs/installation-and-operations/installation-faq/README.md index 7dbaf0699bce..2eb2d9c7759d 100644 --- a/docs/installation-and-operations/installation-faq/README.md +++ b/docs/installation-and-operations/installation-faq/README.md @@ -12,7 +12,7 @@ keywords: installation FAQ, upgrades, updates, operation faq ### Which options are there to install OpenProject? -There's the package based installation (recommended), installation via Docker, using a provider (like Univention, Bitnami, IONOS) and the manual installation. +There's the package based installation (recommended), installation via Docker, using a provider (like Bitnami, IONOS) and the manual installation. ### What skills should I have for the installation of Community edition or Enterprise on-premises? @@ -38,12 +38,11 @@ You can use a virtual machine as long as the hardware and the operating system m ### Why is there no installation wizard for desktop as there is for other software? -The Community edition and Enterprise edition of OpenProject are not a desktop application but a server application, typically for Linux servers. Therefore there's no typical user interface to install it. +The Community edition and Enterprise edition of OpenProject are not a desktop application but a server application, typically for Linux servers. Therefore there's no typical user interface to install it. If you want to install it on Windows or Mac you can use the Docker based installation. Please note that installing on Windows Desktop usually works but is not officially supported. The package based installation (for Linux) offers an installation wizard. -If you already use Univention, you can use it to install OpenProject, too. -Alternatively, you could use OpenProject [as cloud version](https://www.openproject.org/enterprise-edition/#hosting-options) to avoid installation. +Alternatively, you could use OpenProject [as cloud version](https://www.openproject.org/enterprise-edition/#hosting-options) to avoid installation. ### Why don't you support Windows? @@ -51,10 +50,10 @@ Ruby support on Windows is notoriously difficult, however you might be able to r ### Can I install OpenProject on my Mac? -There's no installation packages for Mac. However, you can use Docker (easier way) or install it manually. -Your Mac will have to be reachable from the Internet if you want to collaborate with others. +There's no installation packages for Mac. However, you can use Docker (easier way) or install it manually. +Your Mac will have to be reachable from the Internet if you want to collaborate with others. -### Does the OpenProject docker container run on ARM technology like Apple M1 or Raspberry PI? +### Does the OpenProject docker container run on ARM technology like Apple M1 or Raspberry PI? Starting with OpenProject 12.5.6 we publish our containers for three architectures. @@ -66,7 +65,7 @@ However, the OpenProject **BIM Edition** is only supported on AMD64. ### Can I install OpenProject offline? -For the packaged installation there are quite a few dependencies which would have to be loaded during installation (like SQLite3, unzip, poppler-utils, unrtf, ...). Therefore, we recommend to use a Docker setup for offline installation. A Docker image contains all dependencies and can really be transferred as single files (via docker save ) without further dependencies. Please find out more about air-gapped installation [here](../installation/docker#offlineair-gapped-installation). +For the packaged installation there are quite a few dependencies which would have to be loaded during installation (like SQLite3, unzip, poppler-utils, unrtf, ...). Therefore, we recommend to use a Docker setup for offline installation. A Docker image contains all dependencies and can really be transferred as single files (via docker save ) without further dependencies. Please find out more about air-gapped installation [here](../installation/docker#offlineair-gapped-installation). Alternatively, you could install OpenProject on a virtual machine with Internet access and then re-use the VM image on the offline hosts. ### Can I use MySQL instead of PostgreSQL? @@ -94,13 +93,13 @@ Please follow these steps: ### Are there extra fees to pay, in terms of installing the OpenProject software? -The Community edition and [Enterprise on-premises edition](https://www.openproject.org/enterprise-edition/) are on-premises solutions and thus need installation from your side while the [Enterprise cloud edition](https://www.openproject.org/enterprise-edition/#hosting-options) is hosted by us. -The Community edition is for free and we ask you to do the installation yourself. Of course we support you with a clear and easy [installation guide](https://www.openproject.org/download-and-installation/). +The Community edition and [Enterprise on-premises edition](https://www.openproject.org/enterprise-edition/) are on-premises solutions and thus need installation from your side while the [Enterprise cloud edition](https://www.openproject.org/enterprise-edition/#hosting-options) is hosted by us. +The Community edition is for free and we ask you to do the installation yourself. Of course we support you with a clear and easy [installation guide](https://www.openproject.org/download-and-installation/). If you would like us to install the **Enterprise on-premises edition** for you, we are charging a fee of €300 (excluding VAT) for this once-off service. You can add the installation support during your [Enterprise on-premises edition booking process](../../enterprise-guide/enterprise-on-premises-guide/activate-enterprise-on-premises/#order-the-enterprise-on-premises-edition). ### How do I get SSL certificates (in case of installation support by OpenProject employee)? Do we have to purchase them? -You can either order the SSL certificates from your ISP or we can create them during installation using Let's Encrypt. If you want the former, you must store the certificates, keys and potentially the passphrase on the server so that they can be entered during the installation. If you want to use Let's Encrypt for encryption, please check whether your operating system supports the [certbot software](https://certbot.eff.org/instructions). +You can either order the SSL certificates from your ISP or we can create them during installation using Let's Encrypt. If you want the former, you must store the certificates, keys and potentially the passphrase on the server so that they can be entered during the installation. If you want to use Let's Encrypt for encryption, please check whether your operating system supports the [certbot software](https://certbot.eff.org/instructions). ### How do you implement the routing so that the page requests intended for this project domain of ours land on the Apache server that is part of the OpenProject installation? What agreements or requirements do we have to discuss with our domain/webspace provider? @@ -108,7 +107,7 @@ A DNS record needs to be placed at the ISP that connects the domain name you wou ### Does the email address used by OpenProject have to be within the our domain for OpenProject or can this also be another address? -The email address does not have to match the domain. For users, however, an email address that matches the domain could be easier to understand. +The email address does not have to match the domain. For users, however, an email address that matches the domain could be easier to understand. ### How can I select the BIM edition during installation? @@ -124,9 +123,7 @@ You can access it using a browser. Please see our [Installation & Upgrades Guide Set a higher number of web workers to allow more processes to be handled at the same time. Find out more [here](../operation/control) and about system requirements [here](../system-requirements/). - - -### I don't receive emails. Test email works fine but not the one for work package updates. +### I don't receive emails. Test email works fine but not the one for work package updates. What can I do? There are two different types of emails in OpenProject: One sent directly within the request to the server (this includes the test mail) and one sent asynchronously, via a background job from the backend. The majority of mail sending jobs is run asynchronously to facilitate a faster response time for server request. @@ -134,7 +131,7 @@ Use a browser to call your domain name followed by "health_checks/all" (e.g. `ht If the health check does not return satisfying results, have a look if the background worker is running by entering `ps aux | grep jobs` on the server. If it is not running, no entry is returned. If it is running an entry with "jobs:work" at the end is displayed. -If the worker is not running please try a restart with `sudo openproject restart worker`. +If the worker is not running please try a restart with `sudo openproject restart worker`. If that doesn't help it could be that the worker is scaled to 0 for some reason, so please try `sudo openproject scale worker=1`. If that doesn't help either, please have a look at your [logs](../operation/monitoring), which are accessible with `sudo openproject logs`. @@ -144,8 +141,6 @@ Another approach would be to restart OpenProject completely, especially after ch This will be done automatically in case the package based installation is used. - - ### The packaged installation cannot be installed or upgraded due to errors. What could cause them? For packaged installations, the openproject package behaves just like every other system package (dpkg or rpm packages, depending on your distribution). If you encounter errors while trying to install or upgrade, please check the following pieces of information first. @@ -154,11 +149,9 @@ For packaged installations, the openproject package behaves just like every othe 2. You have enough inodes on your partitions left. Verify with `df -i` . As OpenProject packages contains a high number of files, these might cause problems with low free inode counts. 3. Make sure you do not have a virus scanner such as Sophos or other pieces of software blocking the installation of packages. - - ### After upgrading I receive the error message "Your OpenProject installation has pending database migrations. You have likely missed running the migrations on your last upgrade. Please check the upgrade guide to properly upgrade your installation." What does that mean? -For some updates of OpenProject, the database layout needs to be adapted to support new features and fix bugs. These changes need to be carried out as part of the update process. This is why it is important to always run `sudo openproject configure` as part of the update process. +For some updates of OpenProject, the database layout needs to be adapted to support new features and fix bugs. These changes need to be carried out as part of the update process. This is why it is important to always run `sudo openproject configure` as part of the update process. Please also have a look at [our upgrade guide](../operation/upgrading). @@ -171,11 +164,11 @@ Once that's done all you have to do is enable automatic creation under /settings For existing projects you can enable the module in the project settings (*Project Settings -> Modules*) and then configure the repository under *Project Settings -> Repository* where you choose git and then "Git repository integrated into OpenProject". -Mind, that repository integration in the sense that you will be able to checkout the repository through OpenProject **does only work in the packaged installation, not docker**. +Mind, that repository integration in the sense that you will be able to checkout the repository through OpenProject **does only work in the packaged installation, not docker**. ### How can I uninstall OpenProject (Community edition or Enterprise on-premises)? -The package based installation is intended to be run on a dedicated system. Dedicated in this case means that no other application software should be served by the server. The system can be either physical or virtual. Removing OpenProject is then equivalent with removing that system or docker instances. +The package based installation is intended to be run on a dedicated system. Dedicated in this case means that no other application software should be served by the server. The system can be either physical or virtual. Removing OpenProject is then equivalent with removing that system or docker instances. In case the database is stored on a different system, e.g. within a database cluster, it needs to be removed separately. The database URL can be found within the OpenProject installation, via `openproject config:get DATABASE_URL`. @@ -187,4 +180,4 @@ It doesn't by default. There is a setting which enables this option: drop_old_se ### Can the OpenProject force password expiration and prevent users from reusing a password? -There is no password expiration in OpenProject, but OpenProject can prevent the re-use of previous passwords via the password_count_former_banned setting. If you use an LDAP-Server for login that has this feature, you can archive this via your LDAP-Server. Other identity providers (e.g. KeyCloak) used via OpenID Connect or SAML can also do this. You can set up these rules in these identity providers directly and use them for authentication. \ No newline at end of file +There is no password expiration in OpenProject, but OpenProject can prevent the re-use of previous passwords via the password_count_former_banned setting. If you use an LDAP-Server for login that has this feature, you can archive this via your LDAP-Server. Other identity providers (e.g. KeyCloak) used via OpenID Connect or SAML can also do this. You can set up these rules in these identity providers directly and use them for authentication. diff --git a/docs/installation-and-operations/installation/README.md b/docs/installation-and-operations/installation/README.md index c4a791c915a1..5f3b5be6d3b0 100644 --- a/docs/installation-and-operations/installation/README.md +++ b/docs/installation-and-operations/installation/README.md @@ -19,6 +19,8 @@ OpenProject can be setup in three different ways: > **NOTE: We recommend using the DEB/RPM package installation.** ## Frequently asked questions (FAQ) + ### Do you have a step-by-step guide to installing OpenProject Enterprise on-premises under Active Directory? + We have a guide on [how to use OpenProject with your Active Directory](../../system-admin-guide/authentication/ldap-authentication/). In addition, with the Enterprise on-premises edition it is also possible to [link LDAP groups with groups in OpenProject](../../system-admin-guide/authentication/ldap-authentication/ldap-group-synchronization/). diff --git a/docs/installation-and-operations/installation/docker/README.md b/docs/installation-and-operations/installation/docker/README.md index bd154e71e03a..def0b32d2b2f 100644 --- a/docs/installation-and-operations/installation/docker/README.md +++ b/docs/installation-and-operations/installation/docker/README.md @@ -449,7 +449,7 @@ All the Dockerfile does is copy your custom plugins gemfile into the image, inst If you are using the `-slim` tag you will need to do the following to add your plugin. -``` +```dockerfile FROM openproject/openproject:14 AS plugin # If installing a local plugin (using `path:` in the `Gemfile.plugins` above), @@ -771,7 +771,7 @@ But that will be a single point of failure if the manager node goes down. To make this more redundant you can use the load balancer directive in your proxy configuration. For instance for apache this could look like this: -``` +```apache BalancerMember http://10.0.2.77:8080 # swarm node 1 (manager) BalancerMember http://10.0.2.78:8080 # swarm node 2 diff --git a/docs/installation-and-operations/installation/manual/README.md b/docs/installation-and-operations/installation/manual/README.md index 102f2e1bcc98..79a51e75dae8 100644 --- a/docs/installation-and-operations/installation/manual/README.md +++ b/docs/installation-and-operations/installation/manual/README.md @@ -108,16 +108,16 @@ time to finish. [openproject@host] source ~/.profile [openproject@host] git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build -[openproject@host] rbenv install 3.2.3 +[openproject@host] rbenv install 3.3.1 [openproject@host] rbenv rehash -[openproject@host] rbenv global 3.2.3 +[openproject@host] rbenv global 3.3.1 ``` To check our Ruby installation we run `ruby --version`. It should output something very similar to: -``` -ruby 3.2.3 (2024-01-18 revision 52bb2ac0a6) [arm64-darwin23] +```text +ruby 3.3.1 (2024-04-23 revision c56cd86388) [arm64-darwin23] ``` ## Installation of Node @@ -143,7 +143,7 @@ time to finish. To check our Node installation we run `node --version`. It should output something very similar to: -``` +```text v20.9.0 ``` @@ -152,7 +152,6 @@ v20.9.0 We will install the OpenProject Community Edition. It contains the recommended set of plugins for use with OpenProject. For more information, see [github.com/opf/openproject](https://github.com/opf/openproject). - ```shell [openproject@host] cd ~ [openproject@host] git clone https://github.com/opf/openproject.git --branch stable/9 --depth 1 @@ -215,7 +214,7 @@ a better performance of OpenProject: rails_cache_store: :memcache ``` -> __NOTE:__ You should validate your `yml` files, for example with [yamlchecker.com](https://yamlchecker.com/). Both, the `database.yml` and `configuration.yml` file are sensitive to whitespace. It is pretty easy to write invalid `yml` files without seeing the error. Validating those files prevents you from such errors. +> **NOTE:** You should validate your `yml` files, for example with [yamlchecker.com](https://yamlchecker.com/). Both, the `database.yml` and `configuration.yml` file are sensitive to whitespace. It is pretty easy to write invalid `yml` files without seeing the error. Validating those files prevents you from such errors. > To configure the environment variables such as the number of web server threads `OPENPROJECT_WEB_WORKERS`, copy the `.env.example` to `.env` and add the environment variables you want to configure. The variables will be automatically loaded to the application's environment. @@ -235,6 +234,7 @@ To configure the environment variables such as the number of web server threads ```shell [openproject@all] RAILS_ENV="production" OPENPROJECT_DEFAULT_LANGUAGE=fr ./bin/rake db:seed ``` + will seed the database in the French language. ### Secret token @@ -290,7 +290,6 @@ To do this, continue as the root user: As told by the installer, create the file /etc/apache2/mods-available/passenger.load and add the following line. But before copy&pasting the following lines, check if the content (especially the version numbers!) is the same as the passenger-install-apache2-module installer said. When you're in doubt, do what passenger tells you. - ```apache LoadModule passenger_module /home/openproject/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/passenger-5.0.14/buildout/apache2/mod_passenger.so ``` @@ -298,10 +297,10 @@ LoadModule passenger_module /home/openproject/.rbenv/versions/2.1.6/lib/ruby/gem Then create the file /etc/apache2/mods-available/passenger.conf with the following contents (again, take care of the version numbers!): ```apache - - PassengerRoot /home/openproject/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/passenger-5.0.14 - PassengerDefaultRuby /home/openproject/.rbenv/versions/2.1.6/bin/ruby - + + PassengerRoot /home/openproject/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/passenger-5.0.14 + PassengerDefaultRuby /home/openproject/.rbenv/versions/2.1.6/bin/ruby + ``` Then run: @@ -440,7 +439,7 @@ If you need to restart the server (for example after a configuration change), do * **When accessing OpenProject, I get an error page. How do I find out what went wrong?** Things can go wrong on different levels. You can find the apache error logs here: `/var/log/apache2/error.log` - + The OpenProject log can be found here: `/home/openproject/openproject/log/production.log` * **I cannot solve an error, not even with the log files. How do I get help?** diff --git a/docs/installation-and-operations/installation/misc/README.md b/docs/installation-and-operations/installation/misc/README.md index 49a05ff771e3..f0e8ce1b4c5f 100644 --- a/docs/installation-and-operations/installation/misc/README.md +++ b/docs/installation-and-operations/installation/misc/README.md @@ -16,11 +16,9 @@ on different platforms which use either the docker container or the package: * [Synology](../synology) * [Manual (not recommended)](../manual) - -# Community provided installation variants +## Community provided installation variants There are additional methods on installing OpenProject, which we will link below for reference. Please note that we do not officially support these methods, and cannot guarantee their stability or correctness. -* [Installing OpenProject with Univention App Center](../univention) * [Custom package for OpenSuse by Matthew Trescott](https://en.opensuse.org/User:Matthewtrescott/OpenProject) * [Instructions for installing OpenProject on Raspian Buster using a Raspberry Pi 4 by Wolfgang Schmied](https://github.com/madewhatnow/OpenProjectRaspberryPi) diff --git a/docs/installation-and-operations/installation/packaged/README.md b/docs/installation-and-operations/installation/packaged/README.md index d7092252bf13..3992945ea792 100644 --- a/docs/installation-and-operations/installation/packaged/README.md +++ b/docs/installation-and-operations/installation/packaged/README.md @@ -305,11 +305,11 @@ sudo zypper install openproject Then finish the installation by reading the [*Initial configuration*](#initial-configuration) section. -# Full-text extraction not supported +## Full-text extraction not supported For some distributions we do not provide the required dependencies for full-text extraction of attachments. If you need this feature, please install the required dependencies (`catdoc unrtf poppler-utils tesseract-ocr`) manually. For more information, [please see the plaintext gem](https://github.com/planio-gmbh/plaintext). Once installed, check `Administration > Information` to see if OpenProject is able to pick up these dependencies. -# Initial Configuration +## Initial Configuration After you have successfully installed the OpenProject package, you can now perform the initial configuration of OpenProject, using the wizard that ships with the OpenProject package. @@ -431,9 +431,7 @@ In that case, you will be shown three additional dialogs to enter the certificat ![02d-ssl](02d-ssl.png) - - -Enabling this mode will result in OpenProject only responding to HTTPS requests, and upgrade any non-secured requests to HTTPS. It will also output HTTP Strict Transport Security (HSTS) headers to the client. +Enabling this mode will result in OpenProject only responding to HTTPS requests, and upgrade any non-secured requests to HTTPS. It will also output HTTP Strict Transport Security (HSTS) headers to the client. #### External SSL/TLS termination @@ -442,7 +440,7 @@ Enabling this mode will result in OpenProject only responding to HTTPS requests, If you have a separate server that is terminating SSL and only forwarding/proxying to the OpenProject server, you must select "No" in this dialog. However, there are some parameters you need to put into your outer configuration. - If you're proxying to the openproject server, you need to forward the HOST header to the internal server. This ensures that the host name of the outer request gets forwarded to the internal server. Otherwise you might see redirects in your browser to the internal host that OpenProject is running on. - - In Apache2, set the `ProxyPreserveHost On` directive + - In Apache2, set the `ProxyPreserveHost On` directive - In NginX, use the following value: `proxy_set_header X-Forwarded-Host $host:$server_port;` - If you're terminating SSL on the outer server, you need to set the `X-Forwarded-Proto https` header to let OpenProject know that the request is HTTPS, even though its been terminated earlier in the request on the outer server. - In Apache2, use `RequestHeader set "X-Forwarded-Proto" https` @@ -484,11 +482,9 @@ Here an example for external SSL/TLS termination with apache (httpd): ``` - - ### Skip Apache2 web server install (not recommended) -> **Note:** Skipping step 3 Apache2 web server install will ask later in step 7 for information about the hostname and HTTPS +> **Note:** Skipping step 3 Apache2 web server install will ask later in step 7 for information about the hostname and HTTPS The installer will not set up an external web server for accessing. You will need to either install and set up a web server such as Apache2 or Nginx to function as the web server forwarding to our internal server listening at `localhost:6000` by proxying. @@ -502,8 +498,6 @@ When installing with an existing Apache2, you can take a look at the source of o > **Please note:** If you reconfigure the OpenProject application and switch to `skip`, you might run into errors with the Apache configuration file, as that will not be automatically remove. Please double-check you removed references to the `openproject.conf` if you do reconfigure. - - ## Step 4: SVN/Git integration server If you have selected to auto-install an Apache2 web server, you will be asked whether you want to install Git and Subversion repository support. In case you do not need it or when in doubt, choose **Skip** for both options. @@ -512,7 +506,6 @@ For more information, [see our help on repositories](../../../user-guide/reposit ![03-repos](03-repos.png) - ## Step 5: Administrator email The wizard will ask you for an administrative email address so that it can create the administrator account with that email for the initial login. Enter your email address to have it tied to the admin account. @@ -533,14 +526,10 @@ First, enter the fully qualified domain where your OpenProject installation will ![Select the OpenProject host name](07a-hostname.png) - - Next, tell OpenProject whether you have SSL termination enabled somewhere in your stack. Please note that you need to set up protocol forwarding by the means mentioned in the [Skip Apache2 Installation](#skip-apache2-web-server-install-not-recommended) at step 3 above. ![HTTPS setting](07b-protocol.png) - - ## Step 8: Default language > **Note:** This step is only shown on the very first installation of OpenProject, as it affects only the initial seeding of the basic and demo data. Changing this value after installation will have no effect. @@ -555,7 +544,7 @@ Also, this setting will control what is the default language for new users if th With this last step confirmed, the OpenProject wizard will complete, and apply all the configuration options that you have just selected. This might take a few minutes depending on your machine and internet connection, as OpenProject might need to install additional packages (such as the web server, database) depending on your selections. -In case this process crashes or exits with an obvious error, please keep the output and send your configuration from `/etc/openproject/installer.dat` (removing any passwords from it) to us at support@openproject.com , or [reach out to the community forums](https://community.openproject.org/projects/openproject/forums). +In case this process crashes or exits with an obvious error, please keep the output and send your configuration from `/etc/openproject/installer.dat` (removing any passwords from it) to us at support@openproject.com , or [reach out to the community forums](https://community.openproject.org/projects/openproject/forums). When this process completes, it will have started the internal application and web servers, the background jobs to process work-intensive jobs, and set up the connection to the database. @@ -568,8 +557,6 @@ You can then log in using the default user/password combination: You will be asked to change this password immediately after the first login. - - ## Post-installation configuration Here are some pointers to related documentation that you will need to get started: diff --git a/docs/installation-and-operations/installation/univention/README.md b/docs/installation-and-operations/installation/univention/README.md deleted file mode 100644 index 95d910fb3dc7..000000000000 --- a/docs/installation-and-operations/installation/univention/README.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -sidebar_navigation: - title: Univention App Center ---- - -# OpenProject in Univention App Center - -> Important notice: currently it is not possible to update your OpenProject installation via UCS. Please choose one of our supported installation methods. - -Univention App Center is the marketplace in [Univention Corporate Server (UCS)](https://www.univention.com/products/ucs/), an enterprise operating platform for infrastructure and identity management. OpenProject is available in the [App Center](https://www.univention.com/products/app-catalog/openproject/) and comes integrated with the identity management. Please note that only App Center 5 is receiving updates for OpenProject due to the incompatibility between AppCenter 4.3 and 5.0 for Docker-based installations. - - -**App Appliance for easy deployment** - -With the App Appliance you can easily deploy your own OpenProject server in a virtual environment. The App Appliance consists of UCS and OpenProject already pre-installed. The UCS environment is setup with only a few steps. Download the official OpenProject virtual machine image in one of the following formats: - -* [VMware](https://appcenter.software-univention.de/univention-apps/current/openproject/Univention-App-openproject-vmware.zip) -* [VMware ESXi](https://appcenter.software-univention.de/univention-apps/current/openproject/Univention-App-openproject-ESX.ova) -* [VirtualBox](https://appcenter.software-univention.de/univention-apps/current/openproject/Univention-App-openproject-virtualbox.ova) -* [KVM](https://appcenter.software-univention.de/univention-apps/current/openproject/Univention-App-openproject-KVM.qcow2) - -**Instructions for installation on UCS without App Appliance** - -1. Download and setup Univention Corporate Server (UCS) -2. Install OpenProject via Univention App Center -3. Add user accounts - -[![Available in Univention App Center](logo_uac_final.svg)](https://www.univention.com/products/app-catalog/openproject/) diff --git a/docs/installation-and-operations/installation/univention/logo_uac_final.svg b/docs/installation-and-operations/installation/univention/logo_uac_final.svg deleted file mode 100644 index 944df1c08ef7..000000000000 --- a/docs/installation-and-operations/installation/univention/logo_uac_final.svg +++ /dev/null @@ -1 +0,0 @@ -logo_uac_final \ No newline at end of file diff --git a/docs/installation-and-operations/misc/custom-openid-connect-providers/README.md b/docs/installation-and-operations/misc/custom-openid-connect-providers/README.md index cb2adedfcf53..ffda2ec0a781 100644 --- a/docs/installation-and-operations/misc/custom-openid-connect-providers/README.md +++ b/docs/installation-and-operations/misc/custom-openid-connect-providers/README.md @@ -48,7 +48,6 @@ options = { } ``` - Just type this into the console and confirm by pressing *Enter*. This assumes that you have configured your application in the respective provider correctly @@ -137,15 +136,11 @@ options = { } ``` - - ### Back-channel logout OpenProject OIDC integration supports [back-channel logouts](https://openid.net/specs/openid-connect-backchannel-1_0.html) if OpenProject is configured for ActiveRecord based sessions (which is the default). -On the identity provider side, you need to set `https:///auth//backchannel-logout`. `` is the identifier of the OIDC configuration as provided above. - - +On the identity provider side, you need to set `https:///auth//backchannel-logout`. `` is the identifier of the OIDC configuration as provided above. #### Respecting self-registration @@ -160,8 +155,6 @@ options = { } ``` - - ### Claims You can also request [claims](https://openid.net/specs/openid-connect-core-1_0-final.html#Claims) for both the id_token and userinfo endpoint. @@ -215,14 +208,10 @@ more complicated `claims` option above but with `"essential": false`. For all other claims there is no such shorthand. - - ## Instructions for common OIDC providers The following section contains instructions for common OpenID Connect providers. Feel free to contribute your settings through the editing functionality at the bottom of this page. - - ### Keycloak In Keycloak, use the following steps to set up a OIDC integration for OpenProject: @@ -231,28 +220,22 @@ In Keycloak, use the following steps to set up a OIDC integration for OpenProjec - Under "Clients" menu, click on "Create" or "Create client" - **Add client**: Enter the following details - **Client type / protocol**: OpenID Connect - - **Client ID**: `https://` + - **Client ID**: `https://` - **Name**: Choose any name, used only within keycloak - For the **Capability config**, keep Standard flow checked. In our tested version of Keycloak, this was the default. - Click on Save - - You will be forwarded to the settings tab of the new client. Change these settings: - Set **Valid redirect URIs** to `https:///auth/keycloak/*` - Enable **Sign Documents** - If you want to enable [Backchannel logout](https://openid.net/specs/openid-connect-backchannel-1_0.html), set **Backchannel logout URL** to `https:///auth/keycloak/backchannel-logout` - - Next, you will need to create or note down the client secret for that client. -- Go to the **Credentials** tab +- Go to the **Credentials** tab - Click on the copy to clipboard button next to **Client secret** to copy that value - - **OPTIONAL:** By default, OpenProject will map the user's email to the login attribute in OpenProject. If you want to change that, you can do it by providing an alternate claim value in Keycloak: - Go to **Client scopes** @@ -264,8 +247,6 @@ Next, you will need to create or note down the client secret for that client. - Set Token claim name to `preferred_username` - Click on **Save** - - #### Setting up OpenProject for Keycloak integration In OpenProject, these are the variables you will need to set. Please refer to the above documentation for the different ways you can configure these variables: @@ -285,24 +266,18 @@ OPENPROJECT_OPENID__CONNECT_KEYCLOAK_END__SESSION__ENDPOINT="http://`) +- The Client ID you set up for OpenProject (assumed to be `https://`) - The client secret - The tenant's UUID ([Please see this guide](https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-protocols-oidc) for more information on the tenant value) - - #### Setting up OpenProject for Keycloak integration In OpenProject, these are the variables you will need to set. Please refer to the above documentation for the different ways you can configure these variables: @@ -317,12 +292,8 @@ openproject config:set OPENPROJECT_OPENID__CONNECT_AZURE_TOKEN__ENDPOINT="https: openproject config:set OPENPROJECT_OPENID__CONNECT_AZURE_USERINFO__ENDPOINT="https://graph.microsoft.com/oidc/userinfo" ``` - - Restart your OpenProject server and test the login button to see if it works. - - ## Troubleshooting **Q: After clicking on a provider badge, I am redirected to a signup form that says a user already exists with that login.** diff --git a/docs/installation-and-operations/misc/docker-postgresql-migration/README.md b/docs/installation-and-operations/misc/docker-postgresql-migration/README.md index fddfaf8c6f5a..e94f2938e7e3 100644 --- a/docs/installation-and-operations/misc/docker-postgresql-migration/README.md +++ b/docs/installation-and-operations/misc/docker-postgresql-migration/README.md @@ -1,6 +1,6 @@ # Migrating your Docker OpenProject database to PostgreSQL -This guide will migrate your all-in-one docker-based MySQL installation to a PostgreSQL installation using [pgloader](https://github.com/dimitri/pgloader). +This guide will migrate your all-in-one docker-based MySQL installation to a PostgreSQL installation using [pgloader](https://github.com/dimitri/pgloader). ## Backing up @@ -14,7 +14,7 @@ The Dockerfile comes with a built-in PostgreSQL migration script that will auto- Depending on your usage, you may want to set up an external PostgreSQL database to provide the container with connection details just like you did for MySQL. -In any case, you may also use the internally configured PostgreSQL instance of the docker container by using the DATABASE_URL ` postgres://openproject:openproject@127.0.0.1/openproject` +In any case, you may also use the internally configured PostgreSQL instance of the docker container by using the DATABASE_URL `postgres://openproject:openproject@127.0.0.1/openproject` **Installing a PostgreSQL database outside docker** @@ -51,14 +51,10 @@ Lastly, exit the system user # You will be root again now. ``` - - ### Setting environment variables To run the migration part of the image, you will have to provide two environment files: - - ### The MYSQL_DATABASE_URL Note down or copy the current MySQL `DATABASE_URL` @@ -71,10 +67,7 @@ Note down or copy the current MySQL `DATABASE_URL` MYSQL_DATABASE_URL="mysql://user:password@localhost:3306/dbname" ``` - - -**Please note:** Ensure that the URL starts with `mysql://` , not with ` mysql2://` ! - +**Please note:** Ensure that the URL starts with `mysql://` , not with `mysql2://`! ### The PostgreSQL DATABASE_URL @@ -84,18 +77,15 @@ Pass in `DATABASE_URL` pointing to your new PostgreSQL database. This is either POSTGRES_DATABASE_URL="postgresql://:@/" ``` - ### Adapting the hostname **Note:** Depending on your docker installation and networking, you may need to replace the hostname `localhost` in the database URLs with `host.docker.internal` to access the docker host. On Mac for example, localhost will refer to the docker client. - ### Running the migration To run the migration script within the container, now simply run the following command, replacing the content of the environment variables with your actual values. - ```shell docker run -it \ -e MYSQL_DATABASE_URL="mysql://user:password@localhost:3306/dbname" \ @@ -103,5 +93,4 @@ docker run -it \ openproject/openproject:latest ``` - This will perform all necessary steps to perform the migration. Afterwards, simply remove the `MYSQL_DATABASE_URL` environment variable again and start your container as usual. diff --git a/docs/installation-and-operations/misc/migration-to-postgresql13/README.md b/docs/installation-and-operations/misc/migration-to-postgresql13/README.md index e5f5ba62fd8d..d5d093d3a2c5 100644 --- a/docs/installation-and-operations/misc/migration-to-postgresql13/README.md +++ b/docs/installation-and-operations/misc/migration-to-postgresql13/README.md @@ -19,13 +19,11 @@ And verify that it outputs: postgres/autoinstall **install**. If that is not the case, you are likely using a self-provisioned database or a remote database. In this case, please follow the instructions from your provider or use generic PostgreSQL upgrade guides. A guide we can recommend for Debian/Ubuntu based servers is [this one](https://gorails.com/guides/upgrading-postgresql-version-on-ubuntu-server). Please adapt that guide or the following steps to your distribution. -In the following, we assume that you initially let OpenProject setup your PostgreSQL installation, using a local database. +In the following, we assume that you initially let OpenProject setup your PostgreSQL installation, using a local database. NOTE: RedHat and CentOS are slightly different, depending on which PostgreSQL package/repository will be used. For the documentation parts titled RedHat/CentOS RedHat Enterprise Linux 8 was used. - - 1. First, connect to your server and make sure your local version is PostgreSQL v10: For Debian/Ubuntu: @@ -42,8 +40,6 @@ sudo cat /var/lib/pgsql/10/data/PG_VERSION 10 ``` - - 2. Install the new version of PostgreSQL: For Debian/Ubuntu: @@ -60,8 +56,6 @@ sudo yum install pgsql13 sudo /usr/bin/postgresql-13-setup initdb ``` - - 3. Stop the PostgreSQL servers: For Debian/Ubuntu: @@ -78,8 +72,6 @@ sudo su - postgres -c "/usr/pgsql-10/bin/pg_ctl stop --wait --pgdata=/var/lib/pg sudo su - postgres -c "/usr/pgsql-13/bin/pg_ctl stop --wait --pgdata=/var/lib/pgsql/13/data" ``` - - 4. Migrate your data to PostgreSQL 13: For Debian/Ubuntu: @@ -110,8 +102,6 @@ sudo su - postgres < Information" section. - - 7. If everything is fine, you can then remove your older PostgreSQL installation: For Debian/Ubuntu: @@ -207,7 +193,7 @@ docker run --rm -it \ If everything goes well, the process should end with a message as follows: -``` +```text Upgrade Complete ---------------- Optimizer statistics are not transferred by pg_upgrade so, @@ -264,11 +250,9 @@ Please change the command appropriately for other installation methods. Once con ANALYZE VERBOSE; ``` - - ## Troubleshooting -###### User "openproject" does not have a valid SCRAM secret - psql: error: FATAL: password authentication failed for user "openproject" +> User "openproject" does not have a valid SCRAM secret - psql: error: FATAL: password authentication failed for user "openproject" Check `/var/lib/pgsql/13/data/pg_hba.conf` for any appearance of `scram-sha-256` and replace with `md5` diff --git a/docs/installation-and-operations/misc/migration/README.md b/docs/installation-and-operations/misc/migration/README.md index 65ce530c5e17..6426c1dc830c 100644 --- a/docs/installation-and-operations/misc/migration/README.md +++ b/docs/installation-and-operations/misc/migration/README.md @@ -66,7 +66,6 @@ First the dump has to be extracted (unzipped) and then restored. The command use pg_restore -h -u -W --dbname --clean postgresql-dump-20180408095521.pgdump ``` - ### Attachments Your storage path on the old installation can be shown using the following command: @@ -87,8 +86,6 @@ openproject config:get ATTACHMENTS_STORAGE_PATH Simply extract your attachments dump into that folder with `tar -xvzf .tar.gz`, creating it beforehand if needed. Ensure that this is writable by the `openproject` user. - - ### Repositories For repositories, the same approach applies as for the attachments: @@ -107,8 +104,6 @@ openproject config:get GIT_REPOSITORIES Simply extract your respective repository dumps into ech folder, creating it beforehand if needed. The dumps will only be created if you use that feature in your old installation. - - ## Running openproject configure After you restored all data and updated your installer.dat, all you need to do is run through the configuration process of the packaged installation: diff --git a/docs/installation-and-operations/misc/packaged-postgresql-migration/README.md b/docs/installation-and-operations/misc/packaged-postgresql-migration/README.md index bc45d7ff666e..fe8ef3380462 100644 --- a/docs/installation-and-operations/misc/packaged-postgresql-migration/README.md +++ b/docs/installation-and-operations/misc/packaged-postgresql-migration/README.md @@ -2,7 +2,7 @@ **Note:** this guide only applies if you've installed OpenProject using our DEB/RPM packages. -This guide will migrate your packaged MySQL installation to a PostgreSQL installation using [pgloader](https://github.com/dimitri/pgloader). +This guide will migrate your packaged MySQL installation to a PostgreSQL installation using [pgloader](https://github.com/dimitri/pgloader). ## Backing up @@ -15,7 +15,6 @@ This guide should leave you with a set of archives that you can use to restore, - **Custom env configuration**: conf-<timestamp>.tar.gz - **Repositories**: svn- and git-<timestamp>.tar.gz - ## Installation of pgloader We ship a custom version of pgloader (named `pgloader-ccl`), which embeds some memory optimizations useful when you are migrating from a large MySQL database. This also allows us to provide a unified migration experience for all installation types. This package is available for all the currently supported distributions at [https://packager.io/gh/opf/pgloader-ccl](https://packager.io/gh/opf/pgloader-ccl). @@ -68,7 +67,7 @@ sudo zypper install pgloader-ccl ## Optional: Install and create PostgreSQL database -If you have not yet installed and set up a PostgreSQL installation database, please set up a PostgreSQL database now. +If you have not yet installed and set up a PostgreSQL installation database, please set up a PostgreSQL database now. OpenProject requires at least PostgreSQL 9.5 installed. Please check [www.postgresql.org/download](https://www.postgresql.org/download/) if your distributed package is too old. @@ -123,7 +122,6 @@ Form the `DATABASE_URL` string to match your selected password and add it to the openproject config:set DATABASE_URL="postgresql://openproject:@localhost/openproject" ``` - **Please note:** Replace `` with the password you provided above. If you used any special characters, [check whether they need to be percent-encoded](https://developer.mozilla.org/en-US/docs/Glossary/percent-encoding) for the database URL. You can use this command to escape any characters in the password: @@ -132,7 +130,6 @@ You can use this command to escape any characters in the password: openproject run ruby -r cgi -e "puts CGI.escape('your-password-here');" ``` - ## Migrating the database You are now ready to migrate from MySQL to PostgreSQL. The OpenProject packages embed a migration script that can be launched as follows: @@ -145,20 +142,19 @@ This might take a while depending on current installation size. ## Optional: Uninstall MySQL -If the packaged installation auto-installed MySQL before and you no longer need it (i.e. only OpenProject used a MySQL database on your server), you can remove the MySQL packages. +If the packaged installation auto-installed MySQL before and you no longer need it (i.e. only OpenProject used a MySQL database on your server), you can remove the MySQL packages. You can check the output of `dpkg -l | grep mysql` to check for packages to be removed. Only keep `libmysqlclient-dev` for Ruby dependencies on the mysql adapter. -The following is an exemplary removal of an installed version MySQL 5.7. +The following is an exemplary removal of an installed version MySQL 5.7. -``` +```shell [root@host] apt-get remove mysql-server [root@host] openproject config:unset MYSQL_DATABASE_URL ``` **Note:** OpenProject still depends on `mysql-common` and other dev libraries of MySQL to build the `mysql2` gem for talking to MySQL databases. Depending on what packages you try to uninstall, `openproject` will be listed as a dependent package to be uninstalled if trying to uninstall `mysql-common`. Be careful here with the confirmation of removal, because it might just remove openproject itself due to the apt dependency management. - ## Running openproject reconfigure After you migrated your data, all you need to do is run through the configuration process of the packaged installation to remove the MySQL configuration @@ -167,9 +163,7 @@ After you migrated your data, all you need to do is run through the configuratio openproject reconfigure ``` - In the database installation screen, make sure to select `skip`. Keep all other values the same by simply confirming them by pressing `enter` . - After the configuration process has run through, your OpenProject installation will be running on PostgreSQL! diff --git a/docs/installation-and-operations/misc/textile-migration/README.md b/docs/installation-and-operations/misc/textile-migration/README.md index 4e4a17be2178..c32e66140799 100644 --- a/docs/installation-and-operations/misc/textile-migration/README.md +++ b/docs/installation-and-operations/misc/textile-migration/README.md @@ -12,7 +12,6 @@ The migration will be performed automatically during your upgrade to 8.0. You wi You need to run this migration on an OpenProject version < 13.0, as the conversion migration is no longer part of OpenProject starting that version. - ## Dependencies We depend on `pandoc` (https://pandoc.org) for the conversion of all formattable fields in OpenProject. It provides automated means to migrate between many input and output formats, in our case from Textile to GitHub-flavored Markdown. @@ -21,22 +20,16 @@ If you do not have an executable pandoc version of at least version 2.0 in your If you want to force a specific version within your path, set the environment variable OPENPROJECT_PANDOC_PATH, e.g., `OPENPROJECT_PANDOC_PATH=/opt/my/pandoc/bin/pandoc`. - - ## CommonMark Our Markdown parsers and formatters operate on the [CommonMark Markdown standard](https://commonmark.org/) with some suggested additions not yet part of the standard formalized in the [GitHub-flavored Markdown spec.](https://github.github.com/gfm/) - - ## Skipping the migration If you want to skip the migration during the upgrade of 8.0. (e.g., because you want it to run asynchronously), please set the environment variable `OPENPROJECT_SKIP_TEXTILE_MIGRATION="true"` . This will print a warning and then continue with the migration. You can manually force the migration with the following command. **Warning:** Be careful not to execute this once you have already migrated to Markdown because the converter does not distinguish between input formats and simply iterates over all values. - - ```shell $> bundle exec rails runner "OpenProject::TextFormatting::Formats::Markdown::TextileConverter.new.run!" ``` @@ -47,19 +40,12 @@ or in a packaged installation: $> openproject run bundle exec rails runner "OpenProject::TextFormatting::Formats::Markdown::TextileConverter.new.run!" ``` - - ## Markdown and WYSIWYG features With the migration of Markdown, we have introduced a quasi-WYSIWYG powered by CKEditor5 that will make editing in all formattable fields of OpenProject much easier. The output format of that editor is still Markdown. - - For information regarding the features of Markdown and the capabilities of the CKEditor WYSIWYG editor built upon it, please see [here](../../../user-guide/wiki/). +## Textile in 8.0.0 - -## Textile in 8.0.0. - -OpenProject does no longer support Textile in 8.0.0 because it is infeasible to support both variants. Please reach out to us if you're interested in maintaining a Textile format as a plugin. - +OpenProject does no longer support Textile in 8.0.0 because it is infeasible to support both variants. Please reach out to us if you're interested in maintaining a Textile format as a plugin. diff --git a/docs/installation-and-operations/misc/time-entries-corrupted-by-10-4/README.md b/docs/installation-and-operations/misc/time-entries-corrupted-by-10-4/README.md index 7821acbb08ca..60c3007f977b 100644 --- a/docs/installation-and-operations/misc/time-entries-corrupted-by-10-4/README.md +++ b/docs/installation-and-operations/misc/time-entries-corrupted-by-10-4/README.md @@ -2,7 +2,7 @@ > **Note**: This guide only concerns installations having upgraded exactly to the OpenProject version 10.4.0. Installations having upgraded to 10.4.1 directly are not affected. -The migration scripts that ran as part of the OpenProject 10.4.0 upgrade includes an unfortunate bug that leads to some installations suffering data loss. +The migration scripts that ran as part of the OpenProject 10.4.0 upgrade includes an unfortunate bug that leads to some installations suffering data loss. Installations, that had time entry activities enabled/disabled per project, will have all their time entries assigned to a single time entry activity. This guide describes how to fix the data once this has happened. @@ -15,9 +15,9 @@ This guide describes how to fix the data once this has happened. ## 1. Create a second database from the backup -Backup scripts are by default created via the [built in OpenProject command](../../operation/backing-up). -When not following the default, the database or the OpenProject server itself may have been backed up. -This guide only covers the proceedings for the the built in backup command. +Backup scripts are by default created via the [built in OpenProject command](../../operation/backing-up). +When not following the default, the database or the OpenProject server itself may have been backed up. +This guide only covers the proceedings for the the built in backup command. But the reader might deduce the steps necessary to restore accordingly for a custom backup from this guide. As a result of this step, a second database, not the database OpenProject is currently connecting to, will contain the data of the backup. @@ -57,13 +57,13 @@ CREATE DATABASE The command above might not work for some installations. In that case the following is a viable alternative: ```shell -$ su postgres -c createdb -O openproject_backup +su postgres -c createdb -O openproject_backup ``` Example: ```shell -$ su postgres -c createdb -O openproject openproject_backup +su postgres -c createdb -O openproject openproject_backup ``` ### 1.3 Restore backup to auxiliary database @@ -84,16 +84,16 @@ drwxr-xr-x 6 openproject openproject 4096 Nov 19 21:00 .. We will need the most recently created (but created before the migration to 10.4) file following the schema `postgresql-dump-.pgdump`. -Using that file we can then restore the database to the newly created database (called `openproject_backup` in our example). **In the following steps, ensure that you do not restore to the currently running database**. +Using that file we can then restore the database to the newly created database (called `openproject_backup` in our example). **In the following steps, ensure that you do not restore to the currently running database**. ```shell -$ pg_restore -d "postgres://:@:/" /var/db/openproject/backup/postgresql-dump-.pgdump` +pg_restore -d "postgres://:@:/" /var/db/openproject/backup/postgresql-dump-.pgdump` ``` Example: ```shell -$ pg_restore -d "postgres://openproject:L0BuQvlagjmxdOl6785kqwsKnfCEx1dv@127.0.0.1:45432/openproject_backup" /var/db/openproject/backup/postgresql-dump-20191119210038.pgdump` +pg_restore -d "postgres://openproject:L0BuQvlagjmxdOl6785kqwsKnfCEx1dv@127.0.0.1:45432/openproject_backup" /var/db/openproject/backup/postgresql-dump-20191119210038.pgdump` ``` That command will restore the contents of the backup file into the auxiliary database. @@ -103,13 +103,13 @@ That command will restore the contents of the backup file into the auxiliary dat The script that fixes the time entries can then be called: ```shell -$ BACKUP_DATABASE_URL="postgres://:@:/" sudo openproject run bundle exec rails openproject:reassign_time_entry_activities +BACKUP_DATABASE_URL="postgres://:@:/" sudo openproject run bundle exec rails openproject:reassign_time_entry_activities ``` Example ```shell -$ BACKUP_DATABASE_URL="postgres://openproject:L0BuQvlagjmxdOl6785kqwsKnfCEx1dv@127.0.0.1:45432/openproject_backup" sudo openproject run bundle exec rails openproject:reassign_time_entry_activities +BACKUP_DATABASE_URL="postgres://openproject:L0BuQvlagjmxdOl6785kqwsKnfCEx1dv@127.0.0.1:45432/openproject_backup" sudo openproject run bundle exec rails openproject:reassign_time_entry_activities ``` The script will then print out the number of time entries it has fixed. diff --git a/docs/installation-and-operations/misc/upgrading-older-openproject-versions/README.md b/docs/installation-and-operations/misc/upgrading-older-openproject-versions/README.md index de1aa7ce738a..5d713f7615f9 100644 --- a/docs/installation-and-operations/misc/upgrading-older-openproject-versions/README.md +++ b/docs/installation-and-operations/misc/upgrading-older-openproject-versions/README.md @@ -10,8 +10,6 @@ All the script needs is docker to be installed. It will start containers as requ ## Usage - - ### Create a backup First, you will need to create a backup to get the MySQL database dump. Please see our separate guide on [Backing up](../../operation/backing-up/). In a packaged installation, the following command will output a full backup to `/var/db/openproject/backup`: @@ -20,18 +18,13 @@ First, you will need to create a backup to get the MySQL database dump. Please s openproject run backup ``` - - This will output a MySQL dump at `/var/db/openproject/backup/mysql-dump-.sql.gz`. You will need to gunzip this: - ```shell cp /var/db/openproject/backup/mysql-dump-.sql.gz /tmp/openproject-mysql.dump.gz gunzip /tmp/openproject/openproject-mysql.dump.gz ``` - - ### Run the docker migration script With docker installed, use the following command to start the upgrade process on your MySQL dump. @@ -44,15 +37,12 @@ You will need to find the docker host IP to connect to the temporary MySQL datab The script will output a `-migrated.dump` pg_dump file which has been migrated and upgraded to the current stable version. You can also pass `sql` as a parameter after the input dump file to have the script output a `.sql` file instead of a `.dump` file. - ## Restoring the migrated database You now have an old packaged installation with an old database, and a separate database dump of the current version migrated to PostgreSQL. To upgrade OpenProject and use this dump, you have two options: - - ### Upgrading your existing installation You can simply upgrade your package first and then switch to a PostgreSQL database. You will basically have to follow our [Upgrading guide](../../operation/upgrading/). @@ -64,15 +54,13 @@ You can simply upgrade your package first and then switch to a PostgreSQL databa 3. After this is completed, stop the servers to restore the database separately `service openproject stop` - + The following command will restore the database. **WARNING:** This will remove the database returned by `openproject config:get DATABASE_URL`, so please double check this is what you want to do: `pg_restore --clean --if-exists --dbname $(openproject config:get DATABASE_URL) /path/to/migrated/postgresql.dump` 4. Execute configure script to ensure the migrations are complete and to restart the server - - ### Re-Installing OpenProject The alternative option is to remove your current installation, upgrade the newest package and configure a PostgreSQL database. This will ensure the package wizard will install and maintain a PostgreSQL database for you. @@ -105,16 +93,12 @@ The steps for this option is as follows: `openproject configure` - - ## Problems with the migration? - Please let us know if you have any questions regarding this upgrade path. Reach out to us [through our contact data or form on our website](https://www.openproject.org/contact/) with feedback and issues you experienced. We're very interested in providing a smooth upgrade at all times, and would like to document issues you experience during the upgrade. - ### Known problems **Permission errors when trying to start the OP7 container** diff --git a/docs/installation-and-operations/operation/control/README.md b/docs/installation-and-operations/operation/control/README.md index 9962d47f863d..69c5bab5fd2e 100644 --- a/docs/installation-and-operations/operation/control/README.md +++ b/docs/installation-and-operations/operation/control/README.md @@ -6,21 +6,15 @@ sidebar_navigation: # Process control for your OpenProject installation +## Packaged installation - - - -## Packaged installation - -#### Restart all the OpenProject processes +### Restart all the OpenProject processes ```shell sudo openproject restart ``` - - -#### Run commands like rake tasks or rails console +### Run commands like rake tasks or rails console The OpenProject command line tool supports running rake tasks and known scripts. For instance: @@ -54,9 +48,7 @@ sudo openproject run ruby -v # if using docker-compose: docker-compose run --rm web ruby -v ``` - - -#### Scaling the number of web workers +### Scaling the number of web workers Note: Depending on your free RAM on your system, we recommend you raise the default number of web processes. The default from 9.0.3 onwards is 4 web processes. Each worker will take roughly 300-400MB RAM. @@ -80,13 +72,12 @@ After changing these values, simply restart the web process: sudo openproject restart web ``` -#### Scaling the number of background workers +### Scaling the number of background workers Note: Depending on your free RAM on your system, we recommend you raise the default number of background processes. By default, one background worker is spawned. Background workers are responsible for delivering mails, copying projects, performing backups and deleting resources. We recommend to have two background worker processes. Please check your current web processes count with: - To set the desired process count, call ```shell @@ -99,13 +90,11 @@ The respective systemd services are automatically created or removed. If you wer ## All-in-one Docker-based installation -#### Run commands like rake tasks or rails console +### Run commands like rake tasks or rails console You can spawn an interactive shell in your docker container to run commands in the OpenProject environment. - - -First, find out the container ID of your web process with: +First, find out the container ID of your web process with: ```shell # Ensure the containers are running with the following output @@ -115,8 +104,6 @@ docker ps | grep web_1 export CID=$(docker ps | grep web_1 | cut -d' ' -f 1) ``` - - We can now run commands against that container Run a bash shell in the container @@ -137,54 +124,42 @@ In case of using kubernetes, the command is a bit different kubectl exec -it {POD_ID} -- bash -c "RAILS_ENV=production bundle exec rails console" ``` - - Launch an interactive console to directly interact with the underlying Ruby on Rails application: ```shell docker exec -it $CID bash -c "RAILS_ENV=production bundle exec rails console" ``` - - ## docker-compose based installation -#### Spawn a rails console +### Spawn a rails console You can spawn an interactive shell in your docker-compose setup container to run commands in the OpenProject environment. - The following command will spawn a Rails console in the container: ```shell docker-compose run web bash -c "RAILS_ENV=production bundle exec rails console" ``` - - ## Kubernetes and Helm-Charts For Kubernetes installations, you can use `kubectl` to access pods and get information about them. For example, to get a shell in one of the worker pods, you would have to do the following. First, get the pod name of the worker. Assuming your kubectl cluster has OpenProject installed at the `openproject` namespace: +```shell +kubectl get pods -n openproject ``` -kubectl get pods -n openproject -``` - - Then spawn a shell in the relevant one -``` +```shell kubectl exec -n openproject -it pods/openproject-worker-656c77d594-xjdck -- bash ``` - - This spawns a bash console. In there, you could for example run a rails console like follows: -``` +```shell bundle exec rails console ``` - diff --git a/docs/installation-and-operations/operation/faq/README.md b/docs/installation-and-operations/operation/faq/README.md index 0d2498c50045..b8e898ed224c 100644 --- a/docs/installation-and-operations/operation/faq/README.md +++ b/docs/installation-and-operations/operation/faq/README.md @@ -55,4 +55,3 @@ A closer look at the available branches: ## How can I backup and restore my OpenProject installation? Please refer to the [backup documentation](../backing-up) for the packaged installation. - diff --git a/docs/installation-and-operations/operation/monitoring/README.md b/docs/installation-and-operations/operation/monitoring/README.md index 145dba04978c..9c47269029b2 100644 --- a/docs/installation-and-operations/operation/monitoring/README.md +++ b/docs/installation-and-operations/operation/monitoring/README.md @@ -8,13 +8,11 @@ sidebar_navigation: OpenProject provides different means of monitoring and auditing your application. - - ## Logging information In production, OpenProject uses [Lograge formatter](https://github.com/roidrage/lograge) `key_value` logger by default. Every request will result in the following `info` log level: -``` +```text I, [2023-11-14T09:21:15.136914 #56791] INFO -- : [87a5dceb-0560-4e17-8577-2822106dfc00] method=GET path=/ format=html controller=HomescreenController action=index status=200 allocations=133182 duration=237.82 view=107.45 db=116.50 user=85742 ``` @@ -37,8 +35,6 @@ This formatter makes it easy to parse and analyze logs. Let's take a look at the | `db=116.50` | Time spent in database (in ms) | | `user=85742` | User ID of the instance | - - ## Displaying and filtering log files ### Packaged installation @@ -54,28 +50,24 @@ sudo openproject logs --tail You can abort this using Ctrl + C. - - **systemd / journalctl** On most distributions, OpenProject does not maintain its own log files, but sends logs directly to `journalctl`. On older distributions that use either sysvinit or upstart, all the logs are stored in `/var/log/openproject/`. -You can get all logs of the web processes like this: +You can get all logs of the web processes like this: -```bash +```shell journalctl -u openproject-web-1 ``` Likewise, to get all logs of the background worker processes: -```bash +```shell journalctl -u openproject-worker-1 ``` journalctl has flexible filtering options to search for logs. For example, add `--since "1 hour ago"` to show logs printed in the past hour. - - ### Docker-compose In a docker-based installation, all logs are redirected to STDOUT so you can use the normal docker tools to manage your logs. @@ -86,16 +78,12 @@ For instance for the Compose-based installation: docker-compose logs -f --tail 1000 ``` - - ### All-in-one / Slim docker container ```shell docker logs -f --tail 1000 openproject ``` - - ## Raising the log level OpenProject can log at different service levels, the default being `info`. You can set the [environment variable](../../configuration/environment/#environment-variables) `OPENPROJECT_LOG__LEVEL` to any of the following values: @@ -105,8 +93,6 @@ OpenProject can log at different service levels, the default being `info`. You c - `warn`: Operational warnings that might need resolution as well as error messages - `error` Caught or uncaught application errors, as well as fatal errors. - - For example, to set this in the packaged installation, use the following command: ```shell @@ -120,7 +106,7 @@ For Docker-based installations, add the ENV variable to your env file and restar OpenProject uses the [okcomputer gem](https://github.com/sportngin/okcomputer) to provide built-in health checks on database, web, and background workers. -We provide the following health checks: +We provide the following health checks: - `https://your-hostname.example.tld/health_checks/default` - An application level check to ensure the web workers are running. - `https://your-hostname.example.tld/health_checks/database` - A database liveliness check. @@ -133,4 +119,3 @@ We provide the following health checks: ### Optional authentication You can optionally provide a setting `health_checks_authentication_password` (`OPENPROJECT_HEALTH__CHECKS__AUTHENTICATION__PASSWORD`) that will add a basic auth challenge to the `/health_checks` endpoint. Please be aware that this might break existing container health services in place in the docker-compose and k8s based deployments, so use with care or prefer to use a network based separation instead on your proxy level. - diff --git a/docs/installation-and-operations/operation/restoring/README.md b/docs/installation-and-operations/operation/restoring/README.md index c0fc45cb6147..82e1ddf22bab 100644 --- a/docs/installation-and-operations/operation/restoring/README.md +++ b/docs/installation-and-operations/operation/restoring/README.md @@ -53,7 +53,6 @@ sudo tar xzf /var/db/openproject/backup/conf-20191119210038.tar.gz -C /etc/openp If you want to change anything in the configuration, you can also inspect the `/etc/openproject` folder afterwards and change them accordingly. To go through all configured wizards steps, use the `openproject reconfigure` option. [See the configuration guide](../reconfiguring) for more information. - Untar the repositories to their destination: ```shell diff --git a/docs/installation-and-operations/operation/upgrading/README.md b/docs/installation-and-operations/operation/upgrading/README.md index c5226a36c58a..050d7c096b70 100644 --- a/docs/installation-and-operations/operation/upgrading/README.md +++ b/docs/installation-and-operations/operation/upgrading/README.md @@ -21,6 +21,7 @@ sidebar_navigation: This section concerns upgrading of your OpenProject installation for packaged-based installation methods. ### Patch and minor releases + Upgrading to a newer patch or minor version of OpenProject is as easy as installing a newer OpenProject package and running the `openproject configure` command. Please follow the steps listed below according to your Linux distribution. @@ -48,7 +49,6 @@ If you get an error like the following: These two messages messages are expected, due to a change in Origin and Label repository metadata, to better explain what the repository is about. You should allow the change, and/or run `sudo apt-get update --allow-releaseinfo-change` for the update to go through. - ### CentOS / RHEL ```shell @@ -87,7 +87,6 @@ After following the steps to update the package source, updating the openproject In case you experience issues, please note the exact steps you took, copy the output of all commands you ran and open a post in our [installation support forum](https://community.openproject.org/projects/openproject/forums/9). - ### Running openproject configure It is important that you run the `openproject configure` command after _every_ upgrade of OpenProject, as this will ensure your installation is being updated and necessary database migrations are being performed. @@ -98,7 +97,6 @@ If you want to perform changes to your configuration or are unsure what steps ar Note that this still takes previous values into consideration. Values that should not change from your previous configurations can be skipped by pressing ``. This also applies for steps with passwords, which are shown as empty even though they may have a value. Skipping those steps equals to re-use the existing value. - ## Compose-based installation When using the Compose-based docker installation, you can simply do the following: diff --git a/docs/installation-and-operations/system-requirements/README.md b/docs/installation-and-operations/system-requirements/README.md index df274ea802a1..e6734809b9f4 100644 --- a/docs/installation-and-operations/system-requirements/README.md +++ b/docs/installation-and-operations/system-requirements/README.md @@ -65,7 +65,7 @@ One way to scale the _docker_ installation is to use [docker Swarm](../installat The [package-based installation](../installation/packaged) requires one of the following Linux distributions: -| Distribution (**64 bits only**) | +| Distribution (__64 bits only__) | | ------------------------------- | | Ubuntu 22.04 Jammy | | Ubuntu 20.04 Focal | @@ -78,7 +78,7 @@ The [package-based installation](../installation/packaged) requires one of the f The [docker-based installation](../installation/docker) requires a system with Docker installed. Please see the [official Docker page](https://docs.docker.com/install/) for the list of supported systems. -**Please note**, that we only provide packages for the **AMD64** (x86) architecture. We do provide *docker containers* for both **ARM64** and **PPC64** on top of **AMD64**. +**Please note**, that we only provide packages for the __AMD64__ (x86) architecture. We do provide *docker containers* for both __ARM64__ and __PPC64__ on top of __AMD64__. ### Overview of dependencies diff --git a/docs/release-notes/10/10-0-0/README.md b/docs/release-notes/10/10-0-0/README.md index b13b6db2904f..2bdc4a7297d5 100644 --- a/docs/release-notes/10/10-0-0/README.md +++ b/docs/release-notes/10/10-0-0/README.md @@ -14,8 +14,6 @@ Read below to get a detailed overview of what is new in OpenProject 10. ![OpenProject 10](release-teaser.jpg) - - ## Drag & drop (manual sorting) in work package table OpenProject 10 adds drag and drop to the work package table. You can easily change the work package order by simply dragging a work package to a desired place. @@ -26,8 +24,6 @@ When you group the work package table based on an attribute (e.g. the assignee, ![Drag & Drop work packages](drag-drop-1.png) - - ## Card view for work packages The work package view is extended in OpenProject 10. In addition to the list view and the Gantt chart view, it is possible to display work packages in a card format. @@ -36,8 +32,6 @@ This provides an easy visual overview of the tasks in a project. Simply activate ![OpenProject card view](card-view.png) - - ## Updated Project Overview OpenProject 10 introduces an updated project overview page. You can now easily add, edit and remove widgets - directly from the project overview page. @@ -48,8 +42,6 @@ The overview pages of users upgrading from earlier versions to OpenProject 10 wi ![Updated project overview](overview.png) - - ## Graphs on project overview page (Enterprise add-on) As a user of the Enterprise cloud or Enterprise on-premises, you can add graphs to the overview page. This enables you to visualize important project information - directly form the project overview page. @@ -60,8 +52,6 @@ As a result, you quickly see your project's status and can act accordingly. ![Graphs on overview page](graphs.png) - - ## Updated administration menu and structure The administration area is completely remodeled in OpenProject 10. Due to the changes, the administration menu is much more clearly structured. @@ -70,8 +60,6 @@ Additionally, the administration overview page now highlights the different admi ![Updated administration](administration.png) - - ## Checkbox lists You can easily add checkboxes in order to create to do lists to wiki pages, work package descriptions and many other pages which support the wiki syntax. @@ -80,19 +68,15 @@ Afterwards, you can easily check off items which have been completed to keep tra ![Check boxes and sticky header wiki pages](checkbox-lists.png) - - ## Sticky toolbar for WYSIWYG editor The toolbar for wiki pages is now fixed at the top and no longer scrolls along with the page. Thus, you can easily edit even long texts on a wiki page without having to scroll up and down. - - ## Performance improvements OpenProject 10 significantly improves the performance, especially for the work package page. Due to description caching work packages are loaded swiftly. -#### Bug fixes and changes +## Bug fixes and changes - Added: [Wiki] Allow to create child pages via links without a target [[#24167](https://community.openproject.org/wp/24167)] - Added: Sticky text editor toolbar that is visible above long text fields [[#29738](https://community.openproject.org/wp/29738)] @@ -218,30 +202,24 @@ OpenProject 10 significantly improves the performance, especially for the work p - Fixed: Single Sign on feature is available in Community edition [[#31045](https://community.openproject.org/wp/31045)] - Fixed: Cannot edit comment that was just created [[#31057](https://community.openproject.org/wp/31057)] - - ## Support -You will find useful information in the OpenProject [FAQ]() or you can post your questions in the [Forum](https://community.openproject.org/projects/openproject/boards). +You will find useful information in the OpenProject [FAQ](../../../faq/) or you can post your questions in the [Forum](https://community.openproject.org/projects/openproject/boards). -### Upgrading your installation to OpenProject 10.0. +### Upgrading your installation to OpenProject 10.0 If you're using the OpenProject Enterprise cloud edition, you are already running on the latest version of OpenProject 10.0. For your local installations, there are some minor changes you need to do in order to perform the upgrade. [Please visit our upgrade guides for more information](../../../installation-and-operations/operation/upgrading). - - ## Credits Special thanks go to all OpenProject contributors without whom this release would not have been possible: - All the developers, designers, project managers who have contributed to OpenProject. -- Every dedicated user who has [reported bugs]() and supported the community by asking and answering questions in the [forum](https://community.openproject.org/projects/openproject/boards). +- Every dedicated user who has reported bugs and supported the community by asking and answering questions in the [forum](https://community.openproject.org/projects/openproject/boards). - All the engaged users who provided translations on [CrowdIn](https://crowdin.com/projects/opf). - - ## What's next? We are continuously developing new features and improvements for OpenProject. diff --git a/docs/release-notes/10/10-0-1/README.md b/docs/release-notes/10/10-0-1/README.md index 6bcaca04892e..e8d38472f669 100644 --- a/docs/release-notes/10/10-0-1/README.md +++ b/docs/release-notes/10/10-0-1/README.md @@ -11,9 +11,7 @@ release_date: 2019-09-30 We released [OpenProject 10.0.1](https://community.openproject.org/versions/1393). The release contains several bug fixes and we recommend updating to the newest version. - - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Misaligned checkboxes in text editor [[#31066](https://community.openproject.org/wp/31066)] - Fixed: Wrong cursor icon when editing custom text widget [[#31092](https://community.openproject.org/wp/31092)] @@ -33,7 +31,7 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Attachments lose their name on download [[#31205](https://community.openproject.org/wp/31205)] - Changed: Complete missing translations for 10.0 [[#31147](https://community.openproject.org/wp/31147)] -#### Contributions +## Contributions A big thanks to community members for reporting bugs and helping us identifying and providing fixes. diff --git a/docs/release-notes/10/10-0-2/README.md b/docs/release-notes/10/10-0-2/README.md index 682fc87ccaf9..32e4892e55e5 100644 --- a/docs/release-notes/10/10-0-2/README.md +++ b/docs/release-notes/10/10-0-2/README.md @@ -11,8 +11,6 @@ release_date: 2019-10-02 We released [OpenProject 10.0.2](https://community.openproject.org/versions/1395). The release contains a security related fix and we urge updating to the newest version. - - ## [CVE-2019-17092] XSS injection vulnerability in projects listing in versions before 9.0.4, 10.0.2 An XSS vulnerability in project list in OpenProject before 9.0.4 and 10.x before 10.0.2 allows remote attackers to inject arbitrary web script or HTML via the sortBy parameter because error messages are mishandled. @@ -22,10 +20,11 @@ This vulnerability has been assigned the CVE identifier CVE-2019-17092. Versions Affected: Versions <= 9.0.3, 10.0.1 Fixed Versions: 9.0.4, 10.0.2 -Credits +### Credits + Thanks to David Haintz from the SEC Consult Vulnerability Lab (https://www.sec-consult.com) for identifying and responsibly disclosing the identified issues. -#### Incorrect setting results in slow application and RAM usage +## Incorrect setting results in slow application and RAM usage The environment variable *WEB_CONCURRENCY* has been used by OpenProject for some time to control the number of web workers to be spawned by the Unicorn application server. It is defaulting to 4 workers which should account to around 1 - 1.2GB of RAM usage. @@ -33,17 +32,15 @@ In the upgrade to OpenProject 10, a buildpack from Heroku was updated to control This has been fixed in this release. We now use the environment variable *OPENPROJECT_WEB_WORKERS* to control the same setting. If you previously set *WEB_CONCURRENCY* in your application to a lower or higher number, please also set the *OPENPROJECT_WEB_WORKERS* variable to the same value. -#### OtherBug fixes and changes +## Other bug fixes and changes - Fixed: Inconsistent row heights when resizing widgets [[#31048](https://community.openproject.org/wp/31048)] - Fixed: In Budgets projected unit costs and labor cost is not shown [[#31247](https://community.openproject.org/wp/31247)] - Fixed: Restart puma workers to cope with potential memory leaks [[#31262](https://community.openproject.org/wp/31262)] - Fixed: "Enterprise edition" blue bar would be nicer horizontally [[#31265](https://community.openproject.org/wp/31265)] -#### Contributions +## Contributions Thanks to David Haintz from [SEC Consult Vulnerability Lab](https://www.sec-consult.com) for identifying and responsibly disclosing the identified issues. - A big thanks to community members for reporting bugs and helping us identifying and providing fixes. - Special thanks for reporting and finding bugs go to Andrea Pistai diff --git a/docs/release-notes/10/10-1-0/README.md b/docs/release-notes/10/10-1-0/README.md index 9a450a3b56a9..5ad88474f747 100644 --- a/docs/release-notes/10/10-1-0/README.md +++ b/docs/release-notes/10/10-1-0/README.md @@ -32,7 +32,7 @@ This way, the project overview page can be extended to a detailed reporting dash ![Dashboards](dashboards.png) -[Find out more about the new project status reporting in OpenProject](). +[Find out more about the new project status reporting in OpenProject](../../../user-guide/projects/project-status/). ## CRUD operations for projects in API v3 @@ -48,7 +48,7 @@ OpenProject contains a new consolidated look and feel for work package edit fiel OpenProject has been updated to Rails 6.0.0. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Status dropdown is misplaced when the widget is at the bottom of the page [[#31426](https://community.openproject.org/wp/31426)] - Fixed: Project overview: Display fields should be "read only" when user lacks permissions [[#31453\]](https://community.openproject.org/wp/31426) @@ -88,20 +88,20 @@ OpenProject has been updated to Rails 6.0.0. ## Support -You will find useful information in the OpenProject [FAQ]() or you can post your questions in the [Forum](https://community.openproject.org/projects/openproject/boards). +You will find useful information in the OpenProject [FAQ](../../../faq/) or you can post your questions in the [Forum](https://community.openproject.org/projects/openproject/boards). -### Upgrading your installation to OpenProject 10.1. +### Upgrading your installation to OpenProject 10.1 If you’re using the OpenProject Enterprise cloud edition, you will be automatically updated to the latest version of OpenProject 10.1 in the next days. For your local installations, there are some minor changes you need to do in order to perform the upgrade. -[Please visit our upgrade guides for more information](). +[Please visit our upgrade guides for more information](../../../installation-and-operations/operation/upgrading/). ## Credits Special thanks go to all OpenProject contributors without whom this release would not have been possible: - All the developers, designers, project managers who have contributed to OpenProject. -- Every dedicated user who has [reported bugs]() and supported the community by asking and answering questions in the [forum](https://community.openproject.org/projects/openproject/boards). +- Every dedicated user who has reported bugs and supported the community by asking and answering questions in the [forum](https://community.openproject.org/projects/openproject/boards). - All the engaged users who provided translations on [CrowdIn](https://crowdin.com/projects/opf). ## What’s next? diff --git a/docs/release-notes/10/10-2-0/README.md b/docs/release-notes/10/10-2-0/README.md index 422d74119f4c..9969d8fe2f67 100644 --- a/docs/release-notes/10/10-2-0/README.md +++ b/docs/release-notes/10/10-2-0/README.md @@ -12,7 +12,7 @@ release_date: 2019-11-11 We released [OpenProject 10.2.0](https://community.openproject.org/versions/1390). The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Many mails are still being sent synchronously, slowing down the application [[#28287](https://community.openproject.org/wp/28287)] - Fixed: Work package webhooks not triggered when Setting.notified_events disabled [[#29501](https://community.openproject.org/wp/29501)] @@ -30,8 +30,6 @@ The release contains several bug fixes and we recommend updating to the newest v - Changed: Upgrade CKEditor to 15.0 [[#31542](https://community.openproject.org/wp/31542)] - Changed: Zen mode for project overview page [[#31559](https://community.openproject.org/wp/31559)] -#### Contributions - - +## Contributions Thanks to Thanh Nguyen Nguyen from [Fortinet's FortiGuard Labs](https://fortiguard.com/) for identifying and responsibly disclosing the attachment filename stringification issue [#31580](https://community.openproject.org/wp/31580). diff --git a/docs/release-notes/10/10-2-1/README.md b/docs/release-notes/10/10-2-1/README.md index 13b324faddcf..461228f7abc2 100644 --- a/docs/release-notes/10/10-2-1/README.md +++ b/docs/release-notes/10/10-2-1/README.md @@ -11,15 +11,13 @@ release_date: 2019-11-13 We released [OpenProject 10.2.1](https://community.openproject.org/versions/1404). The release contains several bug fixes and we recommend updating to the newest version. - - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Error 500 when clicking on a history version [[#31643](https://community.openproject.org/wp/31643)] - Fixed: Built-in users count towards active user limit [[#31650](https://community.openproject.org/wp/31650)] - Changed: Webhook for created time entries [[#31647](https://community.openproject.org/wp/31647)] -#### Contributions +## Contributions A big thanks to community members for reporting bugs and helping us identifying and providing fixes. diff --git a/docs/release-notes/10/10-2-2/README.md b/docs/release-notes/10/10-2-2/README.md index 7d5624e026e9..ceb1801faf12 100644 --- a/docs/release-notes/10/10-2-2/README.md +++ b/docs/release-notes/10/10-2-2/README.md @@ -12,7 +12,7 @@ We released [OpenProject 10.2.2](https://community.openproject.org/versions/1405 The release contains several bug fixes and fixes server security issues. We thus urge everybody to upgrade to the newest version as soon as possible. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Outline of display-field extends table cell width \[[#31214](https://community.openproject.org/wp/31214)\] - Fixed: SQL error in work package view \[[#31667](https://community.openproject.org/wp/31667)\] @@ -29,7 +29,8 @@ The release contains several bug fixes and fixes server security issues. We thus - Fixed: API v3 /relations/:id does not check permissions \[[#31855](https://community.openproject.org/wp/31855)\] - Fixed: Tabnabbing on wiki pages \[[#31817](https://community.openproject.org/wp/31817)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. In this release, we would especially like to thank Bartosz Nowicki for responsibly disclosing a severe data leakage \([#31855](https://community.openproject.org/wp/31855)\). Behavior like this helps improving the security for everybody, so thanks a lot Bartosz. And Thanh Nguyen Nguyen of [Fortiguard Labs](https://fortiguard.com/) has once again responsibly disclosed a security issue to us ([#31817](https://community.openproject.org/wp/31817)). Thank you, Nguyen. diff --git a/docs/release-notes/10/10-3-0/README.md b/docs/release-notes/10/10-3-0/README.md index cc131d84ddb0..78a0c174036d 100644 --- a/docs/release-notes/10/10-3-0/README.md +++ b/docs/release-notes/10/10-3-0/README.md @@ -29,7 +29,7 @@ You can use those custom fields to properly display text with a right-to-left or ![Custom fields with right-to-left orientation](CustomFieldsRTL.png) -#### Bug fixes and changes +## Bug fixes and changes - Changed: [Watchers] Removing watcher sends email to removed watcher \[[#21304](https://community.openproject.org/wp/21304)\] - Changed: Work packages tiles view for small screens \[[#31631](https://community.openproject.org/wp/31631)\] @@ -57,7 +57,7 @@ You can use those custom fields to properly display text with a right-to-left or You can find useful information in the [OpenProject help section](https://www.openproject.org/docs/) or you can post your questions in the [OpenProject Forum](https://community.openproject.org/projects/openproject/boards). -### Upgrading your installation to OpenProject 10.3. +### Upgrading your installation to OpenProject 10.3 If you’re using the OpenProject Enterprise cloud edition, you will be automatically updated to the latest version of OpenProject 10.1 in the next days. For your local installations, there are some minor changes you need to do in order to perform the upgrade. diff --git a/docs/release-notes/10/10-3-1/README.md b/docs/release-notes/10/10-3-1/README.md index 36161adf8dd5..5352700e0413 100644 --- a/docs/release-notes/10/10-3-1/README.md +++ b/docs/release-notes/10/10-3-1/README.md @@ -12,14 +12,15 @@ We released [OpenProject 10.3.1](https://community.openproject.org/versions/1409 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Activity numbers only partly shown on mobile \[[#31892](https://community.openproject.org/wp/31892)\] - Fixed: Text in custom field not correctly displayed \[[#31896](https://community.openproject.org/wp/31896)\] - Fixed: New Wiki pages are not shown \[[#31907](https://community.openproject.org/wp/31907)\] - Fixed: Date separator (dash) misplaced \[[#31926](https://community.openproject.org/wp/31926)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/10/10-4-0/README.md b/docs/release-notes/10/10-4-0/README.md index 85a8e9f20527..398bffc4e1f3 100644 --- a/docs/release-notes/10/10-4-0/README.md +++ b/docs/release-notes/10/10-4-0/README.md @@ -71,8 +71,6 @@ In OpenProject you can now manage multiple building models in IFC format in para ![OpenProject-BIM_structural](OpenProject-BIM_structural.png) - - ### IFC viewer integrated in OpenProject OpenProject 10.4 supports to open 3D **models** **and** **visualize** **building** **models** directly in your browser. With this new integrated functionality for construction project management you can now easily **share** **multiple IFC** **files** with your team directly in OpenProject - integrated with all OpenProject functionalities for the project management along the entire building project life-cycle, i.e. BCF management, issue tracking, project planning, documentation. @@ -81,7 +79,7 @@ View full 3D objects in OpenProject in IFC format. Select and display the model ![OpenProject-BIM_IFC-viewer](OpenProject-BIM_IFC-viewer.png) -### Switch between 3D and 2D view for your building model in OpenProject. +### Switch between 3D and 2D view for your building model in OpenProject You can change between a 3D view or 2D view of the building model in OpenProject. @@ -193,14 +191,10 @@ Here you can find the [Installation guidelines](../../../installation-and-operat Want to upgrade from a Community version to try out the light or dark theme? [Get a 14 days free trial token.](https://www.openproject.org/enterprise-edition/) - - ## How to try the OpenProject BIM edition Try out OpenProject BIM 10.4. right away, create a free trial instance for the [OpenProject BIM edition.](https://start.openproject.com/trial/bim) - - ## What is on the Roadmap? We are continuously developing new features for OpenProject. The next release will include improved scheduling in the Gantt chart. @@ -211,21 +205,15 @@ For the upcoming BIM specific release we are focusing on more building industry - Revit integration to OpenProject. - Further advanced BCF management. - - ## Migrating to OpenProject 10.4 Follow the [upgrade guide for the packaged installation or Docker installation](../../../installation-and-operations/operation/upgrading/) to update your OpenProject installation to OpenProject 10.4. We update hosted OpenProject environments (Enterprise cloud) automatically. - - ## Support -You will find useful information in the OpenProject [FAQ]() or you can post your questions in the [Forum](https://community.openproject.org/projects/openproject/boards). - - +You will find useful information in the OpenProject [FAQ](../../../faq/) or you can post your questions in the [Forum](https://community.openproject.org/projects/openproject/boards). ## Credits diff --git a/docs/release-notes/10/10-4-1/README.md b/docs/release-notes/10/10-4-1/README.md index 059b2af4d061..fed53497f574 100644 --- a/docs/release-notes/10/10-4-1/README.md +++ b/docs/release-notes/10/10-4-1/README.md @@ -11,21 +11,15 @@ release_date: 2020-03-04 We released [OpenProject 10.4.1](https://community.openproject.org/versions/1417). The release contains several bug fixes and we recommend updating to the newest version. - - -### Time entry corruption in 10.4.0 update +## Time entry corruption in 10.4.0 update The migration scripts that ran as part of the OpenProject 10.4.0 upgrade include an unfortunate bug that leads to some installations suffering data loss. Installations, that had time entry activities enabled/disabled per project, will have all their time entries assigned to a single time entry activity. - - If you have updated to 10.4.0 and were using project-based time entry activities, please use the following guide to restore them: [Fixing time entries corrupted by upgrading to 10.4.0](../../../installation-and-operations/misc/time-entries-corrupted-by-10-4/). - - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Can not delete queries on community.openproject.org \[[#32326](https://community.openproject.org/wp/32326)\] - Fixed: Special characters displayed as ASCII code in My Spent Time widget \[[#32328](https://community.openproject.org/wp/32328)\] @@ -34,9 +28,8 @@ If you have updated to 10.4.0 and were using project-based time entry activities - Fixed: Cost control - activity types lost after upgrade to 10.4 \[[#32360](https://community.openproject.org/wp/32360)\] - Fixed: Unexpected submit when using IME \[[#32423](https://community.openproject.org/wp/32423)\] -#### Contributions -A big thanks to community members for reporting bugs and helping us identifying and providing fixes. +## Contributions +A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to - Freddy Trotin, Harald Holzmann, Wojciech Niziński, Kanta Ebihara diff --git a/docs/release-notes/10/10-5-0/README.md b/docs/release-notes/10/10-5-0/README.md index 2a120128b5ba..d3901e215f2c 100644 --- a/docs/release-notes/10/10-5-0/README.md +++ b/docs/release-notes/10/10-5-0/README.md @@ -5,43 +5,40 @@ sidebar_navigation: release_version: 10.5.0 release_date: 2020-04-23 --- ---- -# Release notes OpenProject 10.5.0 + +# OpenProject 10.5.0 + +## Release notes OpenProject 10.5.0 | Release notes | Description | | ------------------------------------------------------------ | :----------------------------------------------------------- | | [OpenProject 10.5.0](#openproject-1050) | What is new for OpenProject 10.5.0? | | [OpenProject 10.5 BIM edition for construction project management](#openproject-105-bim-edition-for-construction-project-management) | What is new for the construction project management for the building industry in OpenProject 10.5.0? | - -# OpenProject 10.5.0 - We released [OpenProject 10.5.0](https://community.openproject.org/versions/1386). The new release of the open source project management software contains new action boards for assignees, much more intuitive sorting of versions by name, the removed 24-hours booking restriction for time tracking, the summary of news on the project overview page, and much more usability improvements and bug fixes. We recommend updating to the newest version. - - -### Action board for assignees +## Action board for assignees The new action boards for assignees allow to create agile boards with lists for individual users or groups. The assignee will automatically be updated when moving cards across lists. This allows very transparent prioritization of tasks and distribution of workload between individuals and teams. ![Assignee-boards](Assignee-boards.png) -### Sort versions by name +## Sort versions by name We have now changed the sorting of versions in the drop-down menu by name not by dates. This makes it much easier to select a version from the list, especially when there are multiple active versions in one project. ![Sorting-versions](Sorting-versions.png) -### No more 24-hour restriction for time tracking +## No more 24-hour restriction for time tracking The restriction to only allow the booking of 24 hours per day has now been removed. You can now summarize your time bookings and track more than 24 hours. ![Spent-time](Spent-time.png) -### Show news summary on project overview widget +## Show news summary on project overview widget The summary of news will now be displayed in the news widget on the project overview page. This way, the summary of the most recent news will be communicated at one sight. @@ -87,7 +84,7 @@ BCF Management in OpenProject is compatible with hundreds of applications that s BIM Issues can be created wherever the user identifies them, i.e. in his favorite BIM tool. These issues can then be easily imported into OpenProject - the central BCF management system - for centralized tracking and consolidation. An export function can then be used to distribute the BCFs back to the local applications. -### All changes and bug fixes +## All changes and bug fixes - Changed: Hide "Empty" work package updates \[[#21471](https://community.openproject.org/wp/21471)\] - Changed: Create a "Action board" with "Action attribute" -> "Assignee" \[[#30157](https://community.openproject.org/wp/30157)\] @@ -110,7 +107,7 @@ An export function can then be used to distribute the BCFs back to the local app - Fixed: Wiki tables not responsive + CSS weird + no markdown \[[#31920](https://community.openproject.org/wp/31920)\] - Fixed: Strings not localized (password settings) \[[#31976](https://community.openproject.org/wp/31976)\] - Fixed: Multiple Work Package Widgets on MyPage - Groups can't be reduced independently \[[#32030](https://community.openproject.org/wp/32030)\] -- Fixed: [Repository] Error 500 when trying to log time with unmapped changeset user \[[#32038](https://community.openproject.org/wp/32038)\] +- Fixed: \[Repository\] Error 500 when trying to log time with unmapped changeset user \[[#32038](https://community.openproject.org/wp/32038)\] - Fixed: Clean-up Administration -> System settings and remove wiki history compression \[[#32045](https://community.openproject.org/wp/32045)\] - Fixed: Work package ID cut off on right side \[[#32069](https://community.openproject.org/wp/32069)\] - Fixed: Project sorting not working anymore \[[#32220](https://community.openproject.org/wp/32220)\] @@ -159,7 +156,7 @@ An export function can then be used to distribute the BCFs back to the local app - Fixed: Avatars are incorrectly cached \[[#32870](https://community.openproject.org/wp/32870)\] - Fixed: Hourly cron synchronization not executed in docker context \[[#32884](https://community.openproject.org/wp/32884)\] - Fixed: Assignee list empty when creating a task in "modules" work package table \[[#32887](https://community.openproject.org/wp/32887)\] -- Fixed: [Docker] Attach files error "An internal error has occurred. The attachment could not be saved due to lacking file system permissions" \[[#32890](https://community.openproject.org/wp/32890)\] +- Fixed: \[Docker\] Attach files error "An internal error has occurred. The attachment could not be saved due to lacking file system permissions" \[[#32890](https://community.openproject.org/wp/32890)\] - Fixed: Inconsistent breadcrumb in Administration -> Enterprise edition \[[#32905](https://community.openproject.org/wp/32905)\] - Fixed: Styling and consistency issues in the confirm deletion modal for the EE token \[[#32908](https://community.openproject.org/wp/32908)\] - Fixed: Misaligned menu opener in Backlogs plugin \[[#32923](https://community.openproject.org/wp/32923)\] @@ -183,9 +180,8 @@ An export function can then be used to distribute the BCFs back to the local app - Fixed: String without translation in roles & permissions \[[#33113](https://community.openproject.org/wp/33113)\] - Fixed: Cannot find users anymore with "+" sign in user name / email to add to project \[[#33115](https://community.openproject.org/wp/33115)\] -#### Contributions -A big thanks to community members for reporting bugs and helping us identifying and providing fixes. +## Contributions +A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to - Vikas Kedia, Fernando Meurer, Aurelien Barre, Adnan Abou-Rikab, Scott Sanders, York-Simon Johannsen, Joachim Schardt, Peter Pof, Tobias R, Frank Schmid, Harald Holzmann, Petr Zeman, Paul GARROUSTE, Marc Vollmer, Filter Punk, Mathias Gerlach, Gio @ Enuan, Per Bröms, Jason Culligan, Frank Long, Radovan Semancik, Frendy A. N. diff --git a/docs/release-notes/10/10-5-1/README.md b/docs/release-notes/10/10-5-1/README.md index c3bf9e122290..65ad25df1dc8 100644 --- a/docs/release-notes/10/10-5-1/README.md +++ b/docs/release-notes/10/10-5-1/README.md @@ -12,7 +12,7 @@ We released [OpenProject 10.5.1](https://community.openproject.org/versions/1426 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Remove horizontal line in several modules above buttons \[[#32924](https://community.openproject.org/wp/32924)\] - Fixed: Alignment for assignee in Gantt chart off \[[#33097](https://community.openproject.org/wp/33097)\] diff --git a/docs/release-notes/10/10-6-0/README.md b/docs/release-notes/10/10-6-0/README.md index 336f0a6b96d9..60b28f5f5f3b 100644 --- a/docs/release-notes/10/10-6-0/README.md +++ b/docs/release-notes/10/10-6-0/README.md @@ -6,18 +6,18 @@ release_version: 10.6.0 release_date: 2020-06-02 --- -# Release notes OpenProject 10.6.0 +# OpenProject 10.6.0 + +## Release notes OpenProject 10.6.0 | Release notes | Description | | ------------------------------------------------------------ | :----------------------------------------------------------- | | [OpenProject 10.6.0](#openproject-1060) | What is new for OpenProject 10.6.0? | | [OpenProject 10.6.0 BIM edition for construction project management](#openproject-1060-bim-edition) | What is new for the construction project management for the building industry in OpenProject 10.5.0? | -# OpenProject 10.6.0 - The new release of the open source project management software brings improved table formatting, quicker time logging, the Slovenian translation, better overview over activities and much more usability improvements and bug fixes. -### Better styling of tables with improved table formatting options +## Better styling of tables with improved table formatting options With the new release of OpenProject you can now customize your tables in the text editor even more. When integrating a table in a work package description, a meeting, the wiki or news, format it the way you want to. The new additional options are: @@ -29,46 +29,44 @@ With the new release of OpenProject you can now customize your tables in the tex ![table-format](table-format.png) -### Quicker time logging on work packages +## Quicker time logging on work packages From now on, time logging is even quicker. You won’t have to leave your current work environment to log time. For example, directly in the work package you will find an icon to log time. When you click on it, you can log your time in a pop-up window. ![time-logging](time-logging.png) - - Also, you can log time to a work package directly from your work package table view if you include the SPENT TIME as a table column. Clicking on the Log time will also open a pop-up window to book your spent time. ![time-log-work-package](time-log-work-package-1103367.png) -### Support of Slovenian language +## Support of Slovenian language We are very happy that OpenProject is now 100% translated into Slovenian. Zabavaj se! ![flag-slovenia](flag-slovenia-300x200.jpg) -### Attribution of cards to a project +## Attribution of cards to a project OpenProject 10.6 will upgrade the card view of work packages. To make clear what card belongs to what project, the project name will be shown on the card. ![card-view-subproject](card-view-subproject.png) -### Improved assignee board if there are no members in a project +## Improved assignee board if there are no members in a project If you are creating an agile boards by assignees, you will get notified if there are no members in your project. You will also get notified if you are trying to add another assignee list to your board even though there is no more member left. ![Assignee board notification](asssignee-board-notification.png) -### Various usability improvements and bug fixes +## Various usability improvements and bug fixes Furthermore, the **styling of the news widget** on the project overview page as well as the start page has been improved. Going forward, the **Activity module is only showing one activity per minute** per user per work package and type of change. That means the changes per minute are aggregated. -#### All bug fixes and changes +## All bug fixes and changes - Epic: Aggregate activity entries \[[#23744](https://community.openproject.org/wp/23744)\] - Fixed: Date picker allows selection a year for only the next 10 years. Needs to increase. \[[#29413](https://community.openproject.org/wp/29413)\] - Fixed: Weird date format at meetings page \[[#32986](https://community.openproject.org/wp/32986)\] -- Fixed: [Work packages] Custom fields for long text \[[#33143](https://community.openproject.org/wp/33143)\] +- Fixed: \[Work packages\] Custom fields for long text \[[#33143](https://community.openproject.org/wp/33143)\] - Fixed: .xls exports of cost reports use incorrect decimal precision \[[#33149](https://community.openproject.org/wp/33149)\] - Fixed: Button to log time is shown even if I do not have the permissions \[[#33152](https://community.openproject.org/wp/33152)\] - Fixed: Main menu element is not correctly highlighted when creating a new category \[[#33154](https://community.openproject.org/wp/33154)\] @@ -100,9 +98,6 @@ Furthermore, the **styling of the news widget** on the project overview page as - Changed: Enable Projects for outgoing Webhooks \[[#33355](https://community.openproject.org/wp/33355)\] - Changed: New Features teaser for 10.6 \[[#33470](https://community.openproject.org/wp/33470)\] - - - ## OpenProject 10.6.0 BIM edition OpenProject BIM 10.6 released with improved BCF Management. We released OpenProject BIM 10.6. The new release contains improvements for BIM project management for the building industry, especially with improved features for BCF Management. @@ -133,7 +128,7 @@ Please note that the OpenProject BIM edition is under continuous development. T Test OpenProject BIM 10.6 immediately, [create a free test instance](https://start.openproject.com/trial/bim) for the OpenProject BIM edition. -### Credits and contributions +## Credits and contributions A big thanks to community members for reporting bugs and helping us identifying and providing fixes. diff --git a/docs/release-notes/10/10-6-1/README.md b/docs/release-notes/10/10-6-1/README.md index da59ee590a13..dd314fd61dc6 100644 --- a/docs/release-notes/10/10-6-1/README.md +++ b/docs/release-notes/10/10-6-1/README.md @@ -12,7 +12,7 @@ We released [OpenProject 10.6.1](https://community.openproject.org/versions/1437 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Second page is cut off when exporting to PDF \[[#33203](https://community.openproject.org/wp/33203)\] - Fixed: Cannot focus "Log time" by keyboard (accessibility) \[[#33380](https://community.openproject.org/wp/33380)\] diff --git a/docs/release-notes/10/10-6-2/README.md b/docs/release-notes/10/10-6-2/README.md index 73d22e2255a7..aaa595134a6a 100644 --- a/docs/release-notes/10/10-6-2/README.md +++ b/docs/release-notes/10/10-6-2/README.md @@ -12,7 +12,7 @@ We released [OpenProject 10.6.2](https://community.openproject.org/versions/1440 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Usability bug: activity toggle not readily visible \[[#32649](https://community.openproject.org/wp/32649)\] - Fixed: Multiple spaces in project name causes problems \[[#33344](https://community.openproject.org/wp/33344)\] @@ -27,7 +27,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: SAML single sign out URL is not being respected \[[#33617](https://community.openproject.org/wp/33617)\] - Fixed: Remapping of existing users with `oauth_allow_remapping_of_existing_users' does not work with LDAP users \[[#33620](https://community.openproject.org/wp/33620)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/10/10-6-3/README.md b/docs/release-notes/10/10-6-3/README.md index a45099d4dd8c..698c6bdff12e 100644 --- a/docs/release-notes/10/10-6-3/README.md +++ b/docs/release-notes/10/10-6-3/README.md @@ -12,7 +12,7 @@ We released [OpenProject 10.6.3](https://community.openproject.org/versions/1441 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Arrow next to parent task still shown after removing subtask \[[#33109](https://community.openproject.org/wp/33109)\] - Fixed: Multiple spaces in project name causes problems \[[#33344](https://community.openproject.org/wp/33344)\] @@ -21,7 +21,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Number of watchers not shown when opening work package in full screen (through double-click) \[[#33685](https://community.openproject.org/wp/33685)\] - Changed: Don't poll queries in boards in inactive tabs \[[#33707](https://community.openproject.org/wp/33707)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/10/10-6-4/README.md b/docs/release-notes/10/10-6-4/README.md index c6e4482de730..f85fb37e0f8f 100644 --- a/docs/release-notes/10/10-6-4/README.md +++ b/docs/release-notes/10/10-6-4/README.md @@ -12,5 +12,4 @@ We released [OpenProject 10.6.4](https://community.openproject.org/versions/1443 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes - +## Bug fixes and changes diff --git a/docs/release-notes/10/10-6-5/README.md b/docs/release-notes/10/10-6-5/README.md index 38f8ac63d515..4c8d3f8c67c5 100644 --- a/docs/release-notes/10/10-6-5/README.md +++ b/docs/release-notes/10/10-6-5/README.md @@ -12,12 +12,13 @@ We released [OpenProject 10.6.5](https://community.openproject.org/versions/1446 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Comments get repeated when entering several comments within 5 minutes \[[#33744](https://community.openproject.org/wp/33744)\] - Fixed: Wrong (abusive) translations on avatar change page in russian localization. \[[#33888](https://community.openproject.org/wp/33888)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/10/README.md b/docs/release-notes/10/README.md index 21ec1fe1a943..ec902cf32879 100644 --- a/docs/release-notes/10/README.md +++ b/docs/release-notes/10/README.md @@ -5,7 +5,7 @@ release_date: 2019-09-23 title: OpenProject Version 10 Release Notes --- -# OpenProject Version 10 Release Notes +# OpenProject Version 10 Release Notes | Version | Release date | |-------------------------------|--------------| diff --git a/docs/release-notes/11/11-0-0/README.md b/docs/release-notes/11/11-0-0/README.md index e3f569d5990b..50a5592393f7 100644 --- a/docs/release-notes/11/11-0-0/README.md +++ b/docs/release-notes/11/11-0-0/README.md @@ -310,7 +310,7 @@ To use OpenProject 11.0 right away, create an instance and [test Enterprise clou Prefer to run OpenProject 11.0 in your own infrastructure? Here you can find the [Installation guidelines](../../../installation-and-operations) for OpenProject. -Want to upgrade from your self-managed Community version to try out the Enterprise Enterprise add-ons? [Get a 14 days free trial token directly out of your current Community installation.](https://www.openproject.org/blog/enterprise-edition-upgrade-test-free/) +Want to upgrade from your self-managed Community version to try out the Enterprise Enterprise add-ons? [Get a 14 days free trial token directly out of your current Community installation.](https://www.openproject.org/blog/enterprise-edition-upgrade-test-free/) Navigate to the -> *Administration*-> *Enterprise edition* and request your trial token. ## Migrating to OpenProject 11.0 diff --git a/docs/release-notes/11/11-0-1/README.md b/docs/release-notes/11/11-0-1/README.md index 9e64fedf160a..a4b070c3abe5 100644 --- a/docs/release-notes/11/11-0-1/README.md +++ b/docs/release-notes/11/11-0-1/README.md @@ -12,7 +12,7 @@ We released [OpenProject 11.0.1](https://community.openproject.org/versions/1453 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Gantt chart: styles conflict between last active work package and hovered work package \[[#34126](https://community.openproject.org/wp/34126)\] - Fixed: Displaced datepicker for custom fields in the project dashboard \[[#34253](https://community.openproject.org/wp/34253)\] @@ -29,7 +29,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: API Settings Page Broken - ActionController::RoutingError (uninitialized constant Settings::ApiController \[[#34994](https://community.openproject.org/wp/34994)\] - Fixed: Repo Management Not Working \[[#35011](https://community.openproject.org/wp/35011)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/11/11-0-2/README.md b/docs/release-notes/11/11-0-2/README.md index 15cab67fa87d..8f019f2a6544 100644 --- a/docs/release-notes/11/11-0-2/README.md +++ b/docs/release-notes/11/11-0-2/README.md @@ -12,14 +12,15 @@ We released [OpenProject 11.0.2](https://community.openproject.org/versions/1454 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Typos / missing words in German translation when deleting user \[[#35072](https://community.openproject.org/wp/35072)\] - Fixed: Default docker-compose.yml is has tag 10 \[[#35093](https://community.openproject.org/wp/35093)\] - Fixed: Copied wiki attachments have original author while it should be the copying user \[[#35126](https://community.openproject.org/wp/35126)\] - Fixed: Slashes in wiki page titles break "Activity" view \[[#35132](https://community.openproject.org/wp/35132)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/11/11-0-3/README.md b/docs/release-notes/11/11-0-3/README.md index f4add900766a..c3530ef88ed1 100644 --- a/docs/release-notes/11/11-0-3/README.md +++ b/docs/release-notes/11/11-0-3/README.md @@ -12,7 +12,7 @@ We released [OpenProject 11.0.3](https://community.openproject.org/versions/1456 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Bulk edit: Custom field long text cut off \[[#34829](https://community.openproject.org/wp/34829)\] - Fixed: "Estimates and time" not translated to German when not logged in on community.openproject.org \[[#35009](https://community.openproject.org/wp/35009)\] diff --git a/docs/release-notes/11/11-0-4/README.md b/docs/release-notes/11/11-0-4/README.md index 7ba80b1c9e5f..265690787779 100644 --- a/docs/release-notes/11/11-0-4/README.md +++ b/docs/release-notes/11/11-0-4/README.md @@ -12,15 +12,16 @@ We released [OpenProject 11.0.4](https://community.openproject.org/versions/1458 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Budgets Fail to Copy due to Missing Superclass Method \[[#34966](https://community.openproject.org/wp/34966)\] - Fixed: Selected design / theme lost when switching to "Backlogs" module \[[#34968](https://community.openproject.org/wp/34968)\] - Fixed: Initially seeded homepage grid cannot be edited \[[#35266](https://community.openproject.org/wp/35266)\] -- Fixed: [Translation][German] Administration>User&Permissions>Roles \[[#35363](https://community.openproject.org/wp/35363)\] +- Fixed: \[Translation\]\[German\] Administration>User&Permissions>Roles \[[#35363](https://community.openproject.org/wp/35363)\] - Fixed: Internal error (500) on meeting history page when clicking on previous version link \[[#35433](https://community.openproject.org/wp/35433)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/11/11-1-0/README.md b/docs/release-notes/11/11-1-0/README.md index e333a2a1e582..31912dc1d67b 100644 --- a/docs/release-notes/11/11-1-0/README.md +++ b/docs/release-notes/11/11-1-0/README.md @@ -12,7 +12,7 @@ release_date: 2020-12-17 Release date: 2020-12-17 We released [OpenProject 11.1.0](https://community.openproject.org/versions/1424). -This new release will bring many new features and bug fixes that will improve classical as well as agile project management. +This new release will bring many new features and bug fixes that will improve classical as well as agile project management. ## Improved styling of the WYSIWYG text editor @@ -46,8 +46,6 @@ Luckily, we now automated this process in order to reduce manual effort on both ![DPA-OpenProject](DPA-OpenProject.png) - - ## Various improvements and bug fixes Furthermore, we have extended the authentication profile with an **OpenID Connect provider.** Also, the printing, e.g. for wiki pages, has been optimized via the browser print function. diff --git a/docs/release-notes/11/11-1-1/README.md b/docs/release-notes/11/11-1-1/README.md index e4976ab06713..b79a36442324 100644 --- a/docs/release-notes/11/11-1-1/README.md +++ b/docs/release-notes/11/11-1-1/README.md @@ -12,14 +12,15 @@ We released [OpenProject 11.1.1](https://community.openproject.org/versions/1463 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Week number is wrong after November \[[#35095](https://community.openproject.org/wp/35095)\] - Fixed: Deleted user associated to planned labor costs lead to 500 on Budget \[[#35670](https://community.openproject.org/wp/35670)\] - Fixed: Renamed column updated_on is still referenced for settings \[[#35673](https://community.openproject.org/wp/35673)\] - Fixed: Newrelic gem incorrectly loaded on installations resulting in unnecessary logs \[[#35776](https://community.openproject.org/wp/35776)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/11/11-1-2/README.md b/docs/release-notes/11/11-1-2/README.md index 9620fe0160ae..ec5631704798 100644 --- a/docs/release-notes/11/11-1-2/README.md +++ b/docs/release-notes/11/11-1-2/README.md @@ -12,7 +12,7 @@ We released [OpenProject 11.1.2](https://community.openproject.org/versions/1466 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Add table option not displayed properly when at bottom of page \[[#31502](https://community.openproject.org/wp/31502)\] - Fixed: .png images keep disappearing from description and from attachments \[[#35180](https://community.openproject.org/wp/35180)\] @@ -26,7 +26,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Incoming email: Priority is not overridable by default \[[#35949](https://community.openproject.org/wp/35949)\] - Fixed: Conflicting modifications error when uploading images in WP description \[[#35957](https://community.openproject.org/wp/35957)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/11/11-1-3/README.md b/docs/release-notes/11/11-1-3/README.md index 2bb876b17aed..75d781324835 100644 --- a/docs/release-notes/11/11-1-3/README.md +++ b/docs/release-notes/11/11-1-3/README.md @@ -12,7 +12,7 @@ We released [OpenProject 11.1.3](https://community.openproject.org/versions/1469 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Filter gets removed (ERIK@Staging) \[[#34003](https://community.openproject.org/wp/34003)\] - Fixed: S3 presigned URL cached for 7 days does not work with IAM roles and is a security issue \[[#35739](https://community.openproject.org/wp/35739)\] @@ -20,7 +20,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Selecting "Atom" in export menu throws cryptic error \[[#36052](https://community.openproject.org/wp/36052)\] - Fixed: Creating new synchronized groups from filters raises error if group name too long \[[#36081](https://community.openproject.org/wp/36081)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/11/11-1-4/README.md b/docs/release-notes/11/11-1-4/README.md index 9c9bdb458c17..088d58844769 100644 --- a/docs/release-notes/11/11-1-4/README.md +++ b/docs/release-notes/11/11-1-4/README.md @@ -12,7 +12,6 @@ We released [OpenProject 11.1.4](https://community.openproject.org/versions/1470 The release contains an important bug fix and we urge you to update to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Some settings can be written without authorization \[[#36254](https://community.openproject.org/wp/36254)\] - diff --git a/docs/release-notes/11/11-2-0/README.md b/docs/release-notes/11/11-2-0/README.md index fe510b9edd37..2eff3f45dfb3 100644 --- a/docs/release-notes/11/11-2-0/README.md +++ b/docs/release-notes/11/11-2-0/README.md @@ -11,7 +11,7 @@ release_date: 2021-03-09 Release date: 2021-03-09 We released [OpenProject 11.2.0](https://community.openproject.org/versions/1461). -This new release will bring many new features and bug fixes that will improve classical as well as agile project management. +This new release will bring many new features and bug fixes that will improve classical as well as agile project management. ## Placeholder users (Enterprise add-on) diff --git a/docs/release-notes/11/11-2-1/README.md b/docs/release-notes/11/11-2-1/README.md index 14f000344fd3..a4571c9c72b5 100644 --- a/docs/release-notes/11/11-2-1/README.md +++ b/docs/release-notes/11/11-2-1/README.md @@ -14,7 +14,7 @@ We released [OpenProject 11.2.1](https://community.openproject.org/versions/1472 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Inbound Emails - Email headers not handled correctly \[[#35834](https://community.openproject.org/wp/35834)\] - Fixed: Configuration and display of days in My spent time widget on my Page do not match \[[#35920](https://community.openproject.org/wp/35920)\] @@ -25,7 +25,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Cannot select assignee on WP create when filtering for multi-select custom field of type list \[[#36607](https://community.openproject.org/wp/36607)\] - Fixed: Error message in wrong language \[[#36688](https://community.openproject.org/wp/36688)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/11/11-2-2/README.md b/docs/release-notes/11/11-2-2/README.md index 0cfd6b7ff0b3..8e90c7374cc4 100644 --- a/docs/release-notes/11/11-2-2/README.md +++ b/docs/release-notes/11/11-2-2/README.md @@ -14,14 +14,15 @@ We released [OpenProject 11.2.2](https://community.openproject.org/versions/1473 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Column filter in Action Boards (e.g. Assignee, status, version, ...) is case sensitive \[[#35744](https://community.openproject.org/wp/35744)\] - Fixed: Create new role: "Check all" / "Uncheck all" for new role not working \[[#36291](https://community.openproject.org/wp/36291)\] - Fixed: Missing localization string for "Derived estimated hours" \[[#36712](https://community.openproject.org/wp/36712)\] - Fixed: Serious Problem: OpenProject not running after Upgrade to 11.2.1 – rake aborted! NoMethodError: undefined method `patch_gem_version' for OpenProject::Patches:Module \[[#36717](https://community.openproject.org/wp/36717)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/11/11-2-3/README.md b/docs/release-notes/11/11-2-3/README.md index 575d5534bc57..5e4b43b8fbe6 100644 --- a/docs/release-notes/11/11-2-3/README.md +++ b/docs/release-notes/11/11-2-3/README.md @@ -14,7 +14,7 @@ We released [OpenProject 11.2.3](https://community.openproject.org/versions/1474 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Task "Start Date in less than" filter does not include dates in the past. \[[#34513](https://community.openproject.org/wp/34513)\] - Fixed: MimeMagic deprecated \[[#36725](https://community.openproject.org/wp/36725)\] @@ -23,7 +23,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Work package table and Gantt not aligned \[[#36764](https://community.openproject.org/wp/36764)\] - Fixed: BIM group seed data is always applied \[[#36796](https://community.openproject.org/wp/36796)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/11/11-2-4/README.md b/docs/release-notes/11/11-2-4/README.md index c0b0bd3bd074..f6a8b1483250 100644 --- a/docs/release-notes/11/11-2-4/README.md +++ b/docs/release-notes/11/11-2-4/README.md @@ -14,7 +14,7 @@ We released [OpenProject 11.2.4](https://community.openproject.org/versions/1476 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Pagination in search results \[[#35045](https://community.openproject.org/wp/35045)\] - Fixed: Images in Dashboard are stretched in Safari \[[#36547](https://community.openproject.org/wp/36547)\] @@ -25,7 +25,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Setting sync users in synchronized group does not work without on-the-fly LDAP \[[#37036](https://community.openproject.org/wp/37036)\] - Fixed: BIM seeder overrides custom design \[[#37037](https://community.openproject.org/wp/37037)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/11/11-3-0/README.md b/docs/release-notes/11/11-3-0/README.md index 3bbf6d9b53a6..f482a8cecf8f 100644 --- a/docs/release-notes/11/11-3-0/README.md +++ b/docs/release-notes/11/11-3-0/README.md @@ -11,7 +11,7 @@ release_date: 2021-06-03 Release date: 2021-06-03 We released [OpenProject 11.3.0](https://community.openproject.org/versions/1468). -This new release will bring many new features and bug fixes that will improve classical as well as agile project management. +This new release will bring many new features and bug fixes that will improve classical as well as agile project management. @@ -33,6 +33,7 @@ Add a personal invitation message, e.g. an explanation for the invitation or a b The invite process can be started directly from the new "+" create button in the header navigation. ### Invite new users from work packages drop-down + The **new invite modal for users, groups, and placeholder users** can now be opened directly from the user type drop-down menu in a work package, e.g. to assign a user to a work package who is not yet a member of the project. This way, there is no need anymore to leave the work package to assign a user who is not yet a member of the project. The creation of users and adding them to a project is now much more intuitive. ![invite-user-type-drop-down](invite-user-type-drop-down.png) @@ -60,6 +61,7 @@ We have made **extensions to our API v3** to create, read, update and delete gro - List users of a group ### API V3 endpoints for placeholder users + We have added endpoints to our API v3 for fetching placeholder users so that placeholder users can be managed or read by a machine. ### Copy project via API v3 @@ -82,8 +84,6 @@ For work packages, fields can already be configured as multiple selections for a Users now have the option to **create backups of their OpenProject installation** directly via the web interface. the backup can be triggered via Administration -> Backup. They will receive an email notification with the link to download the backup files with an additional authentication (username/password + 2FA). - - ## All new features, bug fixes and changes - Epic: CRUD operations for groups in API v3 \[[#18812](https://community.openproject.org/wp/18812)\] diff --git a/docs/release-notes/11/11-3-1/README.md b/docs/release-notes/11/11-3-1/README.md index 7c0b10da5d89..89222fcc578d 100644 --- a/docs/release-notes/11/11-3-1/README.md +++ b/docs/release-notes/11/11-3-1/README.md @@ -14,7 +14,7 @@ We released [OpenProject 11.3.1](https://community.openproject.org/versions/1479 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Search autocompleter n+1 loads schemas -> slow \[[#34884](https://community.openproject.org/wp/34884)\] - Fixed: "Click here to open [...] in fullscreen view" not working \[[#37555](https://community.openproject.org/wp/37555)\] diff --git a/docs/release-notes/11/11-3-2/README.md b/docs/release-notes/11/11-3-2/README.md index ccf754fa6502..81936b0ccf07 100644 --- a/docs/release-notes/11/11-3-2/README.md +++ b/docs/release-notes/11/11-3-2/README.md @@ -14,13 +14,14 @@ We released [OpenProject 11.3.2](https://community.openproject.org/versions/1480 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Not possible to create or edit projects if relative url root configured \[[#37571](https://community.openproject.org/wp/37571)\] - Fixed: Internal server error on custom fields view when using Slovene language \[[#37607](https://community.openproject.org/wp/37607)\] - Fixed: Not possible to invite users via modal if relative url root configured \[[#37618](https://community.openproject.org/wp/37618)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/11/11-3-3/README.md b/docs/release-notes/11/11-3-3/README.md index 5f7e9a364428..f3d36c207570 100644 --- a/docs/release-notes/11/11-3-3/README.md +++ b/docs/release-notes/11/11-3-3/README.md @@ -13,7 +13,7 @@ Release date: 2021-07-20 We released [OpenProject 11.3.3](https://community.openproject.org/versions/1484). The release contains several bug fixes and we recommend updating to the newest version. -### Security issues +## Security issues **CVE-2021-32763**: Regular Expression Denial of Service in OpenProject forum messages @@ -29,19 +29,14 @@ Operating public facing docker containers is not recommended by OpenProject. The Please see the advisory for [CVE-2021-36390](https://github.com/opf/openproject/security/advisories/GHSA-r8f8-pgg2-2c26) for more information. - - - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Database migration fails on upgrade from 11.2.2 to 11.3.X \[[#37687](https://community.openproject.org/wp/37687)\] - Fixed: Renaming a group removes all group members \[[#38017](https://community.openproject.org/wp/38017)\] - Fixed: Fix catastrophic backtracking in MessagesController#quote regular expression \[[#38021](https://community.openproject.org/wp/38021)\] - Fixed: Public-facing docker AIO container vulnerable to HOST header injection by default \[[#38067](https://community.openproject.org/wp/38067)\] -#### Contributions -A big thanks to community members for reporting bugs and helping us identifying and providing fixes. +## Contributions -Special thanks for reporting and finding bugs go to - -Rob A, Milad P. +A big thanks to community members for reporting bugs and helping us identifying and providing fixes. +Special thanks for reporting and finding bugs go to Rob A, Milad P. diff --git a/docs/release-notes/11/11-3-4/README.md b/docs/release-notes/11/11-3-4/README.md index 3a078080edc8..75b21a4bd3f4 100644 --- a/docs/release-notes/11/11-3-4/README.md +++ b/docs/release-notes/11/11-3-4/README.md @@ -14,7 +14,7 @@ We released [OpenProject 11.3.4](https://community.openproject.org/versions/1488 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes This release contains only one fix for Centos 7 and Centos 8 packaged installations that are unable to access the PostgreSQL package source. It does not contain any other fixes diff --git a/docs/release-notes/11/11-3-5/README.md b/docs/release-notes/11/11-3-5/README.md index 42e7c5314404..31c87cfa9f4b 100644 --- a/docs/release-notes/11/11-3-5/README.md +++ b/docs/release-notes/11/11-3-5/README.md @@ -14,13 +14,14 @@ We released [OpenProject 11.3.5](https://community.openproject.org/versions/1490 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: User email validation regular expression insufficient \[[#38325](https://community.openproject.org/wp/38325)\] - Fixed: Inherited role memberships are not cleaned up if user is removed from a group via LDAP sync \[[#38614](https://community.openproject.org/wp/38614)\] - Fixed: Release notes for 11-3-4 is empty \[[#38678](https://community.openproject.org/wp/38678)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/11/11-4-0/README.md b/docs/release-notes/11/11-4-0/README.md index d2690f702a75..8728b11602f8 100644 --- a/docs/release-notes/11/11-4-0/README.md +++ b/docs/release-notes/11/11-4-0/README.md @@ -13,13 +13,11 @@ Release date: 2021-10-04 We released [OpenProject 11.4.0](https://community.openproject.org/versions/1485). The release contains several bug fixes and we recommend updating to the newest version. - - -#### Debian 11 support +## Debian 11 support OpenProject 11.4.0 adds packaged installation support for Debian 11 "Bullseye". -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Work package exports fail when column "BCF snapshot" active \[[#33448](https://community.openproject.org/wp/33448)\] - Fixed: Regression: On touch devices, Select, Info and Erase buttons don't work. \[[#38005](https://community.openproject.org/wp/38005)\] @@ -28,7 +26,7 @@ OpenProject 11.4.0 adds packaged installation support for Debian 11 "Bullseye". - Fixed: Wiki menu item scrolling does not work with two main wiki items \[[#38878](https://community.openproject.org/wp/38878)\] - Fixed: Imminent user limit warning shown prematurely \[[#38893](https://community.openproject.org/wp/38893)\] - Fixed: Custom S3 compatible upload providers blocked by CSP \[[#38900](https://community.openproject.org/wp/38900)\] -- Fixed: [Github Integration] Webhook fails for pull_request event without body \[[#38919](https://community.openproject.org/wp/38919)\] +- Fixed: \[Github Integration\] Webhook fails for pull_request event without body \[[#38919](https://community.openproject.org/wp/38919)\] - Fixed: IFC upload not working since attachment whitelisting \[[#38954](https://community.openproject.org/wp/38954)\] - Fixed: BIM seed are missing snapshots \[[#39009](https://community.openproject.org/wp/39009)\] - Fixed: Regression: Typing S while focus in viewer opens the OP global search \[[#39029](https://community.openproject.org/wp/39029)\] @@ -38,9 +36,7 @@ OpenProject 11.4.0 adds packaged installation support for Debian 11 "Bullseye". - Changed: BCF module: Change default order to ID DESC. \[[#38032](https://community.openproject.org/wp/38032)\] - Changed: Integrate latest Xeokit version v2.3.1 \[[#38981](https://community.openproject.org/wp/38981)\] -#### Contributions -A big thanks to community members for reporting bugs and helping us identifying and providing fixes. - -Special thanks for reporting and finding bugs go to +## Contributions -pat mac +A big thanks to community members for reporting bugs and helping us identifying and providing fixes. +Special thanks for reporting and finding bugs go to pat mac diff --git a/docs/release-notes/11/11-4-1/README.md b/docs/release-notes/11/11-4-1/README.md index f6a601959351..a9f737623b36 100644 --- a/docs/release-notes/11/11-4-1/README.md +++ b/docs/release-notes/11/11-4-1/README.md @@ -14,7 +14,7 @@ We released [OpenProject 11.4.1](https://community.openproject.org/versions/1491 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Today's Date line does not show up on My Page work package tables \[[#35748](https://community.openproject.org/wp/35748)\] - Fixed: openproject configure tries to install postgresql 10 on upgrade, while 13 is already deployed \[[#39086](https://community.openproject.org/wp/39086)\] @@ -28,7 +28,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Help text modal text cut off \[[#39171](https://community.openproject.org/wp/39171)\] - Fixed: Switching from "viewer" to "viewer and cards" fails to load viewer \[[#39184](https://community.openproject.org/wp/39184)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/11/README.md b/docs/release-notes/11/README.md index a3a41cee64ef..c4730054500f 100644 --- a/docs/release-notes/11/README.md +++ b/docs/release-notes/11/README.md @@ -5,7 +5,7 @@ release_date: 2020-10-07 title: OpenProject Version 11 Release Notes --- -# OpenProject Version 11 Release Notes +# OpenProject Version 11 Release Notes | Version | Release date | |--------------------------------|--------------| diff --git a/docs/release-notes/12/12-0-0/README.md b/docs/release-notes/12/12-0-0/README.md index 00b61e9f4ab0..075eedddae3f 100644 --- a/docs/release-notes/12/12-0-0/README.md +++ b/docs/release-notes/12/12-0-0/README.md @@ -29,52 +29,40 @@ The new Notification center shows all notifications about changes within your pr ![notification-center](notification-center.png) - ## Improved notification settings The improved notification settings now allow to fine-tune for which actions and in which projects you want to receive a notification. With 12.0 you can now even add project-specific settings for changes you want to be notified about and override the default settings. ![notification-settings](notification-settings.png) - ## Email summaries In addition to the in-app notifications, also email reminders can be configured to receive important updates in a daily (or more often) email summary. These email reminders can be configured to receive also additional notifications about changes in your projects, e.g. new or updated memberships in a project. ![email-summaries](email-summaries.png) - - ## Improved work packages auto-completer The work package auto-completer for relations now also shows additional information (project name, status, …). It is now much easier to identify the respective work package. ![work-package-auto-completion](work-package-auto-completion.png) - - ## Export of the project list With OpenProject 12.0 it is now possible to export the project list with all project specific information, incl. project custom fields. You can choose between the formats XLS and CSV export. ![project-list-export](project-list-export.png) - - ## Change of roles and permissions settings With 12.0 we have added more granular rights for projects, for example the additional right to configure the project overview page. This way you can even better assign certain permissions to a role in a project. ![project permissions](image-20211111095046645.png) - - ## Drop official support for PostgreSQL < 13 OpenProject 12.0 will deprecate PostgreSQL versions < 13. This will result in a warning about the necessary migration to inform users trying to upgrade with an older version. The warning will be shown on startup and on the Administration > Info page. It will not result in a hard error for now. - - ## All bug fixes and changes in 12.0 - Changed: Send daily email summaries (email digest) \[[#1899](https://community.openproject.org/wp/1899)\] diff --git a/docs/release-notes/12/12-0-1/README.md b/docs/release-notes/12/12-0-1/README.md index e496bdc06871..324a48e655f5 100644 --- a/docs/release-notes/12/12-0-1/README.md +++ b/docs/release-notes/12/12-0-1/README.md @@ -13,8 +13,7 @@ Release date: 2021-11-17 We released [OpenProject 12.0.1](https://community.openproject.org/versions/1496). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Getting 500 internal server error while clicking the project meeting module \[[#39853](https://community.openproject.org/wp/39853)\] - Fixed: Members menu in wrong place (shown above wiki pages) \[[#39857](https://community.openproject.org/wp/39857)\] @@ -22,7 +21,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Updating IFC Models fails. \[[#39901](https://community.openproject.org/wp/39901)\] - Fixed: Auto-unlocking editing of locked wiki pages no longer works (500 server error) \[[#40124](https://community.openproject.org/wp/40124)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/12/12-0-10/README.md b/docs/release-notes/12/12-0-10/README.md index b5676d8a515c..c11426bdc8bb 100644 --- a/docs/release-notes/12/12-0-10/README.md +++ b/docs/release-notes/12/12-0-10/README.md @@ -13,21 +13,18 @@ Release date: 2022-03-16 We released [OpenProject 12.0.10](https://community.openproject.org/versions/1512). The release contains several bug fixes and we recommend updating to the newest version. -##### Localization issues +## Localization issues Some translations provided by our Crowdin integration were temporarily reverted to their english originals. This has been fixed and is the primary reason for this release. - -#### Bug fixes and changes +## Bug fixes and changes -- Fixed: Several Translation Errors [DE] \[[#41414](https://community.openproject.org/wp/41414)\] +- Fixed: Several Translation Errors \[DE\] \[[#41414](https://community.openproject.org/wp/41414)\] - Fixed: LOCALE env used for seeding is too generic \[[#41427](https://community.openproject.org/wp/41427)\] - Fixed: Broken translation in russian/german language after upgrade to actual release \[[#41434](https://community.openproject.org/wp/41434)\] -#### Contributions -A big thanks to community members for reporting bugs and helping us identifying and providing fixes. - -Special thanks for reporting and finding bugs go to +## Contributions -Jörg Mollowitz, Атилла Алтымышев +A big thanks to community members for reporting bugs and helping us identifying and providing fixes. +Special thanks for reporting and finding bugs go to Jörg Mollowitz, Атилла Алтымышев diff --git a/docs/release-notes/12/12-0-2/README.md b/docs/release-notes/12/12-0-2/README.md index 7d76b44480cb..707cbbe474a0 100644 --- a/docs/release-notes/12/12-0-2/README.md +++ b/docs/release-notes/12/12-0-2/README.md @@ -13,8 +13,7 @@ Release date: 2021-11-24 We released [OpenProject 12.0.2](https://community.openproject.org/versions/1497). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: On global work package page all types are shown - even those in projects not accessible to users \[[#37869](https://community.openproject.org/wp/37869)\] - Fixed: New email design breaks with some mobile clients \[[#39821](https://community.openproject.org/wp/39821)\] @@ -26,7 +25,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Can't upload BCF files as normal attachments to work packages via FOG \[[#40112](https://community.openproject.org/wp/40112)\] - Changed: Improve error logging of SAML \[[#39899](https://community.openproject.org/wp/39899)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/12/12-0-3/README.md b/docs/release-notes/12/12-0-3/README.md index 8ca68a225249..5d57a1bb2d97 100644 --- a/docs/release-notes/12/12-0-3/README.md +++ b/docs/release-notes/12/12-0-3/README.md @@ -13,8 +13,7 @@ Release date: 2021-12-08 We released [OpenProject 12.0.3](https://community.openproject.org/versions/1498). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Wiki Link List in content formatting issue \[[#40016](https://community.openproject.org/wp/40016)\] - Fixed: Translation error when changing permissions \[[#40056](https://community.openproject.org/wp/40056)\] @@ -23,7 +22,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Optional header sso does not log in plain user \[[#40240](https://community.openproject.org/wp/40240)\] - Fixed: Auth source SSO redirects to my page on login \[[#40248](https://community.openproject.org/wp/40248)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/12/12-0-4/README.md b/docs/release-notes/12/12-0-4/README.md index 29f49a2c0762..21dab2ef42c4 100644 --- a/docs/release-notes/12/12-0-4/README.md +++ b/docs/release-notes/12/12-0-4/README.md @@ -13,29 +13,28 @@ Release date: 2021-12-14 We released [OpenProject 12.0.4](https://community.openproject.org/versions/1502). The release contains several bug fixes and we recommend updating to the newest version. - -### CVE-2021-43830 +## CVE-2021-43830 OpenProject versions >= 12.0.0 are vulnerable to a SQL injection in the budgets module. For authenticated users with the "Edit budgets" permission, the request to reassign work packages to another budget insufficiently sanitizes user input in the reassign_to_id parameter. -#### Patches +### Patches The vulnerability has been fixed in version 12.0.4. Versions prior to 12.0.0 are not affected. If you're upgrading from an older version, ensure you are upgrading to at least version 12.0.4. -#### Workaround +### Workaround + If you are unable to upgrade in a timely fashion, the following patch can be applied: [https://github.com/opf/openproject/pull/9983.patch](https://github.com/opf/openproject/pull/9983.patch) -#### Credits +### Credits + This security issue was responsibly disclosed by [Daniel Santos](https://github.com/bananabr) (Twitter [@bananabr](https://twitter.com/bananabr)). Thank you for reaching out to us and your help in identifying this issue. If you have a security vulnerability you would like to disclose, please see our [statement on security](../../../security-and-privacy/statement-on-security/). -### Bug fixes and changes +## Bug fixes and changes + - Fixed: Frontend including editor and time logging unusable when there are many activities \[[#40314](https://community.openproject.org/wp/40314)\] - Fixed: Change of View within OpenProject triggers reload of Viewer \[[#40315](https://community.openproject.org/wp/40315)\] -### Contributions -A big thanks to community members for reporting bugs and helping us identifying and providing fixes. - -Special thanks for reporting and finding bugs go to +## Contributions -Daniel Santos -Valentin Ege +A big thanks to community members for reporting bugs and helping us identifying and providing fixes. +Special thanks for reporting and finding bugs go to Daniel Santos, Valentin Ege diff --git a/docs/release-notes/12/12-0-5/README.md b/docs/release-notes/12/12-0-5/README.md index 873a6c68962b..c5325b2254c7 100644 --- a/docs/release-notes/12/12-0-5/README.md +++ b/docs/release-notes/12/12-0-5/README.md @@ -13,8 +13,7 @@ Release date: 2022-01-11 We released [OpenProject 12.0.5](https://community.openproject.org/versions/1503). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Uploaded IFC Model can't be set as Standard Model \[[#40187](https://community.openproject.org/wp/40187)\] - Fixed: Git "View Differences" results in 500 error in Repository module. \[[#40191](https://community.openproject.org/wp/40191)\] @@ -30,11 +29,10 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Unpaginated api/v3/relations end point \[[#40434](https://community.openproject.org/wp/40434)\] - Fixed: Header-based SSO does not allow entering missing attributes \[[#40511](https://community.openproject.org/wp/40511)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to Valentin Ege, Rene Diekstra, Jonas Plum, Frank Schmid - - diff --git a/docs/release-notes/12/12-0-6/README.md b/docs/release-notes/12/12-0-6/README.md index 5186deb4f6c4..42ce996f0f3c 100644 --- a/docs/release-notes/12/12-0-6/README.md +++ b/docs/release-notes/12/12-0-6/README.md @@ -13,8 +13,7 @@ Release date: 2022-01-17 We released [OpenProject 12.0.6](https://community.openproject.org/versions/1504). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Notification center empty state showing during loading \[[#39828](https://community.openproject.org/wp/39828)\] - Fixed: Notification images are cached for years without invalidation means - old images shown \[[#40143](https://community.openproject.org/wp/40143)\] @@ -30,7 +29,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Dropdown menu of parent child board not showing all WPs \[[#40647](https://community.openproject.org/wp/40647)\] - Fixed: Backup feature does not work with relative URL root \[[#40656](https://community.openproject.org/wp/40656)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/12/12-0-7/README.md b/docs/release-notes/12/12-0-7/README.md index fd9de592d31d..4baf3e484be6 100644 --- a/docs/release-notes/12/12-0-7/README.md +++ b/docs/release-notes/12/12-0-7/README.md @@ -13,27 +13,26 @@ Release date: 2022-01-26 We released [OpenProject 12.0.7](https://community.openproject.org/versions/1506). The release contains several bug fixes and we recommend updating to the newest version. -### API default max page sizes -In previous versions of OpenProject, the max API page size is controlled by the maximum page size in the "Per page options". This is not clear and causes issues when trying to request larger page sizes (such as for autocompleters). For example, larger instances reported missing options for users and projects. +## API default max page sizes + +In previous versions of OpenProject, the max API page size is controlled by the maximum page size in the "Per page options". This is not clear and causes issues when trying to request larger page sizes (such as for autocompleters). For example, larger instances reported missing options for users and projects. There is now a separate setting for the max API size that will be used for these autocompleters. You can find it in Administration > System settings > API. -### Russian expletive translations +## Russian expletive translations OpenProject relies on community translations for some languages that we cannot provide translations for ourselves. It was brought to our attention that the Russian translations partially contain expletive languages. Thanks to community contributors Sergey and Christina, these translations were fixed on crowdin and could now be included into the release. We need your help to improve and extend translations of OpenProject into your native language. To get more information, please see our [Translating OpenProject guide](../../../development/translate-openproject/) and our [project on crowdin.com](https://crowdin.com/project/openproject), where you can provide and help approve translations from your browser. If you wish to become a proofreader for your language, please reach out to [info@openproject.com](mailto:info@openproject.com) -### Custom plugins in packaged installations +## Custom plugins in packaged installations If you were using custom plugins, the build of the OpenProject frontend failed due to a Gemfile lock issue as well as an angular error. Both of these issues were fixed. - - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Custom plugins not working with 11.0.1 \[[#35103](https://community.openproject.org/wp/35103)\] -- Fixed: [Repository] GIT Referencing and time tracking not work in branch \[[#39796](https://community.openproject.org/wp/39796)\] +- Fixed: \[Repository\] GIT Referencing and time tracking not work in branch \[[#39796](https://community.openproject.org/wp/39796)\] - Fixed: Disable send_notifications on instantiating new project from template \[[#40348](https://community.openproject.org/wp/40348)\] - Fixed: Only last N projects available for parent project selection \[[#40580](https://community.openproject.org/wp/40580)\] - Fixed: Change labels in Russian (expletive) \[[#40581](https://community.openproject.org/wp/40581)\] @@ -46,9 +45,9 @@ If you were using custom plugins, the build of the OpenProject frontend failed d - Fixed: Custom fields disappearing after attachment upload \[[#40826](https://community.openproject.org/wp/40826)\] - Changed: Add separate APIv3 page size limit \[[#40816](https://community.openproject.org/wp/40816)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to - Gábor Sift, Frank Schmid, Christina Vechkanova, George Plant, Ivo Maffei diff --git a/docs/release-notes/12/12-0-8/README.md b/docs/release-notes/12/12-0-8/README.md index e292ac425881..472cc0a0d7c8 100644 --- a/docs/release-notes/12/12-0-8/README.md +++ b/docs/release-notes/12/12-0-8/README.md @@ -13,15 +13,15 @@ Release date: 2022-02-23 We released [OpenProject 12.0.8](https://community.openproject.org/versions/1507). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Work package title input shrinks when inputting something in FF \[[#39833](https://community.openproject.org/wp/39833)\] - Fixed: dropdown to select project in notification settings is limited to objects per page options \[[#40934](https://community.openproject.org/wp/40934)\] - Fixed: Cannot log time entries when recent work package was removed and time entry assigned to project \[[#41015](https://community.openproject.org/wp/41015)\] - Fixed: Small display bug \[[#41034](https://community.openproject.org/wp/41034)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/12/12-0-9/README.md b/docs/release-notes/12/12-0-9/README.md index b55214a53098..0c9ed107cff9 100644 --- a/docs/release-notes/12/12-0-9/README.md +++ b/docs/release-notes/12/12-0-9/README.md @@ -13,8 +13,7 @@ Release date: 2022-03-14 We released [OpenProject 12.0.9](https://community.openproject.org/versions/1511). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Possible to create invalid project identifier when creating project \[[#41228](https://community.openproject.org/wp/41228)\] - Fixed: Internal PostgreSQL error when updating query order with invalid IDs \[[#41310](https://community.openproject.org/wp/41310)\] diff --git a/docs/release-notes/12/12-1-0/README.md b/docs/release-notes/12/12-1-0/README.md index 8c457b75608c..104e6e5d8c43 100644 --- a/docs/release-notes/12/12-1-0/README.md +++ b/docs/release-notes/12/12-1-0/README.md @@ -47,16 +47,12 @@ The “Include Projects” filter option makes it easier to add different projec ![openproject-include-projects](openproject-include-projects.gif) - - ## Files tab for work packages We added a new “Files” tab in the work package details. This way, you will have all possible information attached to a work package together in one place. ![openproject-files-tab](openproject-files-tab.png) - - ## Further improvements, changes, and bug fixes - We created global roles for groups to assign these roles to groups and create superuser groups. @@ -64,7 +60,7 @@ We added a new “Files” tab in the work package details. This way, you will h - An index page was added also for the team planner and calendar module. - API to CRUD links between files (i.e. for Nextcloud) and work packages in OpenProject. -#### List of all bug fixes and changes +### List of all bug fixes and changes - Epic: Introduce module specific queries (e.g. for calendar, team planner and BCF module) \[[#30583](https://community.openproject.org/wp/30583)\] - Epic: Team planner \[[#39784](https://community.openproject.org/wp/39784)\] @@ -128,7 +124,7 @@ We added a new “Files” tab in the work package details. This way, you will h - Changed: Seed (migrate) team planner permissions \[[#41899](https://community.openproject.org/wp/41899)\] - Changed: Add packaged installation support for Ubuntu 22.04 \[[#42069](https://community.openproject.org/wp/42069)\] - Fixed: Missing translation in custom fields administration \[[#38057](https://community.openproject.org/wp/38057)\] -- Fixed: [Navigation] Breadcrumbs changes from "Relations" to "Activity" \[[#38531](https://community.openproject.org/wp/38531)\] +- Fixed: \[Navigation\] Breadcrumbs changes from "Relations" to "Activity" \[[#38531](https://community.openproject.org/wp/38531)\] - Fixed: Minor spelling change for work package filter \[[#38533](https://community.openproject.org/wp/38533)\] - Fixed: Mobile: When clicking on WP tabs ("Activity", "Watchers", ...) jump to top of page \[[#39848](https://community.openproject.org/wp/39848)\] - Fixed: Internal error when trying to set milestone as parent wp \[[#39856](https://community.openproject.org/wp/39856)\] @@ -150,7 +146,7 @@ We added a new “Files” tab in the work package details. This way, you will h - Fixed: Users can't select public template projects in new project dialog \[[#40918](https://community.openproject.org/wp/40918)\] - Fixed: Meeting Time in iCalendar is wrong \[[#40941](https://community.openproject.org/wp/40941)\] - Fixed: Toolbar icons should be rendered in the "old" style and not the new rounded style (which is a work in progress) \[[#40957](https://community.openproject.org/wp/40957)\] -- Fixed: [Docker] - Gitlab integration plugin \[[#40959](https://community.openproject.org/wp/40959)\] +- Fixed: \[Docker\] - Gitlab integration plugin \[[#40959](https://community.openproject.org/wp/40959)\] - Fixed: Project dropdown no longer autofocused \[[#40978](https://community.openproject.org/wp/40978)\] - Fixed: Not possible to copy work package to another project \[[#41005](https://community.openproject.org/wp/41005)\] - Fixed: Changed calendar styles applied to time entries component \[[#41013](https://community.openproject.org/wp/41013)\] @@ -216,7 +212,8 @@ We added a new “Files” tab in the work package details. This way, you will h - Fixed: Search results below include projects modal \[[#42090](https://community.openproject.org/wp/42090)\] - Fixed: Include projects - Toggle button is not rounded \[[#42171](https://community.openproject.org/wp/42171)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. - Special thanks for Autoliv for sponsoring the development of the new team planner. diff --git a/docs/release-notes/12/12-1-1/README.md b/docs/release-notes/12/12-1-1/README.md index 76aeb23b01c5..b357e24ab46d 100644 --- a/docs/release-notes/12/12-1-1/README.md +++ b/docs/release-notes/12/12-1-1/README.md @@ -13,8 +13,7 @@ Release date: 2022-05-04 We released [OpenProject 12.1.1](https://community.openproject.org/versions/1548). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Click on Include projects filter is flickering \[[#42196](https://community.openproject.org/wp/42196)\] - Fixed: Unprefixed E-Mail settings ignored \[[#42209](https://community.openproject.org/wp/42209)\] @@ -30,7 +29,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: IFC conversion fails (libhostfxr.so not found) \[[#42245](https://community.openproject.org/wp/42245)\] - Fixed: Roles cannot be edited with french language \[[#42246](https://community.openproject.org/wp/42246)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/12/12-1-2/README.md b/docs/release-notes/12/12-1-2/README.md index af5a431c1a5e..29685a918a14 100644 --- a/docs/release-notes/12/12-1-2/README.md +++ b/docs/release-notes/12/12-1-2/README.md @@ -13,8 +13,7 @@ Release date: 2022-05-11 We released [OpenProject 12.1.2](https://community.openproject.org/versions/1549). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Audio of OpenProject video is played when opening the export project modal \[[#41924](https://community.openproject.org/wp/41924)\] - Fixed: Wrong row break in Include Project modal for German \[[#42224](https://community.openproject.org/wp/42224)\] @@ -26,7 +25,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: SMTP setting issues in packager installation \[[#42299](https://community.openproject.org/wp/42299)\] - Fixed: LDAP User Synchronization doesn't work \[[#42312](https://community.openproject.org/wp/42312)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/12/12-1-3/README.md b/docs/release-notes/12/12-1-3/README.md index 574aa5062534..4195008013c6 100644 --- a/docs/release-notes/12/12-1-3/README.md +++ b/docs/release-notes/12/12-1-3/README.md @@ -24,14 +24,14 @@ warranting another patch level release. We're sorry for the inconvenience caused If you experience bugs in installing or using OpenProject, please help us by reporting them to our community. To read how to do this, please see [reporting a bug in OpenProject](../../../development/report-a-bug/). - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: "openproject configure" reports errors \[[#42349](https://community.openproject.org/wp/42349)\] - Fixed: Scheduled LDAP User Synchronization doesn't work \[[#42351](https://community.openproject.org/wp/42351)\] - Fixed: [Packager] configure fails when sendmail was configured for emails \[[#42352](https://community.openproject.org/wp/42352)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/12/12-1-4/README.md b/docs/release-notes/12/12-1-4/README.md index 3d12c67e3553..f5cbe861a713 100644 --- a/docs/release-notes/12/12-1-4/README.md +++ b/docs/release-notes/12/12-1-4/README.md @@ -16,8 +16,7 @@ The release contains several bug fixes and we recommend updating to the newest v **Centos 7 support** This version restores support for OpenProject packages on centos 7. A PostgreSQL bump has caused incompatibility issues with the centos7 versions that are shipped and extra effort was needed to provide compatible newer dev headers. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Removal of the new SPOT buttons because of consistency \[[#42251](https://community.openproject.org/wp/42251)\] - Fixed: Incorrect project assignment in the team planner \[[#42271](https://community.openproject.org/wp/42271)\] @@ -30,7 +29,8 @@ This version restores support for OpenProject packages on centos 7. A PostgreSQL - Fixed: LDAP user synchronization - administrator flag is overwritten \[[#42396](https://community.openproject.org/wp/42396)\] - Fixed: Project filter is not applied in embedded table \[[#42397](https://community.openproject.org/wp/42397)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/12/12-1-5/README.md b/docs/release-notes/12/12-1-5/README.md index 72c35d354a46..cc87e95b2a50 100644 --- a/docs/release-notes/12/12-1-5/README.md +++ b/docs/release-notes/12/12-1-5/README.md @@ -13,8 +13,7 @@ Release date: 2022-06-08 We released [OpenProject 12.1.5](https://community.openproject.org/versions/1552). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Order of work packages in XLS, PDF, CSV export differs from order in OpenProject \[[#34971](https://community.openproject.org/wp/34971)\] - Fixed: API notification error on work package query page \[[#40506](https://community.openproject.org/wp/40506)\] @@ -31,7 +30,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Dutch translation additional project status on the project overview page \[[#42754](https://community.openproject.org/wp/42754)\] - Fixed: OpenID Connect providers can no longer be set via env \[[#42810](https://community.openproject.org/wp/42810)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/12/12-1-6/README.md b/docs/release-notes/12/12-1-6/README.md index 0763a848636c..ba3f04f7f538 100644 --- a/docs/release-notes/12/12-1-6/README.md +++ b/docs/release-notes/12/12-1-6/README.md @@ -13,8 +13,7 @@ Release date: 2022-07-12 We released [OpenProject 12.1.6](https://community.openproject.org/versions/1586). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: EE Trial creation not possible from form configuration \[[#42806](https://community.openproject.org/wp/42806)\] - Fixed: Deleting a user only locks the user \[[#42882](https://community.openproject.org/wp/42882)\] @@ -25,7 +24,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Include projects mistake \[[#43034](https://community.openproject.org/wp/43034)\] - Fixed: dots of Ü are missing in notification list \[[#43086](https://community.openproject.org/wp/43086)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/12/12-2-0/README.md b/docs/release-notes/12/12-2-0/README.md index ead3cc3aa554..3916e9f25830 100644 --- a/docs/release-notes/12/12-2-0/README.md +++ b/docs/release-notes/12/12-2-0/README.md @@ -36,9 +36,9 @@ You can find out more [how to use the Nextcloud integration](../../../user-guide ## Contextual information and warnings when scheduling work packages -For OpenProject 12.2, the team has worked on **improving the date picker** to give you more clarity when scheduling work packages. To choose [automatic or manual scheduling mode](../../../user-guide/gantt-chart/scheduling/), the selection box moved to the top of the date picker to be more visible. We are also introducing information and warning banners that provide important contextual information before modifying dates of work packages that have relations with other work packages. +For OpenProject 12.2, the team has worked on **improving the date picker** to give you more clarity when scheduling work packages. To choose [automatic or manual scheduling mode](../../../user-guide/gantt-chart/scheduling/), the selection box moved to the top of the date picker to be more visible. We are also introducing information and warning banners that provide important contextual information before modifying dates of work packages that have relations with other work packages. -*Blue banners* will indicate information that maybe be helpful (such as if the work package's dates are automatically derived from relations, or if available date ranges are limited by relations) and *orange banners* will warn of possible consequences to other work packages (existing relations being ignored as a result of enabling manual scheduling, or the dates of related work packages changing as a result of changes to the current work package). +*Blue banners* will indicate information that maybe be helpful (such as if the work package's dates are automatically derived from relations, or if available date ranges are limited by relations) and *orange banners* will warn of possible consequences to other work packages (existing relations being ignored as a result of enabling manual scheduling, or the dates of related work packages changing as a result of changes to the current work package). Additionally, a new "**Show relations**" on these banners allows you to quickly generate a Gantt view showing all directly related work packages in hierarchy view, so you can preview which work packages might be affected before making a change. @@ -48,7 +48,7 @@ Find out more about how to set and change dates with the [improved date picker]( ## Log time for other users -OpenProject 12.2 gives an administrator the possibility to grant permissions to log time for other users. With the required permissions, you can now select the team member for whom you want to log time from a drop down. +OpenProject 12.2 gives an administrator the possibility to grant permissions to log time for other users. With the required permissions, you can now select the team member for whom you want to log time from a drop down. ![log time for other users](image-20220811130616209.png) @@ -82,7 +82,7 @@ For more information, please see the respective installation pages: - [Packaged installation](../../../installation-and-operations/installation/packaged/#step-3-apache2-web-server-and-ssl-termination) - [Docker installation](../../../installation-and-operations/installation/docker/#configuration) -## List of all bug fixes and changes +## List of all bug fixes and changes - Changed: Log time for other users \[[#21754](https://community.openproject.org/wp/21754)\] - Changed: Send out an email reply if an incoming email could not be processed correctly \[[#35823](https://community.openproject.org/wp/35823)\] @@ -172,7 +172,8 @@ For more information, please see the respective installation pages: - Epic: Files tab that shows linked files in Nextcloud \[[#40203](https://community.openproject.org/wp/40203)\] - Epic: Settings connection between Nextcloud and OpenProject (OAuth) \[[#42072](https://community.openproject.org/wp/42072)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs, helping us identify issues and providing fixes. - Special thanks for City of Cologne and University of Duisburg-Essen for sponsoring the development of the Nextcloud integration. diff --git a/docs/release-notes/12/12-2-1/README.md b/docs/release-notes/12/12-2-1/README.md index d6846be35b16..a50ffb3b78fd 100644 --- a/docs/release-notes/12/12-2-1/README.md +++ b/docs/release-notes/12/12-2-1/README.md @@ -13,8 +13,6 @@ Release date: 2022-08-18 We released [OpenProject 12.2.1](https://community.openproject.org/versions/1594). The release contains a critical bug fixes that resolves a data corruption issue and we urge updating to the newest version. Please see the details below for more information. - - ## Important bug fix for activity records In OpenProject 12.2.0, a critical bug may randomly corrupt the activity records in the database, controlling @@ -28,8 +26,6 @@ This error manifests itself as: - Being unable to see activities in work package [#43773](https://community.openproject.org/wp/43773). - Getting internal errors trying to update an existing work package. - - The upgrade to 12.2.1 fixes this bug and includes a migration to try and restore the intermediate activities for the records that were affected. **Please note that the newest version was unaffected and all the changes you made in the system are still correct.** However, affected activities had to be restored and may be missing some changes or contain changes from previous or following activities. Any activity that had its record restored contains a note that this has happened. @@ -38,8 +34,6 @@ If you did not yet upgrade your system to 12.2.0., please update to 12.2.1 direc For cloud customers of OpenProject: The records affected by this bug were restored already in the same fashion. If your instance has been affected by this bug, we will reach out to you separately to inform you. - - ## Changes to the HTTPS settings If you are running OpenProject in a docker-based or if you manually integrate the packaged installation into your existing web server, you might need to set a new configuration value if you're not running under HTTPS. @@ -51,7 +45,6 @@ For more information on this setting and how to configure it for your installati - [Packaged installation](../../../installation-and-operations/installation/packaged/#step-3-apache2-web-server-and-ssl-termination) - [Docker installation](../../../installation-and-operations/installation/docker/#configuration) - ## All bug fixes - Fixed: Wrong html title while selecting filters in notification center \[[#43122](https://community.openproject.org/wp/43122)\] @@ -59,13 +52,11 @@ For more information on this setting and how to configure it for your installati - Fixed: Error message on subprojects boards \[[#43755](https://community.openproject.org/wp/43755)\] - Fixed: New HTTPS flag is poorly documented and breaks quick start docker containers \[[#43759](https://community.openproject.org/wp/43759)\] - Fixed: Wrong days highlighted as weekend in Gantt diagram \[[#43762](https://community.openproject.org/wp/43762)\] -- Fixed: Open Project Docker Installation \[[#43767](https://community.openproject.org/wp/43767)\] +- Fixed: OpenProject Docker Installation \[[#43767](https://community.openproject.org/wp/43767)\] - Fixed: Unable to see activities in work package \[[#43773](https://community.openproject.org/wp/43773)\] - Fixed: Timeline shows bar at wrong time after collapsing a group \[[#43775](https://community.openproject.org/wp/43775)\] - - -#### Contributions +## Contributions A big thanks to community members for reporting bugs and helping us identifying and providing fixes. diff --git a/docs/release-notes/12/12-2-2/README.md b/docs/release-notes/12/12-2-2/README.md index e42d96324c6c..58c496d5ddd7 100644 --- a/docs/release-notes/12/12-2-2/README.md +++ b/docs/release-notes/12/12-2-2/README.md @@ -13,8 +13,6 @@ Release date: 2022-08-31 We released [OpenProject 12.2.2](https://community.openproject.org/versions/1597). The release contains several bug fixes and we recommend updating to the newest version. - - ## Known issues ### Pending database migration issue @@ -25,7 +23,7 @@ For a few customers, this migration appears to have been unsuccessful to restore When you update to OpenProject 12.2.2 and the migration fails again, it will output steps on how to force the migration to complete. Doing that will output a debug log of all relevant information on these journals. Please help us identifying this issue by posting this log in this ticket: https://community.openproject.org/wp/43876, or reaching out to support@openproject.org. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Wrong link for "Documents added" email notification \[[#41114](https://community.openproject.org/wp/41114)\] - Fixed: Bulk copy error when Assignee value set 'nobody' \[[#43145](https://community.openproject.org/wp/43145)\] @@ -39,7 +37,8 @@ When you update to OpenProject 12.2.2 and the migration fails again, it will out - Fixed: Upgrade 12.1.4 to 12.2.1 fails: pending database migration \[[#43876](https://community.openproject.org/wp/43876)\] - Fixed: System 'read only' field \[[#43893](https://community.openproject.org/wp/43893)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/12/12-2-3/README.md b/docs/release-notes/12/12-2-3/README.md index 3ce5cf4355b8..d204d9d7a3b3 100644 --- a/docs/release-notes/12/12-2-3/README.md +++ b/docs/release-notes/12/12-2-3/README.md @@ -13,12 +13,11 @@ Release date: 2022-09-12 We released [OpenProject 12.2.3](https://community.openproject.org/versions/1598). The release contains several bug fixes and we recommend updating to the newest version. -### Fixed: Installing custom plugins in packaged installations +## Fixed: Installing custom plugins in packaged installations Newer bundler versions would prevent custom plugins being installed in packaged installation. This has been fixed in this released version. For more information, please see [#44058](https://community.openproject.org/wp/44058) - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: RPM/DEB installation fails with a custom gemfile \[[#44058](https://community.openproject.org/wp/44058)\] diff --git a/docs/release-notes/12/12-2-4/README.md b/docs/release-notes/12/12-2-4/README.md index a06fd2eef3e9..2cad383bb0a4 100644 --- a/docs/release-notes/12/12-2-4/README.md +++ b/docs/release-notes/12/12-2-4/README.md @@ -13,9 +13,7 @@ Release date: 2022-09-15 We released [OpenProject 12.2.4](https://community.openproject.org/versions/1599). The release contains several bug fixes and we recommend updating to the newest version. - - -### Pending journal cleanup database migration +## Pending journal cleanup database migration With OpenProject 12.2.2, a journal cleanup migration was introduced to fix a data corruption bug in the 12.2.0 release. @@ -25,19 +23,14 @@ A migration was added to this release to do just that, and ensure that the 12.2. For more information on that change, please see the discussion in [Bug #44132](https://community.openproject.org/wp/44132) - - - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Remaining hours sum not well formed \[[#43833](https://community.openproject.org/wp/43833)\] - Fixed: Destroy journals with invalid data_type associations \[[#44132](https://community.openproject.org/wp/44132)\] - Fixed: Internal error / Illegal instruction error \[[#44155](https://community.openproject.org/wp/44155)\] - Fixed: Dragging images to CKEditor on Grid custom texts not working with direct upload \[[#44156](https://community.openproject.org/wp/44156)\] -#### Contributions -A big thanks to community members for reporting bugs and helping us identifying and providing fixes. - -Special thanks for reporting and finding bugs go to +## Contributions -Nico Aymet +A big thanks to community members for reporting bugs and helping us identifying and providing fixes. +Special thanks for reporting and finding bugs go to Nico Aymet diff --git a/docs/release-notes/12/12-2-5/README.md b/docs/release-notes/12/12-2-5/README.md index 4dcbf89eb736..47829360ec30 100644 --- a/docs/release-notes/12/12-2-5/README.md +++ b/docs/release-notes/12/12-2-5/README.md @@ -13,8 +13,7 @@ Release date: 2022-10-04 We released [OpenProject 12.2.5](https://community.openproject.org/versions/1602). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes ## LDAP group synchronization bug diff --git a/docs/release-notes/12/12-3-0/README.md b/docs/release-notes/12/12-3-0/README.md index 24fe1d53170b..d489cf0b4579 100644 --- a/docs/release-notes/12/12-3-0/README.md +++ b/docs/release-notes/12/12-3-0/README.md @@ -18,7 +18,7 @@ With OpenProject 12.3, administrators can define the [global work week](../../.. OpenProject 12.3 also adds [duration](../../../user-guide/work-packages/set-change-dates/#duration) to work packages. Thereby, the duration is bound to the start and the finish date. -With the introduction of the work week and duration, consequently also the [date picker got improved](../../../user-guide/work-packages/set-change-dates/#working-days). You will now see the duration as well as a switch to consider "Working days only" for your planning. +With the introduction of the work week and duration, consequently also the [date picker got improved](../../../user-guide/work-packages/set-change-dates/#working-days). You will now see the duration as well as a switch to consider "Working days only" for your planning. Additionally, this release launches **meaningful tool tips to the most essential actions**, and **when copying a project, all file links attached to work packages will be copied as well**. @@ -26,7 +26,7 @@ As always, this release also contains many more improvements and bug fixes. We r ## Introduction of the global work week -OpenProject 12.3 gives the administrator the possibility to specify working and non-working days on an overall instance-level and consequently define a global work week. +OpenProject 12.3 gives the administrator the possibility to specify working and non-working days on an overall instance-level and consequently define a global work week. This helps you to create more accurate project schedules and avoid having start or finish date of a work packages on a weekend. Non-working days are displayed grey in the calendar and work packages cannot be scheduled to start or finish on those days. The default value for non-working days is set to Saturday and Sunday, but you set them as needed. @@ -50,7 +50,7 @@ With the addition of duration and introduction of the global work week, the date The duration field is obviously there to indicate the duration of a work package and to assist with setting start or finish date. -With the working days only switch you can decide to either stick to the set work week or to include weekends. +With the working days only switch you can decide to either stick to the set work week or to include weekends. By default the **Working days only** switch is activated and the work week, as defined in the administration settings, is used to define the duration. Consequently, non-working days are not included in the calculation of the duration. These non-working days show in grey in the calendar and are not clickable. @@ -60,7 +60,7 @@ By moving the switch and deactivate the “Working days only”, non-working day The functionality of the "Working days only" switch is well [documented](../../../user-guide/work-packages/set-change-dates/#working-days). -### Please note the impact on the scheduling of all work packages +### Please note the impact on the scheduling of all work packages These changes to scheduling will not impact work packages created before the release of OpenProject 12.3 or before the upgrade to OpenProject 12.3. For the work packages created before OpenProject 12.3, the setting will have automatically turned-off the switch for “Working days only”. This is important to not change any existing dates for work packages. However, for new work packages, the switch will be set by default to “Working days only”. @@ -70,9 +70,7 @@ The new and additional tool tips in the OpenProject application will make the na ![hover over select a project and tool tip view all projects comes up](tool-tip.png) - - -## List of all bug fixes and changes +## List of all bug fixes and changes - Epic: Define weekly work schedule (weekends) [#18416](https://community.openproject.org/wp/18416) - Epic: Duration (deriving duration from dates, deriving dates from duration, updated datepicker, duration field elsewhere) [#31992](https://community.openproject.org/wp/31992) @@ -112,7 +110,7 @@ The new and additional tool tips in the OpenProject application will make the na - Changed: New release teaser block for 12.3 [#44212](https://community.openproject.org/wp/44212) - Changed: Add the Switch component and Switch Field pattern to the design system [#44213](https://community.openproject.org/wp/44213) -### Contributions +## Contributions A big thanks to community members for reporting bugs, helping us identify issues and providing fixes. diff --git a/docs/release-notes/12/12-3-1/README.md b/docs/release-notes/12/12-3-1/README.md index fe2967b8d35f..d1a95d2dd5b6 100644 --- a/docs/release-notes/12/12-3-1/README.md +++ b/docs/release-notes/12/12-3-1/README.md @@ -13,8 +13,7 @@ Release date: 2022-10-24 We released [OpenProject 12.3.1](https://community.openproject.org/versions/1605). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Frontend including editor and time logging unusable when there are many activities \[[#40373](https://community.openproject.org/wp/40373)\] - Fixed: Attachments are not going to be copied, when using "Copy to other project" function \[[#43005](https://community.openproject.org/wp/43005)\] @@ -38,7 +37,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: "missing translation" pop-up message on a newly created cloud instance \[[#44583](https://community.openproject.org/wp/44583)\] - Fixed: OpenProject upgrade fails with "column roles.assignable does not exist" error during AddStoragesPermissionsToRoles migration \[[#44616](https://community.openproject.org/wp/44616)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/12/12-3-2/README.md b/docs/release-notes/12/12-3-2/README.md index f804c2af4255..2b178536ba50 100644 --- a/docs/release-notes/12/12-3-2/README.md +++ b/docs/release-notes/12/12-3-2/README.md @@ -13,15 +13,15 @@ Release date: 2022-10-26 We released [OpenProject 12.3.2](https://community.openproject.org/versions/1608). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Multiple identical Webhooks are sent for each WP change applied, not considering the Aggregated WorkPackage Journal \[[#44158](https://community.openproject.org/wp/44158)\] - Fixed: Moving a week-days-only WP on Gantt chart and falling its end-date to a non-working date is not possible \[[#44501](https://community.openproject.org/wp/44501)\] - Fixed: Migration to 12.3.1 fails with Key columns "user_id" and "id" are of incompatible types: numeric and bigint. \[[#44634](https://community.openproject.org/wp/44634)\] - Fixed: rake assets:precompile fails with NameError: uninitialized constant ActiveRecord::ConnectionAdapters::PostgreSQLAdapter \[[#44635](https://community.openproject.org/wp/44635)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/12/12-3-3/README.md b/docs/release-notes/12/12-3-3/README.md index 87ea226a4666..008c45808ed4 100644 --- a/docs/release-notes/12/12-3-3/README.md +++ b/docs/release-notes/12/12-3-3/README.md @@ -13,8 +13,7 @@ Release date: 2022-11-23 We released [OpenProject 12.3.3](https://community.openproject.org/versions/1609). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Gantt calendar weeks not according to settings \[[#41327](https://community.openproject.org/wp/41327)\] - Fixed: BIM edition unavailable on Ubuntu 22.04 packaged installation \[[#43531](https://community.openproject.org/wp/43531)\] @@ -23,7 +22,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Initial Installation fails if `welcome_text` is set in `configuration.yml` \[[#44755](https://community.openproject.org/wp/44755)\] - Fixed: OAuth login POST doesn't work on mobile Safari due to CSP \[[#44772](https://community.openproject.org/wp/44772)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/12/12-3-4/README.md b/docs/release-notes/12/12-3-4/README.md index ed626dd832dc..4bc0bd88fb7d 100644 --- a/docs/release-notes/12/12-3-4/README.md +++ b/docs/release-notes/12/12-3-4/README.md @@ -13,7 +13,6 @@ Release date: 2022-12-02 We released [OpenProject 12.3.4](https://community.openproject.org/versions/1613). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Chrome v108 freezes up on work package create and show page \[[#45169](https://community.openproject.org/wp/45169)\] diff --git a/docs/release-notes/12/12-4-0/README.md b/docs/release-notes/12/12-4-0/README.md index 6bbd4f56746d..ab3fc42c2bfd 100644 --- a/docs/release-notes/12/12-4-0/README.md +++ b/docs/release-notes/12/12-4-0/README.md @@ -14,16 +14,16 @@ We released [OpenProject 12.4.0](https://community.openproject.org/versions/1595 This release launches a long awaited feature of **date alerts for upcoming due dates (start or finish date)** and **reminders for overdue tasks**. -With OpenProject 12.4 the **2-factor authentication feature becomes part of the Community edition** and adds an additional security layer to your application. Do not take long before you activate it. +With OpenProject 12.4 the **2-factor authentication feature becomes part of the Community edition** and adds an additional security layer to your application. Do not take long before you activate it. -Official **OpenProject HelmCharts** are available from now on. We also added the possibility of choosing a work week as opposed to 1 or 2 week view with the team planer. In addition, users can now tag themselves via @mentioned and can bulk edit the work-package field "subject". +Official **OpenProject HelmCharts** are available from now on. We also added the possibility of choosing a work week as opposed to 1 or 2 week view with the team planer. In addition, users can now tag themselves via @mentioned and can bulk edit the work-package field "subject". As usual, the release contains several bug fixes and we recommend updating to the newest version. ## Date alerts for the upcoming dates and overdue tasks -The new OpenProject 12.4 release will bring notification date alerts for upcoming dates and overdue tasks (Enterprise add-on). Within the [Notification settings](../../../user-guide/notifications/notification-settings/) in My Account, automatic notifications for important dates and approaching dates can now be adjusted. This can be done for the open work packages you are involved in either as an assignee, accountable or watcher. A reminder can be set for 1 day, 3 days or a week before a start or a due date approaches. -Same options are now available for the overdue work package reminders. +The new OpenProject 12.4 release will bring notification date alerts for upcoming dates and overdue tasks (Enterprise add-on). Within the [Notification settings](../../../user-guide/notifications/notification-settings/) in My Account, automatic notifications for important dates and approaching dates can now be adjusted. This can be done for the open work packages you are involved in either as an assignee, accountable or watcher. A reminder can be set for 1 day, 3 days or a week before a start or a due date approaches. +Same options are now available for the overdue work package reminders. ![date-alerts-settings](openproject-date-alerts-settings.png) @@ -38,14 +38,12 @@ Date alerts are an Enterprise add-on and only available in the [Enterprise on-pr ## 2-factor Authentication (2FA) for the community edition -With OpenProject 12.4 users who have OpenProject community edition installed can activate 2-factor authentication. We strongly recommend that you make use of this option and increase your account security. +With OpenProject 12.4 users who have OpenProject community edition installed can activate 2-factor authentication. We strongly recommend that you make use of this option and increase your account security. ![two-factor-authentication](openproject-2-factor-authentication-community-edition.png) !See [here](../../../getting-started/my-account/#two-factor-authentication) how to setup the 2FA under My account. - - ## LDAP connection encryption changes In previous versions of OpenProject, there were three connection security modes that were hard to differentiate, especially with regards to actual verification of SSL certificates. @@ -72,7 +70,7 @@ Starting with OpenProject 12.4 official [OpenProject Helm charts](../../../insta ## List up to three people in a notification card -From now on is possible to list up to 3 people in a notification card when multiple people were involved in the changes. +From now on is possible to list up to 3 people in a notification card when multiple people were involved in the changes. ![openproject notifications center three people tagged](openproject-notifications-three-users-tagged.png) @@ -82,7 +80,7 @@ Users can now notify not only other users but themselves too via @mention. Notif ## Bulk edit work package "subject" field -It is now possible to bulk edit the subject field for multiple work packages. See how to [bulk edit work packages](../../../user-guide/work-packages/edit-work-package/#bulk-edit-work-packages). +It is now possible to bulk edit the subject field for multiple work packages. See how to [bulk edit work packages](../../../user-guide/work-packages/edit-work-package/#bulk-edit-work-packages). ![openproject bulk edit work package subject field](openproject-bulk-edit-subject.png) @@ -112,10 +110,10 @@ It is now possible to bulk edit the subject field for multiple work packages. Se - Changed: Bulk edit of the work-package field "subject" \[[#44386](https://community.openproject.org/wp/44386)\] - Changed: Team planner: add "Work week" option to visible time scale \[[#44702](https://community.openproject.org/wp/44702)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. A gigantic thank you goes out to Sven Kunze for developing the self-tagging feature and the bulk edit option for the subject field. Special thanks for reporting and finding bugs also go to Artur Neumann, Noel Lublovary, Hein Stefans. - diff --git a/docs/release-notes/12/12-4-1/README.md b/docs/release-notes/12/12-4-1/README.md index b1c2f2065493..fc8344c0ce16 100644 --- a/docs/release-notes/12/12-4-1/README.md +++ b/docs/release-notes/12/12-4-1/README.md @@ -13,8 +13,7 @@ Release date: 2022-12-14 We released [OpenProject 12.4.1](https://community.openproject.org/versions/1612). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Margin under road map caption when version is overdue \[[#41676](https://community.openproject.org/wp/41676)\] - Fixed: Issues with project selection on mobile \[[#44440](https://community.openproject.org/wp/44440)\] @@ -32,7 +31,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Login and email missing during AzureAD OpenID Connect registration \[[#45415](https://community.openproject.org/wp/45415)\] - Fixed: xeokit-metadata fails to find dotnet-runtime in Ubuntu 22.04 \[[#45442](https://community.openproject.org/wp/45442)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/12/12-4-2/README.md b/docs/release-notes/12/12-4-2/README.md index 9f8880f1e8e5..ed92707826d7 100644 --- a/docs/release-notes/12/12-4-2/README.md +++ b/docs/release-notes/12/12-4-2/README.md @@ -13,8 +13,7 @@ Release date: 2023-01-16 We released [OpenProject 12.4.2](https://community.openproject.org/versions/1614). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Password confirmation dialog doesn't work when using ENTER instead of clicking on Confirm \[[#44499](https://community.openproject.org/wp/44499)\] - Fixed: File picker does not load directory listing when OAuth token is expired \[[#44916](https://community.openproject.org/wp/44916)\] @@ -30,7 +29,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Date alert creation job timing out \[[#45591](https://community.openproject.org/wp/45591)\] - Fixed: New custom field with default value breaks comments \[[#45724](https://community.openproject.org/wp/45724)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/12/12-4-3/README.md b/docs/release-notes/12/12-4-3/README.md index 5aae7b63c54c..55fc32f83840 100644 --- a/docs/release-notes/12/12-4-3/README.md +++ b/docs/release-notes/12/12-4-3/README.md @@ -13,15 +13,15 @@ Release date: 2023-01-30 We released [OpenProject 12.4.3](https://community.openproject.org/versions/1621). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Custom field in cost report show "not found" after custom filed's value \[[#34978](https://community.openproject.org/wp/34978)\] - Fixed: Race condition with outdated OAuth access token \[[#45799](https://community.openproject.org/wp/45799)\] - Fixed: Notifications API are still showing errors in case of not authorized / other errors \[[#45854](https://community.openproject.org/wp/45854)\] - Fixed: Administration: Permissions report page doesn't work in french in 12.4.1 \[[#45892](https://community.openproject.org/wp/45892)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/12/12-4-4/README.md b/docs/release-notes/12/12-4-4/README.md index c1c7eca14751..2c8007cce1c9 100644 --- a/docs/release-notes/12/12-4-4/README.md +++ b/docs/release-notes/12/12-4-4/README.md @@ -13,8 +13,7 @@ Release date: 2023-02-15 We released [OpenProject 12.4.4](https://community.openproject.org/versions/1623). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Deleting tmp/cache works when called manually but never by scheduled jobs \[[#44182](https://community.openproject.org/wp/44182)\] - Fixed: Not possible to delete favicon and touch icon \[[#45997](https://community.openproject.org/wp/45997)\] @@ -22,7 +21,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Prevent OAuth refresh token race condition. \[[#46195](https://community.openproject.org/wp/46195)\] - Fixed: Click started in modal, but dragged outside closes the modal \[[#46217](https://community.openproject.org/wp/46217)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/12/12-4-5/README.md b/docs/release-notes/12/12-4-5/README.md index 495ce66a92ac..9c68b7a736e1 100644 --- a/docs/release-notes/12/12-4-5/README.md +++ b/docs/release-notes/12/12-4-5/README.md @@ -13,8 +13,7 @@ Release date: 2023-02-23 We released [OpenProject 12.4.5](https://community.openproject.org/versions/1657). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Timeout when bulk editing work package assignees across projects \[[#46284](https://community.openproject.org/wp/46284)\] - Fixed: Groups can no longer have their notifications suppressed \[[#46330](https://community.openproject.org/wp/46330)\] diff --git a/docs/release-notes/12/12-5-0/README.md b/docs/release-notes/12/12-5-0/README.md index 1645c6e640cf..61e35cb88a8e 100644 --- a/docs/release-notes/12/12-5-0/README.md +++ b/docs/release-notes/12/12-5-0/README.md @@ -15,7 +15,7 @@ We have released [OpenProject 12.5.0](https://community.openproject.org/versions This new release is again packed with many new collaboration features, improvements and bug fixes. Version 12.5 brings the anticipated collaboration features for the **Nextcloud integration to the OpenProject side**. Nextcloud and OpenProject now offer users of both services a way to manage their projects and share files seamlessly and without disruption. -OpenProject 12.5 now also lets system administrator **define additional non-working days** on an instance level, such as public holidays. We are also happy to **release another Enterprise add-on** to the free-of-charge Community version: The advanced search functionality not only supports full text search but also enables users to search for work package attachments or content. +OpenProject 12.5 now also lets system administrator **define additional non-working days** on an instance level, such as public holidays. We are also happy to **release another Enterprise add-on** to the free-of-charge Community version: The advanced search functionality not only supports full text search but also enables users to search for work package attachments or content. ## Upload files to Nextcloud while working in OpenProject @@ -55,8 +55,6 @@ Once you have selected or dropped the files you would like to upload, simply sel The ability to upload new files to Nextcloud directly from OpenProject or link existing files to work packages is not reserved only for existing work packages. You can now do both also when creating a new work package. - - ![openproject-nextcloud-upload-files-empty-status](openproject-nextcloud-upload-files-empty-status.png) ### More options for linked Nextcloud files in OpenProject @@ -73,7 +71,7 @@ With OpenProject 12.5, administrators can now also define additional individual ![Non-working-days-holidays](Non-working-days-holidays.png) -**Please note**: These additional non-working days are set at an instance level and affect all work packages in all projects. Adding additional non-working days can therefore affect and reschedule a large number of work packages in the instance (except those for which the 'Working days only' switch is turned off). Individual non-working days and are also tied to a specific year. Recurring holidays like Christmas have to be set separately for each year. +**Please note**: These additional non-working days are set at an instance level and affect all work packages in all projects. Adding additional non-working days can therefore affect and reschedule a large number of work packages in the instance (except those for which the 'Working days only' switch is turned off). Individual non-working days and are also tied to a specific year. Recurring holidays like Christmas have to be set separately for each year. ## View project activity @@ -215,6 +213,7 @@ With OpenProject 12.5, we are happy to announce that another Enterprise add-on w - Epic: Cross-application main menu for dPhoenixSuite/Sovereign Administrative Work Place \[[#44297](https://community.openproject.org/wp/44297)\] ## Credits and contributions + A very special thank you goes to the following sponsors for features and improvements of this release: - **The City of Cologne** for having sponsored the tracking of project changes, adding additional non-working days, and parts of the Nextcloud integration. @@ -222,4 +221,4 @@ A very special thank you goes to the following sponsors for features and improve A very big thank you to M V, Sven Kunze, Rince wind, Christina Vechkanova, Johannes Frenck, Marc Burk, Jörg Nold, Nidhin Manoharan, Jörg Mollowitz, Benjamin Rönnau, Harald Herz for finding and reporting bugs. -And of course, a very big thank you to the **Nextcloud** team for this amazing collaboration. +And of course, a very big thank you to the **Nextcloud** team for this amazing collaboration. diff --git a/docs/release-notes/12/12-5-1/README.md b/docs/release-notes/12/12-5-1/README.md index df2de60d02ab..65c3c46a34b0 100644 --- a/docs/release-notes/12/12-5-1/README.md +++ b/docs/release-notes/12/12-5-1/README.md @@ -13,8 +13,7 @@ Release date: 2023-03-20 We released [OpenProject 12.5.1](https://community.openproject.org/versions/1692). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Changing non working days in Polish fails \[[#47020](https://community.openproject.org/wp/47020)\] - Fixed: Unable to login via oauth provider (e.g. Azure) \[[#47044](https://community.openproject.org/wp/47044)\] diff --git a/docs/release-notes/12/12-5-2/README.md b/docs/release-notes/12/12-5-2/README.md index a9b1220b88a2..b479d94207c9 100644 --- a/docs/release-notes/12/12-5-2/README.md +++ b/docs/release-notes/12/12-5-2/README.md @@ -13,8 +13,7 @@ Release date: 2023-03-28 We released [OpenProject 12.5.2](https://community.openproject.org/versions/1693). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: [AppSignal] incompatible character encodings: ASCII-8BIT and UTF-8 \[[#43898](https://community.openproject.org/wp/43898)\] - Fixed: Missing deletion confirmation for subprojects \[[#45935](https://community.openproject.org/wp/45935)\] @@ -26,7 +25,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Swagger UI is not rendering for API docs \[[#47157](https://community.openproject.org/wp/47157)\] - Changed: Add hint if Nextcloud App "OpenProject Integration" needs upgrade for 12.5 \[[#47021](https://community.openproject.org/wp/47021)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/12/12-5-3/README.md b/docs/release-notes/12/12-5-3/README.md index bc0bc8935d87..e664d1dbfc8a 100644 --- a/docs/release-notes/12/12-5-3/README.md +++ b/docs/release-notes/12/12-5-3/README.md @@ -13,8 +13,7 @@ Release date: 2023-04-24 We released [OpenProject 12.5.3](https://community.openproject.org/versions/1694). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Titles of related work packages are unnecessarily truncated. Full titles are not accessible. \[[#44828](https://community.openproject.org/wp/44828)\] - Fixed: Date picker: selected dates in mini calendar don't have a hover (primary dark) \[[#46436](https://community.openproject.org/wp/46436)\] @@ -28,7 +27,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Anyone can sign up using Google even if user registration is disabled \[[#47622](https://community.openproject.org/wp/47622)\] - Fixed: inbound emails uses "move_on_success" and "move_on_failure" error \[[#47633](https://community.openproject.org/wp/47633)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/12/12-5-4/README.md b/docs/release-notes/12/12-5-4/README.md index 8d546c2f59a2..f0bd2a5711c4 100644 --- a/docs/release-notes/12/12-5-4/README.md +++ b/docs/release-notes/12/12-5-4/README.md @@ -13,9 +13,9 @@ Release date: 2023-05-02 We released [OpenProject 12.5.4](https://community.openproject.org/versions/1728). The release contains two security related bug fixes and we recommend updating to the newest version. +## CVE-2023-31140 - -### CVE-2023-31140: Invalidation of existing sessions when 2FA activated \[[#48035](https://community.openproject.org/wp/48035)\] +Invalidation of existing sessions when 2FA activated \[[#48035](https://community.openproject.org/wp/48035)\] When a user registers and confirms their first two-factor authentication (2FA) device for an account, existing logged in sessions for that user account are not terminated. Likewise, if an administrators creates a mobile phone 2FA device on behalf of a user, their existing sessions are not terminated. The issue has been resolved in OpenProject version 12.5.4 by actively terminating sessions of user accounts having registered and confirmed a 2FA device. @@ -27,7 +27,7 @@ For more information, [please see our security advisory](https://github.com/opf/ As a workaround, users who register the first 2FA device on their account can manually log out to terminate all other active sessions. This is the default behavior of OpenProject but might be disabled [through a configuration option](../../../installation-and-operations/configuration/#setting-session-options). Double check that this option is not overridden if you plan to employ the workaround. -### Invalidation of password reset link when user changes password in the meantime \[[#48036](https://community.openproject.org/wp/48036)\] +**Invalidation of password reset link when user changes password in the meantime \[[#48036](https://community.openproject.org/wp/48036)\]** When a user requests a password reset, an email is sent with a link to confirm and reset the password. If the user changes the password in an active session in the meantime, the password reset link was not invalidated and continued to be usable for the duration of its validity period. @@ -35,9 +35,7 @@ The issue has been resolved in OpenProject version 12.5.4 by actively revoking a This security related issue was responsibly disclosed by [Vaishnavi Pardeshi](mailto:researchervaishnavi0@gmail.com). Thank you for reaching out to us and your help in identifying this issue. If you have a security vulnerability you would like to disclose, please see our [statement on security](../../../security-and-privacy/statement-on-security/). - - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Google reCAPTCHA v2 and V3 changed implementation \[[#44115](https://community.openproject.org/wp/44115)\] - Fixed: User activity: Previous link removes user parameter from URL \[[#47855](https://community.openproject.org/wp/47855)\] @@ -46,10 +44,7 @@ This security related issue was responsibly disclosed by [Vaishnavi Pardeshi](ma - Fixed: Previously Created Session Continue Being Valid After 2FA Activation \[[#48035](https://community.openproject.org/wp/48035)\] - Fixed: Forgotten password link does not expire when user changes password in the meantime \[[#48036](https://community.openproject.org/wp/48036)\] -#### Contributions -A big thanks to community members for reporting bugs and helping us identifying and providing fixes. - -Special thanks for reporting and finding bugs go to - -Björn Schümann +## Contributions +A big thanks to community members for reporting bugs and helping us identifying and providing fixes. +Special thanks for reporting and finding bugs go to Björn Schümann diff --git a/docs/release-notes/12/12-5-5/README.md b/docs/release-notes/12/12-5-5/README.md index 1a1837a06536..743ba17c63fc 100644 --- a/docs/release-notes/12/12-5-5/README.md +++ b/docs/release-notes/12/12-5-5/README.md @@ -13,8 +13,7 @@ Release date: 2023-05-16 We released [OpenProject 12.5.5](https://community.openproject.org/versions/1761). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: API v3 Group List Api sometimes misses embedded members field \[[#42303](https://community.openproject.org/wp/42303)\] - Fixed: Wrong date format for the Slovenian language \[[#48032](https://community.openproject.org/wp/48032)\] @@ -23,7 +22,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Links from the welcome text stop working when text is edited \[[#48158](https://community.openproject.org/wp/48158)\] - Fixed: Document not listing project name under My Page \[[#48177](https://community.openproject.org/wp/48177)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/12/12-5-6/README.md b/docs/release-notes/12/12-5-6/README.md index 32cbb43d1f4a..737863680a68 100644 --- a/docs/release-notes/12/12-5-6/README.md +++ b/docs/release-notes/12/12-5-6/README.md @@ -13,7 +13,7 @@ Release date: 2023-06-01 We released [OpenProject 12.5.6](https://community.openproject.org/versions/1794). The release contains a security related bug fix and we recommend updating to the newest version. -### CVE-2023-31140: Project identifier information leakage through robots.txt +## CVE-2023-31140: Project identifier information leakage through robots.txt For any OpenProject installation, a robots.txt file is generated through the server to denote which routes shall or shall not be accessed by crawlers. These routes contain project identifiers of all public projects in the instance. Even if the entire instance is marked as "Login required" and prevents all truly anonymous access, the /robots.txt route remains publicly available. @@ -28,9 +28,7 @@ You can download the following patch file to apply the patch to any OpenProject **Workaround** If you are unable to update or apply the provided patch, mark any public project as non-public for the time being and give anyone in need of access to the project a membership. - - -#### Bug fixes and changes +## Bug fixes and changes - Changed: Add packaged installation support for SLES 15 \[[#44117](https://community.openproject.org/wp/44117)\] - Changed: Allow URL behind the application logo to be configurable \[[#48251](https://community.openproject.org/wp/48251)\] @@ -40,9 +38,7 @@ If you are unable to update or apply the provided patch, mark any public project - Fixed: robots.txt leaks public project identifiers \[[#48338](https://community.openproject.org/wp/48338)\] - Fixed: Unchecked copy options are still copied in the new project \[[#48351](https://community.openproject.org/wp/48351)\] -#### Contributions -A big thanks to community members for reporting bugs and helping us identifying and providing fixes. - -Special thanks for reporting and finding bugs go to +## Contributions -Benjamin Rönnau, Ryan Brownell +A big thanks to community members for reporting bugs and helping us identifying and providing fixes. +Special thanks for reporting and finding bugs go to Benjamin Rönnau, Ryan Brownell diff --git a/docs/release-notes/12/12-5-7/README.md b/docs/release-notes/12/12-5-7/README.md index ce4cf2166bd0..74c7069ba689 100644 --- a/docs/release-notes/12/12-5-7/README.md +++ b/docs/release-notes/12/12-5-7/README.md @@ -13,14 +13,14 @@ Release date: 2023-06-14 We released [OpenProject 12.5.7](https://community.openproject.org/versions/1796). The release contains several bug fixes and we recommend updating to the newest version. - -#### Bug fixes and changes +## Bug fixes and changes - Changed: Quick-Wins to make blue boxes easier to understand \[[#44340](https://community.openproject.org/wp/44340)\] - Fixed: Milestone cannot be dragged left-right on the calendar \[[#48334](https://community.openproject.org/wp/48334)\] - Fixed: Docker linux/arm64 image raise "/app/docker/prod/gosu: cannot execute binary file: Exec format error" \[[#48395](https://community.openproject.org/wp/48395)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/12/12-5-8/README.md b/docs/release-notes/12/12-5-8/README.md index 7fb10cfe53be..a8db496883d3 100644 --- a/docs/release-notes/12/12-5-8/README.md +++ b/docs/release-notes/12/12-5-8/README.md @@ -14,7 +14,7 @@ We released [OpenProject 12.5.8](https://community.openproject.org/versions/1829 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: After calling "Create project copy" API endpoint, the Job Status API should return the new projects id, not only its identifier \[[#37783](https://community.openproject.org/wp/37783)\] - Fixed: Entries in summary emails not clickable in Outlook (links not working) \[[#40157](https://community.openproject.org/wp/40157)\] @@ -29,7 +29,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Internal error occurs when invalid project is set to template \[[#49116](https://community.openproject.org/wp/49116)\] - Changed: Allow internal login even if omniauth direct provider selected \[[#47930](https://community.openproject.org/wp/47930)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/12/README.md b/docs/release-notes/12/README.md index 3ab1af18b1ee..249797ddabb1 100644 --- a/docs/release-notes/12/README.md +++ b/docs/release-notes/12/README.md @@ -5,7 +5,7 @@ release_date: 2021-11-15 title: OpenProject Version 12 Release Notes --- -# OpenProject Version 12 Release Notes +# OpenProject Version 12 Release Notes | Version | Release date | |---------------------------------|--------------| @@ -53,4 +53,3 @@ title: OpenProject Version 12 Release Notes | [OpenProject 12.0.2](12-0-2/) | 2021-11-24 | | [OpenProject 12.0.1](12-0-1/) | 2021-11-17 | | [OpenProject 12.0.0](12-0-0/) | 2021-11-15 | - diff --git a/docs/release-notes/13-0-0/README.md b/docs/release-notes/13-0-0/README.md index 25bb77be64d7..b6ae78c862fe 100644 --- a/docs/release-notes/13-0-0/README.md +++ b/docs/release-notes/13-0-0/README.md @@ -53,7 +53,8 @@ With 13.0 we have added a new global menu to access all global modules for your ![OpenProject global modules overview](openproject-global-modules.png) -## Time tracking button +## Time tracking button + We added a button that allows you to easily record the time spent on a work package. Pressing the button on the work package will start the timer. Your avatar in the header navigation will show the active time tracking. Clicking the button again will stop the time tracking and you can log the time spent on the work package. ![OpenProject time tracking button](openproject-time-tracking-button.png) diff --git a/docs/release-notes/13-0-1/README.md b/docs/release-notes/13-0-1/README.md index 40a4ef78cbd3..e44dbadf1d22 100644 --- a/docs/release-notes/13-0-1/README.md +++ b/docs/release-notes/13-0-1/README.md @@ -14,7 +14,7 @@ We released [OpenProject 13.0.1](https://community.openproject.org/versions/1865 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Copy to clipboard icon wrong \[[#49721](https://community.openproject.org/wp/49721)\] - Fixed: Shared calendar return 404 when using a parent filter \[[#49726](https://community.openproject.org/wp/49726)\] @@ -27,7 +27,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: CF multiselect list with default values does not show default values on work package creation \[[#49784](https://community.openproject.org/wp/49784)\] - Fixed: Chinese zh-CN locale is not up to date \[[#49795](https://community.openproject.org/wp/49795)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/13-0-2/README.md b/docs/release-notes/13-0-2/README.md index a4fa65275526..62ce32c17f73 100644 --- a/docs/release-notes/13-0-2/README.md +++ b/docs/release-notes/13-0-2/README.md @@ -25,7 +25,7 @@ to other project folders. This only affects those users that have granted OpenProject access to their Nextcloud user via OAuth. Other users that do not have access rights to any project folder and have not granted access to Nextcloud via OAuth are not affected. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: [AppSignal] Performance MessagesController#show \[[#47871](https://community.openproject.org/wp/47871)\] - Fixed: Number of wp no longer shown in bars on the graph \[[#49767](https://community.openproject.org/wp/49767)\] @@ -44,7 +44,8 @@ This only affects those users that have granted OpenProject access to their Next - Changed: Forbid user to enable misconfigured storages for a project. \[[#49218](https://community.openproject.org/wp/49218)\] - Changed: Remove the "show" view for a storage's settings page \[[#49676](https://community.openproject.org/wp/49676)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/13-0-3/README.md b/docs/release-notes/13-0-3/README.md index 764ad484bb1a..62bb66163b5b 100644 --- a/docs/release-notes/13-0-3/README.md +++ b/docs/release-notes/13-0-3/README.md @@ -14,7 +14,7 @@ We released [OpenProject 13.0.3](https://community.openproject.org/versions/1901 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Enterprise Trial automatic activation does not work \[[#49781](https://community.openproject.org/wp/49781)\] - Fixed: Fix untranslated strings \[[#49848](https://community.openproject.org/wp/49848)\] diff --git a/docs/release-notes/13-0-4/README.md b/docs/release-notes/13-0-4/README.md index f7a5cd68b511..06b9340d066e 100644 --- a/docs/release-notes/13-0-4/README.md +++ b/docs/release-notes/13-0-4/README.md @@ -14,7 +14,7 @@ We released [OpenProject 13.0.4](https://community.openproject.org/versions/1902 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: PDF export does not contain custom fields and some core values \[[#49948](https://community.openproject.org/wp/49948)\] - Fixed: Poor performance of work package autocompleter and /api/v3/work_packages in some scenarios \[[#50102](https://community.openproject.org/wp/50102)\] @@ -23,7 +23,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: DATABASE_URL environment variable is not validated before usage \[[#50152](https://community.openproject.org/wp/50152)\] - Fixed: Work package activity not shown when using Polish language \[[#50197](https://community.openproject.org/wp/50197)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/13-0-5/README.md b/docs/release-notes/13-0-5/README.md index 1c82961b01f1..309eef48edc3 100644 --- a/docs/release-notes/13-0-5/README.md +++ b/docs/release-notes/13-0-5/README.md @@ -14,7 +14,7 @@ We released [OpenProject 13.0.5](https://community.openproject.org/versions/1904 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: get 500 error when open wiki page in every project \[[#40500](https://community.openproject.org/wp/40500)\] - Fixed: [AppSignal] Performance VersionsController#index \[[#47872](https://community.openproject.org/wp/47872)\] @@ -27,7 +27,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Copying projects with Nextcloud project folders does not recreate file links to folders \[[#50295](https://community.openproject.org/wp/50295)\] - Fixed: Help text incorrectly cached for non admins \[[#50299](https://community.openproject.org/wp/50299)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/13-0-6/README.md b/docs/release-notes/13-0-6/README.md index 5ddb6cb57b73..9cba9d65851a 100644 --- a/docs/release-notes/13-0-6/README.md +++ b/docs/release-notes/13-0-6/README.md @@ -14,6 +14,6 @@ We released [OpenProject 13.0.6](https://community.openproject.org/versions/1937 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Project storage members page can be accessed without a session. \[[#50519](https://community.openproject.org/wp/50519)\] diff --git a/docs/release-notes/13-0-7/README.md b/docs/release-notes/13-0-7/README.md index 87939a8200de..a3c43987846a 100644 --- a/docs/release-notes/13-0-7/README.md +++ b/docs/release-notes/13-0-7/README.md @@ -14,12 +14,13 @@ We released [OpenProject 13.0.7](https://community.openproject.org/versions/1938 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: File Drag and Drop \[[#49507](https://community.openproject.org/wp/49507)\] - Fixed: Help icon not shown when having a custom help link setting \[[#50666](https://community.openproject.org/wp/50666)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/13-0-8/README.md b/docs/release-notes/13-0-8/README.md index 6d022b851874..57fb5b40720f 100644 --- a/docs/release-notes/13-0-8/README.md +++ b/docs/release-notes/13-0-8/README.md @@ -14,7 +14,7 @@ We released [OpenProject 13.0.8](https://community.openproject.org/versions/1942 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Logging time using "My spent time" widget returns previous day (likely time zone issue) \[[#49779](https://community.openproject.org/wp/49779)\] - Fixed: Internal server error upon login via Microsoft Entra ID (AzureAD) \[[#50167](https://community.openproject.org/wp/50167)\] @@ -22,7 +22,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: +Custom field button moved left (instead of being on the right) of the Custom fields page in Project settings \[[#50285](https://community.openproject.org/wp/50285)\] - Fixed: Make Nextcloud synchronization more stable in 13.0. \[[#51265](https://community.openproject.org/wp/51265)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/13-1-0/README.md b/docs/release-notes/13-1-0/README.md index 4256196658d2..4ce4eb0773c8 100644 --- a/docs/release-notes/13-1-0/README.md +++ b/docs/release-notes/13-1-0/README.md @@ -40,7 +40,7 @@ See our user guide to learn more about this Enterprise add-on and how to [use th ## Share work packages with external users and groups (Enterprise add-on) -With OpenProject 13.1 it is possible to share work packages with users and/or groups outside of your installation. This sharing feature is available as an Enterprise add-on. Work packages can now be shared with users or groups that have no permissions to see a particular project in its entirety, only allowing access to relevant work packages. This way, stakeholders can get easy access to relevant project information without having to see all of a project’s work packages. +With OpenProject 13.1 it is possible to share work packages with users and/or groups outside of your installation. This sharing feature is available as an Enterprise add-on. Work packages can now be shared with users or groups that have no permissions to see a particular project in its entirety, only allowing access to relevant work packages. This way, stakeholders can get easy access to relevant project information without having to see all of a project’s work packages. ![Share work packages with external users in OpenProject](openproject-13-1-share-work-packages.png) @@ -54,26 +54,22 @@ With OpenProject 13.1, we released [Attribute help texts](../../system-admin-gui ## Accessibility improvements and high contrast mode -We continued to work on improving accessibility of OpenProject according to the WCAG 2.1 AA. You can now select to use a high contrast mode in your [profile settings](../../getting-started/my-account/#select-the-high-contrast-color-mode), which will override the current OpenProject theme and be especially valuable for OpenProject users with visual impairments. +We continued to work on improving accessibility of OpenProject according to the WCAG 2.1 AA. You can now select to use a high contrast mode in your [profile settings](../../getting-started/my-account/#select-the-high-contrast-color-mode), which will override the current OpenProject theme and be especially valuable for OpenProject users with visual impairments. ![High contrast mode in OpenProject](openproject_my_account_high_contrast_mode.png) ## Continued integration of Primer design system -With OpenProject 13.1 we have continued to integration the [Primer Design system](https://primer.style/). This will especially be noticeable in the new features, such as the new Meetings module. - - +With OpenProject 13.1 we have continued to integration the [Primer Design system](https://primer.style/). This will especially be noticeable in the new features, such as the new Meetings module. ## Discontinued support for Centos7 and SLES12 -Support for packaged installations on Centos7 and SUSE Enterprise Linux 12 have been removed in 13.1.0 Both are nearing or have exceeded their EOL and packaged builds were failing prior to the release already. We will not provide additional support for these systems. +Support for packaged installations on Centos7 and SUSE Enterprise Linux 12 have been removed in 13.1.0 Both are nearing or have exceeded their EOL and packaged builds were failing prior to the release already. We will not provide additional support for these systems. Users still required to run on these systems should consider upgrading to a supported version, or use our docker-based installation methods. For more information, please see [#51333](https://community.openproject.org/projects/openproject/work_packages/51533/activity) and our [installation guides](../../installation-and-operations/installation/). - - ## List of all bug fixes and changes - Epic: Share work packages with external users and groups that are not member of the project team \[[#31150](https://community.openproject.org/wp/31150)\] @@ -143,7 +139,8 @@ For more information, please see [#51333](https://community.openproject.org/proj - Fixed: Search not working on some meetings (possibly because of agenda items containing macros) \[[#51426](https://community.openproject.org/wp/51426)\] - Fixed: Overview page suggests some information (e.g. custom fields, status, description) not set when they are hidden \[[#51431](https://community.openproject.org/wp/51431)\] -### Contributions +## Contributions + A very special thank you goes to our sponsors for features and improvements of this release: - **Deutsche Bahn** – for the OneDrive/SharePoint integration diff --git a/docs/release-notes/13-1-1/README.md b/docs/release-notes/13-1-1/README.md index ac0d344a7e16..39bcea391ddf 100644 --- a/docs/release-notes/13-1-1/README.md +++ b/docs/release-notes/13-1-1/README.md @@ -14,7 +14,7 @@ We released [OpenProject 13.1.1](https://community.openproject.org/versions/1980 The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Inconsistent hrefs in wp shared mail \[[#51480](https://community.openproject.org/wp/51480)\] - Fixed: Slow notification polling \[[#51622](https://community.openproject.org/wp/51622)\] @@ -26,7 +26,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: Time and costs \[[#51700](https://community.openproject.org/wp/51700)\] - Fixed: Pasting into autocompleter does not work initially \[[#51730](https://community.openproject.org/wp/51730)\] -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/13-2-0/README.md b/docs/release-notes/13-2-0/README.md index 9cb7974a1578..d1b748b6664c 100644 --- a/docs/release-notes/13-2-0/README.md +++ b/docs/release-notes/13-2-0/README.md @@ -14,11 +14,11 @@ We released [OpenProject 13.2.0](https://community.openproject.org/versions/1979 Among other features, it brings improvements for the **OneDrive/SharePoint integration**, now also allowing **manual project folders**. In addition to that, both OneDrive/SharePoint and Nextcloud integrations were improved by **showing deleted files in OpenProject work packages**. -We also added the option to **filter the project member list**, allowing project administrators to easily filter through the project member lists based on various roles, groups and shares. Instance administrators can now also allow for users to **change work package status without the rights to edit a work package**. +We also added the option to **filter the project member list**, allowing project administrators to easily filter through the project member lists based on various roles, groups and shares. Instance administrators can now also allow for users to **change work package status without the rights to edit a work package**. Furthermore, it is now **possible to set users with whom a work package has been shared as assignee or responsible**. The **quick content menu** in the Gantt view has now offers an additional option to show work package relations. -Finally, **several fields were renamed**: +Finally, **several fields were renamed**: - **Estimated time** is now called Work (calculation of **Work** has also been updated) - **Remaining hours** is now called Remaining work (calculation of **Remaining work** has also been updated) @@ -26,10 +26,9 @@ Finally, **several fields were renamed**: As always, this release contains several bug fixes and we recommend updating to the newest version. - ## Manual project folders for OneDrive/SharePoint storages (Enterprise add-on) -With OpenProject 13.2, manual project folders have become available for OneDrive/SharePoint storage, further improving access to essential project files. +With OpenProject 13.2, manual project folders have become available for OneDrive/SharePoint storage, further improving access to essential project files. When project folders are configured, all project-related files are automatically uploaded and organized within the specified folder. To activate project folders, administrators are required to designate the desired folder as the project folder and manually configure the associated permissions. This feature enhances user convenience and file organization within the OpenProject environment. @@ -39,18 +38,19 @@ See our user guide to learn more about this Enterprise add-on and how to [use th ## Show file links of files that are not available to the user in the cloud storage -In 13.2 we improved the functionality of file storages. Even if a file has been deleted on a file storage, it will still be displayed under the Files tab in OpenProject work packages, allowing users to better keep track of project files. +In 13.2 we improved the functionality of file storages. Even if a file has been deleted on a file storage, it will still be displayed under the Files tab in OpenProject work packages, allowing users to better keep track of project files. ![Deleted file storage file in OpenProject](deleted-file.png) -This new feature is available for [both file storage integrations](../../user-guide/file-management). +This new feature is available for [both file storage integrations](../../user-guide/file-management). ## Filter for roles, groups, and shares in the project members list + With OpenProject 13.2, users can filter the list of project member based on user roles, groups, and shared work packages. This enables project members to promptly identify others with specific roles or individuals outside the project team who have gained access through the newly introduced Sharing feature. ![Project members filter in OpenProject](project-members.png) -Read more about filtering the project members list in our [user guide](../../user-guide/members/#project-members-overview). +Read more about filtering the project members list in our [user guide](../../user-guide/members/#project-members-overview). ## Allow assignee and accountable for shared work packages (Enterprise add-on) @@ -66,24 +66,25 @@ Read more about [roles and permissions for users of OpenProject](../../system-ad ## Quick context menu in Gantt view: Show relations -Quick context menu in the Gantt view now includes "Show relations" option. It displays all existing relations for the selected work package. +Quick context menu in the Gantt view now includes "Show relations" option. It displays all existing relations for the selected work package. -Please note that this option is only available if you have selected a Gantt view (i.e. not a table or cards view). +Please note that this option is only available if you have selected a Gantt view (i.e. not a table or cards view). ![Quick context menu in Gantt charts in OpenProject](gantt-relations.png) Read more about [Gantt charts in OpenProject](../../user-guide/gantt-chart/) ## New field names and calculation of work and remaining work + Several field names were changed in OpenProject 13.2. - Estimated time is now called **Work** -- Remaining hours is now called **Remaining work** +- Remaining hours is now called **Remaining work** - Progress (%) is now called **% Complete** Furthermore, the calculation of **Work** and **Remaining work** has been modified, now featuring a sum value (∑) displayed in the "Work" and "Remaining work" fields. This sum shows the total value of all child elements within the work package, including the work package itself. -Please note that **% Complete** does not adjust automatically when the values of **Work** or **Remaining work** are changed. +Please note that **% Complete** does not adjust automatically when the values of **Work** or **Remaining work** are changed. ## Bug fixes and changes @@ -118,12 +119,12 @@ Please note that **% Complete** does not adjust automatically when the values of -### Contributions +## Contributions A very special thank you goes to our sponsors for features and improvements of this release: - **AMG** - for the advanced filters for project members lists -- **Deutsche Bahn** - for the manual project folders for OneDrive/SharePoint integration +- **Deutsche Bahn** - for the manual project folders for OneDrive/SharePoint integration - **German Federal Ministry of the Interior and Home Affairs (BMI)** - for the improvements to progress reporting A big thanks to Community members for reporting bugs and helping us identifying and providing fixes, especially to Arun M, Patrick Massé and Richard Richter. diff --git a/docs/release-notes/13-2-1/README.md b/docs/release-notes/13-2-1/README.md index 4294b0d75f8a..0afaee581c26 100644 --- a/docs/release-notes/13-2-1/README.md +++ b/docs/release-notes/13-2-1/README.md @@ -48,7 +48,8 @@ The release contains several bug fixes and we recommend updating to the newest v -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/13-3-0/README.md b/docs/release-notes/13-3-0/README.md index dcfbdb794101..98a4e817b10a 100644 --- a/docs/release-notes/13-3-0/README.md +++ b/docs/release-notes/13-3-0/README.md @@ -90,7 +90,8 @@ With this release, admins of an Enterprise edition can choose between manually o - Feature: Maintain manually managed project folder on project copy for SharePoint/OneDrive \[[#52363](https://community.openproject.org/wp/52363)\] - Feature: Rename "Managed folder status" heading in Storage form \[[#52456](https://community.openproject.org/wp/52456)\] -### Contributions +## Contributions + A very special thank you goes to our sponsors for features and improvements of this release: - BMI for sponsoring the features on progress reporting and Gantt charts (which will be continued in the following releases) diff --git a/docs/release-notes/13-3-1/README.md b/docs/release-notes/13-3-1/README.md index 58fe5046dc64..5a5b28209e8f 100644 --- a/docs/release-notes/13-3-1/README.md +++ b/docs/release-notes/13-3-1/README.md @@ -36,9 +36,10 @@ The release contains several bug fixes and we recommend updating to the newest v -#### Contributions +## Contributions + A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to Dennis St. -Thank you to Syvert Fossdal for translating OpenProject into Norwegian. +Thank you to Syvert Fossdal for translating OpenProject into Norwegian. diff --git a/docs/release-notes/13-4-0/README.md b/docs/release-notes/13-4-0/README.md index 358aba1d09ea..e23756b496e8 100644 --- a/docs/release-notes/13-4-0/README.md +++ b/docs/release-notes/13-4-0/README.md @@ -33,14 +33,14 @@ We are delighted about the GitLab integration, which is officially available wit With this integration, you can manage GitLab's units of work (merge requests and issues) from within OpenProject by linking them with work packages. Read more about OpenProject's GitLab integration [in our system admin guide](https://www.openproject.com/docs/system-admin-guide/integrations/gitlab-integration/). -
    +
    **Already using the user-generated GitLab plugin?** With OpenProject 13.4, the existing plugin will be replaced by the new integration. We recommend removing the plugin module folder and bundler references before upgrading to OpenProject. Your historical dataset will remain unaffected within OpenProject as there were no changes to the data model. Before upgrading, please do the following: 1. Remove traces of the GitLab integration in your **Gemfile.lock** and **Gemfile.modules**. See [btey/openproject-gitlab-integration#configuration](https://github.com/btey/openproject-gitlab-integration?tab=readme-ov-file#configuration). Failure to do so may result in a `Bundler::GemfileError` matching the following error message: _Your Gemfile lists the gem openproject-gitlab_integration (>= 0) more than once._ -2. Remove the module code traces of the GitLab integration by running this command: `rm -rf /path/to/openproject/modules/gitlab_integration` +2. Remove the module code traces of the GitLab integration by running this command: `rm -rf /path/to/openproject/modules/gitlab_integration`
    @@ -48,7 +48,7 @@ Before upgrading, please do the following: ### Advanced features for custom project lists -With OpenProject 13.4 we are again releasing further features for custom [project lists](https://www.openproject.org/docs/user-guide/projects/project-lists/). The most important update here is that you can now modify the selection and order of columns, then save them in a newly configured view, much like how you typically manage a work package list. +With OpenProject 13.4 we are again releasing further features for custom [project lists](../../user-guide/projects/project-lists/). The most important update here is that you can now modify the selection and order of columns, then save them in a newly configured view, much like how you typically manage a work package list. In addition, you will now be reminded to save changes to your project list in the form of a **Save link** in the top right corner. This helps users remember to save the view and not lose their work when they leave the page. @@ -62,7 +62,7 @@ Another long-awaited improvement: When you copy a dynamic meeting, **existing ag ![Copy a meeting with agenda](openproject-13-4-meetings-copy-agenda-highlighted.png) -And finally, the .ics file now also contains information about the (dynamic) meeting attendees - in addition to other existing information such as PARTSTAT. This now allows you to **confirm or decline invitations to a meeting directly in your calendar software**. +And finally, the .ics file now also contains information about the (dynamic) meeting attendees - in addition to other existing information such as PARTSTAT. This now allows you to **confirm or decline invitations to a meeting directly in your calendar software**.
    @@ -72,7 +72,7 @@ Stay tuned: Further advanced features for our Meetings module are planned for up ### Virus scanning functionality with ClamAV (Enterprise add-on) -Another important step towards data security: With OpenProject 13.4, users' uploaded files can be scanned for viruses, using the ClamAV antivirus engine. To do so, a new attachment menu item is created with Antivirus settings. Read more about virus scanning using ClamAV in our [system admin guide](https://www.openproject.org/docs/system-admin-guide/attachments/virus-scanning). +Another important step towards data security: With OpenProject 13.4, users' uploaded files can be scanned for viruses, using the ClamAV antivirus engine. To do so, a new attachment menu item is created with Antivirus settings. Read more about virus scanning using ClamAV in our [system admin guide](../../system-admin-guide/files/attachments/virus-scanning/). ![OpenProject's admin settings for virus scanning with ClamAV](openproject_virus_scanning.png) @@ -161,15 +161,16 @@ A very special thank you goes to our sponsors for features and improvements: Another big thanks goes to our Community members for reporting bugs and helping us identify and provide fixes. Special thanks for reporting and finding bugs go to Andreas H., Diego Liberman, Andreas G, Mario Zeppin, Arved Kampe, and Richard Richter. -We are always thankful for our great [Community](https://www.openproject.org/blog/community-instance/). If you are thinking about contributing to OpenProject yourself, we would like to encourage you to do so! +We are always thankful for our great [Community](https://www.openproject.org/blog/community-instance/). If you are thinking about contributing to OpenProject yourself, we would like to encourage you to do so! ### Translation contributors -An important part is also the translations, for which we thank the following contributors in particular for this release: +An important part is also the translations, for which we thank the following contributors in particular for this release: + - [Syvert Fossdal](https://crowdin.com/profile/syvert), who translated a lot of OpenProject strings into Norwegian - [WilliamfromTW](https://crowdin.com/profile/williamfromtw), who translated to Traditional Chinese - [Tomas S](https://crowdin.com/profile/tomass), who translated to Lithuanian - [Marek Bajon](https://crowdin.com/profile/mbajon), who translated to Polish - [Vlastislav Dockal](https://crowdin.com/profile/vdockal), who translated to Czech -Would you like to help out with translations yourself? Then take a look at our [translation guide](https://www.openproject.org/docs/development/translate-openproject/) and find out exactly how you can contribute. It is very much appreciated! +Would you like to help out with translations yourself? Then take a look at our [translation guide](../../development/translate-openproject/) and find out exactly how you can contribute. It is very much appreciated! diff --git a/docs/release-notes/13-4-1/README.md b/docs/release-notes/13-4-1/README.md index 8b8c6bf3931e..368543a2397f 100644 --- a/docs/release-notes/13-4-1/README.md +++ b/docs/release-notes/13-4-1/README.md @@ -13,23 +13,16 @@ Release date: 2024-03-26 We released [OpenProject 13.4.1](https://community.openproject.org/versions/2035). The release contains several bug fixes and we recommend updating to the newest version. - - ## Bug fixes and changes - - - - Bugfix: Error 500 on project lists after upgrade to 13.4.0 \[[#53570](https://community.openproject.org/wp/53570)\] - Bugfix: PT-BR translation works as PT-PT \[[#53584](https://community.openproject.org/wp/53584)\] - Bugfix: Work Package Table crashes when grouped by integer and sums are displayed \[[#53609](https://community.openproject.org/wp/53609)\] - Bugfix: SettingSeeder rake aborted! when upgrade from 13.3.0 to 13.4.0 \[[#53611](https://community.openproject.org/wp/53611)\] - Bugfix: Internal error (comparison NilClass with String failed) on query 5000 on community \[[#53617](https://community.openproject.org/wp/53617)\] - - +## Contributions -#### Contributions A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to diff --git a/docs/release-notes/13-4-2/README.md b/docs/release-notes/13-4-2/README.md new file mode 100644 index 000000000000..76c0abbb5f08 --- /dev/null +++ b/docs/release-notes/13-4-2/README.md @@ -0,0 +1,26 @@ +--- +title: OpenProject 13.4.2 +sidebar_navigation: + title: 13.4.2 +release_version: 13.4.2 +release_date: 2024-05-22 +--- + +# OpenProject 13.4.2 + +Release date: 2024-05-22 + +We released [OpenProject 13.4.2](https://community.openproject.org/versions/2058). +The release contains several bug fixes and we recommend updating to the newest version. + + + +## Bug fixes and changes + + + + +- Bugfix: Improper escaping of custom field values in cost report \[[#55197](https://community.openproject.org/wp/55197)\] + + + diff --git a/docs/release-notes/14-0-0/README.md b/docs/release-notes/14-0-0/README.md index 279826deb90c..e64a3b5cb49b 100644 --- a/docs/release-notes/14-0-0/README.md +++ b/docs/release-notes/14-0-0/README.md @@ -31,6 +31,7 @@ In version 13.1 we have overhauled our system to handle internal permission chec defined on project or global level, but also on resources like work packages. Therefore, we have introduced new methods to check permissions. The old methods have been marked as deprecated and are now removed in 14.0. Affected methods are: + - `User#allowed_to?` - `User#allowed_to_globally?` - `User#allowed_to_in_project?` @@ -40,7 +41,7 @@ methods. For more information, see [#51212](https://community.openproject.org/wo ### Reduced number of configurable design variables -We have changed the number and naming of the [configurable design variables](https://www.openproject.org/docs/system-admin-guide/design/#advanced-settings). This simplifies the process of setting the desired color scheme for users. It also allows us to get closer to the **Primer design system** in order to benefit from its other modes such as the dark mode or the colorblind mode in the future. +We have changed the number and naming of the [configurable design variables](../../system-admin-guide/design/#advanced-settings). This simplifies the process of setting the desired color scheme for users. It also allows us to get closer to the **Primer design system** in order to benefit from its other modes such as the dark mode or the colorblind mode in the future. The following variables have been changed: @@ -51,7 +52,6 @@ The following variables have been changed: | primary-color-dark | - | Will now be calculated automatically based on the "primary-button-color" | | link-color | accent-color | Is not only used for links, but for all decently highlighted elements (e.g. the selection state in a datepicker).
    The (old) value of "primary-color" was use for this. | - If you have developed a plugin or have custom code that uses these variables, you need to update your code to use the new names. The rest of the variables is unchanged. For more information, see [#53309](https://community.openproject.org/work_packages/53309). @@ -73,19 +73,19 @@ The `available_responsibles` endpoint has been removed from the API. This endpoi There are some major changes in terms of progress reporting for work package hierarchies. The calculation of progress (% Complete) in work package hierarchies is now consistent. This leads to the following important changes: -#### % Complete will be an automatically calculated (non-editable) attribute based on Work. +#### % Complete will be an automatically calculated (non-editable) attribute based on Work In Work-based progress reporting, % Complete will be automatically calculated and can therefore no longer be edited manually. This means that for a work package to have a value for % Complete, both Work and Remaining work are required to be set. To make this link clear and transparent, clicking on any of the three values to modify them will display the following pop-over: ![Work-based progress reporting](progress-work-estimates-workMode.jpg) -#### In status-based progress reporting, Remaining work will be automatically calculated. +#### In status-based progress reporting, Remaining work will be automatically calculated In Status-based progress reporting mode, Work is not a required value. However, if Work is set, Remaining work is automatically calculated. To make this link clear and transparent, clicking on any of the three values to modify them will display the following pop-over: ![Status-based progress reporting](progress-work-estimates-statusMode.jpg) -#### Administrators will be able to exclude certain work packages from hierarchy totals of Work, Remaining work and % Complete. +#### Administrators will be able to exclude certain work packages from hierarchy totals of Work, Remaining work and % Complete Admins are able to exclude specific work packages (e.g., those marked as rejected) from the total sum calculations of their parent. In this case, a small info icon will appear next to excluded values: @@ -107,13 +107,13 @@ Project attributes as well as the sections can be managed in administration/proj ### Streamlined view of custom fields in project lists and project overview -Until now, there have been uncertainties with project-specific custom fields from time to time. This is why the tab 'project' has been removed from the custom fields admin settings pages. Instead, project custom fields are now edited within their own admin settings page. Also, the custom fields widget has been removed. +Until now, there have been uncertainties with project-specific custom fields from time to time. This is why the tab 'project' has been removed from the custom fields admin settings pages. Instead, project custom fields are now edited within their own admin settings page. Also, the custom fields widget has been removed. As described above, *project* custom fields are now called 'Project attributes' and can be shown in a sidebar on the project overview page on a per-project configuration. ### Enhanced Meetings module with new features -OpenProject's [(Dynamic) Meetings](https://www.openproject.org/docs/user-guide/meetings/dynamic-meetings/) have been updated with the following new features: +OpenProject's [(Dynamic) Meetings](../../user-guide/meetings/dynamic-meetings/) have been updated with the following new features: * [Meetings attachments](https://www.openproject.com/docs/user-guide/meetings/dynamic-meetings/#meeting-attachments) are now shown in the bottom section of the right-hand sidebar. You can add them directly to the meeting there and drag and drop them from this section to the Notes section of the agenda items. * When [copying a meeting](https://www.openproject.com/docs/user-guide/meetings/dynamic-meetings/#copy-a-meeting), you can now check a box to choose whether you want to include attachments. @@ -134,7 +134,7 @@ If you copy a project where a file storage has automatically managed project fol * Deactivate the copy option "File Storages: Project folders" – this will copy the file storage, but not the specific project folder. * Deactivate the copy option "File Storages" – this will not copy any file storage. -### Reminder for admins when revoking a project membership to remove shares on work packages +### Reminder for admins when revoking a project membership to remove shares on work packages As of 14.0, admins are asked whether they also want to remove access to [shared work packages](https://www.openproject.com/docs/user-guide/work-packages/share-work-packages/) when removing a project member or group from a project. @@ -168,10 +168,10 @@ Apart from the features mentioned above, there have been a lot of other changes, - Bugfix: +Create button disabled after creating a child work package until reloading the page \[[#49136](https://community.openproject.org/wp/49136)\] - Bugfix: Missing space between avatars and usernames in Administration -> Users \[[#50213](https://community.openproject.org/wp/50213)\] - Bugfix: Taskboard column width stopped working \[[#51416](https://community.openproject.org/wp/51416)\] -- Bugfix: share workpackages - share user can not be selected as assignee/responsible \[[#51551](https://community.openproject.org/wp/51551)\] +- Bugfix: share work packages - share user can not be selected as assignee/responsible \[[#51551](https://community.openproject.org/wp/51551)\] - Bugfix: Double close button on Share modal for mobile \[[#51699](https://community.openproject.org/wp/51699)\] - Bugfix: Odd spacing in Notification and Email Reminder personal setting pages \[[#51772](https://community.openproject.org/wp/51772)\] -- Bugfix: OpenProject behind prefix some assests still loaded from web root \[[#52292](https://community.openproject.org/wp/52292)\] +- Bugfix: OpenProject behind prefix some assets still loaded from web root \[[#52292](https://community.openproject.org/wp/52292)\] - Bugfix: Position of status selector too high after opening the drop down \[[#52669](https://community.openproject.org/wp/52669)\] - Bugfix: Add meaningful flash error message when user cancels OAuth flow on OneDrive/SharePoint \[[#52798](https://community.openproject.org/wp/52798)\] - Bugfix: Waiting modal stuck on network error \[[#53005](https://community.openproject.org/wp/53005)\] @@ -188,7 +188,7 @@ Apart from the features mentioned above, there have been a lot of other changes, - Bugfix: Empty assignee board for user with reader role \[[#53436](https://community.openproject.org/wp/53436)\] - Bugfix: Toolbar buttons too close on user page \[[#53477](https://community.openproject.org/wp/53477)\] - Bugfix: Link on top of the storage should be removed if the read\_files permission is missing when it is a automatically managed project folder. \[[#53484](https://community.openproject.org/wp/53484)\] -- Bugfix: Buttons have the wrong colour in freshly seeded BIM instance \[[#53504](https://community.openproject.org/wp/53504)\] +- Bugfix: Buttons have the wrong color in freshly seeded BIM instance \[[#53504](https://community.openproject.org/wp/53504)\] - Bugfix: Meetings: Remove the "Add notes" item from the dropdown menu when notes already exist \[[#53618](https://community.openproject.org/wp/53618)\] - Bugfix: Macros text should wrap \[[#53644](https://community.openproject.org/wp/53644)\] - Bugfix: iOS zooms in when commenting \[[#53651](https://community.openproject.org/wp/53651)\] @@ -218,7 +218,7 @@ Apart from the features mentioned above, there have been a lot of other changes, - Bugfix: Total Remaining work of parent ticket does not get updated according to children values \[[#54179](https://community.openproject.org/wp/54179)\] - Bugfix: Inconsistent UX with commas for time unit when inputting remaining work or work \[[#54193](https://community.openproject.org/wp/54193)\] - Bugfix: Wording is off for progress calculation input errors \[[#54288](https://community.openproject.org/wp/54288)\] -- Bugfix: Superflous drop-down arrow on %Complete input modal \[[#54290](https://community.openproject.org/wp/54290)\] +- Bugfix: Superfluous drop-down arrow on %Complete input modal \[[#54290](https://community.openproject.org/wp/54290)\] - Bugfix: Non-Parent work package should not show 'Total work' in journal entry \[[#54299](https://community.openproject.org/wp/54299)\] - Bugfix: Rounding is inconsistent on progress calculation modal \[[#54308](https://community.openproject.org/wp/54308)\] - Bugfix: Totals with ∑ 0h should be visible \[[#54309](https://community.openproject.org/wp/54309)\] @@ -282,7 +282,7 @@ Apart from the features mentioned above, there have been a lot of other changes, -#### Contributions +## Contributions A very special thank you goes to our sponsors for features and improvements of this release: @@ -297,4 +297,4 @@ Silas Kropf, Philipp Schulz, Benjamin Rönnau, Mario Haustein, Matt User, Mario Last but not least, we are very grateful for our very engaged translation contributors on Crowdin, who translated quite a few OpenProject strings! This release we would like to highlight user [izzahk](https://crowdin.com/profile/izzahk) who has done an outstanding number of translations for the Malaysian language in recent weeks. -Would you like to help out with translations yourself? Then take a look at our [translation guide](https://www.openproject.org/docs/development/translate-openproject/) and find out exactly how you can contribute. It is very much appreciated! +Would you like to help out with translations yourself? Then take a look at our [translation guide](../../development/translate-openproject/) and find out exactly how you can contribute. It is very much appreciated! diff --git a/docs/release-notes/14-1-0/README.md b/docs/release-notes/14-1-0/README.md new file mode 100644 index 000000000000..5ea8225b3112 --- /dev/null +++ b/docs/release-notes/14-1-0/README.md @@ -0,0 +1,186 @@ +--- +title: OpenProject 14.1.0 +sidebar_navigation: + title: 14.1.0 +release_version: 14.1.0 +release_date: 2024-05-22 +--- + +# OpenProject 14.1.0 + +Release date: 2024-05-22 + +We released [OpenProject 14.1.0](https://community.openproject.org/versions/2030). The release contains several bug fixes and we recommend updating to the newest version. In these Release Notes, we will give an overview of important feature changes. At the end, you will find a complete list of all changes and bug fixes. + +## Important updates and breaking changes + +### Deprecation of Univention app center packages + +We unfortunately can no longer provide the OpenProject app for the Univention app center due to incompatibility of their PostgreSQL version in app center 5.0. They have announced that a newer PostgreSQL version will be available in a newer version of the app center. +This means that we are unable to provide new versions of OpenProject in the Univention app center. The last version available in the app center is OpenProject 13.4.1. + +As OpenProject currently does not provide its own multi-container setup, the app is no longer upgradable. We recommend you switch to a docker- or packaged-based installation instead. Please use the [integrated backup functionality](https://www.openproject.org/docs/system-admin-guide/backup/) to extract a backup from your installation. See the [restoration guide](https://www.openproject.org/docs/installation-and-operations/operation/restoring/) on how to restore this backup to a new installation. + +In the future, we are collaborating with Univention to provide a connector app for OpenProject, allowing you to integrate their IDM solution +into an existing deployed OpenProject application. + +### Removal of all-in-one PostgreSQL exposed port + +In the all-in-one Dockerfile, up until now, both port 80 and 5432 (PostgreSQL database) were exposed by default. +As we are also not exposing other services such as memcached, we removed the PostgreSQL port for consistency. + +If you need to work on the database directly, you can still use the `docker exec -it pg_dump` command to e.g., access pg_dump. + +## Important feature changes + +### PDF export of Gantt view, e.g. for printing (Enterprise add-on) + +It is now possible to export a Gantt view as PDF in the OpenProject Enterprise edition. This allows users to easily print Gantt charts in a nice design. Choose between different paper formats, set the column width, and specify whether the PDF file should display your work packages on a daily, monthly or quarterly basis. + +Please note that we plan to further improve the [PDF export of Gantt view](../../user-guide/gantt-chart/#gantt-chart-pdf-export-enterprise-add-on) in future releases. + +![Export your Gantt view as PDF](openproject-14-1-gantt-pdf-export-figma.png) + +### Favorite projects + +This feature was requested by many in the Community and will be a great benefit, especially for organizations with many projects: OpenProject 14.1 allows you to add projects to favorites so that they can be found more quickly. We [recently gave an overview in our blog](https://www.openproject.org/blog/favorite-projects/) of how exactly you can add projects to favorites or remove them from favorites – and where you can display them. + +![OpenProject dropdown menu showing favorite projects, displayed with yellow stars](openproject-14-1-favorite-projects-overview.shadow.png) + +See our documentation to learn more about [how to mark a project as favorite](../../user-guide/project-overview/#mark-a-project-as-favorite). + +### Advanced features for the Meetings module + +The Meetings module is currently being continuously improved. With OpenProject 14.1.: + +- you can group agenda items with sections, +- notes are open when creating new agenda items, +- and the status now changes to open when you copy a closed meeting. + +![OpenProject's Meetings module, separated in sections](openproject-14-1-meetings-sections-highlighted.png) + +Apart from these features that apply the Meetings module directly, the following changes concerning OpenProject meetings have been made: + +- In work packages, the project name is now shown in the Meetings tab. +- Calendar widgets on the My Page and project overview pages can now show meetings. + +![A calendar widget on a project overview page, now showing upcoming meetings](openproject-14-1-meetings-widget-project-overview.png) + +**Please note**: On the project overview page and on the My page, the "+" button on the top right has been removed. However, new widgets can be added by project admins as usual if you hover at the border of an existing widget and click on the “+” there. + +Read more about [dynamic meetings in OpenProject](../../user-guide/meetings/dynamic-meetings/). + +### Possibility to hide attachments in the Files tab + +Admins now are able to hide the attachment section in the Files tab. This setting can be changed both at an instance and project levels and is particularly useful for projects where users should only upload files via external storage, e.g. Nextcloud. + +To make this possible Attachment and Files Storages settings were moved together under **Files** section, both in the [instance administration](../../system-admin-guide/files/attachments/) and under [project settings](../../user-guide/projects/project-settings/files/). + +![Show attachments setting in OpenProject](openproject-14-1-administration-files.png) + +### File storages module activated by default + +In connection with the feature above, activating file storages integrations was simplified. It is no longer required to active **Files storages** module under project settings. Instead, available file storages are visible under *Project settings > Files > External file storages*, as long as the user has *Manage file storages in project* permission. + +![External file storages under project settings in OpenProject](openproject-14-1-project-settings-files.png) + +### Custom fields of the type Link (URL) + +Users can now create custom field of the type Link (URL). Remember to activate it for your project(s) and specific work package type for it to be displayed. The custom field type Link shows an error message if you type in an invalid URL. + +![Create a custom field of the type Link](openproject-14-1-custom-field-link.png) + +Read more about [custom fields](../../system-admin-guide/custom-fields/). + +### Save a changed sort order of custom project lists + +Custom project lists can now not only be changed in order, but also saved as such. Additionally, you can change your own saved lists and save them again so that you do not have to start from scratch. + +Read more on [project lists](../../user-guide/projects/project-lists/). + +### A "Manage project attributes" button on the project overview page + +With OpenProject 14.0, we released the feature to create a custom set of project attributes grouped in sections on the project overview page. With 14.1, you will additionally have a button to [Manage project attributes](../../user-guide/project-overview/#project-attributes) on the project overview page. + +### OneDrive/SharePoint: A "no permission“ message to file links + +If you use the OneDrive/SharePoint integration, you will now be shown a "no permission" message if you try to access a file for which you lack permission. + + + +## Bug fixes and changes + +Apart from the features mentioned above, there have been a lot of other changes, smaller features and, of course, bug fixes for OpenProject 14.1: + + + + +- Feature: Button to mark favorite projects in the project overview page \[[#24683](https://community.openproject.org/wp/24683)\] +- Feature: Custom fields of type "Link/URL" \[[#26923](https://community.openproject.org/wp/26923)\] +- Feature: Group agenda items with sections \[[#49060](https://community.openproject.org/wp/49060)\] +- Feature: Persist the sort order of project lists \[[#51671](https://community.openproject.org/wp/51671)\] +- Feature: Add "no permission" message to file links using OneDrive/SharePoint \[[#51842](https://community.openproject.org/wp/51842)\] +- Feature: Show and filter favorite projects in the main project selector \[[#52079](https://community.openproject.org/wp/52079)\] +- Feature: Changing a persisted list (only own) \[[#52144](https://community.openproject.org/wp/52144)\] +- Feature: Filter favorite projects in the project list \[[#52881](https://community.openproject.org/wp/52881)\] +- Feature: Widget for the homepage to show favorite projects \[[#52883](https://community.openproject.org/wp/52883)\] +- Feature: Add "Manage project attributes" button to project overview page \[[#53576](https://community.openproject.org/wp/53576)\] +- Feature: Hide attachments in Files tab \[[#53672](https://community.openproject.org/wp/53672)\] +- Feature: Dynamic Meetings: Change status to open when a closed meetings gets copied \[[#54007](https://community.openproject.org/wp/54007)\] +- Feature: Add support for Batches on the JobStatus API \[[#54034](https://community.openproject.org/wp/54034)\] +- Feature: Activate Storage module when a user has "Manage file storages in project" permission \[[#54178](https://community.openproject.org/wp/54178)\] +- Feature: Show project name in meetings tab \[[#54192](https://community.openproject.org/wp/54192)\] +- Feature: Show meetings in My Page / Project overview calendar widgets \[[#54286](https://community.openproject.org/wp/54286)\] +- Feature: PDF export gantt chart \[[#54296](https://community.openproject.org/wp/54296)\] +- Feature: PDF export gantt chart options \[[#54297](https://community.openproject.org/wp/54297)\] +- Feature: Open notes for new agenda items \[[#54347](https://community.openproject.org/wp/54347)\] +- Feature: Move permissions from FILE STORAGES to WORK PACKAGES section \[[#54356](https://community.openproject.org/wp/54356)\] +- Feature: Include new IFC toolbar Octicons \[[#54503](https://community.openproject.org/wp/54503)\] +- Feature: Favor and unfavor projects from the favorite column in the project lists \[[#54541](https://community.openproject.org/wp/54541)\] +- Feature: Show empty state for no favorite project in project selector \[[#54542](https://community.openproject.org/wp/54542)\] +- Feature: Make the Gantt PDF export an EE feature \[[#54965](https://community.openproject.org/wp/54965)\] +- Feature: PDF Gantt Export: work package values in first column \[[#55013](https://community.openproject.org/wp/55013)\] +- Feature: Remove Files module from project modules \[[#55035](https://community.openproject.org/wp/55035)\] +- Bugfix: Users who are not allowed to see hourly rates see planned and booked labor costs in budgets \[[#45834](https://community.openproject.org/wp/45834)\] +- Bugfix: Pages have unnecessary "..." collapsing between 1st and 2nd page \[[#46116](https://community.openproject.org/wp/46116)\] +- Bugfix: Creating new/Editing existing Custom action dialogue fails \[[#48964](https://community.openproject.org/wp/48964)\] +- Bugfix: Misleading error message: IFC upload (file size) \[[#52098](https://community.openproject.org/wp/52098)\] +- Bugfix: OpenProject behind prefix some assests still loaded from web root \[[#52292](https://community.openproject.org/wp/52292)\] +- Bugfix: BIM-Model View - Context Menu/Pop Up in Viewer \[[#52600](https://community.openproject.org/wp/52600)\] +- Bugfix: Inconsistent interpolations in translation files \[[#53466](https://community.openproject.org/wp/53466)\] +- Bugfix: Removing a project custom field stored as a filter in a project list leads to wrong counter value \[[#53585](https://community.openproject.org/wp/53585)\] +- Bugfix: .ics calendar object does not account for daylight savings time. loads incorrectly in MS Outlook \[[#53788](https://community.openproject.org/wp/53788)\] +- Bugfix: Rails.application.routes don't respects OPENPROJECT\_RAILS\_\_RELATIVE\_\_URL\_\_ROOT \[[#54061](https://community.openproject.org/wp/54061)\] +- Bugfix: Language in Email notifications subscribe section UI inconclusive \[[#54127](https://community.openproject.org/wp/54127)\] +- Bugfix: Spacing issues on Primer::PageHeader \[[#54357](https://community.openproject.org/wp/54357)\] +- Bugfix: Set presenter when adding to meeting from work package tab \[[#54380](https://community.openproject.org/wp/54380)\] +- Bugfix: Calendar widget on My page not displaying Meetings in full \[[#54509](https://community.openproject.org/wp/54509)\] +- Bugfix: Favorite star for projects has a yellow outline when in an empty state \[[#54510](https://community.openproject.org/wp/54510)\] +- Bugfix: Archived projects show up as favorite \[[#54513](https://community.openproject.org/wp/54513)\] +- Bugfix: Progress: Custom action to set progress to 100% broken with new progress calculation mode \[[#54727](https://community.openproject.org/wp/54727)\] +- Bugfix: Project favorite not showing in list if only one in subproject \[[#54729](https://community.openproject.org/wp/54729)\] +- Bugfix: Ldap group sync job running only once per day instead of every half hour \[[#54964](https://community.openproject.org/wp/54964)\] +- Bugfix: Migration from 11 to 14 fails due to obsolete migration step \[[#54968](https://community.openproject.org/wp/54968)\] +- Bugfix: PDF Export: change the default paper size to A4 \[[#55002](https://community.openproject.org/wp/55002)\] +- Bugfix: Project overview headers are showing on work package view \[[#55024](https://community.openproject.org/wp/55024)\] +- Bugfix: Large number of CreateDateAlertNotificationJobs delaying background job execution \[[#55101](https://community.openproject.org/wp/55101)\] +- Bugfix: Improper escaping of custom field values in cost report \[[#55199](https://community.openproject.org/wp/55199)\] +- Feature: Favorite projects \[[#52837](https://community.openproject.org/wp/52837)\] + + + + +#### Contributions + +A very special thank you goes to our sponsors for features and improvements of this release: + +* City of Cologne for sponsoring features on project attributes +* Deutsche Bahn for sponsoring the OneDrive/SharePoint integration +* German Federal Ministry of the Interior and Home Affairs (BMI) for sponsoring the features on progress reporting + +Also a big thanks to our Community members for reporting bugs and helping us identify and provide fixes. Special thanks for reporting and finding bugs go to Marc Burk, Silas Kropf, and Hanley Loller. + +Last but not least, we are very grateful for our very engaged translation contributors on Crowdin, who translated quite a few OpenProject strings! This release we would like to highlight user [Syvert](https://crowdin.com/profile/syvert) +who has done an outstanding number of translations for the Norwegian language in recent weeks. + +Would you like to help out with translations yourself? Then take a look at our [translation guide](../../development/translate-openproject/) and find out exactly how you can contribute. It is very much appreciated! diff --git a/docs/release-notes/14-1-0/openproject-14-1-administration-files.png b/docs/release-notes/14-1-0/openproject-14-1-administration-files.png new file mode 100644 index 000000000000..539523d40a6a Binary files /dev/null and b/docs/release-notes/14-1-0/openproject-14-1-administration-files.png differ diff --git a/docs/release-notes/14-1-0/openproject-14-1-custom-field-link.png b/docs/release-notes/14-1-0/openproject-14-1-custom-field-link.png new file mode 100644 index 000000000000..2b51f169621b Binary files /dev/null and b/docs/release-notes/14-1-0/openproject-14-1-custom-field-link.png differ diff --git a/docs/release-notes/14-1-0/openproject-14-1-favorite-projects-overview.shadow.png b/docs/release-notes/14-1-0/openproject-14-1-favorite-projects-overview.shadow.png new file mode 100644 index 000000000000..b775150dc7d5 Binary files /dev/null and b/docs/release-notes/14-1-0/openproject-14-1-favorite-projects-overview.shadow.png differ diff --git a/docs/release-notes/14-1-0/openproject-14-1-gantt-pdf-export-figma.png b/docs/release-notes/14-1-0/openproject-14-1-gantt-pdf-export-figma.png new file mode 100644 index 000000000000..034f2dc30625 Binary files /dev/null and b/docs/release-notes/14-1-0/openproject-14-1-gantt-pdf-export-figma.png differ diff --git a/docs/release-notes/14-1-0/openproject-14-1-meetings-sections-highlighted.png b/docs/release-notes/14-1-0/openproject-14-1-meetings-sections-highlighted.png new file mode 100644 index 000000000000..ba24ca9ab567 Binary files /dev/null and b/docs/release-notes/14-1-0/openproject-14-1-meetings-sections-highlighted.png differ diff --git a/docs/release-notes/14-1-0/openproject-14-1-meetings-widget-project-overview.png b/docs/release-notes/14-1-0/openproject-14-1-meetings-widget-project-overview.png new file mode 100644 index 000000000000..1c286c3c03f8 Binary files /dev/null and b/docs/release-notes/14-1-0/openproject-14-1-meetings-widget-project-overview.png differ diff --git a/docs/release-notes/14-1-0/openproject-14-1-project-settings-files.png b/docs/release-notes/14-1-0/openproject-14-1-project-settings-files.png new file mode 100644 index 000000000000..39f2727427c3 Binary files /dev/null and b/docs/release-notes/14-1-0/openproject-14-1-project-settings-files.png differ diff --git a/docs/release-notes/3/3-0-0/README.md b/docs/release-notes/3/3-0-0/README.md index 02e1a5d21be9..1b5432e5132e 100644 --- a/docs/release-notes/3/3-0-0/README.md +++ b/docs/release-notes/3/3-0-0/README.md @@ -1,85 +1,82 @@ --- - title: OpenProject 3.0.0 - sidebar_navigation: - title: 3.0.0 - release_version: 3.0.0 - release_date: 2014-03-07 +title: OpenProject 3.0.0 +sidebar_navigation: + title: 3.0.0 +release_version: 3.0.0 +release_date: 2014-03-07 --- # OpenProject 3.0.0 ## New Design - - Use of icon fonts - - New header and side navigation - - Contractible side navigation - - New work package form - - Design customization via Themes +- Use of icon fonts +- New header and side navigation +- Contractible side navigation +- New work package form +- Design customization via Themes ## Major Accessibility Improvements - - Contrast changes supported - - Keyboard focus highlighted by blue box - - Keyboard focus order aligned with process order - - Form elements linked to their labels - - Screen reader support for multiple languages (English, German) +- Contrast changes supported +- Keyboard focus highlighted by blue box +- Keyboard focus order aligned with process order +- Form elements linked to their labels +- Screen reader support for multiple languages (English, German) ## Keyboard Shortcuts for Power Users - - Implementation of keyboard shortcuts for power users - - Shortcuts can be accessed by pressing “?” on the keyboard +- Implementation of keyboard shortcuts for power users +- Shortcuts can be accessed by pressing “?” on the keyboard ## Adaptive Timeline Reports - - Issues and planning elements combined to work packages - - Multi project reports - - Filter by project attributes - - Historic planning comparison - - Support of custom fields - - Autocompletion in filter (select2) - - Support for Internet Explorer 11 added (Internet Explorer 8 no - longer supported) - - Performance improvements +- Issues and planning elements combined to work packages +- Multi project reports +- Filter by project attributes +- Historic planning comparison +- Support of custom fields +- Autocompletion in filter (select2) +- Support for Internet Explorer 11 added (Internet Explorer 8 no + longer supported) +- Performance improvements ## Improved Work Package Functionality - - Auto-completion for work packages - - Quick selection for custom queries - - Responsible added to work package summary - - Responsible can be assigned via context menu and bulk edit - - Easier navigation to work packages through shorter URL +- Auto-completion for work packages +- Quick selection for custom queries +- Responsible added to work package summary +- Responsible can be assigned via context menu and bulk edit +- Easier navigation to work packages through shorter URL ## Add work package queries as menu items to sidebar - - Frequently used work package queries can be added to the side - navigation - - Subsequently, query pages can be renamed or deleted +- Frequently used work package queries can be added to the side navigation +- Subsequently, query pages can be renamed or deleted ## Copy projects based on Templates - - New projects can be created based on existing projects / project - templates - - Select different project settings to be copied (e.g. work packages) +- New projects can be created based on existing projects / project templates +- Select different project settings to be copied (e.g. work packages) ## Improved Project Settings - - Improved member configuration - - Improved and extended type configuration +- Improved member configuration +- Improved and extended type configuration ## Additional Account Security Features - - Random passwords - - Stronger passwords through required characters - - Password expiration - - Ban of former passwords - - Automated user blocking after certain number of failed login - attempts - - Automated logout on inactivity +- Random passwords +- Stronger passwords through required characters +- Password expiration +- Ban of former passwords +- Automated user blocking after certain number of failed login + attempts +- Automated logout on inactivity ## Substantial Number of Bug Fixes Many bugs have been fixed with the release of OpenProject 3.0. - ## Migration to Ruby 2.1 and Rails 3.2 diff --git a/docs/release-notes/3/3-0-1/README.md b/docs/release-notes/3/3-0-1/README.md index 021fd84a8bd1..ab1ff6b0bb1e 100644 --- a/docs/release-notes/3/3-0-1/README.md +++ b/docs/release-notes/3/3-0-1/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 3.0.1 - sidebar_navigation: - title: 3.0.1 - release_version: 3.0.1 - release_date: 2014-03-21 +title: OpenProject 3.0.1 +sidebar_navigation: + title: 3.0.1 +release_version: 3.0.1 +release_date: 2014-03-21 --- # OpenProject 3.0.1 @@ -14,4 +14,3 @@ Specifically the error in adding a work package process was fixed, as well as the duplication of file content display. [Read more](https://community.openproject.org/versions/296) - diff --git a/docs/release-notes/3/3-0-11/README.md b/docs/release-notes/3/3-0-11/README.md index cde3912336d8..6c0c8c7d9875 100644 --- a/docs/release-notes/3/3-0-11/README.md +++ b/docs/release-notes/3/3-0-11/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 3.0.11 - sidebar_navigation: - title: 3.0.11 - release_version: 3.0.11 - release_date: 2014-08-06 +title: OpenProject 3.0.11 +sidebar_navigation: + title: 3.0.11 +release_version: 3.0.11 +release_date: 2014-08-06 --- # OpenProject 3.0.11 @@ -33,7 +33,5 @@ of SVN repositories with OpenProject. The same will be allowed for Git repositories with OpenProject 4.0 ([#3708](https://community.openproject.org/work_packages/3708 "Release OpenProject 4.0 (closed)")). -For a complete list of changes, please refer to the +For a complete list of changes, please refer to the [OpenProject 3.0.11 query](https://community.openproject.org/versions/423). - - diff --git a/docs/release-notes/3/3-0-12/README.md b/docs/release-notes/3/3-0-12/README.md index de586f57acf1..6b15e226356b 100644 --- a/docs/release-notes/3/3-0-12/README.md +++ b/docs/release-notes/3/3-0-12/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 3.0.12 - sidebar_navigation: - title: 3.0.12 - release_version: 3.0.12 - release_date: 2014-08-26 +title: OpenProject 3.0.12 +sidebar_navigation: + title: 3.0.12 +release_version: 3.0.12 +release_date: 2014-08-26 --- # OpenProject 3.0.12 @@ -31,7 +31,5 @@ included in 3.0.12: has been fixed. Many thanks to [Björn Blissing](https://github.com/bjornblissing) who reported and fixed this error. -For a complete list of changes, pleas refer to the +For a complete list of changes, pleas refer to the [OpenProject 3.0.12 query](https://community.openproject.org/versions/450). - - diff --git a/docs/release-notes/3/3-0-13/README.md b/docs/release-notes/3/3-0-13/README.md index c0d615b29d93..07f0c9f92aa2 100644 --- a/docs/release-notes/3/3-0-13/README.md +++ b/docs/release-notes/3/3-0-13/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 3.0.13 - sidebar_navigation: - title: 3.0.13 - release_version: 3.0.13 - release_date: 2014-09-30 +title: OpenProject 3.0.13 +sidebar_navigation: + title: 3.0.13 +release_version: 3.0.13 +release_date: 2014-09-30 --- # OpenProject 3.0.13 @@ -27,7 +27,5 @@ An error preventing to copy projects in OpenProject persists in 3.0.13 ([#15706](https://community.openproject.org/work_packages/15706 "[Copy project] Projects cannot be copied (formerly: Subprojects are not copied correctly and the ... (closed)")), it will be addressed in the next patch release (3.0.14). -For a complete list of changes, please refer to the +For a complete list of changes, please refer to the [OpenProject 3.0.13 query](https://community.openproject.org/versions/466). - - diff --git a/docs/release-notes/3/3-0-14/README.md b/docs/release-notes/3/3-0-14/README.md index 57cadb2c9c37..2930ba31b3cc 100644 --- a/docs/release-notes/3/3-0-14/README.md +++ b/docs/release-notes/3/3-0-14/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 3.0.14 - sidebar_navigation: - title: 3.0.14 - release_version: 3.0.14 - release_date: 2014-10-28 +title: OpenProject 3.0.14 +sidebar_navigation: + title: 3.0.14 +release_version: 3.0.14 +release_date: 2014-10-28 --- # OpenProject 3.0.14 @@ -21,7 +21,5 @@ displayed twice ([#16169](https://community.openproject.org/work_packages/16169 "Viewing content in repository or attachments shows up twice (closed)")). This has been reported and fixed by [Björn Blissing](https://github.com/bjornblissing). Many thanks! -For a complete list of changes, please refer to the +For a complete list of changes, please refer to the [OpenProject 3.0.14 query](https://community.openproject.org/versions/490). - - diff --git a/docs/release-notes/3/3-0-15/README.md b/docs/release-notes/3/3-0-15/README.md index e598a59bb5f6..2d2852b73d23 100644 --- a/docs/release-notes/3/3-0-15/README.md +++ b/docs/release-notes/3/3-0-15/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 3.0.15 - sidebar_navigation: - title: 3.0.15 - release_version: 3.0.15 - release_date: 2014-11-05 +title: OpenProject 3.0.15 +sidebar_navigation: + title: 3.0.15 +release_version: 3.0.15 +release_date: 2014-11-05 --- # OpenProject 3.0.15 @@ -18,7 +18,5 @@ Furthermore, a bug which prevented the timelines macro from working properly has been fixed ([#17010](https://community.openproject.org/work_packages/17010 "Timeline controls separate from rest of timeline when timeline embedded in wiki page (closed)")). -For a complete list of changes, please refer to the +For a complete list of changes, please refer to the [OpenProject 3.0.15 query](https://community.openproject.org/versions/503). - - diff --git a/docs/release-notes/3/3-0-16/README.md b/docs/release-notes/3/3-0-16/README.md index ac8cd5306918..f31a37bdbbcc 100644 --- a/docs/release-notes/3/3-0-16/README.md +++ b/docs/release-notes/3/3-0-16/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 3.0.16 - sidebar_navigation: - title: 3.0.16 - release_version: 3.0.16 - release_date: 2014-11-20 +title: OpenProject 3.0.16 +sidebar_navigation: + title: 3.0.16 +release_version: 3.0.16 +release_date: 2014-11-20 --- # OpenProject 3.0.16 @@ -25,9 +25,7 @@ not applied properly. This has been fixed with OpenProject 3.0.16 A big thanks goes to everyone involved in fixing and reporting those bugs! -For a complete list of changes, please refer to the -[Changelog v3.0.16](https://community.openproject.org/versions/544) -or have a look at +For a complete list of changes, please refer to the +[Changelog v3.0.16](https://community.openproject.org/versions/544) +or have a look at [Github](https://github.com/opf/openproject/tree/v3.0.16). - - diff --git a/docs/release-notes/3/3-0-17/README.md b/docs/release-notes/3/3-0-17/README.md index 1053f27f01bf..d66c972794cb 100644 --- a/docs/release-notes/3/3-0-17/README.md +++ b/docs/release-notes/3/3-0-17/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 3.0.17 - sidebar_navigation: - title: 3.0.17 - release_version: 3.0.17 - release_date: 2015-01-07 +title: OpenProject 3.0.17 +sidebar_navigation: + title: 3.0.17 +release_version: 3.0.17 +release_date: 2015-01-07 --- # OpenProject 3.0.17 @@ -23,7 +23,7 @@ Additionally, several gems have been updated Thanks to [marutosi](https://github.com/marutosi) for creating pull requests. -For a complete list of changes, please refer to the -[Changelog v3.0.17](https://community.openproject.org/versions/545) -or take a look at +For a complete list of changes, please refer to the +[Changelog v3.0.17](https://community.openproject.org/versions/545) +or take a look at [GitHub](https://github.com/opf/openproject/tree/v3.0.17). diff --git a/docs/release-notes/3/3-0-3/README.md b/docs/release-notes/3/3-0-3/README.md index 077715105c3f..23c0112ab931 100644 --- a/docs/release-notes/3/3-0-3/README.md +++ b/docs/release-notes/3/3-0-3/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 3.0.3 - sidebar_navigation: - title: 3.0.3 - release_version: 3.0.3 - release_date: 2014-05-07 +title: OpenProject 3.0.3 +sidebar_navigation: + title: 3.0.3 +release_version: 3.0.3 +release_date: 2014-05-07 --- # OpenProject 3.0.3 @@ -23,17 +23,17 @@ involved tricking OpenProject with a faked MIME type when uploading attachments. In conclusion it is strongly recommended to upgrade your 3.0 based -deployments to version 3.0.3 as soon as possible. The +deployments to version 3.0.3 as soon as possible. The [OpenProject 3.0.3 tag](https://github.com/opf/openproject/tree/v3.0.3) and the [`dev`](https://github.com/opf/openproject/tree/dev) branches both include the security fixes. -## Bug Fixes: +## Bug Fixes There was a regression in MRI Ruby 2.1.1 that changed some return values of Ruby’s internal class `Hash` and led to several failing tests. This change is intended for Ruby 2.2 but due to their semantic versioning -scheme shouldn’t have been incorporated in 2.1.1. Check out +scheme shouldn’t have been incorporated in 2.1.1. Check out [this blog post](https://www.ruby-lang.org/en/news/2014/03/10/regression-of-hash-reject-in-ruby-2-1-1/) if you want to know more about it. @@ -53,5 +53,3 @@ if you want to know how to do that exactly. And here is the full changelog [3.0.3](https://community.openproject.org/versions/313) - - diff --git a/docs/release-notes/3/3-0-4/README.md b/docs/release-notes/3/3-0-4/README.md index 5f73a60e6d04..bad439375c55 100644 --- a/docs/release-notes/3/3-0-4/README.md +++ b/docs/release-notes/3/3-0-4/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 3.0.4 - sidebar_navigation: - title: 3.0.4 - release_version: 3.0.4 - release_date: 2014-06-17 +title: OpenProject 3.0.4 +sidebar_navigation: + title: 3.0.4 +release_version: 3.0.4 +release_date: 2014-06-17 --- # OpenProject 3.0.4 @@ -27,5 +27,5 @@ the installation should work. There is no need to change the `config.ru` file or other configurations anymore. Regardless of whether you are using passenger or any other application server. -For a full list of fixes we made please see the +For a full list of fixes we made please see the [changelog v 3.0.4](https://community.openproject.org/versions/316) diff --git a/docs/release-notes/3/3-0-8/README.md b/docs/release-notes/3/3-0-8/README.md index 093b974c6a94..6b3290bb3b64 100644 --- a/docs/release-notes/3/3-0-8/README.md +++ b/docs/release-notes/3/3-0-8/README.md @@ -1,15 +1,15 @@ --- - title: OpenProject 3.0.8 - sidebar_navigation: - title: 3.0.8 - release_version: 3.0.8 - release_date: 2014-07-04 +title: OpenProject 3.0.8 +sidebar_navigation: + title: 3.0.8 +release_version: 3.0.8 +release_date: 2014-07-04 --- # OpenProject 3.0.8 -The -[3.0.8 bugfix release of OpenProject](https://github.com/opf/openproject/tree/v3.0.8) +The +[3.0.8 bugfix release of OpenProject](https://github.com/opf/openproject/tree/v3.0.8) addresses a variety of bugs from filtering ([#7169](https://community.openproject.org/work_packages/7169 "Filtering for assignee's role returns wrong results (closed)")) to accessibility @@ -18,7 +18,7 @@ and performance limitations when copying projects ([#12299](https://community.openproject.org/work_packages/12299 "App server blocked when copying large project (closed)")). For the later, delayed job is employed to ensure that the app server will still answer while large projects are copied. Please bear in mind -that for this to happen you need to have +that for this to happen you need to have [delayed job running](https://github.com/collectiveidea/delayed_job). For a complete list of changes to OpenProject, please refer to the @@ -38,11 +38,9 @@ doing this is to follow the stable branches for every plugin and OpenProject. We are aware that this change in versioning has some weird side effects. -The most noticeable is the +The most noticeable is the [costs plugin](https://github.com/finnlabs/openproject-costs) falling back from version 5.0.4 to 3.0.8. While this might be confusing, we are convinced that keeping versions in lockstep will convey the intended compatibility much better than every other mechanism. - - diff --git a/docs/release-notes/3/README.md b/docs/release-notes/3/README.md index bda608e72199..fd2f63bfabbb 100644 --- a/docs/release-notes/3/README.md +++ b/docs/release-notes/3/README.md @@ -5,7 +5,7 @@ release_date: 2014-10-08 title: OpenProject Version 3 Release Notes --- -# OpenProject Version 3 Release Notes +# OpenProject Version 3 Release Notes | Version | Release date | |-------------------------------|--------------| diff --git a/docs/release-notes/4/4-0-0/README.md b/docs/release-notes/4/4-0-0/README.md index 7a3f56849f38..71567a444477 100644 --- a/docs/release-notes/4/4-0-0/README.md +++ b/docs/release-notes/4/4-0-0/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.0.0 - sidebar_navigation: - title: 4.0.0 - release_version: 4.0.0 - release_date: 2014-11-06 +title: OpenProject 4.0.0 +sidebar_navigation: + title: 4.0.0 +release_version: 4.0.0 +release_date: 2014-11-06 --- # OpenProject 4.0.0 @@ -110,4 +110,4 @@ page. ## Substantial Number of Bug Fixes A large number of bugs have been fixed with the release of OpenProject -4.0. \ No newline at end of file +4.0. diff --git a/docs/release-notes/4/4-0-1/README.md b/docs/release-notes/4/4-0-1/README.md index e09b710268b6..4191d55742d2 100644 --- a/docs/release-notes/4/4-0-1/README.md +++ b/docs/release-notes/4/4-0-1/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.0.1 - sidebar_navigation: - title: 4.0.1 - release_version: 4.0.1 - release_date: 2014-11-05 +title: OpenProject 4.0.1 +sidebar_navigation: + title: 4.0.1 +release_version: 4.0.1 +release_date: 2014-11-05 --- # OpenProject 4.0.1 @@ -17,10 +17,8 @@ We advise anyone to update their OpenProject installation. Packager support for easier installation has been extended to also include RHEL, CentOS and Ubuntu ([#17165](https://community.openproject.org/work_packages/17165 "Packaged based installer for RHEL, CentOS and Ubuntu (closed)")). -Find the current packager version of OpenProject here: +Find the current packager version of OpenProject here: [OpenProject Packager installation](https://packager.io/gh/opf/openproject). -For a complete list of changes, please refer to the +For a complete list of changes, please refer to the [OpenProject 4.0.1 query](https://community.openproject.org/versions/530). - - diff --git a/docs/release-notes/4/4-0-10/README.md b/docs/release-notes/4/4-0-10/README.md index 078a877124d6..ed10d37ea0f3 100644 --- a/docs/release-notes/4/4-0-10/README.md +++ b/docs/release-notes/4/4-0-10/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.0.10 - sidebar_navigation: - title: 4.0.10 - release_version: 4.0.10 - release_date: 2015-04-29 +title: OpenProject 4.0.10 +sidebar_navigation: + title: 4.0.10 +release_version: 4.0.10 +release_date: 2015-04-29 --- # OpenProject 4.0.10 @@ -17,8 +17,7 @@ work package table. This error has been fixed with OpenProject 4.0.10 ([#19809](https://community.openproject.org/work_packages/19809 "#19809")). -For further information on the release, please refer to the -[Changelog v.4.0.10](https://community.openproject.org/versions/704 "Changelog v.4.0.10") +For further information on the release, please refer to the +[Changelog v.4.0.10](https://community.openproject.org/versions/704 "Changelog v.4.0.10") or take a look at [GitHub](https://github.com/opf/openproject/tree/v4.0.10 "GitHub"). - diff --git a/docs/release-notes/4/4-0-11/README.md b/docs/release-notes/4/4-0-11/README.md index 84c555b4488e..f5a35f79e492 100644 --- a/docs/release-notes/4/4-0-11/README.md +++ b/docs/release-notes/4/4-0-11/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.0.11 - sidebar_navigation: - title: 4.0.11 - release_version: 4.0.11 - release_date: 2015-06-17 +title: OpenProject 4.0.11 +sidebar_navigation: + title: 4.0.11 +release_version: 4.0.11 +release_date: 2015-06-17 --- # OpenProject 4.0.11 @@ -16,11 +16,7 @@ Ruby-on-Rails](https://weblog.rubyonrails.org/2015/6/16/Rails-3-2-22-4-1-11-and- which is an important part of the software stack used by OpenProject ([#20469](https://community.openproject.org/work_packages/20469)). -For further information on the release, please refer to the +For further information on the release, please refer to the [Changelog v.4.0.11](https://community.openproject.org/versions/732) -or take a look at +or take a look at [GitHub](https://github.com/opf/openproject/tree/v4.0.11). - - - - diff --git a/docs/release-notes/4/4-0-12/README.md b/docs/release-notes/4/4-0-12/README.md index b3e47df16c82..e6f584ebe100 100644 --- a/docs/release-notes/4/4-0-12/README.md +++ b/docs/release-notes/4/4-0-12/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.0.12 - sidebar_navigation: - title: 4.0.12 - release_version: 4.0.12 - release_date: 2015-07-31 +title: OpenProject 4.0.12 +sidebar_navigation: + title: 4.0.12 +release_version: 4.0.12 +release_date: 2015-07-31 --- # OpenProject 4.0.12 @@ -18,11 +18,7 @@ The following bugs have been fixed: - In addition, a security bug has been fixed which potentially enabled XSS attacks. -For further information on the release, please refer to the -[Changelog v.4.0.12](https://community.openproject.org/versions/756) -or take a look at +For further information on the release, please refer to the +[Changelog v.4.0.12](https://community.openproject.org/versions/756) +or take a look at [GitHub](https://github.com/opf/openproject/tree/v4.0.12). - - - - diff --git a/docs/release-notes/4/4-0-2/README.md b/docs/release-notes/4/4-0-2/README.md index dc4c12179dca..1c4f16fe7ca3 100644 --- a/docs/release-notes/4/4-0-2/README.md +++ b/docs/release-notes/4/4-0-2/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.0.2 - sidebar_navigation: - title: 4.0.2 - release_version: 4.0.2 - release_date: 2014-11-20 +title: OpenProject 4.0.2 +sidebar_navigation: + title: 4.0.2 +release_version: 4.0.2 +release_date: 2014-11-20 --- # OpenProject 4.0.2 @@ -33,7 +33,7 @@ In addition, several bugs have been fixed: A big thanks to everyone involved in fixing and reporting those bugs! -For a complete list of changes, please refer to the -[Changelog v4.0.2](https://community.openproject.org/versions/532) +For a complete list of changes, please refer to the +[Changelog v4.0.2](https://community.openproject.org/versions/532) or to [Github](https://github.com/opf/openproject/tree/v4.0.2). diff --git a/docs/release-notes/4/4-0-3/README.md b/docs/release-notes/4/4-0-3/README.md index 3e594f4a9517..3553f9c97bc6 100644 --- a/docs/release-notes/4/4-0-3/README.md +++ b/docs/release-notes/4/4-0-3/README.md @@ -1,45 +1,43 @@ --- - title: OpenProject 4.0.3 - sidebar_navigation: - title: 4.0.3 - release_version: 4.0.3 - release_date: 2014-12-11 +title: OpenProject 4.0.3 +sidebar_navigation: + title: 4.0.3 +release_version: 4.0.3 +release_date: 2014-12-11 --- -## OpenProject 4.0.3 +# OpenProject 4.0.3 OpenProject 4.0.3 fixes several bugs relating to the work package table. In addition, font errors in Chrome have been addressed. - - Under some circumstances no text was displayed when using Chrome. - This error has been fixed - ([#17567](https://community.openproject.org/work_packages/17567 "No text rendered at all on some versions of Chrome (closed)")) - - Custom fields of type user and version are now properly displayed in - the work package table - ([#17660](https://community.openproject.org/work_packages/17660 "Missing user links in work package list for custom fields of type user (closed)"), - [#17630](https://community.openproject.org/work_packages/17630 "Custom values for CF of type version not properly displayed in work package list (closed)")) - - Wrong error messages when using queries have been addressed - ([#17572](https://community.openproject.org/work_packages/17572 "Error message \"Unable to retrieve query\" wrongly displayed when changing WP attributes in query (closed)")) - - It is now possible to remove grouping options from queries which was - not possible before - ([#17570](https://community.openproject.org/work_packages/17570 "Removing grouping not saved on existing queries (closed)")) - - Errors occurring in subfolder installations of OpenProject have been - resolved - ([#17566](https://community.openproject.org/work_packages/17566 "Parent change via wp-detail view stuck at loading in subfolder installation (closed)"), - [#17564](https://community.openproject.org/work_packages/17564 "Export function throws \"object not found\" error when used in subfolder installation (closed)")) - - It is possible again to display multiple timelines in a wiki page - (by using a macro) - ([#17568](https://community.openproject.org/work_packages/17568 "Not possible to display more than one timeline via macro in wiki (closed)")) +- Under some circumstances no text was displayed when using Chrome. + This error has been fixed + ([#17567](https://community.openproject.org/work_packages/17567 "No text rendered at all on some versions of Chrome (closed)")) +- Custom fields of type user and version are now properly displayed in + the work package table + ([#17660](https://community.openproject.org/work_packages/17660 "Missing user links in work package list for custom fields of type user (closed)"), + [#17630](https://community.openproject.org/work_packages/17630 "Custom values for CF of type version not properly displayed in work package list (closed)")) +- Wrong error messages when using queries have been addressed + ([#17572](https://community.openproject.org/work_packages/17572 "Error message \"Unable to retrieve query\" wrongly displayed when changing WP attributes in query (closed)")) +- It is now possible to remove grouping options from queries which was + not possible before + ([#17570](https://community.openproject.org/work_packages/17570 "Removing grouping not saved on existing queries (closed)")) +- Errors occurring in subfolder installations of OpenProject have been + resolved + ([#17566](https://community.openproject.org/work_packages/17566 "Parent change via wp-detail view stuck at loading in subfolder installation (closed)"), + [#17564](https://community.openproject.org/work_packages/17564 "Export function throws \"object not found\" error when used in subfolder installation (closed)")) +- It is possible again to display multiple timelines in a wiki page + (by using a macro) + ([#17568](https://community.openproject.org/work_packages/17568 "Not possible to display more than one timeline via macro in wiki (closed)")) In addition, there has been a small change to the backlogs plugin: - - The function “Copy tasks” has been renamed to “Copy work packages” - when duplicating work packages with children - ([#17602](https://community.openproject.org/work_packages/17602 "Rename \"Copy tasks\" to \"Copy work packages\" on copy of work package (with Backlogs enabled) (closed)")). +- The function “Copy tasks” has been renamed to “Copy work packages” + when duplicating work packages with children + ([#17602](https://community.openproject.org/work_packages/17602 "Rename \"Copy tasks\" to \"Copy work packages\" on copy of work package (with Backlogs enabled) (closed)")). ## List of changes -For a complete list of changes, please refer to the +For a complete list of changes, please refer to the [Changelog v4.0.3](https://community.openproject.org/versions/543). - - diff --git a/docs/release-notes/4/4-0-4/README.md b/docs/release-notes/4/4-0-4/README.md index 228584af9298..3493ae01a8d7 100644 --- a/docs/release-notes/4/4-0-4/README.md +++ b/docs/release-notes/4/4-0-4/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.0.4 - sidebar_navigation: - title: 4.0.4 - release_version: 4.0.4 - release_date: 2014-12-11 +title: OpenProject 4.0.4 +sidebar_navigation: + title: 4.0.4 +release_version: 4.0.4 +release_date: 2014-12-11 --- # OpenProject 4.0.4 @@ -21,6 +21,5 @@ OpenProject 4.0.4. ## List of changes -For a complete list of changes, please refer to the +For a complete list of changes, please refer to the [Changelog v.4.0.4](https://community.openproject.org/versions/559). - diff --git a/docs/release-notes/4/4-0-5/README.md b/docs/release-notes/4/4-0-5/README.md index 015b66a3296d..198a010f7869 100644 --- a/docs/release-notes/4/4-0-5/README.md +++ b/docs/release-notes/4/4-0-5/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.0.5 - sidebar_navigation: - title: 4.0.5 - release_version: 4.0.5 - release_date: 2015-01-07 +title: OpenProject 4.0.5 +sidebar_navigation: + title: 4.0.5 +release_version: 4.0.5 +release_date: 2015-01-07 --- # OpenProject 4.0.5 @@ -39,8 +39,7 @@ repository): In the Translations plugin an error was fixed which caused translations in the work package table not to be displayed properly ([#17944](https://community.openproject.org/work_packages/17944 "Missing js files added (closed)")). -For a complete list of changes, please refer to the -[Changelog v4.0.5](https://community.openproject.org/versions/566) +For a complete list of changes, please refer to the +[Changelog v4.0.5](https://community.openproject.org/versions/566) or take a look at [GitHub](https://github.com/opf/openproject/tree/v4.0.5). - diff --git a/docs/release-notes/4/4-0-6/README.md b/docs/release-notes/4/4-0-6/README.md index 1b8f04f6d9d8..e21c70d10abc 100644 --- a/docs/release-notes/4/4-0-6/README.md +++ b/docs/release-notes/4/4-0-6/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.0.6 - sidebar_navigation: - title: 4.0.6 - release_version: 4.0.6 - release_date: 2015-01-28 +title: OpenProject 4.0.6 +sidebar_navigation: + title: 4.0.6 +release_version: 4.0.6 +release_date: 2015-01-28 --- # OpenProject 4.0.6 @@ -18,9 +18,7 @@ With OpenProject 4.0.6, a fix has been introduced which addresses this problem ([#8753](https://community.openproject.org/work_packages/8753 "#8753")). -To get an overview of the new version, please refer to the +To get an overview of the new version, please refer to the [Changelog v.4.0.6](https://community.openproject.org/versions/592 "Changelog v4.0.6") or take a look at [GitHub](https://github.com/opf/openproject/tree/v4.0.6 "GitHub"). - - diff --git a/docs/release-notes/4/4-0-7/README.md b/docs/release-notes/4/4-0-7/README.md index f8cf2e00bf54..3ac7911951e9 100644 --- a/docs/release-notes/4/4-0-7/README.md +++ b/docs/release-notes/4/4-0-7/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.0.7 - sidebar_navigation: - title: 4.0.7 - release_version: 4.0.7 - release_date: 2015-02-18 +title: OpenProject 4.0.7 +sidebar_navigation: + title: 4.0.7 +release_version: 4.0.7 +release_date: 2015-02-18 --- @@ -37,4 +37,3 @@ To get an overview of the new version, please refer to the [Changelog v.4.0.7](https://community.openproject.org/versions/602 "Changelog v.4.0.7") or take a look at [GitHub](https://github.com/opf/openproject/tree/v4.0.7 "GitHub"). - diff --git a/docs/release-notes/4/4-0-8/README.md b/docs/release-notes/4/4-0-8/README.md index f29ca5e3926f..3c20d152d7ee 100644 --- a/docs/release-notes/4/4-0-8/README.md +++ b/docs/release-notes/4/4-0-8/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.0.8 - sidebar_navigation: - title: 4.0.8 - release_version: 4.0.8 - release_date: 2015-02-25 +title: OpenProject 4.0.8 +sidebar_navigation: + title: 4.0.8 +release_version: 4.0.8 +release_date: 2015-02-25 --- # OpenProject 4.0.8 @@ -20,9 +20,7 @@ projects. Since this error significantly reduced the usability, it has been fixed in OpenProject 4.0.8. ([#18889](https://community.openproject.org/work_packages/18889 "#18889")). -To get an overview of the new version, please refer to the +To get an overview of the new version, please refer to the [Changelog v.4.0.8](https://community.openproject.org/versions/615 "Changelog v.4.0.8") or take a look at [GitHub](https://github.com/opf/openproject/tree/v4.0.8 "GitHub OpenProject 4.0.8"). - - diff --git a/docs/release-notes/4/4-0-9/README.md b/docs/release-notes/4/4-0-9/README.md index ae5aa10197a3..1275db398fd5 100644 --- a/docs/release-notes/4/4-0-9/README.md +++ b/docs/release-notes/4/4-0-9/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.0.9 - sidebar_navigation: - title: 4.0.9 - release_version: 4.0.9 - release_date: 2015-03-25 +title: OpenProject 4.0.9 +sidebar_navigation: + title: 4.0.9 +release_version: 4.0.9 +release_date: 2015-03-25 --- # OpenProject 4.0.9 @@ -15,7 +15,7 @@ installation. For details on the security bug fix, please have a look at the following work package: [#19243](https://community.openproject.org/work_packages/19243 "#19243"). -This error also occurred temporarily on the +This error also occurred temporarily on the [OpenProject demo environments](https://start.openproject.com/ "OpenProject demo environments"). However, login information has not been affected by this error. @@ -26,9 +26,7 @@ error when the notification could not be delivered to one or several of the recipients ([#19263](https://community.openproject.org/work_packages/19263 "#19263")). -For further information on the release, please refer to the -[Changelog v.4.0.9](https://github.com/opf/openproject/releases/tag/v4.0.9 "Changelog version 4.0.9") -or take a look at +For further information on the release, please refer to the +[Changelog v.4.0.9](https://github.com/opf/openproject/releases/tag/v4.0.9 "Changelog version 4.0.9") +or take a look at [GitHub](https://github.com/opf/openproject/tree/v4.0.9 "GitHub"). - - diff --git a/docs/release-notes/4/4-1-0/README.md b/docs/release-notes/4/4-1-0/README.md index 87f91e4730f2..b7699fa44972 100644 --- a/docs/release-notes/4/4-1-0/README.md +++ b/docs/release-notes/4/4-1-0/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.1.0 - sidebar_navigation: - title: 4.1.0 - release_version: 4.1.0 - release_date: 2015-05-21 +title: OpenProject 4.1.0 +sidebar_navigation: + title: 4.1.0 +release_version: 4.1.0 +release_date: 2015-05-21 --- # OpenProject 4.1.0 diff --git a/docs/release-notes/4/4-1-1/README.md b/docs/release-notes/4/4-1-1/README.md index 1537936ba3a9..b9d3916e340d 100644 --- a/docs/release-notes/4/4-1-1/README.md +++ b/docs/release-notes/4/4-1-1/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.1.1 - sidebar_navigation: - title: 4.1.1 - release_version: 4.1.1 - release_date: 2015-05-26 +title: OpenProject 4.1.1 +sidebar_navigation: + title: 4.1.1 +release_version: 4.1.1 +release_date: 2015-05-26 --- # OpenProject 4.1.1 @@ -20,9 +20,7 @@ Additionally, the width for the column selection screen on the work package page has been increased ([#20095](https://community.openproject.org/work_packages/20095)). -For further information on the release, please refer to the -[Changelog v.4.1.1](https://community.openproject.org/versions/714 "Changelog v.4.0.10") +For further information on the release, please refer to the +[Changelog v.4.1.1](https://community.openproject.org/versions/714 "Changelog v.4.0.10") or take a look at [GitHub](https://github.com/opf/openproject/tree/v4.1.1 "GitHub"). - - diff --git a/docs/release-notes/4/4-1-2/README.md b/docs/release-notes/4/4-1-2/README.md index 0655bac1cb71..e227eb2bc291 100644 --- a/docs/release-notes/4/4-1-2/README.md +++ b/docs/release-notes/4/4-1-2/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.1.2 - sidebar_navigation: - title: 4.1.2 - release_version: 4.1.2 - release_date: 2015-06-11 +title: OpenProject 4.1.2 +sidebar_navigation: + title: 4.1.2 +release_version: 4.1.2 +release_date: 2015-06-11 --- @@ -32,10 +32,10 @@ We strongly recommend to upgrade to the current version. is working properly again with OpenProject 4.1.2 ([#20316](https://community.openproject.org/work_packages/20316)). - Additional a number of design errors have been fixed - ([#20305](https://community.openproject.org/work_packages/20305), + ([#20305](https://community.openproject.org/work_packages/20305), [#20306](https://community.openproject.org/work_packages/20306), [#20308](https://community.openproject.org/work_packages/20308), - [#20309](https://community.openproject.org/work_packages/20309), + [#20309](https://community.openproject.org/work_packages/20309), [#20317](https://community.openproject.org/work_packages/20317), [#20313](https://community.openproject.org/work_packages/20313)). @@ -60,12 +60,7 @@ have been updated - In OpenProject 4.1.1 it was not possible to delete meetings. This feature has been fixed ([#20149](https://community.openproject.org/work_packages/20149)). - -For further information on the release, please refer to the -[Changelog v.4.1.2](https://community.openproject.org/versions/726) +For further information on the release, please refer to the +[Changelog v.4.1.2](https://community.openproject.org/versions/726) or take a look at [GitHub](https://github.com/opf/openproject/tree/v4.1.2). - - - - diff --git a/docs/release-notes/4/4-1-3/README.md b/docs/release-notes/4/4-1-3/README.md index a47f5ff76187..0c0465f05bb9 100644 --- a/docs/release-notes/4/4-1-3/README.md +++ b/docs/release-notes/4/4-1-3/README.md @@ -1,14 +1,14 @@ --- - title: OpenProject 4.1.3 - sidebar_navigation: - title: 4.1.3 - release_version: 4.1.3 - release_date: 2015-06-17 +title: OpenProject 4.1.3 +sidebar_navigation: + title: 4.1.3 +release_version: 4.1.3 +release_date: 2015-06-17 --- # OpenProject 4.1.3 -OpenProject 4.1.3 contains a +OpenProject 4.1.3 contains a [security fix for Ruby-on-Rails](https://weblog.rubyonrails.org/2015/6/16/Rails-3-2-22-4-1-11-and-4-2-2-have-been-released-and-more/) which is an important part of the software stack used by OpenProject ([#20470](https://community.openproject.org/work_packages/20470)). @@ -28,8 +28,6 @@ Additionally, the styling of the activities section on the details pane has been updated ([#19788](https://community.openproject.org/work_packages/19788)). -For further information on the release, please refer to the -[Changelog v.4.1.3](https://community.openproject.org/versions/733) +For further information on the release, please refer to the +[Changelog v.4.1.3](https://community.openproject.org/versions/733) or take a look at [GitHub](https://github.com/opf/openproject/tree/v4.1.3). - - diff --git a/docs/release-notes/4/4-1-4/README.md b/docs/release-notes/4/4-1-4/README.md index e709cdf5d1fa..4c065c9a436d 100644 --- a/docs/release-notes/4/4-1-4/README.md +++ b/docs/release-notes/4/4-1-4/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.1.4 - sidebar_navigation: - title: 4.1.4 - release_version: 4.1.4 - release_date: 2015-07-31 +title: OpenProject 4.1.4 +sidebar_navigation: + title: 4.1.4 +release_version: 4.1.4 +release_date: 2015-07-31 --- # OpenProject 4.1.4 @@ -18,7 +18,7 @@ The following bugs have been fixed: - In addition, a security bug has been fixed which potentially enabled XSS attacks. -For further information on the release, please refer to the -[Changelog v.4.1.4](https://community.openproject.org/versions/755) -or take a look at +For further information on the release, please refer to the +[Changelog v.4.1.4](https://community.openproject.org/versions/755) +or take a look at [GitHub](https://github.com/opf/openproject/tree/v4.1.4). diff --git a/docs/release-notes/4/4-2-0/README.md b/docs/release-notes/4/4-2-0/README.md index 6986d3c1ef94..74f5822f6715 100644 --- a/docs/release-notes/4/4-2-0/README.md +++ b/docs/release-notes/4/4-2-0/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.2.0 - sidebar_navigation: - title: 4.2.0 - release_version: 4.2.0 - release_date: 2015-07-07 +title: OpenProject 4.2.0 +sidebar_navigation: + title: 4.2.0 +release_version: 4.2.0 +release_date: 2015-07-07 --- # OpenProject 4.2.0 @@ -49,8 +49,6 @@ administration navigation The option “Spent time” has been renamed “Time sheet” ([#20219](https://community.openproject.org/work_packages/20219)). - - ## Improved design OpenProject 4.2 contains various design improvements to provide a better diff --git a/docs/release-notes/4/4-2-1/README.md b/docs/release-notes/4/4-2-1/README.md index a6559ac53723..91fd20a55b6a 100644 --- a/docs/release-notes/4/4-2-1/README.md +++ b/docs/release-notes/4/4-2-1/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.2.1 - sidebar_navigation: - title: 4.2.1 - release_version: 4.2.1 - release_date: 2015-07-10 +title: OpenProject 4.2.1 +sidebar_navigation: + title: 4.2.1 +release_version: 4.2.1 +release_date: 2015-07-10 --- # OpenProject 4.2.1 @@ -20,9 +20,7 @@ Additionally, some other translation related errors have been fixed: - Some translations in the work package context menu broke the layout ([#20835](https://community.openproject.org/work_packages/20835)). -For further information on the release, please refer to the -[Changelog v.4.2.1](https://community.openproject.org/versions/731) -or take a look at +For further information on the release, please refer to the +[Changelog v.4.2.1](https://community.openproject.org/versions/731) +or take a look at [GitHub](https://github.com/opf/openproject/tree/v4.2.1). - - diff --git a/docs/release-notes/4/4-2-2/README.md b/docs/release-notes/4/4-2-2/README.md index 025fbd13ce05..f8ca46026cf5 100644 --- a/docs/release-notes/4/4-2-2/README.md +++ b/docs/release-notes/4/4-2-2/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.2.2 - sidebar_navigation: - title: 4.2.2 - release_version: 4.2.2 - release_date: 2015-07-18 +title: OpenProject 4.2.2 +sidebar_navigation: + title: 4.2.2 +release_version: 4.2.2 +release_date: 2015-07-18 --- # OpenProject 4.2.2 @@ -22,8 +22,7 @@ Additionally, some bugs have been fixed: - The last login is no longer visible in the user profile ([#20892](https://community.openproject.org/work_packages/20892)). -For further information on the release, please refer to the -[Changelog v.4.2.2](https://community.openproject.org/versions/729) -or take a look at +For further information on the release, please refer to the +[Changelog v.4.2.2](https://community.openproject.org/versions/729) +or take a look at [GitHub](https://github.com/opf/openproject/tree/v4.2.2). - diff --git a/docs/release-notes/4/4-2-3/README.md b/docs/release-notes/4/4-2-3/README.md index 6ff7ab14e62e..07c86850adad 100644 --- a/docs/release-notes/4/4-2-3/README.md +++ b/docs/release-notes/4/4-2-3/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.2.3 - sidebar_navigation: - title: 4.2.3 - release_version: 4.2.3 - release_date: 2015-07-23 +title: OpenProject 4.2.3 +sidebar_navigation: + title: 4.2.3 +release_version: 4.2.3 +release_date: 2015-07-23 --- @@ -37,7 +37,7 @@ been fixed: - PDF Export: A success notification contained a type ([#20996](https://community.openproject.org/work_packages/20996)). -For further information on the release, please refer to the -[Changelog v.4.2.3](https://community.openproject.org/versions/748) -or take a look at +For further information on the release, please refer to the +[Changelog v.4.2.3](https://community.openproject.org/versions/748) +or take a look at [GitHub](https://github.com/opf/openproject/tree/v4.2.3). diff --git a/docs/release-notes/4/4-2-4/README.md b/docs/release-notes/4/4-2-4/README.md index 03a0eeb02c75..092ed5749439 100644 --- a/docs/release-notes/4/4-2-4/README.md +++ b/docs/release-notes/4/4-2-4/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.2.4 - sidebar_navigation: - title: 4.2.4 - release_version: 4.2.4 - release_date: 2015-07-30 +title: OpenProject 4.2.4 +sidebar_navigation: + title: 4.2.4 +release_version: 4.2.4 +release_date: 2015-07-30 --- # OpenProject 4.2.4 @@ -19,7 +19,7 @@ The following bug has been fixed: Additionally, new translations have been included (including complete translations for Portuguese, Brazilian). -For further information on the release, please refer to the -[Changelog v.4.2.4](https://community.openproject.org/versions/752) -or take a look at +For further information on the release, please refer to the +[Changelog v.4.2.4](https://community.openproject.org/versions/752) +or take a look at [GitHub](https://github.com/opf/openproject/tree/v4.2.4). diff --git a/docs/release-notes/4/4-2-5/README.md b/docs/release-notes/4/4-2-5/README.md index a2ec6665c5dd..91a37b5f9c9a 100644 --- a/docs/release-notes/4/4-2-5/README.md +++ b/docs/release-notes/4/4-2-5/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.2.5 - sidebar_navigation: - title: 4.2.5 - release_version: 4.2.5 - release_date: 2015-08-06 +title: OpenProject 4.2.5 +sidebar_navigation: + title: 4.2.5 +release_version: 4.2.5 +release_date: 2015-08-06 --- # OpenProject 4.2.5 @@ -27,7 +27,7 @@ The following bugs have been fixed: Additionally, new translations have been included (including complete translations for Swedish). -For further information on the release, please refer to the -[Changelog v.4.2.5](https://community.openproject.org/versions/759) -or take a look at +For further information on the release, please refer to the +[Changelog v.4.2.5](https://community.openproject.org/versions/759) +or take a look at [GitHub](https://github.com/opf/openproject/tree/v4.2.5). diff --git a/docs/release-notes/4/4-2-6/README.md b/docs/release-notes/4/4-2-6/README.md index de3b8c056014..7bc3025d533a 100644 --- a/docs/release-notes/4/4-2-6/README.md +++ b/docs/release-notes/4/4-2-6/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.2.6 - sidebar_navigation: - title: 4.2.6 - release_version: 4.2.6 - release_date: 2015-08-13 +title: OpenProject 4.2.6 +sidebar_navigation: + title: 4.2.6 +release_version: 4.2.6 +release_date: 2015-08-13 --- # OpenProject 4.2.6 @@ -29,7 +29,7 @@ The following bugs have been fixed: Additionally, OpenProject 4.2.6 contains new translations. -For further information on the release, please refer to the -[Changelog v.4.2.6](https://community.openproject.org/versions/762) -or take a look at +For further information on the release, please refer to the +[Changelog v.4.2.6](https://community.openproject.org/versions/762) +or take a look at [GitHub](https://github.com/opf/openproject/tree/v4.2.6). diff --git a/docs/release-notes/4/4-2-7/README.md b/docs/release-notes/4/4-2-7/README.md index 625883ddf019..6c5e5b9ce2fe 100644 --- a/docs/release-notes/4/4-2-7/README.md +++ b/docs/release-notes/4/4-2-7/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.2.7 - sidebar_navigation: - title: 4.2.7 - release_version: 4.2.7 - release_date: 2015-09-18 +title: OpenProject 4.2.7 +sidebar_navigation: + title: 4.2.7 +release_version: 4.2.7 +release_date: 2015-09-18 --- # OpenProject 4.2.7 @@ -18,7 +18,7 @@ Additionally, a bug was fixed which caused cache settings to be overwritten ([#21536](https://community.openproject.org/projects/openproject/work_packages/21536)). -For further information on the release, please refer to the -[Changelog v.4.2.7](https://community.openproject.org/versions/763) -or take a look at +For further information on the release, please refer to the +[Changelog v.4.2.7](https://community.openproject.org/versions/763) +or take a look at [GitHub](https://github.com/opf/openproject/tree/v4.2.7). diff --git a/docs/release-notes/4/4-2-8/README.md b/docs/release-notes/4/4-2-8/README.md index 3835c6272edd..0073c09a068e 100644 --- a/docs/release-notes/4/4-2-8/README.md +++ b/docs/release-notes/4/4-2-8/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.2.8 - sidebar_navigation: - title: 4.2.8 - release_version: 4.2.8 - release_date: 2015-09-28 +title: OpenProject 4.2.8 +sidebar_navigation: + title: 4.2.8 +release_version: 4.2.8 +release_date: 2015-09-28 --- # OpenProject 4.2.8 @@ -14,7 +14,7 @@ installing OpenProject via Packager. In addition, new translations have been added. Thanks to everyone who helped to translate and proof read OpenProject! -For further information on the release, please refer to the -[Changelog v.4.2.8](https://community.openproject.org/versions/773) -or take a look at +For further information on the release, please refer to the +[Changelog v.4.2.8](https://community.openproject.org/versions/773) +or take a look at [GitHub](https://github.com/opf/openproject/tree/v4.2.8). diff --git a/docs/release-notes/4/4-2-9/README.md b/docs/release-notes/4/4-2-9/README.md index 7eb57bd2c576..cd3424926f65 100644 --- a/docs/release-notes/4/4-2-9/README.md +++ b/docs/release-notes/4/4-2-9/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 4.2.9 - sidebar_navigation: - title: 4.2.9 - release_version: 4.2.9 - release_date: 2015-10-29 +title: OpenProject 4.2.9 +sidebar_navigation: + title: 4.2.9 +release_version: 4.2.9 +release_date: 2015-10-29 --- # OpenProject 4.2.9 @@ -12,10 +12,8 @@ OpenProject 4.2.9 contains the newest translations for the OpenProject core and plugins. Thanks to everyone who helped to translate and proof read OpenProject! -To help translate OpenProject, please take a look at the +To help translate OpenProject, please take a look at the [OpenProject CrowdIn projects](https://crowdin.com/projects/opf). For further information on the release, please take a look at [GitHub](https://github.com/opf/openproject/tree/v4.2.9). - - diff --git a/docs/release-notes/4/README.md b/docs/release-notes/4/README.md index 99f14c9b9593..68fe052a4931 100644 --- a/docs/release-notes/4/README.md +++ b/docs/release-notes/4/README.md @@ -36,4 +36,4 @@ title: OpenProject Version 4 Release Notes | [OpenProject 4.0.3](4-0-3/) | 2014-12-11 | | [OpenProject 4.0.2](4-0-2/) | 2014-11-20 | | [OpenProject 4.0.1](4-0-1/) | 2014-11-05 | -| [OpenProject 4.0.0](4-0-0/) | 2014-11-06 | \ No newline at end of file +| [OpenProject 4.0.0](4-0-0/) | 2014-11-06 | diff --git a/docs/release-notes/5/5-0-0/README.md b/docs/release-notes/5/5-0-0/README.md index 67bb3b18d004..5f24b1e1b2e4 100644 --- a/docs/release-notes/5/5-0-0/README.md +++ b/docs/release-notes/5/5-0-0/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 5.0.0 - sidebar_navigation: - title: 5.0.0 - release_version: 5.0.0 - release_date: 2015-08-21 +title: OpenProject 5.0.0 +sidebar_navigation: + title: 5.0.0 +release_version: 5.0.0 +release_date: 2015-08-21 --- # OpenProject 5.0.0 @@ -18,8 +18,6 @@ work package split screen Attachments can now be more easily added by using the drag and drop area on the work package split screen. - - ## New work package full screen view The existing work package screen has been replaced by a new responsive @@ -35,8 +33,6 @@ In addition, the behavior for watchers has been changed: Email notifications are sent out immediately when adding a watcher to a work package. - - ## Improved work package split screen - It is possible to edit and comment in one step in the work package @@ -48,8 +44,6 @@ package. package split screen ([#15422](https://community.openproject.org/wp/15422)). - - ## New home screen With OpenProject 5.0, the new home screen of OpenProject instances @@ -59,8 +53,6 @@ references have been added. Optionally, a welcome text block with custom notifications can be added. - - ## Aggregated work package activities and email notifications In order to reduce the amount of activity and email notifications on @@ -73,8 +65,6 @@ aggregated activities ([#20694](https://community.openproject.org/wp/20694), [#21035](https://community.openproject.org/wp/21035)). - - ## Enhanced repository management **Important:** When updating your existing OpenProject installation, @@ -95,8 +85,6 @@ information for their projects. Furthermore, it is possible to see the disk space used by the used repositories in order to get a better overview of the data usage. - - ## Invite project members to OpenProject and add to a project in one step With OpenProject 5.0 users can be invited to a project via email without @@ -111,8 +99,6 @@ project settings and has been added to the project side menu. The create user functionality has been simplified, so that only the most important values have to be entered during creation. - - ## Improved project administration page The project page in the administration not only includes the used disk @@ -124,8 +110,6 @@ date, used disk storage). The project list is paginated in order to reduce loading time when there are a lot of projects. - - ## Restructured my account section The My Account page has been restructured and the settings are spread @@ -134,8 +118,6 @@ out across different sections Profile images can be set in my account section (local avatar plugin). - - ## Simplified project and user creation The project and user creation has been simplified and only shows the @@ -148,8 +130,6 @@ custom fields. Attributes shown on user invitation screen are limited to most important attributes. - - ## Deprecated features In order to reduce complexity, some rarely used OpenProject features @@ -237,4 +217,3 @@ OpenProject Packager edition. A large number of bugs have been fixed with the release of OpenProject 5.0. - diff --git a/docs/release-notes/5/5-0-1/README.md b/docs/release-notes/5/5-0-1/README.md index d3ad197d62be..aacdff785483 100644 --- a/docs/release-notes/5/5-0-1/README.md +++ b/docs/release-notes/5/5-0-1/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 5.0.1 - sidebar_navigation: - title: 5.0.1 - release_version: 5.0.1 - release_date: 2015-11-20 +title: OpenProject 5.0.1 +sidebar_navigation: + title: 5.0.1 +release_version: 5.0.1 +release_date: 2015-11-20 --- # OpenProject 5.0.1 @@ -46,8 +46,6 @@ To help translate OpenProject, please take a look at the [OpenProject CrowdIn projects](https://crowdin.com/projects/opf). For further information on the release, please refer to the -[Changelog v.5.0.1](https://community.openproject.org/versions/774) +[Changelog v.5.0.1](https://community.openproject.org/versions/774) or take a look at [GitHub](https://github.com/opf/openproject/tree/v5.0.1). - - diff --git a/docs/release-notes/5/5-0-10/README.md b/docs/release-notes/5/5-0-10/README.md index 5f91664e8b84..ec8ddffccb86 100644 --- a/docs/release-notes/5/5-0-10/README.md +++ b/docs/release-notes/5/5-0-10/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 5.0.10 - sidebar_navigation: - title: 5.0.10 - release_version: 5.0.10 - release_date: 2016-01-22 +title: OpenProject 5.0.10 +sidebar_navigation: + title: 5.0.10 +release_version: 5.0.10 +release_date: 2016-01-22 --- # OpenProject 5.0.10 @@ -41,8 +41,6 @@ In addition the performance when saving a work package has been improved ([#21757](https://community.openproject.org/work_packages/21757)). For further information on the release, please refer to the -[Changelog v.5.0.10](https://community.openproject.org/versions/788) +[Changelog v.5.0.10](https://community.openproject.org/versions/788) or take a look at [GitHub](https://github.com/opf/openproject/tree/v5.0.10). - - diff --git a/docs/release-notes/5/5-0-11/README.md b/docs/release-notes/5/5-0-11/README.md index 776078ecee19..c2769b81f340 100644 --- a/docs/release-notes/5/5-0-11/README.md +++ b/docs/release-notes/5/5-0-11/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 5.0.11 - sidebar_navigation: - title: 5.0.11 - release_version: 5.0.11 - release_date: 2016-01-26 +title: OpenProject 5.0.11 +sidebar_navigation: + title: 5.0.11 +release_version: 5.0.11 +release_date: 2016-01-26 --- # OpenProject 5.0.11 @@ -16,8 +16,6 @@ For further information, take a look at the [Rails release notes](https://weblog.rubyonrails.org/2016/1/25/Rails-5-0-0-beta1-1-4-2-5-1-4-1-14-1-3-2-22-1-and-rails-html-sanitizer-1-0-3-have-been-released/). For further information on the release, please refer to the -[Changelog v.5.0.11](https://community.openproject.org/versions/798) +[Changelog v.5.0.11](https://community.openproject.org/versions/798) or take a look at [GitHub](https://github.com/opf/openproject/tree/v5.0.11) - - diff --git a/docs/release-notes/5/5-0-12/README.md b/docs/release-notes/5/5-0-12/README.md index 76e9a4bf4566..a769792ce155 100644 --- a/docs/release-notes/5/5-0-12/README.md +++ b/docs/release-notes/5/5-0-12/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 5.0.12 - sidebar_navigation: - title: 5.0.12 - release_version: 5.0.12 - release_date: 2016-02-01 +title: OpenProject 5.0.12 +sidebar_navigation: + title: 5.0.12 +release_version: 5.0.12 +release_date: 2016-02-01 --- @@ -24,10 +24,6 @@ OpenProject 5.0.12 contains several bug fixes: [#20683](https://community.openproject.org/work_packages/20683)). For further information on the release, please refer to the -[Changelog v.5.0.12](https://community.openproject.org/versions/800) +[Changelog v.5.0.12](https://community.openproject.org/versions/800) or take a look at [GitHub](https://github.com/opf/openproject/tree/v5.0.12). - - - - diff --git a/docs/release-notes/5/5-0-13/README.md b/docs/release-notes/5/5-0-13/README.md index 5d6618e6daa9..81524768019d 100644 --- a/docs/release-notes/5/5-0-13/README.md +++ b/docs/release-notes/5/5-0-13/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 5.0.13 - sidebar_navigation: - title: 5.0.13 - release_version: 5.0.13 - release_date: 2016-02-01 +title: OpenProject 5.0.13 +sidebar_navigation: + title: 5.0.13 +release_version: 5.0.13 +release_date: 2016-02-01 --- @@ -14,7 +14,3 @@ installation. For further information, please take a look at [GitHub](https://github.com/opf/openproject/tree/v5.0.12). - - - - diff --git a/docs/release-notes/5/5-0-14/README.md b/docs/release-notes/5/5-0-14/README.md index 70853eaf1253..b2996222414b 100644 --- a/docs/release-notes/5/5-0-14/README.md +++ b/docs/release-notes/5/5-0-14/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 5.0.14 - sidebar_navigation: - title: 5.0.14 - release_version: 5.0.14 - release_date: 2016-02-05 +title: OpenProject 5.0.14 +sidebar_navigation: + title: 5.0.14 +release_version: 5.0.14 +release_date: 2016-02-05 --- # OpenProject 5.0.14 @@ -26,6 +26,6 @@ OpenProject 5.0.14 contains several bug fixes: [#22597](https://community.openproject.org/work_packages/22597)). For further information on the release, please refer to the -[Changelog v.5.0.14](https://community.openproject.org/versions/799) +[Changelog v.5.0.14](https://community.openproject.org/versions/799) or take a look at [GitHub](https://github.com/opf/openproject/tree/v5.0.14). diff --git a/docs/release-notes/5/5-0-15/README.md b/docs/release-notes/5/5-0-15/README.md index 9e90073056ab..ee8acf6b97ee 100644 --- a/docs/release-notes/5/5-0-15/README.md +++ b/docs/release-notes/5/5-0-15/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 5.0.15 - sidebar_navigation: - title: 5.0.15 - release_version: 5.0.15 - release_date: 2016-02-16 +title: OpenProject 5.0.15 +sidebar_navigation: + title: 5.0.15 +release_version: 5.0.15 +release_date: 2016-02-16 --- @@ -30,10 +30,6 @@ In addition, the accessibility has been improved [#22005](https://community.openproject.org/work_packages/22005)). For further information on the release, please refer to the -[Changelog v.5.0.15](https://community.openproject.org/versions/783) +[Changelog v.5.0.15](https://community.openproject.org/versions/783) or take a look at [GitHub](https://github.com/opf/openproject/tree/v5.0.15). - - - - diff --git a/docs/release-notes/5/5-0-16/README.md b/docs/release-notes/5/5-0-16/README.md index 83f4c797a743..8b5bb85ccc82 100644 --- a/docs/release-notes/5/5-0-16/README.md +++ b/docs/release-notes/5/5-0-16/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 5.0.16 - sidebar_navigation: - title: 5.0.16 - release_version: 5.0.16 - release_date: 2016-03-08 +title: OpenProject 5.0.16 +sidebar_navigation: + title: 5.0.16 +release_version: 5.0.16 +release_date: 2016-03-08 --- # OpenProject 5.0.16 @@ -56,6 +56,6 @@ This is now fully functional again ([#22390](https://community.openproject.org/work_packages/22390)). For further information on the release, please refer to the -[Changelog v.5.0.16](https://community.openproject.org/versions/804) +[Changelog v.5.0.16](https://community.openproject.org/versions/804) or take a look at [GitHub](https://github.com/opf/openproject/tree/v5.0.16). diff --git a/docs/release-notes/5/5-0-17/README.md b/docs/release-notes/5/5-0-17/README.md index cd117b95ca06..0c629bc8e141 100644 --- a/docs/release-notes/5/5-0-17/README.md +++ b/docs/release-notes/5/5-0-17/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 5.0.17 - sidebar_navigation: - title: 5.0.17 - release_version: 5.0.17 - release_date: 2016-04-11 +title: OpenProject 5.0.17 +sidebar_navigation: + title: 5.0.17 +release_version: 5.0.17 +release_date: 2016-04-11 --- # OpenProject 5.0.17 @@ -40,9 +40,7 @@ In addition, there are several design and usability improvements: page on small screens ([#22953](https://community.openproject.org/wp/22953)). -For further information on the release, please refer to the -[Changelog v.5.0.17](https://community.openproject.org/versions/805) -or take a look at +For further information on the release, please refer to the +[Changelog v.5.0.17](https://community.openproject.org/versions/805) +or take a look at [GitHub](https://github.com/opf/openproject/tree/v5.0.17). - - diff --git a/docs/release-notes/5/5-0-18/README.md b/docs/release-notes/5/5-0-18/README.md index 38598704e95d..1f5b67a7a7a7 100644 --- a/docs/release-notes/5/5-0-18/README.md +++ b/docs/release-notes/5/5-0-18/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 5.0.18 - sidebar_navigation: - title: 5.0.18 - release_version: 5.0.18 - release_date: 2016-05-27 +title: OpenProject 5.0.18 +sidebar_navigation: + title: 5.0.18 +release_version: 5.0.18 +release_date: 2016-05-27 --- # OpenProject 5.0.18 @@ -45,7 +45,7 @@ The textbox above a forum does now render textile. It’s therefore possible to e.g. include links or references ([#23180](https://community.openproject.org/wp/23180)). -For further information on the release, please refer to the -[Changelog v.5.0.18](https://community.openproject.org/versions/806) -or take a look at +For further information on the release, please refer to the +[Changelog v.5.0.18](https://community.openproject.org/versions/806) +or take a look at [GitHub](https://github.com/opf/openproject/tree/v5.0.18). diff --git a/docs/release-notes/5/5-0-19/README.md b/docs/release-notes/5/5-0-19/README.md index d319b134f9fb..f1c8c3c9d78a 100644 --- a/docs/release-notes/5/5-0-19/README.md +++ b/docs/release-notes/5/5-0-19/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 5.0.19 - sidebar_navigation: - title: 5.0.19 - release_version: 5.0.19 - release_date: 2016-06-20 +title: OpenProject 5.0.19 +sidebar_navigation: + title: 5.0.19 +release_version: 5.0.19 +release_date: 2016-06-20 --- # OpenProject 5.0.19 @@ -33,7 +33,7 @@ OpenProject 5.0.19 contains several bug fixes: texts ([#23073](https://community.openproject.org/wp/23073)). -For further information on the release, please refer to the -[Changelog v.5.0.19](https://community.openproject.org/versions/810) -or take a look at +For further information on the release, please refer to the +[Changelog v.5.0.19](https://community.openproject.org/versions/810) +or take a look at [GitHub](https://github.com/opf/openproject/tree/v5.0.19). diff --git a/docs/release-notes/5/5-0-2/README.md b/docs/release-notes/5/5-0-2/README.md index deb379a94ee8..2554c7f3b4b0 100644 --- a/docs/release-notes/5/5-0-2/README.md +++ b/docs/release-notes/5/5-0-2/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 5.0.2 - sidebar_navigation: - title: 5.0.2 - release_version: 5.0.2 - release_date: 2015-11-24 +title: OpenProject 5.0.2 +sidebar_navigation: + title: 5.0.2 +release_version: 5.0.2 +release_date: 2015-11-24 --- # OpenProject 5.0.2 @@ -37,6 +37,6 @@ To help translate OpenProject, please take a look at the [OpenProject CrowdIn projects](https://crowdin.com/projects/opf). For further information on the release, please refer to the -[Changelog v.5.0.2](https://community.openproject.org/versions/781) +[Changelog v.5.0.2](https://community.openproject.org/versions/781) or take a look at [GitHub](https://github.com/opf/openproject/tree/v5.0.2). diff --git a/docs/release-notes/5/5-0-20/README.md b/docs/release-notes/5/5-0-20/README.md index 857ce86b5d07..3bdec8bb5925 100644 --- a/docs/release-notes/5/5-0-20/README.md +++ b/docs/release-notes/5/5-0-20/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 5.0.20 - sidebar_navigation: - title: 5.0.20 - release_version: 5.0.20 - release_date: 2016-08-16 +title: OpenProject 5.0.20 +sidebar_navigation: + title: 5.0.20 +release_version: 5.0.20 +release_date: 2016-08-16 --- # OpenProject 5.0.20 @@ -19,5 +19,3 @@ We strongly recommend the update to the current version. For further information on the release, please take a look at [GitHub](https://github.com/opf/openproject/tree/v5.0.20). - - diff --git a/docs/release-notes/5/5-0-3/README.md b/docs/release-notes/5/5-0-3/README.md index fd737c4e90bf..88b18094dac5 100644 --- a/docs/release-notes/5/5-0-3/README.md +++ b/docs/release-notes/5/5-0-3/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 5.0.3 - sidebar_navigation: - title: 5.0.3 - release_version: 5.0.3 - release_date: 2015-11-24 +title: OpenProject 5.0.3 +sidebar_navigation: + title: 5.0.3 +release_version: 5.0.3 +release_date: 2015-11-24 --- # OpenProject 5.0.3 @@ -15,7 +15,6 @@ OpenProject 5.0.3 contains a bug fix for creating versions: ([#22094](https://community.openproject.org/work_packages/22094)). For further information on the release, please refer to the -[Changelog v.5.0.3](https://community.openproject.org/versions/782) +[Changelog v.5.0.3](https://community.openproject.org/versions/782) or take a look at [GitHub](https://github.com/opf/openproject/tree/v5.0.3). - diff --git a/docs/release-notes/5/5-0-4/README.md b/docs/release-notes/5/5-0-4/README.md index e059b00476a9..8613fd54c113 100644 --- a/docs/release-notes/5/5-0-4/README.md +++ b/docs/release-notes/5/5-0-4/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 5.0.4 - sidebar_navigation: - title: 5.0.4 - release_version: 5.0.4 - release_date: 2015-11-27 +title: OpenProject 5.0.4 +sidebar_navigation: + title: 5.0.4 +release_version: 5.0.4 +release_date: 2015-11-27 --- # OpenProject 5.0.4 @@ -26,7 +26,7 @@ improvements: [#22065](https://community.openproject.org/work_packages/22065), [#22047](https://community.openproject.org/work_packages/22047)). -For further information on the release, please refer to the -[Changelog v.5.0.4](https://community.openproject.org/versions/779) +For further information on the release, please refer to the +[Changelog v.5.0.4](https://community.openproject.org/versions/779) or take a look at [GitHub](https://github.com/opf/openproject/tree/v5.0.4). diff --git a/docs/release-notes/5/5-0-5/README.md b/docs/release-notes/5/5-0-5/README.md index 786239f6da9d..0c607ecd2d51 100644 --- a/docs/release-notes/5/5-0-5/README.md +++ b/docs/release-notes/5/5-0-5/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 5.0.5 - sidebar_navigation: - title: 5.0.5 - release_version: 5.0.5 - release_date: 2015-12-02 +title: OpenProject 5.0.5 +sidebar_navigation: + title: 5.0.5 +release_version: 5.0.5 +release_date: 2015-12-02 --- @@ -38,8 +38,6 @@ To help translate OpenProject, please take a look at the [OpenProject CrowdIn projects](https://crowdin.com/projects/opf). For further information on the release, please refer to the -[Changelog v.5.0.5](https://community.openproject.org/versions/780) +[Changelog v.5.0.5](https://community.openproject.org/versions/780) or take a look at [GitHub](https://github.com/opf/openproject/tree/v5.0.5). - - diff --git a/docs/release-notes/5/5-0-6/README.md b/docs/release-notes/5/5-0-6/README.md index bc7c3d55100c..581b4913466a 100644 --- a/docs/release-notes/5/5-0-6/README.md +++ b/docs/release-notes/5/5-0-6/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 5.0.6 - sidebar_navigation: - title: 5.0.6 - release_version: 5.0.6 - release_date: 2015-12-09 +title: OpenProject 5.0.6 +sidebar_navigation: + title: 5.0.6 +release_version: 5.0.6 +release_date: 2015-12-09 --- @@ -41,8 +41,6 @@ Changing a work packages assignee and responsible works significantly faster in projects with a lot of members. For further information on the release, please refer to the -[Changelog v.5.0.6](https://community.openproject.org/versions/784) +[Changelog v.5.0.6](https://community.openproject.org/versions/784) or take a look at [GitHub](https://github.com/opf/openproject/tree/v5.0.6). - - diff --git a/docs/release-notes/5/5-0-7/README.md b/docs/release-notes/5/5-0-7/README.md index a202182bc75b..690342485ad0 100644 --- a/docs/release-notes/5/5-0-7/README.md +++ b/docs/release-notes/5/5-0-7/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 5.0.7 - sidebar_navigation: - title: 5.0.7 - release_version: 5.0.7 - release_date: 2015-12-11 +title: OpenProject 5.0.7 +sidebar_navigation: + title: 5.0.7 +release_version: 5.0.7 +release_date: 2015-12-11 --- # OpenProject 5.0.7 @@ -26,8 +26,6 @@ OpenProject 5.0.7 contains several bug fixes: [#22313](https://community.openproject.org/work_packages/22313)). For further information on the release, please refer to the -[Changelog v.5.0.7](https://community.openproject.org/versions/785) +[Changelog v.5.0.7](https://community.openproject.org/versions/785) or take a look at [GitHub](https://github.com/opf/openproject/tree/v5.0.7). - - diff --git a/docs/release-notes/5/5-0-8/README.md b/docs/release-notes/5/5-0-8/README.md index c3ef943e3072..b859f29f51ee 100644 --- a/docs/release-notes/5/5-0-8/README.md +++ b/docs/release-notes/5/5-0-8/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 5.0.8 - sidebar_navigation: - title: 5.0.8 - release_version: 5.0.8 - release_date: 2016-01-08 +title: OpenProject 5.0.8 +sidebar_navigation: + title: 5.0.8 +release_version: 5.0.8 +release_date: 2016-01-08 --- # OpenProject 5.0.8 @@ -40,8 +40,6 @@ In addition new icons for the mobile view have been added several accessibility improvements have been implemented. For further information on the release, please refer to the -[Changelog v.5.0.8](https://community.openproject.org/versions/786) +[Changelog v.5.0.8](https://community.openproject.org/versions/786) or take a look at [GitHub](https://github.com/opf/openproject/tree/v5.0.8). - - diff --git a/docs/release-notes/5/5-0-9/README.md b/docs/release-notes/5/5-0-9/README.md index 1d3ef3ee84d2..ced626c508a5 100644 --- a/docs/release-notes/5/5-0-9/README.md +++ b/docs/release-notes/5/5-0-9/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 5.0.9 - sidebar_navigation: - title: 5.0.9 - release_version: 5.0.9 - release_date: 2016-01-13 +title: OpenProject 5.0.9 +sidebar_navigation: + title: 5.0.9 +release_version: 5.0.9 +release_date: 2016-01-13 --- # OpenProject 5.0.9 @@ -26,6 +26,6 @@ OpenProject 5.0.9 contains several bug fixes: [#22397](https://community.openproject.org/work_packages/22397)). For further information on the release, please refer to the -[Changelog v.5.0.9](https://community.openproject.org/versions/789) +[Changelog v.5.0.9](https://community.openproject.org/versions/789) or take a look at [GitHub](https://github.com/opf/openproject/tree/v5.0.9). diff --git a/docs/release-notes/6/6-0-0/README.md b/docs/release-notes/6/6-0-0/README.md index 748d114bc620..39645d35388f 100644 --- a/docs/release-notes/6/6-0-0/README.md +++ b/docs/release-notes/6/6-0-0/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 6.0.0 - sidebar_navigation: - title: 6.0.0 - release_version: 6.0.0 - release_date: 2016-05-27 +title: OpenProject 6.0.0 +sidebar_navigation: + title: 6.0.0 +release_version: 6.0.0 +release_date: 2016-05-27 --- # OpenProject 6.0.0 @@ -17,8 +17,6 @@ OpenProject 6.0 adds the ability to rapidly create a list of work packages (e.g. As a result, you can now easily and swiftly create task table. - - ## Inline edit in work package table With OpenProject 6.0 it is possible to use inline editing to swiftly update work packages (such as tasks, features, milestones) directly from @@ -28,16 +26,12 @@ It is no longer necessary to open a separate split screen view. Note, that all links (except for ID) have been removed from the work package table and form. - - ## Automatic synchronization between work package split screen and work package table The split screen view automatically reflects changes in the work package table. When a work package is created, it is immediately shown in the table. Likewise, the work package table directly displays changes on the split screen. - - ## Configuration of visible work package attributes in OpenProject With OpenProject 6.0 you can configure the attributes shown for each @@ -48,8 +42,6 @@ the start and due date. Users can either completely deactivate or initially hide attributes. (to be shown when clicking on the “Show all” button on work packages). - - ## Extended help menu and onboarding video The help menu in OpenProject has been extended. As a result, it now @@ -59,8 +51,6 @@ information. Additionally, a *First steps* video makes it easier for new users to start working with OpenProject. - - ## Usability improvements Aside from the main features, OpenProject 6.0 includes several smaller @@ -78,8 +68,6 @@ usability improvements: OpenProject 6.0 includes several design improvements. - - ## URL slugs for wiki pages In OpenProject versions prior to 6.0.0., specific characters of wiki @@ -95,12 +83,9 @@ This causes the identifiers of wiki pages with non-ascii characters to be more visually pleasing and easier to link to. When upgrading to 6.0., permalinks for all your pages will be generated automatically. - - -## **Substantial number of bug fixes** +## Substantial number of bug fixes OpenProject 6.0 contains a large number of bugs fixes. For an extensive overview of bug fixes please refer to the [following list](https://community.openproject.org/projects/openproject/work_packages?query_props=%7B%22c%22:%5B%22id%22,%22type%22,%22status%22,%22subject%22,%22assigned_to%22%5D,%22t%22:%22parent:desc%22,%22f%22:%5B%7B%22n%22:%22fixed_version_id%22,%22o%22:%22%253D%22,%22t%22:%22list_optional%22,%22v%22:%22666%22%7D,%7B%22n%22:%22type_id%22,%22o%22:%22%253D%22,%22t%22:%22list_model%22,%22v%22:%221%22%7D,%7B%22n%22:%22subproject_id%22,%22o%22:%22*%22,%22t%22:%22list_subprojects%22%7D%5D,%22pa%22:1,%22pp%22:20%7D). - diff --git a/docs/release-notes/6/6-0-1/README.md b/docs/release-notes/6/6-0-1/README.md index 22f93f535a26..cda6073fcf61 100644 --- a/docs/release-notes/6/6-0-1/README.md +++ b/docs/release-notes/6/6-0-1/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 6.0.1 - sidebar_navigation: - title: 6.0.1 - release_version: 6.0.1 - release_date: 2016-08-01 +title: OpenProject 6.0.1 +sidebar_navigation: + title: 6.0.1 +release_version: 6.0.1 +release_date: 2016-08-01 --- # OpenProject 6.0.1 @@ -82,10 +82,9 @@ Thanks a lot to Guillaume Ferry and Willy Gardiol for [reporting bugs](../../../development/report-a-bug/). For further information on the release, please refer to the -[Changelog v.6.0.1](https://community.openproject.org/versions/807) +[Changelog v.6.0.1](https://community.openproject.org/versions/807) or take a look at [GitHub](https://github.com/opf/openproject/tree/v6.0.1). For a free 30 day trial create your own OpenProject instance on [OpenProject.org](https://openproject.org/). - diff --git a/docs/release-notes/6/6-0-2/README.md b/docs/release-notes/6/6-0-2/README.md index 888abae7873f..5a89cab2f6bb 100644 --- a/docs/release-notes/6/6-0-2/README.md +++ b/docs/release-notes/6/6-0-2/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 6.0.2 - sidebar_navigation: - title: 6.0.2 - release_version: 6.0.2 - release_date: 2016-08-10 +title: OpenProject 6.0.2 +sidebar_navigation: + title: 6.0.2 +release_version: 6.0.2 +release_date: 2016-08-10 --- # OpenProject 6.0.2 @@ -43,10 +43,9 @@ Thanks a lot to the community, in particular Marc Vollmer, for bugs](../../../development/report-a-bug/)! For further information on the release, please refer to the -[Changelog v.6.0.2](https://community.openproject.org/versions/814) +[Changelog v.6.0.2](https://community.openproject.org/versions/814) or take a look at [GitHub](https://github.com/opf/openproject/tree/v6.0.2). You can try OpenProject for free. For a free 30 day trial create your OpenProject instance on [OpenProject.org](https://openproject.org/). - diff --git a/docs/release-notes/6/6-0-3/README.md b/docs/release-notes/6/6-0-3/README.md index a92ed032765e..93ea41098fbd 100644 --- a/docs/release-notes/6/6-0-3/README.md +++ b/docs/release-notes/6/6-0-3/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 6.0.3 - sidebar_navigation: - title: 6.0.3 - release_version: 6.0.3 - release_date: 2016-08-16 +title: OpenProject 6.0.3 +sidebar_navigation: + title: 6.0.3 +release_version: 6.0.3 +release_date: 2016-08-16 --- # OpenProject 6.0.3 @@ -39,8 +39,6 @@ Frank Schmid and Marc Vollmer, for [reporting multiple bugs](../../../development/report-a-bug/)! For further information on the release, please refer to the -[Changelog v.6.0.3](https://community.openproject.org/versions/815) +[Changelog v.6.0.3](https://community.openproject.org/versions/815) or take a look at [GitHub](https://github.com/opf/openproject/tree/v6.0.3). - - diff --git a/docs/release-notes/6/6-0-4/README.md b/docs/release-notes/6/6-0-4/README.md index afdbd4cad55a..ad4b7ab37d45 100644 --- a/docs/release-notes/6/6-0-4/README.md +++ b/docs/release-notes/6/6-0-4/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 6.0.4 - sidebar_navigation: - title: 6.0.4 - release_version: 6.0.4 - release_date: 2016-08-30 +title: OpenProject 6.0.4 +sidebar_navigation: + title: 6.0.4 +release_version: 6.0.4 +release_date: 2016-08-30 --- # OpenProject 6.0.4 @@ -53,10 +53,9 @@ Thanks a lot to the community, in particular to Marc Vollmer, for bugs](../../../development/report-a-bug/)! For further information on the release, please refer to the -[Changelog v.6.0.4](https://community.openproject.org/versions/816) +[Changelog v.6.0.4](https://community.openproject.org/versions/816) or take a look at [GitHub](https://github.com/opf/openproject/tree/v6.0.4). You can try OpenProject for free. For a free 30 day trial create your OpenProject instance on [OpenProject.org](https://openproject.org/). - diff --git a/docs/release-notes/6/6-0-5/README.md b/docs/release-notes/6/6-0-5/README.md index 5237bfe94d9f..ca8a4e627f04 100644 --- a/docs/release-notes/6/6-0-5/README.md +++ b/docs/release-notes/6/6-0-5/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 6.0.5 - sidebar_navigation: - title: 6.0.5 - release_version: 6.0.5 - release_date: 2016-10-18 +title: OpenProject 6.0.5 +sidebar_navigation: + title: 6.0.5 +release_version: 6.0.5 +release_date: 2016-10-18 --- # OpenProject 6.0.5 @@ -97,10 +97,9 @@ Berthold for [reporting bugs](../../../development/report-a-bug/)! For further information on the release, please refer to the -[Changelog v.6.0.5](https://community.openproject.org/versions/817) +[Changelog v.6.0.5](https://community.openproject.org/versions/817) or take a look at [GitHub](https://github.com/opf/openproject/tree/v6.0.5). You can try OpenProject for free. For a free 30 day trial create your OpenProject instance on [OpenProject.org](https://openproject.org/). - diff --git a/docs/release-notes/6/6-1-0/README.md b/docs/release-notes/6/6-1-0/README.md index b2f34d1c62a0..29e2d90d4a83 100644 --- a/docs/release-notes/6/6-1-0/README.md +++ b/docs/release-notes/6/6-1-0/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 6.1.0 - sidebar_navigation: - title: 6.1.0 - release_version: 6.1.0 - release_date: 2016-11-07 +title: OpenProject 6.1.0 +sidebar_navigation: + title: 6.1.0 +release_version: 6.1.0 +release_date: 2016-11-07 --- # OpenProject 6.1.0 @@ -20,8 +20,6 @@ list ([#22859](https://community.openproject.org/wp/22859)). This provides an easy way to quickly find, remove or edit the permissions of project members in large projects. - - ## Improved work package relations The work package relations tab has been improved: It has a clearer @@ -32,8 +30,6 @@ new relation types Hierarchical relationships are immediately clear through a tree-structure. - - ## Improved performance for work packages The work package table is now loaded more quickly and changes can be made @@ -51,7 +47,7 @@ Meetings can therefore easily added to you calendar. The OpenProject API v3 has been extended by user endpoints. It is now possible to create, read, update and delete user information. In addition, we added the relations API. -For more information take a look at the +For more information take a look at the [API documentation](../../../api/). ## Upgrade to Rails 5.0 @@ -69,5 +65,5 @@ there is enough space. OpenProject 6.1 contains a large number of bugs fixes. -For an extensive overview of bug fixes please refer to the +For an extensive overview of bug fixes please refer to the [following list](https://community.openproject.org/projects/openproject/work_packages?query_props=%7B%22c%22:%5B%22id%22,%22subject%22,%22type%22,%22status%22,%22assignee%22%5D,%22p%22:%22openproject%22,%22t%22:%22parent:desc%22,%22f%22:%5B%7B%22n%22:%22version%22,%22o%22:%22%253D%22,%22t%22:%22list_optional%22,%22v%22:%22667%22%7D,%7B%22n%22:%22type%22,%22o%22:%22%253D%22,%22t%22:%22list_model%22,%22v%22:%5B%221%22%5D%7D,%7B%22n%22:%22subprojectId%22,%22o%22:%22*%22,%22t%22:%22list_subprojects%22%7D%5D,%22pa%22:1,%22pp%22:20%7D). diff --git a/docs/release-notes/6/6-1-1/README.md b/docs/release-notes/6/6-1-1/README.md index c1cc0555b095..64ac37a31ea0 100644 --- a/docs/release-notes/6/6-1-1/README.md +++ b/docs/release-notes/6/6-1-1/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 6.1.1 - sidebar_navigation: - title: 6.1.1 - release_version: 6.1.1 - release_date: 2016-11-29 +title: OpenProject 6.1.1 +sidebar_navigation: + title: 6.1.1 +release_version: 6.1.1 +release_date: 2016-11-29 --- @@ -62,10 +62,9 @@ Hillenbrand, Nicolai Daniel and Christophe Mornet for [reporting bugs](../../../development/report-a-bug/)! For further information on the release, please refer to the -[Changelog v.6.1.1](https://community.openproject.org/versions/821) +[Changelog v.6.1.1](https://community.openproject.org/versions/821) or take a look at [GitHub](https://github.com/opf/openproject/tree/v6.1.1). You can try OpenProject for free. For a free 30 day trial create your OpenProject instance on [OpenProject.org](https://openproject.org/). - diff --git a/docs/release-notes/6/6-1-2/README.md b/docs/release-notes/6/6-1-2/README.md index bc6a41a8a751..d5680241e92f 100644 --- a/docs/release-notes/6/6-1-2/README.md +++ b/docs/release-notes/6/6-1-2/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 6.1.2 - sidebar_navigation: - title: 6.1.2 - release_version: 6.1.2 - release_date: 2016-12-21 +title: OpenProject 6.1.2 +sidebar_navigation: + title: 6.1.2 +release_version: 6.1.2 +release_date: 2016-12-21 --- # OpenProject 6.1.2 @@ -34,5 +34,3 @@ fixes [here.](https://community.openproject.org/versions/822) Special thanks to [Dirk Wiesenthal](https://github.com/dwiesent) from [Univention](https://www.univention.de/) for helping us to improve our users api. - - diff --git a/docs/release-notes/6/6-1-3/README.md b/docs/release-notes/6/6-1-3/README.md index bb044b8e5046..5b28d6a2f8d1 100644 --- a/docs/release-notes/6/6-1-3/README.md +++ b/docs/release-notes/6/6-1-3/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 6.1.3 - sidebar_navigation: - title: 6.1.3 - release_version: 6.1.3 - release_date: 2017-01-20 +title: OpenProject 6.1.3 +sidebar_navigation: + title: 6.1.3 +release_version: 6.1.3 +release_date: 2017-01-20 --- # OpenProject 6.1.3 @@ -19,8 +19,6 @@ your OpenProject installation to this version. This error has been fixed. For further information on the release, please refer to the -[Changelog v.6.1.3](https://community.openproject.org/versions/826) +[Changelog v.6.1.3](https://community.openproject.org/versions/826) or take a look at [GitHub](https://github.com/opf/openproject/tree/v6.1.3). - - diff --git a/docs/release-notes/6/6-1-4/README.md b/docs/release-notes/6/6-1-4/README.md index 20c79203166d..38d3eb30b3e9 100644 --- a/docs/release-notes/6/6-1-4/README.md +++ b/docs/release-notes/6/6-1-4/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 6.1.4 - sidebar_navigation: - title: 6.1.4 - release_version: 6.1.4 - release_date: 2017-01-20 +title: OpenProject 6.1.4 +sidebar_navigation: + title: 6.1.4 +release_version: 6.1.4 +release_date: 2017-01-20 --- @@ -31,8 +31,6 @@ your OpenProject installation to this - Project filter was lost on the second page of the search results page. For further information on the release, please refer to the -[Changelog v.6.1.4](https://community.openproject.org/versions/827) +[Changelog v.6.1.4](https://community.openproject.org/versions/827) or take a look at [GitHub](https://github.com/opf/openproject/tree/v6.1.4). - - diff --git a/docs/release-notes/6/6-1-5/README.md b/docs/release-notes/6/6-1-5/README.md index 1f6ca0355baa..7d663d63669e 100644 --- a/docs/release-notes/6/6-1-5/README.md +++ b/docs/release-notes/6/6-1-5/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 6.1.5 - sidebar_navigation: - title: 6.1.5 - release_version: 6.1.5 - release_date: 2017-03-14 +title: OpenProject 6.1.5 +sidebar_navigation: + title: 6.1.5 +release_version: 6.1.5 +release_date: 2017-03-14 --- # OpenProject 6.1.5 @@ -47,8 +47,6 @@ your OpenProject installation to this version. types. For further information on the release, please refer to the -[Changelog v.6.1.5](https://community.openproject.org/versions/828) +[Changelog v.6.1.5](https://community.openproject.org/versions/828) or take a look at [GitHub](https://github.com/opf/openproject/tree/v6.1.5). - - diff --git a/docs/release-notes/6/6-1-6/README.md b/docs/release-notes/6/6-1-6/README.md index 18e9db8c95c0..6afe01dc5b7f 100644 --- a/docs/release-notes/6/6-1-6/README.md +++ b/docs/release-notes/6/6-1-6/README.md @@ -1,16 +1,16 @@ --- - title: OpenProject 6.1.6 - sidebar_navigation: - title: 6.1.6 - release_version: 6.1.6 - release_date: 2017-03-20 +title: OpenProject 6.1.6 +sidebar_navigation: + title: 6.1.6 +release_version: 6.1.6 +release_date: 2017-03-20 --- # OpenProject 6.1.6 The release contains an important security fix regarding session expiry. -For details on the security fix, take a look at the +For details on the security fix, take a look at the [release news](https://www.openproject.org/blog/openproject-6-1-6-released-security-fix/). We recommend the update to the current version. diff --git a/docs/release-notes/6/README.md b/docs/release-notes/6/README.md index 7e4eb6812132..19a2137dc5e2 100644 --- a/docs/release-notes/6/README.md +++ b/docs/release-notes/6/README.md @@ -21,4 +21,4 @@ title: OpenProject Version 6 Release Notes | [OpenProject 6.0.3](6-0-3/) | 2016-08-16 | | [OpenProject 6.0.2](6-0-2/) | 2016-08-10 | | [OpenProject 6.0.1](6-0-1/) | 2016-08-01 | -| [OpenProject 6.0.0](6-0-0/) | 2016-05-27 | \ No newline at end of file +| [OpenProject 6.0.0](6-0-0/) | 2016-05-27 | diff --git a/docs/release-notes/7/7-0-0/README.md b/docs/release-notes/7/7-0-0/README.md index 2443f8de19ab..6f683fba2575 100644 --- a/docs/release-notes/7/7-0-0/README.md +++ b/docs/release-notes/7/7-0-0/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 7.0.0 - sidebar_navigation: - title: 7.0.0 - release_version: 7.0.0 - release_date: 2017-05-18 +title: OpenProject 7.0.0 +sidebar_navigation: + title: 7.0.0 +release_version: 7.0.0 +release_date: 2017-05-18 --- @@ -21,16 +21,12 @@ work package table ([#13785](https://community.openproject.org/wp/13785)). The new timeline is much more interactive and user-friendly than the old timeline. - - ## Display hierarchies in work package table You can display hierarchies on the work package table and collapse and expand them ([#24647](https://community.openproject.org/wp/24647)). - - ## Attribute group configuration for work package types With OpenProject 7.0 you can configure which attributes @@ -40,8 +36,6 @@ are displayed for a work package type You can therefore control which attributes are shown and which are hidden by default. - - ## Filter based on date in work package table The work package table now supports filtering based on fixed dates. This @@ -49,8 +43,6 @@ affects all date attributes (e.g. start / due date, created on / updated on) ([#22585](https://community.openproject.org/projects/telekom/work_packages/22585)). - - ## New header navigation The header navigation in OpenProject is updated and displays the current @@ -58,16 +50,12 @@ project. Additionally, the logo has been centered and existing menus have been reordered ([#24465](https://community.openproject.org/projects/design/work_packages/24465)). - - ## Archive and delete projects from project settings As an administrator you can archive and delete projects right from the project settings ([#24913](https://community.openproject.org/wp/24913)). - - ## Zen-mode on work package page With the zen mode on the work package table, you can maximize the @@ -76,11 +64,9 @@ available screen real estate by hiding the side and top navigation This provides a cleaner and larger user interface to work with. - - ## Multi-select custom fields (Enterprise add-on) -Users of the OpenProject [Enterprise on-premises](https://www.openproject.org/enterprise-edition/) +Users of the OpenProject [Enterprise on-premises](https://www.openproject.org/enterprise-edition/) and [Enterprise cloud](https://www.openproject.org/enterprise-edition/#hosting-options) can create multi-select custom fields ([#24793](https://community.openproject.org/wp/24793)). @@ -88,8 +74,6 @@ custom fields With these custom fields you can select multiple values for work package custom fields at once and also filter based on them. - - ## Logo upload and custom color scheme (Enterprise add-on) Users of the OpenProject Enterprise cloud and Enterprise on-premises edition can upload @@ -99,8 +83,6 @@ Additionally, you can change the colors by using a custom color scheme ([#18099](https://community.openproject.org/projects/gmbh/work_packages/18099), [#24460](https://community.openproject.org/projects/gmbh/work_packages/24460)). - - ## Performance improvements The performance – especially for the work package table – has been improved. Loading and displaying work packages is faster. @@ -116,4 +98,3 @@ OpenProject 7.0 contains a large number of bugs fixes. For an extensive overview of bug fixes please refer to the [following list](https://community.openproject.org/projects/openproject/work_packages?query_props=%7B%22c%22:%5B%22id%22,%22subject%22,%22type%22,%22status%22,%22assignee%22%5D,%22p%22:%22openproject%22,%22t%22:%22parent:desc%22,%22f%22:%5B%7B%22n%22:%22version%22,%22o%22:%22%253D%22,%22t%22:%22list_optional%22,%22v%22:%22750%22%7D,%7B%22n%22:%22type%22,%22o%22:%22%253D%22,%22t%22:%22list_model%22,%22v%22:%221%22%7D,%7B%22n%22:%22subprojectId%22,%22o%22:%22*%22,%22t%22:%22list_subprojects%22,%22v%22:%5B%5D%7D%5D,%22pa%22:1,%22pp%22:20%7D). - diff --git a/docs/release-notes/7/7-0-1/README.md b/docs/release-notes/7/7-0-1/README.md index 03a070fc5a57..cb2e954c334d 100644 --- a/docs/release-notes/7/7-0-1/README.md +++ b/docs/release-notes/7/7-0-1/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 7.0.1 - sidebar_navigation: - title: 7.0.1 - release_version: 7.0.1 - release_date: 2017-06-08 +title: OpenProject 7.0.1 +sidebar_navigation: + title: 7.0.1 +release_version: 7.0.1 +release_date: 2017-06-08 --- @@ -55,8 +55,6 @@ Thanks a lot to the community, in particular to Mike Lewis and Harsha BS for reporting and fixing bugs! For further information on the release, please refer to the [Changelog -v7.0.1](https://community.openproject.org/versions/924) +v7.0.1](https://community.openproject.org/versions/924) or take a look at [GitHub](https://github.com/opf/openproject/tree/v7.0.1). - - diff --git a/docs/release-notes/7/7-0-2/README.md b/docs/release-notes/7/7-0-2/README.md index 7cbb7e49c550..a0dc63bee3c8 100644 --- a/docs/release-notes/7/7-0-2/README.md +++ b/docs/release-notes/7/7-0-2/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 7.0.2 - sidebar_navigation: - title: 7.0.2 - release_version: 7.0.2 - release_date: 2017-06-12 +title: OpenProject 7.0.2 +sidebar_navigation: + title: 7.0.2 +release_version: 7.0.2 +release_date: 2017-06-12 --- @@ -34,8 +34,6 @@ Thanks a lot to the community, in particular to Peter Spiess-Knafl for reporting bugs! For further information on the release, please refer to the [Changelog -v7.0.2](https://community.openproject.org/versions/837) +v7.0.2](https://community.openproject.org/versions/837) or take a look at [GitHub](https://github.com/opf/openproject/tree/v7.0.2). - - diff --git a/docs/release-notes/7/7-0-3/README.md b/docs/release-notes/7/7-0-3/README.md index a8ac4b4b253a..737ef274f3de 100644 --- a/docs/release-notes/7/7-0-3/README.md +++ b/docs/release-notes/7/7-0-3/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 7.0.3 - sidebar_navigation: - title: 7.0.3 - release_version: 7.0.3 - release_date: 2017-06-29 +title: OpenProject 7.0.3 +sidebar_navigation: + title: 7.0.3 +release_version: 7.0.3 +release_date: 2017-06-29 --- @@ -44,8 +44,6 @@ Seekurity SAS de C.V, Peter F, Jochen Gehlbach and Ole Odendahl for reporting bugs! For further information on the release, please refer to the [Changelog -v7.0.3](https://community.openproject.org/versions/839) +v7.0.3](https://community.openproject.org/versions/839) or take a look at [GitHub](https://github.com/opf/openproject/tree/v7.0.3). - - diff --git a/docs/release-notes/7/7-1-0/README.md b/docs/release-notes/7/7-1-0/README.md index dda762c37d88..d068f4fab299 100644 --- a/docs/release-notes/7/7-1-0/README.md +++ b/docs/release-notes/7/7-1-0/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 7.1.0 - sidebar_navigation: - title: 7.1.0 - release_version: 7.1.0 - release_date: 2017-07-04 +title: OpenProject 7.1.0 +sidebar_navigation: + title: 7.1.0 +release_version: 7.1.0 +release_date: 2017-07-04 --- @@ -20,7 +20,7 @@ bug fixes included. - The timeline zoom factor is now saved in queries: When you open a saved timeline query the same zoom level as before is shown ([#25318](https://community.openproject.org/wp/25318)). - - As a user of the [Enterprise cloud edition](https://www.openproject.org/enterprise-edition/#hosting-options) or + - As a user of the [Enterprise cloud edition](https://www.openproject.org/enterprise-edition/#hosting-options) or [Enterprise on-premises edition](https://www.openproject.org/enterprise-edition/), you can now upload a custom favicon which is shown in the browser. You can also set a touch icon which is shown on smartphones (e.g. when @@ -91,8 +91,6 @@ Thanks a lot to the community, in particular to Peter F, Jochen Gehlbach and Ole Odendahl for reporting bugs! For further information on the release, please refer to the [Changelog -v7.1.0](https://community.openproject.org/versions/836) +v7.1.0](https://community.openproject.org/versions/836) or take a look at [GitHub](https://github.com/opf/openproject/tree/v7.1.0). - - diff --git a/docs/release-notes/7/7-2-0/README.md b/docs/release-notes/7/7-2-0/README.md index ccf204fb1c27..7e8fddd45fd3 100644 --- a/docs/release-notes/7/7-2-0/README.md +++ b/docs/release-notes/7/7-2-0/README.md @@ -1,12 +1,11 @@ --- - title: OpenProject 7.2.0 - sidebar_navigation: - title: 7.2.0 - release_version: 7.2.0 - release_date: 2017-08-09 +title: OpenProject 7.2.0 +sidebar_navigation: + title: 7.2.0 +release_version: 7.2.0 +release_date: 2017-08-09 --- - # OpenProject 7.2 OpenProject 7.2 includes several improvements: Relations can be @@ -16,53 +15,41 @@ possible to use copy / paste to add screenshots from the clipboard. Users of the OpenProject Enterprise cloud and Enterprise on-premises edition can specify attribute help texts which make working with attributes easier. -### Gantt chart includes weekends, subject and dates +## Gantt chart includes weekends, subject and dates The Gantt chart highlights the weekend (Saturday, Sunday) so users can see when to not schedule phases or milestones. Additionally, the subject is shown in the Gantt chart and start and due date is visible on hover. - - -### Full-width Gantt chart / timeline +## Full-width Gantt chart / timeline By removing columns from the work package table the width of the Gantt chart can be increased. By removing all columns, the Gantt chart expands to almost the entire width of the page. - - -### Add screenshots to work package description and comments with copy / paste +## Add screenshots to work package description and comments with copy / paste You can add screenshots to work packages by copying and pasting them into the description, the comments or custom fields of type long text. - - -### Show only comments on work package activity tab +## Show only comments on work package activity tab When working with long work package activities it can get difficult to see the most important information. You can choose to only show comments on the activity tab to hide all other activity entries. - - -### Relations in the work package table (Enterprise add-on) +## Relations in the work package table (Enterprise add-on) With OpenProject 7.2 you can show relation columns in the work package table. A label shows how many related elements a work package has. By clicking on the label, the related work packages are shown. - - -### Attribute help texts (Enterprise add-on) +## Attribute help texts (Enterprise add-on) Users of the OpenProject Enterprise cloud and Enterprise on-premises edition can specify attribute help texts which show additional information for attributes (e.g. custom fields). - - ## Improved usability and design OpenProject 7.2 includes several usability improvements. @@ -75,6 +62,4 @@ at the label shown next to the *Relations* tab. OpenProject 7.2 contains a large number of bugs fixes. -For an extensive overview of bug fixes please refer to the [following -list](https://community.openproject.org/projects/openproject/work_packages?query_props=%7B%22c%22:%5B%22id%22,%22subject%22,%22type%22,%22status%22,%22assignee%22%5D,%22tzl%22:%22days%22,%22hi%22:true,%22t%22:%22parent:desc%22,%22f%22:%5B%7B%22n%22:%22version%22,%22o%22:%22%253D%22,%22v%22:%5B%22824%22%5D%7D,%7B%22n%22:%22type%22,%22o%22:%22%253D%22,%22v%22:%5B%221%22%5D%7D,%7B%22n%22:%22subprojectId%22,%22o%22:%22*%22,%22v%22:%5B%5D%7D%5D,%22pa%22:1,%22pp%22:20%7D). - +For an extensive overview of bug fixes please refer to the [following list](https://community.openproject.org/projects/openproject/work_packages?query_props=%7B%22c%22:%5B%22id%22,%22subject%22,%22type%22,%22status%22,%22assignee%22%5D,%22tzl%22:%22days%22,%22hi%22:true,%22t%22:%22parent:desc%22,%22f%22:%5B%7B%22n%22:%22version%22,%22o%22:%22%253D%22,%22v%22:%5B%22824%22%5D%7D,%7B%22n%22:%22type%22,%22o%22:%22%253D%22,%22v%22:%5B%221%22%5D%7D,%7B%22n%22:%22subprojectId%22,%22o%22:%22*%22,%22v%22:%5B%5D%7D%5D,%22pa%22:1,%22pp%22:20%7D). diff --git a/docs/release-notes/7/7-2-1/README.md b/docs/release-notes/7/7-2-1/README.md index 176d6b119a67..0843d0517d9a 100644 --- a/docs/release-notes/7/7-2-1/README.md +++ b/docs/release-notes/7/7-2-1/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 7.2.1 - sidebar_navigation: - title: 7.2.1 - release_version: 7.2.1 - release_date: 2017-08-16 +title: OpenProject 7.2.1 +sidebar_navigation: + title: 7.2.1 +release_version: 7.2.1 +release_date: 2017-08-16 --- # OpenProject 7.2.1 @@ -35,8 +35,6 @@ Thanks a lot to the community, in particular to Mark Brown for reporting bugs! For further information on the release, please refer to the [Changelog -v7.2.1](https://community.openproject.org/versions/843) +v7.2.1](https://community.openproject.org/versions/843) or take a look at [GitHub](https://github.com/opf/openproject/tree/v7.2.1). - - diff --git a/docs/release-notes/7/7-2-2/README.md b/docs/release-notes/7/7-2-2/README.md index ac6138dffd4e..83e36a173225 100644 --- a/docs/release-notes/7/7-2-2/README.md +++ b/docs/release-notes/7/7-2-2/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 7.2.2 - sidebar_navigation: - title: 7.2.2 - release_version: 7.2.2 - release_date: 2017-09-04 +title: OpenProject 7.2.2 +sidebar_navigation: + title: 7.2.2 +release_version: 7.2.2 +release_date: 2017-09-04 --- # OpenProject 7.2.2 @@ -43,7 +43,7 @@ Hillenbrand, and Marc Vollmer for reporting bugs! For further information on the 7.2.2 release, please refer to the [Changelog -v7.2.2](https://community.openproject.org/versions/846) +v7.2.2](https://community.openproject.org/versions/846) or take a look at [GitHub](https://github.com/opf/openproject/tree/v7.2.2). @@ -56,7 +56,3 @@ Installation](https://www.openproject.org/download-and-installation/) page. For more information, please also see ticket \[[#26144](https://community.openproject.org/wp/26144)\] and [this forum post](https://community.openproject.org/topics/8114). - - - - diff --git a/docs/release-notes/7/7-2-3/README.md b/docs/release-notes/7/7-2-3/README.md index 3e3df0dfd416..9799e5c0a90e 100644 --- a/docs/release-notes/7/7-2-3/README.md +++ b/docs/release-notes/7/7-2-3/README.md @@ -1,12 +1,14 @@ --- - title: OpenProject 7.2.3 - sidebar_navigation: - title: 7.2.3 - release_version: 7.2.3 - release_date: 2017-09-04 +title: OpenProject 7.2.3 +sidebar_navigation: + title: 7.2.3 +release_version: 7.2.3 +release_date: 2017-09-04 --- -## Bug: Assigned to filter returns work packages set to assignee’s group. +# OpenProject 7.2.3 + +## Bug: Assigned to filter returns work packages set to assignee’s group When filtering by *Assigned to* with a single user selected, the filter returns work packages assigned to that user. Since OpenProject 7.0, it @@ -24,7 +26,3 @@ If you want to filter for this exact behavior, a new filter named group, and any users within Bug reference: [#26207](https://community.openproject.org/wp/26207) - - - - diff --git a/docs/release-notes/7/7-3-0/README.md b/docs/release-notes/7/7-3-0/README.md index ffbff1cffa87..2c795cba29cc 100644 --- a/docs/release-notes/7/7-3-0/README.md +++ b/docs/release-notes/7/7-3-0/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 7.3.0 - sidebar_navigation: - title: 7.3.0 - release_version: 7.3.0 - release_date: 2017-09-29 +title: OpenProject 7.3.0 +sidebar_navigation: + title: 7.3.0 +release_version: 7.3.0 +release_date: 2017-09-29 --- # OpenProject 7.3 @@ -25,8 +25,6 @@ example show the progress (in %) and the assignee directly in the Gantt chart without having to include those attributes as separate work package columns. - - ## Auto zoom in Gantt chart Especially for large projects Gantt charts can become difficult to @@ -35,8 +33,6 @@ adjust the zoom level, we implemented an intelligent zoom button. This allows you to immediately switch to the optimal zoom level to see all work packages without zooming out too much. - - ## Notify users with @notations on work package page While working with work packages, you may want to quickly reference a @@ -47,8 +43,6 @@ clear and personal to directly address the person. This is possible with a description), simply enter an *@* sign, followed by the user’s name. The user then receives an email notification. - - ## Resize work package split screen with drag & drop With OpenProject 7.3 you can resize the work package split screen using @@ -57,8 +51,6 @@ the width of the split screen. OpenProject remembers the new size, so you don’t have to resize the split screen whenever you open a new work package. - - ## Breadcrumb on work package page Work packages are often part of a hierarchy which is not immediately @@ -67,8 +59,6 @@ view. In order to make the hierarchy more transparent, OpenProject 7.3 introduces a breadcrumb for work packages (shown in both the fullscreen and split screen view). - - ## Improved usability and design OpenProject 7.3 includes several usability improvements. @@ -98,5 +88,5 @@ package to another project. OpenProject 7.3 contains a large number of bugs fixes. -For an extensive overview of bug fixes please refer to the +For an extensive overview of bug fixes please refer to the [following list](https://community.openproject.org/projects/openproject/work_packages?query_props=%7B%22c%22:%5B%22id%22,%22subject%22,%22type%22,%22status%22,%22assignee%22%5D,%22tzl%22:%22days%22,%22hi%22:true,%22t%22:%22parent:desc%22,%22f%22:%5B%7B%22n%22:%22version%22,%22o%22:%22%253D%22,%22v%22:%5B%22841%22%5D%7D,%7B%22n%22:%22type%22,%22o%22:%22%253D%22,%22v%22:%5B%221%22%5D%7D,%7B%22n%22:%22subprojectId%22,%22o%22:%22*%22,%22v%22:%5B%5D%7D%5D,%22pa%22:1,%22pp%22:20%7D). diff --git a/docs/release-notes/7/7-3-1/README.md b/docs/release-notes/7/7-3-1/README.md index 5636481bcd45..c541864290b4 100644 --- a/docs/release-notes/7/7-3-1/README.md +++ b/docs/release-notes/7/7-3-1/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 7.3.1 - sidebar_navigation: - title: 7.3.1 - release_version: 7.3.1 - release_date: 2017-11-03 +title: OpenProject 7.3.1 +sidebar_navigation: + title: 7.3.1 +release_version: 7.3.1 +release_date: 2017-11-03 --- # OpenProject 7.3.1 @@ -37,8 +37,7 @@ Thanks a lot to the community, in particular to Frank Michler, Ottavio Campana and Rob Guinness for reporting bugs! -For further information on the 7.3.1 release, please refer to the -[Changelog v7.3.1](https://community.openproject.org/versions/851) +For further information on the 7.3.1 release, please refer to the +[Changelog v7.3.1](https://community.openproject.org/versions/851) or take a look at [GitHub](https://github.com/opf/openproject/tree/v7.3.1). - diff --git a/docs/release-notes/7/7-3-2/README.md b/docs/release-notes/7/7-3-2/README.md index 41d41be17d16..c0f0662cefb2 100644 --- a/docs/release-notes/7/7-3-2/README.md +++ b/docs/release-notes/7/7-3-2/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 7.3.2 - sidebar_navigation: - title: 7.3.2 - release_version: 7.3.2 - release_date: 2017-11-23 +title: OpenProject 7.3.2 +sidebar_navigation: + title: 7.3.2 +release_version: 7.3.2 +release_date: 2017-11-23 --- # OpenProject 7.3.2 @@ -21,6 +21,6 @@ Thanks a lot to the community, in particular to Chris Jornlin and Steve Manning for reporting bugs! For further information on the 7.3.2 release, please refer to -the [Changelog v7.3.2](https://community.openproject.org/versions/852) +the [Changelog v7.3.2](https://community.openproject.org/versions/852) or take a look at [GitHub](https://github.com/opf/openproject/tree/v7.3.2). diff --git a/docs/release-notes/7/7-4-0/README.md b/docs/release-notes/7/7-4-0/README.md index c45baeaa044d..47fc84578e85 100644 --- a/docs/release-notes/7/7-4-0/README.md +++ b/docs/release-notes/7/7-4-0/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 7.4.0 - sidebar_navigation: - title: 7.4.0 - release_version: 7.4.0 - release_date: 2017-12-15 +title: OpenProject 7.4.0 +sidebar_navigation: + title: 7.4.0 +release_version: 7.4.0 +release_date: 2017-12-15 --- # OpenProject 7.4 @@ -14,8 +14,8 @@ been combined. Additionally, you can resize the Gantt chart via drag and drop and the work package status is highlighted more prominently. As a user of the -[Enterprise cloud](https://www.openproject.org/enterprise-edition/#hosting-options) or -[Enterprise on-premises](https://www.openproject.org/enterprise-edition/), +[Enterprise cloud](https://www.openproject.org/enterprise-edition/#hosting-options) or +[Enterprise on-premises](https://www.openproject.org/enterprise-edition/), custom fields are shown in the project list. In addition, two factor authentication is available for Enterprise @@ -26,7 +26,7 @@ edition and Enterprise cloud edition users. With OpenProject 7.4 the project list is combined with the project admin list. As a user you can choose to expand or collapse the project description. As a result, you can see all projects in one place. -As a user of the [Enterprise on-premises](https://www.openproject.org/enterprise-edition/) +As a user of the [Enterprise on-premises](https://www.openproject.org/enterprise-edition/) or [Enterprise cloud](https://www.openproject.org/enterprise-edition/#hosting-options), you can also see project custom fields (e.g. project status, project responsible) @@ -35,10 +35,9 @@ fields. This provides a good foundation for project portfolio management. We removed the projects entry from the administration. Administrators can simply navigate to the project list and copy, archive or delete -projects from the list view. For more information take a look at +projects from the list view. For more information take a look at [this blog post](https://www.openproject.org/blog/openproject-7-4-project-list-moves-administration-view-projects-page/). - ## Resize Gantt chart with drag & drop A frequent request we received is the ability to easily resize the Gantt @@ -46,8 +45,6 @@ chart. This is possible with OpenProject 7.4. Simply select the handle on the left side of the Gantt chart drag to increase or decrease the width of the Gantt chart. - - ## Work package status more prominent The status of a work package (e.g. task, phase or milestone) is one of @@ -74,8 +71,6 @@ overview page, from the wiki page or from a meeting. It is even possible to set a default type to allow users to rapidly create e.g. bugs or tasks. - - ## Two factor authentication (Enterprise add-on) Users of the OpenProject Enterprise cloud and Enterprise on-premises edition can activate two @@ -88,7 +83,7 @@ provided. This provides a much higher level of security. ## OpenProject webhooks -OpenProject offers an [extensive API](../../../api/) +OpenProject offers an [extensive API](../../../api/) to synchronize data between OpenProject and third party applications. With OpenProject 7.4, OpenProject also offers a webhook plugin which can @@ -119,6 +114,5 @@ We optimized the mobile view for the work package view. OpenProject 7.4 contains a large number of bugs fixes. -For an extensive overview of bug fixes please refer to the +For an extensive overview of bug fixes please refer to the [following list](https://community.openproject.org/projects/openproject/work_packages?query_props=%7B%22c%22:%5B%22id%22,%22subject%22,%22type%22,%22status%22,%22assignee%22%5D,%22tzl%22:%22days%22,%22hi%22:true,%22g%22:%22%22,%22t%22:%22parent:desc%22,%22f%22:%5B%7B%22n%22:%22version%22,%22o%22:%22%253D%22,%22v%22:%5B%22845%22%5D%7D,%7B%22n%22:%22type%22,%22o%22:%22%253D%22,%22v%22:%5B%221%22%5D%7D,%7B%22n%22:%22subprojectId%22,%22o%22:%22*%22,%22v%22:%5B%5D%7D%5D,%22pa%22:1,%22pp%22:20%7D). - diff --git a/docs/release-notes/7/7-4-1/README.md b/docs/release-notes/7/7-4-1/README.md index e72090bba8e5..f90a004235d0 100644 --- a/docs/release-notes/7/7-4-1/README.md +++ b/docs/release-notes/7/7-4-1/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 7.4.1 - sidebar_navigation: - title: 7.4.1 - release_version: 7.4.1 - release_date: 2018-02-13 +title: OpenProject 7.4.1 +sidebar_navigation: + title: 7.4.1 +release_version: 7.4.1 +release_date: 2018-02-13 --- # OpenProject 7.4.1 @@ -17,8 +17,6 @@ Denial-of-Service attack (CVE-2017-15412) For further information on the 7.4.1 release, please refer to -the [Changelog v7.4.1](https://community.openproject.org/versions/855) +the [Changelog v7.4.1](https://community.openproject.org/versions/855) or take a look at [GitHub](https://github.com/opf/openproject/tree/v7.4.1). - - diff --git a/docs/release-notes/7/7-4-2/README.md b/docs/release-notes/7/7-4-2/README.md index f8100c1bf641..315da096d381 100644 --- a/docs/release-notes/7/7-4-2/README.md +++ b/docs/release-notes/7/7-4-2/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 7.4.2 - sidebar_navigation: - title: 7.4.2 - release_version: 7.4.2 - release_date: 2018-03-14 +title: OpenProject 7.4.2 +sidebar_navigation: + title: 7.4.2 +release_version: 7.4.2 +release_date: 2018-03-14 --- # OpenProject 7.4.2 @@ -29,8 +29,6 @@ sorting by name also sorts by their effective date For further information on the 7.4.2 release, please refer to -the [Changelog v7.4.2](https://community.openproject.org/versions/857) +the [Changelog v7.4.2](https://community.openproject.org/versions/857) or take a look at [GitHub](https://github.com/opf/openproject/tree/v7.4.2). - - diff --git a/docs/release-notes/7/7-4-3/README.md b/docs/release-notes/7/7-4-3/README.md index 1631b2dc8d69..da7e3719839a 100644 --- a/docs/release-notes/7/7-4-3/README.md +++ b/docs/release-notes/7/7-4-3/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 7.4.3 - sidebar_navigation: - title: 7.4.3 - release_version: 7.4.3 - release_date: 2018-04-03 +title: OpenProject 7.4.3 +sidebar_navigation: + title: 7.4.3 +release_version: 7.4.3 +release_date: 2018-04-03 --- # OpenProject 7.4.3 @@ -46,5 +46,5 @@ announcement](https://www.ruby-lang.org/en/news/2018/03/28/ruby-2-4-4-released/) - SMTP authentication *none* can now be configured through the system settings. ([#27284](https://community.openproject.org/wp/27284)) - For further information on the 7.4.3 release, please refer to - the [Changelog v7.4.3](https://community.openproject.org/versions/890) + the [Changelog v7.4.3](https://community.openproject.org/versions/890) or take a look at [GitHub](https://github.com/opf/openproject/tree/v7.4.3). diff --git a/docs/release-notes/7/7-4-4/README.md b/docs/release-notes/7/7-4-4/README.md index 97b8f57cc9a3..60b1a175bd5a 100644 --- a/docs/release-notes/7/7-4-4/README.md +++ b/docs/release-notes/7/7-4-4/README.md @@ -1,59 +1,46 @@ --- - title: OpenProject 7.4.4 - sidebar_navigation: - title: 7.4.4 - release_version: 7.4.4 - release_date: 2018-05-07 +title: OpenProject 7.4.4 +sidebar_navigation: + title: 7.4.4 +release_version: 7.4.4 +release_date: 2018-05-07 --- # OpenProject 7.4.4 -Version 7.4.4 of OpenProject has been released. This release contains the -following bug - fixes: - - - Work package modification for regular users on MySQL-based - instances ([#27237](https://community.openproject.org/wp/27237)) - - Child work packages were not deleted when the parent element is - deleted ([#27280](https://community.openproject.org/wp/27280)) - - The fuzzy project autocompletion has been corrected to provide - better matching when a substring is matched - ([#27447](https://community.openproject.org/wp/27447)) - - The GitHub integration plugin did not properly receive events due to - a naming clash - ([#27448](https://community.openproject.org/wp/27448)) - - Creating new wiki pages from a wiki link (e.g, *\[\[ - Wiki - page \]\] *) now retains the correct title instead of the generated - URL slug ([#27462](https://community.openproject.org/wp/27462)) - - A subsequent search for documents in the global search disabled the - documents search checkbox - ([#27479](https://community.openproject.org/wp/27479)) - - The reset button for RSS tokens generated a new API token instead - ([#27498](https://community.openproject.org/wp/27498)) - - Wiki - start pages - (titled *Wiki*) - could not be renamed back if the name was changed at one point - ([#27576](https://community.openproject.org/wp/27576)) - - - -### Changes - - - Meetings - plugin: The *close* button of the show page now requires a - confirmation before closing - ([#27336](https://community.openproject.org/wp/27336)) - - The restriction to create a time entry with at maximum 1000 hours on - a single work package has been lifted - ([#27457](https://community.openproject.org/wp/27457)) - - - -For more information, please see the [v7.4.4 version in our -community](https://community.openproject.org/versions/924) or take -a look -at [GitHub](https://github.com/opf/openproject/tree/v7.4.4). - - +Version 7.4.4 of OpenProject has been released. This release contains: + +## Bug fixes + +- Work package modification for regular users on MySQL-based + instances ([#27237](https://community.openproject.org/wp/27237)) +- Child work packages were not deleted when the parent element is + deleted ([#27280](https://community.openproject.org/wp/27280)) +- The fuzzy project autocompletion has been corrected to provide + better matching when a substring is matched + ([#27447](https://community.openproject.org/wp/27447)) +- The GitHub integration plugin did not properly receive events due to + a naming clash + ([#27448](https://community.openproject.org/wp/27448)) +- Creating new wiki pages from a wiki link (e.g, *\[\[Wiki page\]\]*) now retains the correct title instead of the + generated URL slug ([#27462](https://community.openproject.org/wp/27462)) +- A subsequent search for documents in the global search disabled the + documents search checkbox + ([#27479](https://community.openproject.org/wp/27479)) +- The reset button for RSS tokens generated a new API token instead + ([#27498](https://community.openproject.org/wp/27498)) +- Wiki start pages (titled *Wiki*) could not be renamed back if the name was changed at one point + ([#27576](https://community.openproject.org/wp/27576)) + +## Changes + +- Meetings + plugin: The *close* button of the show page now requires a + confirmation before closing + ([#27336](https://community.openproject.org/wp/27336)) +- The restriction to create a time entry with at maximum 1000 hours on + a single work package has been lifted + ([#27457](https://community.openproject.org/wp/27457)) + +For more information, please see the [v7.4.4 version in our community](https://community.openproject.org/versions/924) +or take a look at [GitHub](https://github.com/opf/openproject/tree/v7.4.4). diff --git a/docs/release-notes/7/7-4-5/README.md b/docs/release-notes/7/7-4-5/README.md index 67b007fa0081..4976528666c1 100644 --- a/docs/release-notes/7/7-4-5/README.md +++ b/docs/release-notes/7/7-4-5/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 7.4.5 - sidebar_navigation: - title: 7.4.5 - release_version: 7.4.5 - release_date: 2018-05-28 +title: OpenProject 7.4.5 +sidebar_navigation: + title: 7.4.5 +release_version: 7.4.5 +release_date: 2018-05-28 --- # OpenProject 7.4.5 @@ -11,49 +11,46 @@ Version 7.4.5 of OpenProject has been released. The release contains several bug fixes. We recommend the update to the current version. - - Fixed: Cookie *secure* flag was not applied in all cases even when - SSL was enabled - ([#27763](https://community.openproject.org/wp/27763)) - - Fixed: - Calendar widget on - *My page* overlapped the project dropdown - ([#27765](https://community.openproject.org/wp/27765)) - - Fixed: Removed text formatting other than references in commit - messages ([#27769](https://community.openproject.org/wp/27769)) - - Fixed: Flashing of content - on *My account* on initial page load - ([#25795](https://community.openproject.org/wp/25795)) - - Fixed: Chrome where the right column of a two-column work package - layout (on larger screens) was not receiving any clicks - ([#27687](https://community.openproject.org/wp/27687)) - - Fixed: Updating overridden labor and unit costs reset all other - overridden costs to their calculated values - ([#](https://community.openproject.org/wp/27692)[27692](https://community.openproject.org/wp/27692)) - - Fixed: Unable to update parent to previous sibling work package in - shared hierarchy - ([#27746](https://community.openproject.org/wp/27746)) - - Fixed: English language option displayed twice in the administration - ([#27696](https://community.openproject.org/wp/27696), - [#27751](https://community.openproject.org/wp/27751)) - - Improved: Error messages when dependent work package is invalid - (e.g., trying to save child with invalid parent) - - Improved: Parent wiki pages can be selected when creating new wiki - pages through content links - ([#26189](https://community.openproject.org/wp/26189)) - -For more information, please see the [v7.4.5 version in our -community](https://community.openproject.org/versions/990) or take -a look -at [GitHub](https://github.com/opf/openproject/tree/v7.4.5). - -Special thanks go to all OpenProject contributors for [reporting -bugs](../../../development/report-a-bug/) and helping -us to reproduce them. - -### DSGVO consenting feature +## Bug fixes and changes + +- Fixed: Cookie *secure* flag was not applied in all cases even when + SSL was enabled + ([#27763](https://community.openproject.org/wp/27763)) +- Fixed: + Calendar widget on + *My page* overlapped the project dropdown + ([#27765](https://community.openproject.org/wp/27765)) +- Fixed: Removed text formatting other than references in commit + messages ([#27769](https://community.openproject.org/wp/27769)) +- Fixed: Flashing of content + on *My account* on initial page load + ([#25795](https://community.openproject.org/wp/25795)) +- Fixed: Chrome where the right column of a two-column work package + layout (on larger screens) was not receiving any clicks + ([#27687](https://community.openproject.org/wp/27687)) +- Fixed: Updating overridden labor and unit costs reset all other + overridden costs to their calculated values + ([#](https://community.openproject.org/wp/27692)[27692](https://community.openproject.org/wp/27692)) +- Fixed: Unable to update parent to previous sibling work package in + shared hierarchy + ([#27746](https://community.openproject.org/wp/27746)) +- Fixed: English language option displayed twice in the administration + ([#27696](https://community.openproject.org/wp/27696), + [#27751](https://community.openproject.org/wp/27751)) +- Improved: Error messages when dependent work package is invalid + (e.g., trying to save child with invalid parent) +- Improved: Parent wiki pages can be selected when creating new wiki + pages through content links + ([#26189](https://community.openproject.org/wp/26189)) + +For more information, please see the [v7.4.5 version in our community](https://community.openproject.org/versions/990) +or take a look at [GitHub](https://github.com/opf/openproject/tree/v7.4.5). + +Special thanks go to all OpenProject contributors for [reporting bugs](../../../development/report-a-bug/) +and helping us to reproduce them. + +## DSGVO consenting feature Users can now be requested to consent into the privacy and usage policies of your instance. To configure consent, enable the setting in -the global administration under *System administration * \> *Users* - - +the global administration under *System administration* \> *Users* diff --git a/docs/release-notes/7/7-4-6/README.md b/docs/release-notes/7/7-4-6/README.md index 70a8e85862b8..a0d032484d54 100644 --- a/docs/release-notes/7/7-4-6/README.md +++ b/docs/release-notes/7/7-4-6/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 7.4.6 - sidebar_navigation: - title: 7.4.6 - release_version: 7.4.6 - release_date: 2018-07-10 +title: OpenProject 7.4.6 +sidebar_navigation: + title: 7.4.6 +release_version: 7.4.6 +release_date: 2018-07-10 --- # OpenProject 7.4.6 @@ -11,30 +11,27 @@ We released OpenProject 7.4.6. The release contains several bug fixes. We recommend the update to the current version. -#### Support for Ubuntu 18.04. +## Support for Ubuntu 18.04 OpenProject 7.4.6 packaged installation introduces support for Ubuntu -18.04. +18.04. ([#27799](https://community.openproject.org/wp/27799)) -#### Bug fixes and changes - - - Fixed: Poor performance when adding several work packages to a large - tree - ([#27878](https://community.openproject.org/wp/27878)) - - Fixed: Saving filter-selected list Custom Field with single value - results in error - ([#27833](https://community.openproject.org/wp/27833)) - - Fixed: Progress calculation for parents in bulk edit was not applied - ([#27975](https://community.openproject.org/wp/27975)) - - Fixed: CSS columns display in Chrome versions 65 to 66 due to - backface-visibility - ([#27823](https://community.openproject.org/wp/27823)) - - Improved: Performance on global activities page - ([#27582](https://community.openproject.org/wp/27582)) - -Special thanks go to all OpenProject contributors for [reporting -bugs](../../../development/report-a-bug/) and helping -us to reproduce them. - - +## Bug fixes and changes + +- Fixed: Poor performance when adding several work packages to a large + tree + ([#27878](https://community.openproject.org/wp/27878)) +- Fixed: Saving filter-selected list Custom Field with single value + results in error + ([#27833](https://community.openproject.org/wp/27833)) +- Fixed: Progress calculation for parents in bulk edit was not applied + ([#27975](https://community.openproject.org/wp/27975)) +- Fixed: CSS columns display in Chrome versions 65 to 66 due to + backface-visibility + ([#27823](https://community.openproject.org/wp/27823)) +- Improved: Performance on global activities page + ([#27582](https://community.openproject.org/wp/27582)) + +Special thanks go to all OpenProject contributors for [reporting bugs](../../../development/report-a-bug/) +and helping us to reproduce them. diff --git a/docs/release-notes/7/7-4-7/README.md b/docs/release-notes/7/7-4-7/README.md index a6f73c695c37..d900ff10e120 100644 --- a/docs/release-notes/7/7-4-7/README.md +++ b/docs/release-notes/7/7-4-7/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 7.4.7 - sidebar_navigation: - title: 7.4.7 - release_version: 7.4.7 - release_date: 2018-07-20 +title: OpenProject 7.4.7 +sidebar_navigation: + title: 7.4.7 +release_version: 7.4.7 +release_date: 2018-07-20 --- # OpenProject 7.4.7 @@ -11,24 +11,23 @@ We released OpenProject 7.4.7. The release contains some minor fixes regarding MessageBird adapter for Two-factor authentication. -#### Work packages PDF export with images +## Work packages PDF export with images Exporting a work package table can now optionally export image attachments of the work package. Additional options are added to the export modal. -#### Bug fixes and changes - - - Fixed: \[2FA\] Device ID not transmitted when resending with - different channel - \[[#28033](https://community.openproject.org/wp/28033)\] - - Fixed: \[2FA\] MessageBird: Originator may not be longer than 11 - characters \[[#28034](https://community.openproject.org/wp/28034)\] - - Fixed: \[2FA\] MessageBird: - work-package-types/#work-package-form-configuration-premium-featureUser - language may be - empty \[[#28035](https://community.openproject.org/wp/28035)\] - - Fixed: \[Styling\] Prevent scrolling body when reaching bottom of - project autocompleter - \[[#28039](https://community.openproject.org/wp/28039)\] +## Bug fixes and changes +- Fixed: \[2FA\] Device ID not transmitted when resending with + different channel + \[[#28033](https://community.openproject.org/wp/28033)\] +- Fixed: \[2FA\] MessageBird: Originator may not be longer than 11 + characters \[[#28034](https://community.openproject.org/wp/28034)\] +- Fixed: \[2FA\] MessageBird: + work-package-types/#work-package-form-configuration-premium-featureUser + language may be + empty \[[#28035](https://community.openproject.org/wp/28035)\] +- Fixed: \[Styling\] Prevent scrolling body when reaching bottom of + project autocompleter + \[[#28039](https://community.openproject.org/wp/28039)\] diff --git a/docs/release-notes/8/8-0-0/README.md b/docs/release-notes/8/8-0-0/README.md index 82f5f3fb61e2..80dd872ab871 100644 --- a/docs/release-notes/8/8-0-0/README.md +++ b/docs/release-notes/8/8-0-0/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 8.0.0 - sidebar_navigation: - title: 8.0.0 - release_version: 8.0.0 - release_date: 2018-08-29 +title: OpenProject 8.0.0 +sidebar_navigation: + title: 8.0.0 +release_version: 8.0.0 +release_date: 2018-08-29 --- @@ -40,8 +40,6 @@ around the Markdown format. When migrating to 8.0., your Textile documents will be converted to the new format automatically using pandoc. - - ## New side navigation Navigating within OpenProject is now even easier: The new side @@ -53,8 +51,6 @@ real estate, just hide the entire side navigation. In addition, work package views and wiki pages are now much easier to find and navigate to. - - ## Embedded work package tables With OpenProject 8 you can easily embed work package views and the Gantt @@ -63,8 +59,6 @@ chart in wiki pages This way you can display key project information (such as the current milestone plan) directly in a wiki page or in the project overview page. - - ## Full text search for work package attachments (Enterprise add-on) Looking for a specific document or some text in that document? This is @@ -75,8 +69,6 @@ You can either search by file name of the content of the file from the work package page. This allows you to quickly find all the work packages with certain attachments. - - ## Custom actions (Enterprise add-on) With OpenProject 8 you can model intelligent workflows using custom @@ -88,8 +80,6 @@ a work package with the click of a single button. This gives you a powerful way to easily and quickly update your work packages based on predefined workflows. You save time and avoid errors. - - ## Conditional formatting for work package table (Enterprise add-on) Rows in the work package page page can be highlighted based on the @@ -98,8 +88,6 @@ which tasks are most important or need attention. In addition, the due date can be highlighted so that you see right away which phases, milestones or tasks are due soon or overdue. - - ## Subelement groups for work package types (Enterprise add-on) To quickly add child work packages for an existing work package, you can @@ -108,8 +96,6 @@ small work package table as an attribute group to a work package. You can configure which columns and which types of child work packages are displayed. - - ## Usability improvements OpenProject’s overall usability has been improved. The functionality of @@ -118,13 +104,11 @@ In particular, the work package page configuration has been updated to be usable for embedded tables as well. In addition *Responsible* has been renamed to *Accountable*. - - ## New design With version 8, OpenProject gets a fresh new look: Both the OpenProject -logo and default color theme has been updated. As a user of the -OpenProject Enterprise cloud and Enterprise on-premises edition you can +logo and default color theme has been updated. As a user of the +OpenProject Enterprise cloud and Enterprise on-premises edition you can of course change the default color theme. ## Performance improvements @@ -145,7 +129,7 @@ OpenProject 8.0 contains a large number of bugs fixes. For an extensive overview of bug fixes please refer to the [following list](https://community.openproject.org/projects/openproject/work_packages?query_props=%7B%22c%22:%5B%22id%22,%22subject%22,%22type%22,%22status%22,%22assignee%22%5D,%22tzl%22:%22days%22,%22hi%22:false,%22g%22:%22%22,%22t%22:%22parent:desc%22,%22f%22:%5B%7B%22n%22:%22version%22,%22o%22:%22%253D%22,%22v%22:%5B%22818%22%5D%7D,%7B%22n%22:%22type%22,%22o%22:%22%253D%22,%22v%22:%5B%221%22%5D%7D,%7B%22n%22:%22subprojectId%22,%22o%22:%22*%22,%22v%22:%5B%5D%7D%5D,%22pa%22:1,%22pp%22:20%7D). -## Upgrading your installation to OpenProject 8.0. +## Upgrading your installation to OpenProject 8.0 If you’re on our hosted environment of OpenProject, you are already running on the latest version of OpenProject 8.0.0. For your local diff --git a/docs/release-notes/8/8-0-1/README.md b/docs/release-notes/8/8-0-1/README.md index 48945d49ac2d..b1060eb939b6 100644 --- a/docs/release-notes/8/8-0-1/README.md +++ b/docs/release-notes/8/8-0-1/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 8.0.1 - sidebar_navigation: - title: 8.0.1 - release_version: 8.0.1 - release_date: 2018-09-26 +title: OpenProject 8.0.1 +sidebar_navigation: + title: 8.0.1 +release_version: 8.0.1 +release_date: 2018-09-26 --- @@ -14,7 +14,7 @@ We released The release contains bug fixes from the 8.0 release. We recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Highlighting of timeline missing with highlighting mode none \[[#28564](https://community.openproject.org/wp/28564)\] @@ -47,7 +47,7 @@ updating to the newest version. - Fixed: Login dropdown labels were styled as buttons on hover \[[#28616](https://community.openproject.org/wp/28616)\] - Fixed: Editing work package after submission with - add\_work\_packages permission + add\_work\_packages permission \[[#28580](https://community.openproject.org/wp/28580)\] - Fixed: Fast click on subsequent query elements in the sidebar result in invalid table @@ -65,10 +65,8 @@ updating to the newest version. is invalid when creating new project \[[#28543](https://community.openproject.org/wp/28543)\] -#### Contributions +## Contributions A big thanks to community members for reporting bugs, especially to Marc Vollmer, Frank Schmid, and Nicolas Salguero for their aid in identifying and providing fixes for multiple bug reports. - - diff --git a/docs/release-notes/8/8-0-2/README.md b/docs/release-notes/8/8-0-2/README.md index ee9d09ba74b6..c0a074545f09 100644 --- a/docs/release-notes/8/8-0-2/README.md +++ b/docs/release-notes/8/8-0-2/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 8.0.2 - sidebar_navigation: - title: 8.0.2 - release_version: 8.0.2 - release_date: 2018-10-23 +title: OpenProject 8.0.2 +sidebar_navigation: + title: 8.0.2 +release_version: 8.0.2 +release_date: 2018-10-23 --- @@ -14,7 +14,7 @@ We released The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Relations cannot be added when OpenProject is running on relative URL root @@ -41,14 +41,10 @@ newest version. files will receive a forced *attachment* content disposition to ensure the file is not loaded in the browser. - - -#### Contributions +## Contributions Thanks to Github users @storm2513 and @akasparas for providing bugfixes as pull requests [on our GitHub project](https://github.com/opf/openproject). A big thanks to community members for reporting bugs and helping us identifying and providing fixes. - - diff --git a/docs/release-notes/8/8-2-0/README.md b/docs/release-notes/8/8-2-0/README.md index 7817f5148406..b56066fdbe46 100644 --- a/docs/release-notes/8/8-2-0/README.md +++ b/docs/release-notes/8/8-2-0/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 8.2.0 - sidebar_navigation: - title: 8.2.0 - release_version: 8.2.0 - release_date: 2018-12-17 +title: OpenProject 8.2.0 +sidebar_navigation: + title: 8.2.0 +release_version: 8.2.0 +release_date: 2018-12-17 --- @@ -69,5 +69,3 @@ fixes. For an overview, please take a look at the [list of bug fixes](https://community.openproject.org/projects/openproject/work_packages?query_props=%7B%22c%22%3A%5B%22id%22%2C%22subject%22%2C%22type%22%2C%22status%22%2C%22assignee%22%2C%22version%22%5D%2C%22hi%22%3Atrue%2C%22g%22%3A%22%22%2C%22t%22%3A%22parent%3Aasc%22%2C%22f%22%3A%5B%7B%22n%22%3A%22status%22%2C%22o%22%3A%22*%22%2C%22v%22%3A%5B%5D%7D%2C%7B%22n%22%3A%22version%22%2C%22o%22%3A%22%3D%22%2C%22v%22%3A%5B%221253%22%5D%7D%2C%7B%22n%22%3A%22type%22%2C%22o%22%3A%22%3D%22%2C%22v%22%3A%5B%221%22%5D%7D%2C%7B%22n%22%3A%22subprojectId%22%2C%22o%22%3A%22*%22%2C%22v%22%3A%5B%5D%7D%5D%2C%22pa%22%3A1%2C%22pp%22%3A20%7D). - - diff --git a/docs/release-notes/8/8-2-1/README.md b/docs/release-notes/8/8-2-1/README.md index 82742229bdd5..657c6970b312 100644 --- a/docs/release-notes/8/8-2-1/README.md +++ b/docs/release-notes/8/8-2-1/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 8.2.1 - sidebar_navigation: - title: 8.2.1 - release_version: 8.2.1 - release_date: 2019-02-14 +title: OpenProject 8.2.1 +sidebar_navigation: + title: 8.2.1 +release_version: 8.2.1 +release_date: 2019-02-14 --- @@ -14,9 +14,7 @@ We released The release contains several bug fixes and we recommend updating to the newest version. -#### Bug fixes and changes - - +## Bug fixes and changes - Fixed: Long heading in forum overlaps buttons \[[#28839](https://community.openproject.org/wp/28839)\] @@ -60,11 +58,7 @@ newest version. requested from our release servers to render the badge. This page also provides means to disable this check. - - -#### Contributions +## Contributions A big thanks to community members for reporting bugs and helping us identifying and providing fixes. - - diff --git a/docs/release-notes/8/8-3-0/README.md b/docs/release-notes/8/8-3-0/README.md index ffee8286f4a1..69d98de4a2b6 100644 --- a/docs/release-notes/8/8-3-0/README.md +++ b/docs/release-notes/8/8-3-0/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 8.3.0 - sidebar_navigation: - title: 8.3.0 - release_version: 8.3.0 - release_date: 2019-03-07 +title: OpenProject 8.3.0 +sidebar_navigation: + title: 8.3.0 +release_version: 8.3.0 +release_date: 2019-03-07 --- @@ -14,9 +14,7 @@ We released The release contains several bug fixes and we recommend updating to the newest version. -#### Notable changes - - +## Notable changes **Modernized My page grid implementation** @@ -67,96 +65,90 @@ The OpenProject APIv3 can now be authenticated using the OAuth2 standard. To register an OAuth applications, visit the new module under Administration \> OAuth applications. - -#### Bug fixes and changes - - - Feature: OAuth2 authorization flow - \[[#28952](https://community.openproject.org/wp/28952)\] - - Feature: Global Search: Autocompletion on work package subjects - \[[#29218](https://community.openproject.org/wp/29218)\] - - Feature: Auto completion for work package attributes - \[[#29257](https://community.openproject.org/wp/29257)\] - - Feature: Migrate existing my page data - \[[#29357](https://community.openproject.org/wp/29357)\] - - Feature: Global search defaults on work packages and shows a table - as result \[[#29388](https://community.openproject.org/wp/29388)\] - - Feature: Better error reporting for bulk edit - \[[#29561](https://community.openproject.org/wp/29561)\] - - Feature: Automatic calculation of work packages per pagination based - on widget height - \[[#29467](https://community.openproject.org/wp/29467)\] - - Changed: Draw work packages without end date up to the current date - in timeline - \[[#25471](https://community.openproject.org/wp/25471)\] - - Changed: Deactivate option “Use current date as start date for new - work packages” by default - \[[#29468](https://community.openproject.org/wp/29468)\] - - Changed: When sending iCalendar invitation, include email to user - who sends out invitation - \[[#29485](https://community.openproject.org/wp/29485)\] - - Changed: Projects are now being deleted in a background job. - - Fixed: Problems when exporting in unified diff - \[[#26599](https://community.openproject.org/wp/26599)\] - - Fixed: In repository module diff does not escape HTML tags that are - present in the compared code - \[[#26614](https://community.openproject.org/wp/26614)\] - - Fixed: Incompatible browsers warning not shown in IE11 and older FF - \[[#28484](https://community.openproject.org/wp/28484)\] - - Fixed: Table menu in WYSIWYG editor is cut off on smaller screens - \[[#28815](https://community.openproject.org/wp/28815)\] - - Fixed: Upgrading reverts protocol to HTTP - \[[#28954](https://community.openproject.org/wp/28954)\] - - Fixed: Icon texts are not consistently used in tables - \[[#29072](https://community.openproject.org/wp/29072)\] - - Fixed: Blank circles before work package’s type after upgrading to - 8.1 \[[#29082](https://community.openproject.org/wp/29082)\] - - Fixed: Dependencies for fulltext search in work package attachments - not installed with packager installation - \[[#29085](https://community.openproject.org/wp/29085)\] - - Fixed: Sorting doesn’t work with 8.1 when also using Hierarchy - \[[#29122](https://community.openproject.org/wp/29122)\] - - Fixed: Very large custom field is killing web browser - \[[#29136](https://community.openproject.org/wp/29136)\] - - Fixed: Delete projects in delayed job - \[[#29214](https://community.openproject.org/wp/29214)\] - - Fixed: SVN fails to get changesets in subfolders which start at a - revision greater than 1 - \[[#29402](https://community.openproject.org/wp/29402)\] - - Fixed: “Set Parent” not translated in work package view - \[[#29447](https://community.openproject.org/wp/29447)\] - - Fixed: WP content does not close right side gap - \[[#29448](https://community.openproject.org/wp/29448)\] - - Fixed: Redundant type declaration in relations tab - \[[#29460](https://community.openproject.org/wp/29460)\] - - Fixed: Better error handling on attachment max size exceeded - \[[#29461](https://community.openproject.org/wp/29461)\] - - Fixed: Improve structure for news section - \[[#29464](https://community.openproject.org/wp/29464)\] - - Fixed: Editor dropdown is cut off when opened to top - \[[#29482](https://community.openproject.org/wp/29482)\] - - Fixed: Custom fields for groups throw error message when set - \[[#29486](https://community.openproject.org/wp/29486)\] - - Fixed: Column shifts when opening autocompleter - \[[#29492](https://community.openproject.org/wp/29492)\] - - Fixed: Gantt chart not properly aligned when using groups - \[[#29497](https://community.openproject.org/wp/29497)\] - - Fixed: White space between first table row and header - \[[#29521](https://community.openproject.org/wp/29521)\] - - Fixed: Different font sizes on WP page - \[[#29528](https://community.openproject.org/wp/29528)\] - - Fixed: Cannot select category because font is invisible - \[[#29531](https://community.openproject.org/wp/29531)\] - - Fixed: Search bar too long on mobile Safari browser - \[[#29553](https://community.openproject.org/wp/29553)\] - - Fixed: Docker incoming-mails not logged - \[[#29575](https://community.openproject.org/wp/29575)\] - -#### Contributions - -A big thanks to community members for reporting bugs and helping us -identifying and providing fixes. - -Special thanks for reporting and finding bugs go to Nicolas Salguero, -Andy Shilton, Ricardo Vigatti, Michael Johannessen, Wojtek Chrobok, Timo -Lösch. - +## Bug fixes and changes + +- Feature: OAuth2 authorization flow + \[[#28952](https://community.openproject.org/wp/28952)\] +- Feature: Global Search: Autocompletion on work package subjects + \[[#29218](https://community.openproject.org/wp/29218)\] +- Feature: Auto completion for work package attributes + \[[#29257](https://community.openproject.org/wp/29257)\] +- Feature: Migrate existing my page data + \[[#29357](https://community.openproject.org/wp/29357)\] +- Feature: Global search defaults on work packages and shows a table + as result \[[#29388](https://community.openproject.org/wp/29388)\] +- Feature: Better error reporting for bulk edit + \[[#29561](https://community.openproject.org/wp/29561)\] +- Feature: Automatic calculation of work packages per pagination based + on widget height + \[[#29467](https://community.openproject.org/wp/29467)\] +- Changed: Draw work packages without end date up to the current date + in timeline + \[[#25471](https://community.openproject.org/wp/25471)\] +- Changed: Deactivate option “Use current date as start date for new + work packages” by default + \[[#29468](https://community.openproject.org/wp/29468)\] +- Changed: When sending iCalendar invitation, include email to user + who sends out invitation + \[[#29485](https://community.openproject.org/wp/29485)\] +- Changed: Projects are now being deleted in a background job. +- Fixed: Problems when exporting in unified diff + \[[#26599](https://community.openproject.org/wp/26599)\] +- Fixed: In repository module diff does not escape HTML tags that are + present in the compared code + \[[#26614](https://community.openproject.org/wp/26614)\] +- Fixed: Incompatible browsers warning not shown in IE11 and older FF + \[[#28484](https://community.openproject.org/wp/28484)\] +- Fixed: Table menu in WYSIWYG editor is cut off on smaller screens + \[[#28815](https://community.openproject.org/wp/28815)\] +- Fixed: Upgrading reverts protocol to HTTP + \[[#28954](https://community.openproject.org/wp/28954)\] +- Fixed: Icon texts are not consistently used in tables + \[[#29072](https://community.openproject.org/wp/29072)\] +- Fixed: Blank circles before work package’s type after upgrading to + 8.1 \[[#29082](https://community.openproject.org/wp/29082)\] +- Fixed: Dependencies for fulltext search in work package attachments + not installed with packager installation + \[[#29085](https://community.openproject.org/wp/29085)\] +- Fixed: Sorting doesn’t work with 8.1 when also using Hierarchy + \[[#29122](https://community.openproject.org/wp/29122)\] +- Fixed: Very large custom field is killing web browser + \[[#29136](https://community.openproject.org/wp/29136)\] +- Fixed: Delete projects in delayed job + \[[#29214](https://community.openproject.org/wp/29214)\] +- Fixed: SVN fails to get changesets in subfolders which start at a + revision greater than 1 + \[[#29402](https://community.openproject.org/wp/29402)\] +- Fixed: “Set Parent” not translated in work package view + \[[#29447](https://community.openproject.org/wp/29447)\] +- Fixed: WP content does not close right side gap + \[[#29448](https://community.openproject.org/wp/29448)\] +- Fixed: Redundant type declaration in relations tab + \[[#29460](https://community.openproject.org/wp/29460)\] +- Fixed: Better error handling on attachment max size exceeded + \[[#29461](https://community.openproject.org/wp/29461)\] +- Fixed: Improve structure for news section + \[[#29464](https://community.openproject.org/wp/29464)\] +- Fixed: Editor dropdown is cut off when opened to top + \[[#29482](https://community.openproject.org/wp/29482)\] +- Fixed: Custom fields for groups throw error message when set + \[[#29486](https://community.openproject.org/wp/29486)\] +- Fixed: Column shifts when opening autocompleter + \[[#29492](https://community.openproject.org/wp/29492)\] +- Fixed: Gantt chart not properly aligned when using groups + \[[#29497](https://community.openproject.org/wp/29497)\] +- Fixed: White space between first table row and header + \[[#29521](https://community.openproject.org/wp/29521)\] +- Fixed: Different font sizes on WP page + \[[#29528](https://community.openproject.org/wp/29528)\] +- Fixed: Cannot select category because font is invisible + \[[#29531](https://community.openproject.org/wp/29531)\] +- Fixed: Search bar too long on mobile Safari browser + \[[#29553](https://community.openproject.org/wp/29553)\] +- Fixed: Docker incoming-mails not logged + \[[#29575](https://community.openproject.org/wp/29575)\] + +## Contributions + +A big thanks to community members for reporting bugs and helping us identifying and providing fixes. +Special thanks for reporting and finding bugs go to Nicolas Salguero, Andy Shilton, Ricardo Vigatti, Michael Johannessen, Wojtek Chrobok, Timo Lösch. diff --git a/docs/release-notes/8/8-3-1/README.md b/docs/release-notes/8/8-3-1/README.md index d320236cae92..1b7cd9642f1f 100644 --- a/docs/release-notes/8/8-3-1/README.md +++ b/docs/release-notes/8/8-3-1/README.md @@ -1,57 +1,49 @@ --- - title: OpenProject 8.3.1 - sidebar_navigation: - title: 8.3.1 - release_version: 8.3.1 - release_date: 2019-03-15 +title: OpenProject 8.3.1 +sidebar_navigation: + title: 8.3.1 +release_version: 8.3.1 +release_date: 2019-03-15 --- - # OpenProject 8.3.1 -We released -[OpenProject 8.3.1](https://community.openproject.org/versions/1355). +We released [OpenProject 8.3.1](https://community.openproject.org/versions/1355). The release contains several bug and security related fixes and we urge updating to the newest version. -#### Rails security fixes - -This upgrade include Rails 5.2.2.1 with fixes for [CVE-2019-5418, -CVE-2019-5419 -and CVE-2019-5420](https://weblog.rubyonrails.org/2019/3/13/Rails-4-2-5-1-5-1-6-2-have-been-released/). - -#### Bug fixes and changes - - - Fixed: Long Work Package titles not wrapped in - Cost Reports - \[[#28766](https://community.openproject.org/wp/28766)\] - - Fixed: Cannot sort by custom field of type “Float” if named - “Position” - \[[#29655](https://community.openproject.org/wp/29655)\] - - Fixed: WorkPackage search results load results thrice and are slow - because of it - \[[#29715](https://community.openproject.org/wp/29715)\] - - Fixed: Internal error when accessing budget detail view - \[[#29718](https://community.openproject.org/wp/29718)\] - - Fixed: Search page loads slowly initially - \[[#29719](https://community.openproject.org/wp/29719)\] - - Fixed: Manually set admin flag being unset by SAML authentication - \[[#29720](https://community.openproject.org/wp/29720)\] - - Fixed: Gantt Zoom buttons are inverted - \[[#29721](https://community.openproject.org/wp/29721)\] - - Fixed: Attachments deleted on work package update via email - \[[#29722](https://community.openproject.org/wp/29722)\] - - Changed: Allow instances to define a legal notice link to be - rendered \[[#29697](https://community.openproject.org/wp/29697)\] - - Changed: Make Gravatar default image configurable again - \[[#29711](https://community.openproject.org/wp/29711)\] - -#### Contributions - -A big thanks to community members for reporting bugs and helping us -identifying and providing fixes. - -Special thanks for reporting and finding bugs go to Michael Johannessen, -Marc Vollmer, Klaus-Jürgen Weghorn, Ole Odendahl - - +## Rails security fixes + +This upgrade include Rails 5.2.2.1 with fixes for +[CVE-2019-5418, CVE-2019-5419 and CVE-2019-5420](https://weblog.rubyonrails.org/2019/3/13/Rails-4-2-5-1-5-1-6-2-have-been-released/). + +## Bug fixes and changes + +- Fixed: Long Work Package titles not wrapped in + Cost Reports + \[[#28766](https://community.openproject.org/wp/28766)\] +- Fixed: Cannot sort by custom field of type “Float” if named + “Position” + \[[#29655](https://community.openproject.org/wp/29655)\] +- Fixed: WorkPackage search results load results thrice and are slow + because of it + \[[#29715](https://community.openproject.org/wp/29715)\] +- Fixed: Internal error when accessing budget detail view + \[[#29718](https://community.openproject.org/wp/29718)\] +- Fixed: Search page loads slowly initially + \[[#29719](https://community.openproject.org/wp/29719)\] +- Fixed: Manually set admin flag being unset by SAML authentication + \[[#29720](https://community.openproject.org/wp/29720)\] +- Fixed: Gantt Zoom buttons are inverted + \[[#29721](https://community.openproject.org/wp/29721)\] +- Fixed: Attachments deleted on work package update via email + \[[#29722](https://community.openproject.org/wp/29722)\] +- Changed: Allow instances to define a legal notice link to be + rendered \[[#29697](https://community.openproject.org/wp/29697)\] +- Changed: Make Gravatar default image configurable again + \[[#29711](https://community.openproject.org/wp/29711)\] + +## Contributions + +A big thanks to community members for reporting bugs and helping us identifying and providing fixes. +Special thanks for reporting and finding bugs go to Michael Johannessen, Marc Vollmer, Klaus-Jürgen Weghorn, Ole Odendahl diff --git a/docs/release-notes/8/8-3-2/README.md b/docs/release-notes/8/8-3-2/README.md index 76fb43940db1..6762a18e3dac 100644 --- a/docs/release-notes/8/8-3-2/README.md +++ b/docs/release-notes/8/8-3-2/README.md @@ -1,9 +1,9 @@ --- - title: OpenProject 8.3.2 - sidebar_navigation: - title: 8.3.2 - release_version: 8.3.2 - release_date: 2019-04-30 +title: OpenProject 8.3.2 +sidebar_navigation: + title: 8.3.2 +release_version: 8.3.2 +release_date: 2019-04-30 --- @@ -13,14 +13,13 @@ We released OpenProject 8.3.2. The release contains a security related fix and we urge updating to the newest version. - - ## CVE-2019-11600 A SQL injection vulnerability in the activities API in OpenProject before 8.3.2 allows a remote attacker to execute arbitrary SQL commands via the id parameter. The attack can be performed unauthenticated if -OpenProject is configured not to require authentication for API access. +OpenProject is configured not to require authentication for API access. + This vulnerability has been assigned the CVE identifier CVE-2019-11600. Versions Affected: 5.0.0 – 8.3.1 @@ -37,5 +36,3 @@ responsible disclose security related issues to us, please see our Thanks to Thanaphon Soo from the [SEC Consult Vulnerability Lab](https://www.sec-consult.com) for identifying and responsibly disclosing the identified issues. - - diff --git a/docs/release-notes/8/README.md b/docs/release-notes/8/README.md index 205d9b221e01..320391b49b85 100644 --- a/docs/release-notes/8/README.md +++ b/docs/release-notes/8/README.md @@ -5,7 +5,7 @@ release_date: 2018-08-29 title: OpenProject Version 8 Release Notes --- -# Version 8 Release Notes +# Version 8 Release Notes | Version | Release date | |-----------------------------|--------------| diff --git a/docs/release-notes/9/9-0-0/README.md b/docs/release-notes/9/9-0-0/README.md index 84d250602362..8260de507ed2 100644 --- a/docs/release-notes/9/9-0-0/README.md +++ b/docs/release-notes/9/9-0-0/README.md @@ -6,7 +6,6 @@ release_version: 9.0.0 release_date: 2019-06-06 --- - # OpenProject 9.0 OpenProject 9.0 introduces a board view to support agile project management with Kanban. In addition, you can define work package templates to rapidly create new work packages with a pre-defined structure. Each user can now add their own custom work package views to their my page. @@ -15,19 +14,15 @@ Read below to get a detailed overview of what is new in OpenProject 9. ![OpenProject 9](release-teaser.jpg) - - ## Board view (Enterprise add-on) The board view is a new module for OpenProject and allows Scrum and Kanban-style agile project management. You can display display a board view with the different statuses shown as columns (similarly to a Kanban board) and quickly update the status. Alternatively, you can define a basic board with custom names or display versions as columns (e.g. to plan your roadmap). Since boards display work packages - just like the work package tables - you can easily combine traditional and agile project management. Simply schedule your tasks in the Gantt chart and work on them from the boards view. -To use boards you need to use either the Enterprise cloud or the Enterprise on-premises edition. If you currently use the Community edition and would like to give boards a try, simply [request an Enterprise edition trial license](). - -[Learn more about Boards for Scrum and Agile Project Management.]() - +To use boards you need to use either the Enterprise cloud or the Enterprise on-premises edition. If you currently use the Community edition and would like to give boards a try, simply [request an Enterprise edition trial license](https://www.openproject.org/pricing/#trial). +Learn more about [Boards for Scrum and Agile Project Management](../../../user-guide/agile-boards/). ## Work package templates @@ -35,9 +30,7 @@ You can define templates for work package types. Templates are automatically dis Templates can be configured in the work package type configuration. -![img](template.png) - - +![Work package templates](template.png) ## Work package widget on My Page @@ -45,16 +38,12 @@ On the My Page, each user can add work package widgets and customize which work You can filter and group by work package attributes and also display Gantt charts in the widgets. - - ## Updated work package table Assignees are now directly displayed as avatars in the work package page. Additionally, the work package type selection has been updated. ![Improved design](improved-design.png) - - ## Improved usability OpenProject is even more user-friendly: You can add attachments (e.g. images) directly to meetings (agenda / minutes). @@ -65,17 +54,13 @@ Filters and work package attributes are improved and support auto-completion. For an overview of all new improvements, take a look at the [feature list](https://community.openproject.org/projects/openproject/work_packages?query_props={"c"%3A["id"%2C"subject"%2C"type"%2C"status"%2C"assignee"%2C"version"]%2C"hi"%3Atrue%2C"g"%3A""%2C"t"%3A"id%3Aasc"%2C"f"%3A[{"n"%3A"status"%2C"o"%3A"!"%2C"v"%3A["6"]}%2C{"n"%3A"version"%2C"o"%3A"%3D"%2C"v"%3A["853"]}%2C{"n"%3A"subprojectId"%2C"o"%3A"*"%2C"v"%3A[]}%2C{"n"%3A"type"%2C"o"%3A"%3D"%2C"v"%3A["6"%2C"8"]}]%2C"pa"%3A1%2C"pp"%3A100}). - - ## Substantial number of bug fixes OpenProject 9.0 contains a large number of bugs fixes. For an extensive overview of bug fixes please refer to the [following list](https://community.openproject.org/projects/openproject/work_packages?query_props={"c"%3A["id"%2C"subject"%2C"type"%2C"status"%2C"assignee"]%2C"hi"%3Afalse%2C"g"%3A""%2C"t"%3A"id%3Adesc"%2C"f"%3A[{"n"%3A"version"%2C"o"%3A"%3D"%2C"v"%3A["853"]}%2C{"n"%3A"type"%2C"o"%3A"%3D"%2C"v"%3A["1"]}%2C{"n"%3A"subprojectId"%2C"o"%3A"*"%2C"v"%3A[]}]%2C"pa"%3A1%2C"pp"%3A20}). - - -## Upgrading your installation to OpenProject 9.0. +## Upgrading your installation to OpenProject 9.0 If you're using the OpenProject Enterprise cloud edition, you are already running on the latest version of OpenProject 9.0. For your local installations, there are some minor changes you need to do in order to perform the upgrade. diff --git a/docs/release-notes/9/9-0-1/README.md b/docs/release-notes/9/9-0-1/README.md index bcfa6bda3033..6a8c461735a0 100644 --- a/docs/release-notes/9/9-0-1/README.md +++ b/docs/release-notes/9/9-0-1/README.md @@ -6,14 +6,12 @@ release_version: 9.0.1 release_date: 2019-06-07 --- - +# OpenProject 9.0.1 We released [OpenProject 9.0.1](https://community.openproject.org/versions/1368). The release contains several bug fixes and we recommend updating to the newest version. - - -#### Bug fixes and changes +## Bug fixes and changes - Fixed: Wiki TOC doesn't render headings properly [[#30245](https://community.openproject.org/wp/30245)] - Fixed: Doubled files section in meeting agenda [[#30291](https://community.openproject.org/wp/30291)] @@ -26,9 +24,8 @@ The release contains several bug fixes and we recommend updating to the newest v - Changed: Improve print view of cost report via CSS [[#30305](https://community.openproject.org/wp/30305)] - Changed: Ensure PostgreSQL migration is finished before attachments are re-inserted [[#30352](https://community.openproject.org/wp/30352)] -#### Contributions +## Contributions A big thanks to community members for reporting bugs and helping us identifying and providing fixes. Special thanks for reporting and finding bugs go to Varac Anero - diff --git a/docs/release-notes/9/9-0-2/README.md b/docs/release-notes/9/9-0-2/README.md index ff58f926dce9..6e2e8153be8e 100644 --- a/docs/release-notes/9/9-0-2/README.md +++ b/docs/release-notes/9/9-0-2/README.md @@ -11,9 +11,7 @@ release_date: 2019-06-13 We released [OpenProject 9.0.2](https://community.openproject.org/versions/1359). The release contains several bug fixes and we recommend updating to the newest version. If you're running OpenProject with a relative URL root (e.g., under domain.example.org/openproject), this update should fix [an installation issue related to Sass compilation](https://community.openproject.org/wp/30372) as well as [an error trying to use create new boards](https://community.openproject.org/wp/30370). - - -#### Bug fixes and changes +## Bug fixes and changes - **Fixed**: Wiki TOC doesn't render headings properly [[#30245](https://community.openproject.org/wp/30245)] - **Fixed**: Cannot create new boards in installations with relative_url_root set [[#30370](https://community.openproject.org/wp/30370)] @@ -21,4 +19,3 @@ The release contains several bug fixes and we recommend updating to the newest v - **Fixed**: Chrome is logged out when accessing pages with images on S3 storage [[#28652](https://community.openproject.org/wp/28652)] - **Fixed**: OpenProject logo on My page does not redirect to landing page [[#30376](https://community.openproject.org/wp/30376)] - **Fixed**: The PDF export is cut off after the first page [[#29929](https://community.openproject.org/wp/29929)] - diff --git a/docs/release-notes/9/9-0-3/README.md b/docs/release-notes/9/9-0-3/README.md index 98fa590c338f..04857bade19d 100644 --- a/docs/release-notes/9/9-0-3/README.md +++ b/docs/release-notes/9/9-0-3/README.md @@ -11,9 +11,7 @@ release_date: 2019-07-23 We released [OpenProject 9.0.3](https://community.openproject.org/versions/1376). The release contains several bug fixes and we recommend updating to the newest version. - - -#### Bug fixes and changes +## Bug fixes and changes - Changed: Searching for Custom Fields [[#29756](https://community.openproject.org/wp/29756)] - Changed: Prevent collisions between users working on the same board [[#30403](https://community.openproject.org/wp/30403)] @@ -45,7 +43,7 @@ The release contains several bug fixes and we recommend updating to the newest v - Fixed: "Login" instead of "Login name" used (causes problems with translations) [[#30591](https://community.openproject.org/wp/30591)] - Fixed: Board links in sidebar broken [[#30595](https://community.openproject.org/wp/30595)] -#### Contributions +## Contributions A big thanks to community members for reporting bugs and helping us identifying and providing fixes. diff --git a/docs/release-notes/9/9-0-4/README.md b/docs/release-notes/9/9-0-4/README.md index 639f489c27c0..b1c609a887be 100644 --- a/docs/release-notes/9/9-0-4/README.md +++ b/docs/release-notes/9/9-0-4/README.md @@ -16,8 +16,5 @@ Versions Affected: Versions <= 9.0.3, 10.0.1 Fixed Versions: 9.0.4, 10.0.2 ## Credits -Thanks to David Haintz from the SEC Consult Vulnerability Lab (https://www.sec-consult.com) for identifying and responsibly disclosing the identified issues. - -#### Contributions Thanks to David Haintz from [SEC Consult Vulnerability Lab](https://www.sec-consult.com) for identifying and responsibly disclosing the identified issues. diff --git a/docs/release-notes/9/README.md b/docs/release-notes/9/README.md index d673856d0926..f866a2a4e390 100644 --- a/docs/release-notes/9/README.md +++ b/docs/release-notes/9/README.md @@ -5,7 +5,7 @@ release_date: 2019-06-06 title: OpenProject Version 9 Release Notes --- -# OpenProject Version 9 Release Notes +# OpenProject Version 9 Release Notes | Version | Release date | |-----------------------------|--------------| diff --git a/docs/release-notes/README.md b/docs/release-notes/README.md index 18c3e09ed334..3006bcb17228 100644 --- a/docs/release-notes/README.md +++ b/docs/release-notes/README.md @@ -10,16 +10,14 @@ We never stop improving OpenProject. Every year there are several stable release Stay up to date and get an overview of the new features included in the releases. - -## 14.0.2 +## 14.1.0 Release date: 2024-05-22 -[Release Notes](14-0-2/) - +[Release Notes](14-1-0/) ## 14.0.1 @@ -27,13 +25,17 @@ Release date: 2024-05-08 [Release Notes](14-0-1/) - ## 14.0.0 Release date: 2024-04-24 [Release Notes](14-0-0/) +## 13.4.2 + +Release date: 2024-05-22 + +[Release Notes](13-4-2/) ## 13.4.1 @@ -41,7 +43,6 @@ Release date: 2024-03-26 [Release Notes](13-4-1/) - ## 13.4.0 Release date: 2024-03-20 @@ -54,7 +55,6 @@ Release date: 2024-02-28 [Release Notes](13-3-1/) - ## 13.3.0 Release date: 2024-02-14 @@ -67,91 +67,78 @@ Release date: 2024-01-31 [Release Notes](13-2-1/) - ## 13.2.0 Release date: 2024-01-17 [Release Notes](13-2-0/) - ## 13.1.2 Release date: 2023-12-22 [Release Notes](13-1-2/) - ## 13.1.1 Release date: 2023-12-20 [Release Notes](13-1-1/) - ## 13.1.0 Release date: 2023-12-13 [Release Notes](13-1-0/) - ## 13.0.8 Release date: 2023-12-05 [Release Notes](13-0-8/) - ## 13.0.7 Release date: 2023-10-23 [Release Notes](13-0-7/) - ## 13.0.6 Release date: 2023-10-13 [Release Notes](13-0-6/) - ## 13.0.5 Release date: 2023-10-10 [Release Notes](13-0-5/) - ## 13.0.4 Release date: 2023-09-26 [Release Notes](13-0-4/) - ## 13.0.3 Release date: 2023-09-12 [Release Notes](13-0-3/) - ## 13.0.2 Release date: 2023-09-07 [Release Notes](13-0-2/) - ## 13.0.1 Release date: 2023-08-29 [Release Notes](13-0-1/) - ## 13.0.0 Release date: 2023-08-21 diff --git a/docs/security-and-privacy/README.md b/docs/security-and-privacy/README.md index a157a16fbc30..99ef713e561d 100644 --- a/docs/security-and-privacy/README.md +++ b/docs/security-and-privacy/README.md @@ -19,4 +19,3 @@ The purpose of this document is to equip users of OpenProject with the necessar * Security documentation: BSI Grundschutzchecks (coming Q1 2024) * Statement on data security: [Statement on data security](./statement-on-security) - diff --git a/docs/security-and-privacy/processing-of-personal-data/README.md b/docs/security-and-privacy/processing-of-personal-data/README.md index 1b769c1cef67..70cb7e6724c7 100644 --- a/docs/security-and-privacy/processing-of-personal-data/README.md +++ b/docs/security-and-privacy/processing-of-personal-data/README.md @@ -39,13 +39,13 @@ Anonymity is not complete because the underlying webserver might still generate To sign-in to the OpenProject platform, the [registration of a user account](../../system-admin-guide/users-permissions/users/#create-users) is required. For registered user's the following personal data are processed: -##### User profile (bu-01) +#### User profile (bu-01) - Name - Username - Avatar -##### User settings (bu-02) +#### User settings (bu-02) - Email address - Notification settings @@ -54,7 +54,7 @@ To sign-in to the OpenProject platform, the [registration of a user account](../ - Time zone settings - Display settings (contrast modes, custom themes) -##### User authentication (bu-03) +#### User authentication (bu-03) * Access tokens * User sessions @@ -62,20 +62,20 @@ To sign-in to the OpenProject platform, the [registration of a user account](../ * Phone number for sending one-time passwords via SMS * OATH secret codes -##### User notification settings (bu-04) +#### User notification settings (bu-04) - Default notification settings -- Project-specific notification settings +- Project-specific notification settings - Default email reminder settings - Project-specific email reminder settings -##### User roles and permissions (bu-05) +#### User roles and permissions (bu-05) - Group memberships -- Project roles +- Project roles - Global roles -##### User rates (bu-06) +#### User rates (bu-06) * Default hourly rate * Hourly rate per project @@ -86,43 +86,43 @@ To sign-in to the OpenProject platform, the [registration of a user account](../ Depending on the individual use and permissions of the user the following personal data is processed: -##### Boards (cb-01) +#### Boards (cb-01) - Assignment of a person to a work package (author, assignee, responsible, user custom fields) - Change history - Person mentioned in a board -##### Budgets (cb-02) +#### Budgets (cb-02) - Assignments of a person to a budget - Change history - Person mentioned in a budget description -##### Comments (cc-01) +#### Comments (cc-01) - Author of a comment - Change history - Reactions of a user to a comment - Person mentioned in a comment -##### Email notifications (ce-01) +#### Email notifications (ce-01) - Email header including sender and recipients - Person mentioned in an email -##### Files (cf-01) +#### Files (cf-01) - Assignment of a files to an uploader or creator - Change history - Person mentioned in a file (incl. file attributes) -##### Meetings (cm-01) +#### Meetings (cm-01) - Assignment of a person (author, invitee, participant) to a meeting - Change history - Person mentioned in an agenda item -##### Projects (cp-01) +#### Projects (cp-01) - Assignment of a person to a project (author, project member) @@ -134,38 +134,37 @@ Depending on the individual use and permissions of the user the following person - Persons mentioned in a project status information - -##### Project calendars (cp-02) +#### Project calendars (cp-02) - Assignment of objects shown in the calendar (meetings, work packages, versions, milestones) to a person - Change history - Person mentioned in a calendar item -##### Project news (cp-03) +#### Project news (cp-03) - Author of a project news - Change history - Person mentioned in a project news -##### Team planner (ct-01) +#### Team planner (ct-01) - Assignment of a work package to a person - Change history - Persons mentioned in team planners -##### Time tracking (ct-02) +#### Time tracking (ct-02) - Assignments of a time entry to a person - Change history - Person mentioned in a time entry -##### Wiki pages (cw-01) +#### Wiki pages (cw-01) - Assignment of an wiki page edit to a person (author, contributor) - Change history - Person mentioned in a wiki page -##### Work packages (cw-02) +#### Work packages (cw-02) - Assignment of a work package to a person - Change history @@ -174,7 +173,6 @@ Depending on the individual use and permissions of the user the following person - Person mentioned in a linked file - Person mentioned in a linked pull request (i.e. GitHub or GitLab) - ### D: Logging #### Logged information @@ -184,6 +182,7 @@ Activities in OpenProject are automatically journalized. It allows users to unde Independently of the change history every interaction (i.e. web request) of a browser or other client results in an entry written to the server logfiles. These files support the operation of the application as they provide information on faulty behavior of the system (i.e. bugs and lack of performance). Those log files contain the following person related data: + * id of the user performing the request * time of the request * url called @@ -195,7 +194,7 @@ The data listed above is generated upon entering the application. When actually #### Retention period -Logfiles are automatically removed based on a first-in-first-out mechanism. This is done to limit the disk space which ensures the server's operation and at the same time serves as a means to erase the log entries once they have served their purpose of supporting operations. By default the retention period is determined by the size of the logfile. Once the logfile reaches its storage limit, the oldest entries are removed. +Logfiles are automatically removed based on a first-in-first-out mechanism. This is done to limit the disk space which ensures the server's operation and at the same time serves as a means to erase the log entries once they have served their purpose of supporting operations. By default the retention period is determined by the size of the logfile. Once the logfile reaches its storage limit, the oldest entries are removed. As such, the log entries are not kept for a fixed period of time. If there are a lot of requests, old entries are removed faster then if there are less requests. Administrators of an OpenProject installation might decide to configure a different behavior that factors in the age of the log entries. @@ -237,16 +236,16 @@ flowchart TD gih["GitHub (gih)"] gil["GitLab (gil)"] cal["Calendar (cal)"] - O["API integrations (api)"] + O["API integrations (api)"] end subgraph services[Internal Services] direction TB - M[Memcached] - P[PostgreSQL] - S[Object storage or NFS] - email["Email gateways (eml)"] + M[Memcached] + P[PostgreSQL] + S[Object storage or NFS] + email["Email gateways (eml)"] end @@ -256,13 +255,13 @@ end subgraph localclients[Local Client / User device] direction TB - browser - A1 - A2 - - - - + browser + A1 + A2 + + + + end @@ -307,23 +306,23 @@ flowchart LR subgraph IDP[Identity Provider] direction LR - ssoprovider[SSO provider] - LDAP + ssoprovider[SSO provider] + LDAP end subgraph openproject["Relying Party (OpenProject) "] direction LR - ssoclient[SSO client] - ldapauthentication[LDAP authentication] - ldapgroupsync[LDAP group sync] - - end + ssoclient[SSO client] + ldapauthentication[LDAP authentication] + ldapgroupsync[LDAP group sync] + + end subgraph localclients[Local clients] direction LR - Browser - end + Browser + end ``` @@ -346,10 +345,9 @@ flowchart LR * `idp-02` TLS * `idp-03` TLS -### C: Email (eml) - -#### Overview +### C: Email (eml) +#### Overview ```mermaid %%{init: {'theme':'neutral'}}%% @@ -362,24 +360,24 @@ flowchart LR subgraph localclients[Local clients] direction TB - A + A end subgraph internal[Internal services] direction TB - C + C end subgraph external[External services] direction TB - A - B + A + B end subgraph OpenProject direction TB - D + D end @@ -397,7 +395,7 @@ flowchart LR * `bu-01` * `bu-04` -* `bu-05` +* `bu-05` * `cc-01` * `cm-01` * `cp-01` @@ -425,19 +423,19 @@ flowchart LR opicalapi -->|cal-02| localcalendarapp subgraph localclient[Local clients] - direction TB - localcalendarapp + direction TB + localcalendarapp end subgraph external[External services] - direction TB - B + direction TB + B end subgraph OpenProject - direction TB - projectcalendar[Project calendar] --> opicalapi + direction TB + projectcalendar[Project calendar] --> opicalapi end ``` @@ -457,7 +455,7 @@ flowchart LR * `cal-01` TLS * `cal-02` TLS (not controlled by the OpenProject system) -* `cal-03` TLS (not controlled by the OpenProject system) +* `cal-03` TLS (not controlled by the OpenProject system) ### E: Nextcloud (nex) @@ -472,21 +470,21 @@ flowchart LR appopenprojectintegration <-->|nex-04| openprojectapi subgraph local[Local clients] - Browser - nextclouddesktopclient + Browser + nextclouddesktopclient end subgraph openproject[OpenProject] - opnextcloudintegrattion[Nextcloud integration] - openprojectapi[API] - end + opnextcloudintegrattion[Nextcloud integration] + openprojectapi[API] + end subgraph nextcloud[Nextcloud] - groupfolder[Group folder app] - appopenprojectintegration[OpenProject integration app] - nextcloudapi[API] - end + groupfolder[Group folder app] + appopenprojectintegration[OpenProject integration app] + nextcloudapi[API] + end ``` @@ -498,7 +496,7 @@ subgraph openproject[OpenProject] #### Processed data * `bu-01` -* `bu-03 ` +* `bu-03` * `cf-01` #### Security measures @@ -521,20 +519,20 @@ flowchart LR appopenprojectintegration <-->|osh-04| openprojectapi subgraph local[Local clients] - Browser - onedrivedesktopclient[OneDrive desktop client] + Browser + onedrivedesktopclient[OneDrive desktop client] end subgraph openproject[OpenProject] - oponedrivetegration[OneDrive/SharePoint integration] - openprojectapi[API] - end + oponedrivetegration[OneDrive/SharePoint integration] + openprojectapi[API] + end subgraph onedrive[OneDrive/SharePoint] - appopenprojectintegration[OpenProject integration app] - onedriveapi[API] - end + appopenprojectintegration[OpenProject integration app] + onedriveapi[API] + end ``` @@ -562,26 +560,26 @@ subgraph openproject[OpenProject] ```mermaid %%{init: {'theme':'neutral'}}%% flowchart LR - gitclient <-->|gih-01| githubapi - githubapi <-->|gih-02| opgithubintegration - githubwebhooks -->|gih-03| opgithubintegration + gitclient <-->|gih-01| githubapi + githubapi <-->|gih-02| opgithubintegration + githubwebhooks -->|gih-03| opgithubintegration subgraph GitHub direction TB - githubapi[API] - githubwebhooks[Webhooks] + githubapi[API] + githubwebhooks[Webhooks] - end - - subgraph localclients[Local clients] + end + + subgraph localclients[Local clients] direction TB - gitclient[Git client] - end + gitclient[Git client] + end subgraph openproject[OpenProject] direction TB - opgithubintegration[Github integration] --- workpackagesmodule[Work packages module] - end + opgithubintegration[Github integration] --- workpackagesmodule[Work packages module] + end ``` @@ -608,26 +606,26 @@ flowchart LR ```mermaid %%{init: {'theme':'neutral'}}%% flowchart LR - gitclient <-->|gil-01| gitlabapi - gitlabapi <-->|gil-02| opgitlabintegration - gitlabwebhooks -->|gil-03| opgitlabintegration + gitclient <-->|gil-01| gitlabapi + gitlabapi <-->|gil-02| opgitlabintegration + gitlabwebhooks -->|gil-03| opgitlabintegration subgraph GitLab direction TB - gitlabapi[API] - gitlabwebhooks[Webhooks] + gitlabapi[API] + gitlabwebhooks[Webhooks] - end - - subgraph localclients[Local clients] + end + + subgraph localclients[Local clients] direction TB - gitclient[Git client] - end + gitclient[Git client] + end subgraph openproject[OpenProject] direction TB - opgitlabintegration[GitLab integration] --- workpackagesmodule[Work packages module] - end + opgitlabintegration[GitLab integration] --- workpackagesmodule[Work packages module] + end ``` @@ -655,19 +653,17 @@ flowchart LR ```mermaid %%{init: {'theme':'neutral'}}%% flowchart LR - api <-->|api-01| apiintegration[API integration] - - subgraph externalintegreations[External integrations] + api <-->|api-01| apiintegration[API integration] + + subgraph externalintegreations[External integrations] direction TB - apiintegration - end + apiintegration + end subgraph openproject[OpenProject] direction TB - api[API] - end - - + api[API] + end ``` #### Purpose @@ -696,11 +692,11 @@ OpenProject makes use of technical cookies to identity the browser client and/or ## Deletion of personal data -Whenever a user in OpenProject is fully deleted, the system scrubs and removes all user master data, all functional assignments, and all references to a user in the change histories. All actions performed in the name of the user are being replaced with a singular "**Deleted user**" reference in order to maintain integrity of database references, such as being an author of a work package that remains. Finally, the user data itself will be deleted, removing all structural traces of PII in the system. +Whenever a user in OpenProject is fully deleted, the system scrubs and removes all user master data, all functional assignments, and all references to a user in the change histories. All actions performed in the name of the user are being replaced with a singular "**Deleted user**" reference in order to maintain integrity of database references, such as being an author of a work package that remains. Finally, the user data itself will be deleted, removing all structural traces of PII in the system. **Note:** Due to the user references changing, respective cache keys for information such as work packages or projects are invalidated automatically. -**Note:** Deleting a user account is a permanent action and cannot be reversed. +**Note:** Deleting a user account is a permanent action and cannot be reversed. For more information on user account deletion, please see [the user administration guide](../../system-admin-guide/users-permissions/users/#delete-users). diff --git a/docs/security-and-privacy/statement-on-security/README.md b/docs/security-and-privacy/statement-on-security/README.md index 6d4800b67b30..0942ed317ff7 100644 --- a/docs/security-and-privacy/statement-on-security/README.md +++ b/docs/security-and-privacy/statement-on-security/README.md @@ -14,8 +14,6 @@ Automated tests and manual code reviews ensure that these contributions are safe For more information on security and data privacy for OpenProject, please visit: [www.openproject.org/security-and-privacy](https://www.openproject.org/security-and-privacy/). - - ## Security announcements mailing list If you want to receive immediate security notifications via email as we publish them, please sign up to our security mailing list: https://www.openproject.org/security-and-privacy/#mailing-list. @@ -26,14 +24,10 @@ To unsubscribe, you will find a link at the end of every email. Any security related information will also be published on our [blog](https://www.openproject.org/blog/) and in the [release notes](../../release-notes/). - - ## Security advisory list OpenProject uses GitHub to manage and publish security advisory listings: https://github.com/opf/openproject/security/advisories - - ## Security vulnerability processing When we receive vulnerability reports from researchers or through internal identification, the following process is taking place immediately: @@ -47,8 +41,6 @@ When we receive vulnerability reports from researchers or through internal ident 7. A patch release is created, published and distributed for all supported installations 8. The security vulnerability is publicly disclosed on GitHub and communicated through the mailing list - - ## Reporting a vulnerability We take all facets of security seriously at OpenProject. If you want to report a security concerns, have remarks, or contributions regarding security at OpenProject, please reach out to us at [security@openproject.com](mailto:security@openproject.com). @@ -63,16 +55,15 @@ Please include a description on how to reproduce the issue if possible. Our secu > **Please note:** OpenProject currently does not offer a bug bounty program. We will do our best to give you the appropriate credits for responsibly disclosing a security vulnerability to us. We will gladly reference your work, name, website on every publication we do related to the security update. - ## OpenProject security features ### Authentication and password security -OpenProject administrators can enforce [authentication mechanisms and password rules]() to ensure users choose secure passwords according to current industry standards. Passwords stored by OpenProject are securely stored using salted bcrypt. Alternatively, external authentication providers and protocols (such as LDAP, SAML) can be enforced to avoid using and exposing passwords within OpenProject. +OpenProject administrators can enforce **authentication mechanisms and password rules** to ensure users choose secure passwords according to current industry standards. Passwords stored by OpenProject are securely stored using salted bcrypt. Alternatively, external authentication providers and protocols (such as LDAP, SAML) can be enforced to avoid using and exposing passwords within OpenProject. ### User management and access control -Administrators are provided with [fine-grained role-based access control mechanisms]() to ensure that users are only seeing and accessing the data they are allowed to on an individual project level. +Administrators are provided with **fine-grained role-based access control mechanisms** to ensure that users are only seeing and accessing the data they are allowed to on an individual project level. ### Definition of session runtime @@ -98,6 +89,4 @@ Synchronize OpenProject users and groups with your company’s LDAP to update us With the single sign-on feature you can securely access OpenProject. Control and secure access to your projects with the main authentication providers. - - Find out more about our [GDPR compliance](../../enterprise-guide/enterprise-cloud-guide/gdpr-compliance/). diff --git a/docs/system-admin-guide/README.md b/docs/system-admin-guide/README.md index 989d4b31cbd8..05a8ee3f8494 100644 --- a/docs/system-admin-guide/README.md +++ b/docs/system-admin-guide/README.md @@ -17,8 +17,6 @@ Click on one of the categories in order to proceed with the configuration. ![openproject_system_administration_start_page](openproject_system_administration_start_page.png) - - ## Overview | Topic | Content | @@ -27,7 +25,6 @@ Click on one of the categories in order to proceed with the configuration. | [Work packages](./manage-work-packages) | How to configure work packages, types, status and workflows. | | [Custom fields](./custom-fields) | Set custom fields for work packages, Spent time, projects, versions, users, groups and more. | | [Attribute help texts](./attribute-help-texts) | Add help texts to explain attributes (including custom fields) in projects and work packages. | -| [Attachments](./attachments) | Settings for attachments and virus scanning functionality in OpenProject. | | [Enumerations](./enumerations/) | Set enumerations, e.g. work package priorities, time tracking activities, document categories, and more. | | [Calendars and dates](./calendars-and-dates/) | Configure working days, dates formats and calendar subscriptions. | | [System settings](./system-settings/) | Configure your system settings, e.g. a welcome text block on the landing page, languages, repositories, and more. | @@ -41,8 +38,9 @@ Click on one of the categories in order to proceed with the configuration. | [Enterprise edition](../enterprise-guide/) | Upgrading and managing OpenProject Enterprise and other administrative topics. | | [Time and costs](./time-and-costs) | Configure your currency and create cost types in OpenProject. | | [Backlogs](./backlogs) | Configure your backlogs settings in OpenProject, e.g. story types to be displayed in the backlogs, task types, and more. | -| [File storages - Nextcloud](./integrations/nextcloud/) | Manage and set up file storages with Nextcloud. | -| [File storages - One Drive](./integrations/one-drive/) | Manage and set up file storages with One Drive. | +| [Files](./files) | Settings for attachments and virus scanning functionality in OpenProject. Manage external file storages. | +| [External file storages - Nextcloud](./integrations/nextcloud/) | Set up external file storages with Nextcloud. | +| [External file storages - One Drive](./integrations/one-drive/) | Set up external file storages with One Drive. | | [Plugins](./plugins) | Manage plugins in OpenProject. | | [Information](./information/) | View the latest system information status. | | [Integrations](./integrations/) | How to integration OpenProject into other tools (eg. GitHub, Nextcloud...) | diff --git a/docs/system-admin-guide/announcement/README.md b/docs/system-admin-guide/announcement/README.md index 51476f12759f..06637ab887bc 100644 --- a/docs/system-admin-guide/announcement/README.md +++ b/docs/system-admin-guide/announcement/README.md @@ -22,4 +22,4 @@ The active announcement will be displayed until the defined date to users **on t Also, the active announcement will be displayed until the defined date to users **on the application start page**. -![Sys-admin-announcement-start-page](Sys-admin-announcement-start-page.png) \ No newline at end of file +![Sys-admin-announcement-start-page](Sys-admin-announcement-start-page.png) diff --git a/docs/system-admin-guide/api-and-webhooks/README.md b/docs/system-admin-guide/api-and-webhooks/README.md index 18d02cecac42..a03ff1f31db2 100644 --- a/docs/system-admin-guide/api-and-webhooks/README.md +++ b/docs/system-admin-guide/api-and-webhooks/README.md @@ -58,4 +58,3 @@ You can configure the following options for webhooks: **Note** You have to scroll down to find the create button. There you can also cancel your input. ![create-button-new-webhook](create-button-new-webhook.png) - diff --git a/docs/system-admin-guide/attachments/openproject_system_adminstration_attachment_settings.png b/docs/system-admin-guide/attachments/openproject_system_adminstration_attachment_settings.png deleted file mode 100644 index 9700924b171e..000000000000 Binary files a/docs/system-admin-guide/attachments/openproject_system_adminstration_attachment_settings.png and /dev/null differ diff --git a/docs/system-admin-guide/attachments/openproject_system_adminstration_attachments.png b/docs/system-admin-guide/attachments/openproject_system_adminstration_attachments.png deleted file mode 100644 index b976b79b392d..000000000000 Binary files a/docs/system-admin-guide/attachments/openproject_system_adminstration_attachments.png and /dev/null differ diff --git a/docs/system-admin-guide/attachments/virus-scanning/image-20240220-iedi.png b/docs/system-admin-guide/attachments/virus-scanning/image-20240220-iedi.png deleted file mode 100644 index 42f26c07fecc..000000000000 Binary files a/docs/system-admin-guide/attachments/virus-scanning/image-20240220-iedi.png and /dev/null differ diff --git a/docs/system-admin-guide/attachments/virus-scanning/openproject_system_settings_virus_scanning.png b/docs/system-admin-guide/attachments/virus-scanning/openproject_system_settings_virus_scanning.png deleted file mode 100644 index cee2c77825c2..000000000000 Binary files a/docs/system-admin-guide/attachments/virus-scanning/openproject_system_settings_virus_scanning.png and /dev/null differ diff --git a/docs/system-admin-guide/attribute-help-texts/README.md b/docs/system-admin-guide/attribute-help-texts/README.md index 5e51f257e30c..1598db6006db 100644 --- a/docs/system-admin-guide/attribute-help-texts/README.md +++ b/docs/system-admin-guide/attribute-help-texts/README.md @@ -10,7 +10,7 @@ keywords: attribute help texts, help texts for projects and work packages # Attribute help texts
    -**Attribute help texts** provide additional information for attributes in work packages and projects. After setting them up they are displayed when users click on the question mark symbol next to custom fields in projects and work packages. +**Attribute help texts** provide additional information for attributes in work packages and projects. After setting them up they are displayed when users click on the question mark symbol next to custom fields in projects and work packages. This way you will reduce wrong entries for attributes. This is especially relevant for company specific custom fields.
    @@ -28,11 +28,9 @@ Navigate to -> *Administration* -> *Attribute help texts* to set up help texts f ![image-20201006165832885](image-20201006165832885.png) - - ## Add Attribute help texts -To add an Attribute help texts for custom fields click on the green **+ Attribute help text** button. +To add an Attribute help texts for custom fields click on the green **+ Attribute help text** button. 1. **Choose the attribute** you'd like to explain. Custom fields are also displayed here, which may require further explanation. 2. Add a **description**. You can add in-line pictures, links or videos, too. This **help text description** which will be shown in work package or project forms for the users. @@ -41,18 +39,14 @@ To add an Attribute help texts for custom fields click on the green **+ Attribut ![image-20201006171019961](image-20201006171019961.png) - - Be aware that the help text will be visible in all projects. -Once you configured the help text for an attribute, project members can see the explanation. The will see a question mark item next to the attribute. +Once you configured the help text for an attribute, project members can see the explanation. The will see a question mark item next to the attribute. When the users click on it, they see the description for this attribute. ![attribute help text description](image-20200122102249268.png) - - ## Edit or delete Attribute help texts Navigate to -> *Administration* -> *Work packages* -> *Attribute help texts* in order to edit or remove an attribute help text. @@ -68,8 +62,6 @@ The Attribute help texts for work packages will be displayed in the [details vie ![Sys-admin-attribute-help-texts-open](Sys-admin-attribute-help-texts-open.png) - - ## Projects The Attribute help texts for projects will be displayed in the Project details widget in the [Project overview](../../user-guide/project-overview/) (as in the first screenshot below) and in the [Project settings](../../user-guide/projects/project-settings/project-information/) (as in the second screenshot below). @@ -78,12 +70,8 @@ They will help the users (e.g. the project managers) understand what kind of inf ![Attribute help texts project overview](image-20201007112035870.png) - - ![Attribute help texts project information](image-20201007112741049.png) - - ## WYSIWYG editor -The Attribute help texts can also be displayed in the WYSIWYG text editor by using a certain syntax. Find out more [here](../../user-guide/wysiwyg/#embedding-of-work-package-attributes-and-project-attributes). +The Attribute help texts can also be displayed in the WYSIWYG text editor by using a certain syntax. Find out more [here](../../user-guide/wysiwyg/#embedding-of-work-package-attributes-and-project-attributes). diff --git a/docs/system-admin-guide/authentication/README.md b/docs/system-admin-guide/authentication/README.md index 15b012db23dd..82254bffe7c2 100644 --- a/docs/system-admin-guide/authentication/README.md +++ b/docs/system-admin-guide/authentication/README.md @@ -22,4 +22,3 @@ Configure **authentication** settings and authentication providers in OpenProjec | [reCAPTCHA](recaptcha) | How to activate reCAPTCHA in OpenProject. | | [LDAP authentication](ldap-authentication) | How to set up LDAP authentication in OpenProject. | | [LDAP group synchronization](ldap-authentication/ldap-group-synchronization) | How to configure LDAP group synchronization in OpenProject. (Enterprise add-on) | - diff --git a/docs/system-admin-guide/authentication/authentication-faq/README.md b/docs/system-admin-guide/authentication/authentication-faq/README.md index b0b1115bf656..16fbfff15f77 100644 --- a/docs/system-admin-guide/authentication/authentication-faq/README.md +++ b/docs/system-admin-guide/authentication/authentication-faq/README.md @@ -7,19 +7,19 @@ keywords: authentication FAQ, LDAP, SAML, SSO --- # Frequently asked questions (FAQ) for authentication + Additional information regarding the use of LDAP from a user management perspective can be found [in this FAQ section](../../users-permissions/users-permissions-faq). ## How do I set up OAuth / Google authentication in the Enterprise cloud? -The authentication via Google is already activated in the Enterprise cloud. Users who are invited to OpenProject, should be able to choose authentication via Google. There should be a Google button under the normal user name / password when you try to login. +The authentication via Google is already activated in the Enterprise cloud. Users who are invited to OpenProject, should be able to choose authentication via Google. There should be a Google button under the normal user name / password when you try to login. ## How can I disable the Google authentication? -Disabling the Google based authentication is currently not possible for cloud based installations. +Disabling the Google based authentication is currently not possible for cloud based installations. For on premises installations the functionality can be deactivated the same way it was activated. - ## Can we ensure that passwords are secure / have a high strength? Password parameters for OpenProject can be configured on each OpenProject environment. Typically passwords require 10+ characters, as well as special characters. Please find the respective instruction [here](../authentication-settings/#configure-password-settings). @@ -30,7 +30,7 @@ Users who want to change their authentication method can just be re-invited. Go ## I am an administrator of an on-premises installation of OpenProject. Our users can't login and when I send them a link to login they don't receive it. What can I do? -Probably it has something to do with the configuration of the email server if messages do not arrive. As a workaround, you can first [manually set a password](../../users-permissions/users/#manage-user-settings) for the users and send it to them by protected channels (then the users can log in in any case). +Probably it has something to do with the configuration of the email server if messages do not arrive. As a workaround, you can first [manually set a password](../../users-permissions/users/#manage-user-settings) for the users and send it to them by protected channels (then the users can log in in any case). In addition, we ask you to check if there are general difficulties with sending emails. There is a possibility to send a [test email](../../../installation-and-operations/configuration/outbound-emails). If the test email arrives, then the email dispatch from OpenProject works. Otherwise you would have to look in the [server logs](../../../installation-and-operations/operation/monitoring), whether there is an error displayed when a user is invited again. ## Is it possible to only allow authentication via SSO (not via user name / password)? @@ -48,14 +48,14 @@ For context: The connection of custom SSO providers is also described [here](../ ## I want to connect AD and LDAP to OpenProject. Which attribute for authentication sources does OpenProject use? -You can freely define the attributes that are taken from LDAP sources [in the LDAP auth source configuration screen](../ldap-authentication/). +You can freely define the attributes that are taken from LDAP sources [in the LDAP auth source configuration screen](../ldap-authentication/). For group synchronization, OpenProject supports the AD/LDAP standard for groups via "member / memberOf". The attribute cannot be configured at this time. ## Is there an option to mass-create users in OpenProject via the LDAP? There's no such option at the moment. However, you can activate the on-the-fly user creation for LDAP authentication. This means: An OpenProject user account will be created automatically when a user logs in to OpenProject via LDAP the first time. -## I would like to assign work packages to users from different authentication sources (AD and OpenLDAP). Is this possible without the admin creating groups manually? +## I would like to assign work packages to users from different authentication sources (AD and OpenLDAP). Is this possible without the admin creating groups manually? OpenProject supports creating groups and staffing them with users based on information found in an LDAP (or AD). This is called [LDAP group synchronization](../ldap-authentication/ldap-group-synchronization/#synchronize-ldap-and-openproject-groups-enterprise-add-on). The groups are created based on the name. So theoretically, it should be possible to have a single group that gets staffed by the information found in multiple LDAPs. This scenario has not been tested yet. Therefore, we cannot promise that it will work for sure. There is currently no other option. diff --git a/docs/system-admin-guide/authentication/authentication-settings/README.md b/docs/system-admin-guide/authentication/authentication-settings/README.md index 6f5ee3b9d080..37dcc9444d48 100644 --- a/docs/system-admin-guide/authentication/authentication-settings/README.md +++ b/docs/system-admin-guide/authentication/authentication-settings/README.md @@ -15,7 +15,7 @@ You can adapt the following under the authentication settings: 1. Select if the **authentication is required** to access OpenProject. For versions 13.1 and higher of OpenProject, this setting will be checked by default - **Important note**: If you un-tick this box your OpenProject instance will be visible to the general public without logging in. The visibility of individual projects depends on [this setting](../../../user-guide/projects/#set-a-project-to-public). + **Important note**: If you un-tick this box your OpenProject instance will be visible to the general public without logging in. The visibility of individual projects depends on [this setting](../../../user-guide/projects/#set-a-project-to-public). 2. Select an option for **self-registration**. Self-registration can either be **disabled**, or it can be allowed with the following criteria: diff --git a/docs/system-admin-guide/authentication/kerberos/README.md b/docs/system-admin-guide/authentication/kerberos/README.md index a864937ba143..4513ae82b5d8 100644 --- a/docs/system-admin-guide/authentication/kerberos/README.md +++ b/docs/system-admin-guide/authentication/kerberos/README.md @@ -15,18 +15,12 @@ keywords: Kerberos, authentication This guide will also apply for Docker-based installation, if you have an outer proxying server such as Apache2 that you can configure to use Kerberos. This guide however focuses on the packaged installation of OpenProject. - - ## Step 1: Create Kerberos service and keytab for OpenProject Assuming you have Kerberos set up with a realm, you need to create a Kerberos service Principal for the OpenProject HTTP service. In the course of this guide, we're going to assume your realm is `EXAMPLE.COM` and your OpenProject installation is running at `openproject.example.com`. - - Create the service principal (e.g. using `kadmin`) and a keytab for OpenProject used for Apache with the following commands: - - ```shell # Assuming you're in the `kadmin.local` interactive command @@ -34,8 +28,6 @@ addprinc -randkey HTTP/openproject.example.com ktadd -k /etc/apache2/openproject.keytab HTTP/openproject.example.com ``` - - This will output a keytab file for the realm selected by `kadmin` (in the above example, this would create all users from the default_realm) to `/etc/openproject/openproject.keytab` You still need to make this file readable for Apache. For Debian/Ubuntu based systems, the Apache user and group is `www-data`. This will vary depending on your installation @@ -45,8 +37,6 @@ sudo chown www-data:www-data /etc/apache2/openproject.keytab sudo chmod 400 /etc/apache2/openproject.keytab ``` - - ## Step 2: Configure Apache web server First, ensure that you install the `mod_auth_kerb` apache module. The command will vary depending on your installation. On Debian/Ubuntu based systems, use the following command to install: @@ -61,52 +51,50 @@ We are going to create a new file `/etc/openproject/addons/apache2/custom/vhost/ > **Please note**: The following kerberos configuration is only an example. We cannot provide any support or help with regards to the Kerberos side of configuration. OpenProject will simply handle the incoming header containing the logged in user. -``` - - AuthType GSSAPI - # The Basic Auth dialog name shown to the user - # change this freely - AuthName "EXAMPLE.COM realm login" - - # The credential store used by GSSAPI - GssapiCredStore keytab:/etc/apache2/openproject.keytab - - # Allow basic auth negotiation fallback - GssapiBasicAuth On +```apache + + AuthType GSSAPI + # The Basic Auth dialog name shown to the user + # change this freely + AuthName "EXAMPLE.COM realm login" + + # The credential store used by GSSAPI + GssapiCredStore keytab:/etc/apache2/openproject.keytab - # Uncomment this if you want to allow NON-TLS connections for kerberos - # GssapiSSLonly Off - - # Use the local user name without the realm. - # When off: OpenProject gets sent logins like "user1@EXAMPLE.com" - # When on: OpenProject gets sent logins like "user1" - GssapiLocalName On - - # Allow kerberos5 login mechanism - GssapiAllowedMech krb5 - - - # After authentication, Apache will set a header - # "X-Authenticated-User" to the logged in username - # appended with a configurable secret value - RequestHeader set X-Authenticated-User expr=%{REMOTE_USER}:MyPassword - - # Ensure the Authorization header is not passed to OpenProject - # as this will result in trying to perform basic auth with the API - RequestHeader unset Authorization - - # Apache directive to ensure a user is authenticated - Require valid-user - -``` + # Allow basic auth negotiation fallback + GssapiBasicAuth On + + # Uncomment this if you want to allow NON-TLS connections for kerberos + # GssapiSSLonly Off + + # Use the local user name without the realm. + # When off: OpenProject gets sent logins like "user1@EXAMPLE.com" + # When on: OpenProject gets sent logins like "user1" + GssapiLocalName On + + # Allow kerberos5 login mechanism + GssapiAllowedMech krb5 + # After authentication, Apache will set a header + # "X-Authenticated-User" to the logged in username + # appended with a configurable secret value + RequestHeader set X-Authenticated-User expr=%{REMOTE_USER}:MyPassword + + # Ensure the Authorization header is not passed to OpenProject + # as this will result in trying to perform basic auth with the API + RequestHeader unset Authorization + + # Apache directive to ensure a user is authenticated + Require valid-user + +``` ## Step 3: Configure OpenProject to use Apache header As the last step, you need to tell OpenProject to look for the `X-Authenticated-User` header and the `MyPassword` secret value. The easiest way to do that is using ENV variables -#### Configure using environment variables +### Configure using environment variables As with all the rest of the OpenProject configuration settings, the Kerberos header configuration can be provided via environment variables. For example: @@ -123,89 +111,71 @@ openproject config:set OPENPROJECT_AUTH__SOURCE__SSO_OPTIONAL=true Please note the differences between single underscores (`_`) and double underscores (`__`) in these environment variables, as the single underscore denotes namespaces. - - ## Step 4: Restart the server Once the configuration is completed, restart your OpenProject and Apache2 server with `service openproject restart` and `service apache2 restart` . Again these commands might differ depending on your Linux distribution. - - ## Step 5: Log in From there on, you will be forced to the Kerberos login flow whenever accessing OpenProject. For existing users that will be found by their login attribute provided in the `X-Authenticated-User`, they will be automatically logged in. For non-existing users, if you have an LDAP configured with automatic user registration activated (check out our [LDAP authentication guide](../../../system-admin-guide/authentication/ldap-authentication/) for that), users will be created automatically with the attributes retrieved from the LDAP. +## Known issues - -# Known issues - - - -## Using the OpenProject REST API +### Using the OpenProject REST API As Kerberos provides its own Basic Auth challenges if configured as shown above, it will prevent you from using the OpenProject API using an Authorization header such as API key authentication or OAuth2. **Note:** A precondition to use this workaround is to run OpenProject under its own path (server prefix) such as `https://YOUR DOMAIN/openproject/`. If you are not using this, you need to first reconfigure the wizard with `openproject reconfigure` to use such a path prefix. Alternatively, you might have success by using a separate domain or subdomain, but this is untested. - To work around this, you will have to configure a separate route to access the API, bypassing the Kerberos configuration. You can do that by modifying the `/etc/openproject/addons/apache2/custom/vhost/kerberos.conf`as follows: - - - -``` - # Add a Proxy for a separate route - # Replace /openproject/ with your own relative URL root / path prefix - ProxyPass /openproject-api/ http://127.0.0.1:6000/openproject/ retry=0 - ProxyPassReverse /openproject-api/ http://127.0.0.1:6000/openproject/ - - # Require kerberos flow for anything BUT /openproject-api - - AuthType GSSAPI - # The Basic Auth dialog name shown to the user - # change this freely - AuthName "EXAMPLE.COM realm login" +To work around this, you will have to configure a separate route to access the API, bypassing the Kerberos configuration. You can do that by modifying the `/etc/openproject/addons/apache2/custom/vhost/kerberos.conf`as follows: - # The credential store used by GSSAPI - GssapiCredStore keytab:/etc/apache2/openproject.keytab - - # Allow basic auth negotiation fallback - GssapiBasicAuth On +```apache +# Add a Proxy for a separate route +# Replace /openproject/ with your own relative URL root / path prefix +ProxyPass /openproject-api/ http://127.0.0.1:6000/openproject/ retry=0 +ProxyPassReverse /openproject-api/ http://127.0.0.1:6000/openproject/ - # Uncomment this if you want to allow NON-TLS connections for kerberos - # GssapiSSLonly Off - - # Use the local user name without the realm. - # When off: OpenProject gets sent logins like "user1@EXAMPLE.com" - # When on: OpenProject gets sent logins like "user1" - GssapiLocalName On - - # Allow kerberos5 login mechanism - GssapiAllowedMech krb5 - - - # After authentication, Apache will set a header - # "X-Authenticated-User" to the logged in username - # appended with a configurable secret value - RequestHeader set X-Authenticated-User expr=%{REMOTE_USER}:MyPassword - - # Ensure the Authorization header is not passed to OpenProject - # as this will result in trying to perform basic auth with the API - RequestHeader unset Authorization - - # Apache directive to ensure a user is authenticated - Require valid-user - -``` - - - - +# Require kerberos flow for anything BUT /openproject-api + + AuthType GSSAPI + # The Basic Auth dialog name shown to the user + # change this freely + AuthName "EXAMPLE.COM realm login" + + # The credential store used by GSSAPI + GssapiCredStore keytab:/etc/apache2/openproject.keytab + + # Allow basic auth negotiation fallback + GssapiBasicAuth On + # Uncomment this if you want to allow NON-TLS connections for kerberos + # GssapiSSLonly Off + + # Use the local user name without the realm. + # When off: OpenProject gets sent logins like "user1@EXAMPLE.com" + # When on: OpenProject gets sent logins like "user1" + GssapiLocalName On + + # Allow kerberos5 login mechanism + GssapiAllowedMech krb5 + # After authentication, Apache will set a header + # "X-Authenticated-User" to the logged in username + # appended with a configurable secret value + RequestHeader set X-Authenticated-User expr=%{REMOTE_USER}:MyPassword + + # Ensure the Authorization header is not passed to OpenProject + # as this will result in trying to perform basic auth with the API + RequestHeader unset Authorization + # Apache directive to ensure a user is authenticated + Require valid-user + +``` -# Additional resources +## Additional resources - [Kerberos documentation by Ubuntu](https://help.ubuntu.com/community/Kerberos) diff --git a/docs/system-admin-guide/authentication/ldap-authentication/README.md b/docs/system-admin-guide/authentication/ldap-authentication/README.md index 5cc1fa494a63..abe7497a632b 100644 --- a/docs/system-admin-guide/authentication/ldap-authentication/README.md +++ b/docs/system-admin-guide/authentication/ldap-authentication/README.md @@ -22,18 +22,12 @@ You will then be able to specify the LDAP configuration. This can be any direct The following screenshots contain an exemplary configuration for a new LDAP authentication mode. In the following, we will go through all available options. - - -#### LDAP connection details and security +### LDAP connection details and security ![Adding a new LDAP authentication server](ldap-host-and-security.png) - - In the upper section, you have to specify the connection details of your LDAP server as well as the connection encryption to use. - - - **Name:** Arbitrary identifier used to show which authentication source a user is coming from (e.g., in the [Administration > Users view](../../users-permissions/users/)) - **Host:** Full hostname to the LDAP server - **Port :** LDAP port. Will usually be 389 for LDAP and StartTLS and 636 for LDAP over SSL connections. @@ -41,7 +35,7 @@ In the upper section, you have to specify the connection details of your LDAP se - **Recommended option**: `STARTTLS` will issue an TLS connection upgrade to encrypt the connection after connecting to the LDAP server on the unencrypted PORT (`389` by default). - For LDAPS connections (LDAP over SSL), use `LDAPS` , this is an SSL encryption pattern that uses SSL certificates and connects to a separate port on the LDAP server. Some older LDAP servers only support this option, but this option is deprecated in most ldap servers favoring the STARTTLS method of operation. - For unencrypted connections, select `none` . No TLS/SSL connection will be established, your connection will be insecure and no verification will be made. - - [Click here to read more details into what these options mean for connection security.](https://www.rubydoc.info/gems/ruby-net-ldap/Net/LDAP) + - [Click here to read more details into what these options mean for connection security.](https://www.rubydoc.info/gems/ruby-net-ldap/Net/LDAP) - **SSL encryption options**: Provides additional options for LDAPS and STARTTLS connections. Be aware that these options do not apply for the connection encryption `none` option. @@ -49,41 +43,32 @@ In the upper section, you have to specify the connection details of your LDAP se - **LDAP server SSL certificate**: If the LDAP server's certificate is not trusted on the system that the OpenProject server runs on, you have the option to specify one or multiple PEM-encoded X509 certificates. This certificate might be the LDAP server's own certificate, or an intermediate or root CA that you trust for the sake of this connection. - -#### LDAP system user credentials +### LDAP system user credentials ![Defining the system user of the connection](ldap-system-user.png) - - Next, you will need to enter a system user that has READ access to the users for identification and synchronization purposes. Note that most operations to the LDAP during authentication will not be using these credentials, but the user-provided credentials in the login form in order to perform a regular user bind to the LDAP. - - - **Account:** The full DN of a system users used for looking up user details in the LDAP. It must have read permissions under the Base DN. This will not be used for the user bind upon authentication. - **Password:** The bind password of the system user’s DN above. - - -#### LDAP details +### LDAP details ![Defining the details of the connection](ldap-details.png) Next you can define what sections OpenProject will look for in the LDAP and also if users should be created automatically in OpenProject when they are accessing it. Let's look at the available options: - - - **Base DN**: Enter the Base DN to search within for users and groups in the LDAP tree - **Filter string**: Enter an optional [LDAP RFC4515 filter string](https://datatracker.ietf.org/doc/html/rfc4515) to further reduce the returned set of users. This allows you to restrict access to OpenProject with a very flexible filter. For group synchronization, only users matching this filter will be added as well. - **Automatic user creation:** Check to automatically create users in OpenProject when they first login in OpenProject. It will use the LDAP attribute mapping below to fill out required attributes. The user will be forwarded to a registration screen to complete required attributes if they are missing in the LDAP. -##### Filter Examples +#### Filter Examples -``` +```text (memberof=CN=OpenProject,OU=Rollen,OU=Gruppen,DC=intern) ``` -#### Attribute mapping +### Attribute mapping ![Defining the attribute map for users](ldap-attribute-mapping.png) @@ -95,25 +80,18 @@ The attribute mapping is used to identify attributes of OpenProject with attribu - **Email:** The attribute name in the LDAP that maps to the user’s mail address. This will usually be *mail.* If left empty, user will be prompted to enter upon registration if **automatic user creation** is true. - **Admin:** Specify an attribute that if it has a truthy value, results in the user in OpenProject becoming an admin account. Leave empty to never set admin status from LDAP attributes. - - Lastly, click on *Create* to save the LDAP authentication mode. You will be redirected to the index page with the created authentication mode. Click the *test* button to create a test connection using the system user’s bind credentials. ![LDAP authentication mode created](ldap-index-page.png) - - With the [OpenProject Enterprise edition](https://www.openproject.org/enterprise-edition/) it is possible to [synchronize LDAP and OpenProject groups](./ldap-group-synchronization). - ## Multiple LDAP connections OpenProject supports multiple LDAP connections to source users from. The user's authentication source is remembered the first time it is created (but can be switched in the administration backend). This ensures that the correct connection / LDAP source will be used for the user. Duplicates in the unique attributes (login, email) are not allowed and a second user with the same attributes will not be able to login. Please ensure that amongst all LDAP connections, a unique attribute is used that does not result in conflicting logins. - - ## LDAP connections through seeding / Environment variables OpenProject allows you to define an LDAP connection (and optionally, synchronized group filters for enterprise editions) through a configuration or environment variable. @@ -122,7 +100,7 @@ Please see the [advanced configuration guide](../../../installation-and-operatio ## LDAP user synchronization -By default, OpenProject will synchronize user account details (name, e-mail, login) and their account status from the LDAP through a background worker job every 24 hours. +By default, OpenProject will synchronize user account details (name, e-mail, login) and their account status from the LDAP through a background worker job every 24 hours. ### **Enable status synchronization** @@ -137,5 +115,5 @@ The user will be ensured to be active if it can be found in LDAP. Likewise, if t If for any reason, you do not wish to perform the synchronization at all, you can also remove the synchronization job from being run at all with the following variable: -- `ldap_users_disable_sync_job: true` -- (or the ENV variable `OPENPROJECT_LDAP__USERS__DISABLE__SYNC__JOB=true`) +- `ldap_users_disable_sync_job: true` +- (or the ENV variable `OPENPROJECT_LDAP__USERS__DISABLE__SYNC__JOB=true`) diff --git a/docs/system-admin-guide/authentication/ldap-authentication/ldap-group-synchronization/README.md b/docs/system-admin-guide/authentication/ldap-authentication/ldap-group-synchronization/README.md index 82bb9e446aa6..be22ba16c968 100644 --- a/docs/system-admin-guide/authentication/ldap-authentication/ldap-group-synchronization/README.md +++ b/docs/system-admin-guide/authentication/ldap-authentication/ldap-group-synchronization/README.md @@ -32,7 +32,6 @@ LDAP group synchronization augments the memberships defined by administrators i - Group synchronization have to be enabled by an administrator by creating a *synchronized LDAP group* that ties the OpenProject group to an LDAP entry. - Only synchronized memberships will be removed from the OpenProject group. If you want to add a user outside your LDAP authentication to an OpenProject group, you can safely do so without the membership being removed. - ## Configure LDAP group synchronization filters Instead of manually synchronizing groups from a given DN, you can also create filter objects that will query the LDAP not only for group members, but the groups themselves. @@ -56,8 +55,6 @@ Click on *Create* to finish the creation of the synchronized filter. This filte **Note:** If you manually create a synchronized group that is also found by a filter, its properties (such as the *Sync users* setting) is being overridden by the filter setting. - - ## Configure synchronized LDAP groups In order to get to the LDAP group sync administration pane, expand the LDAP authentication menu item in your administration. @@ -77,8 +74,6 @@ To create a new synchronized group, use the button on the top right of the page - **Sync users:** Check this option if you want members of this group to be automatically created in OpenProject. When unchecked, only members of the group that also are existing users in OpenProject can be synchronized. - **Group:** Select an OpenProject group you want the members of the LDAP group to synchronize to. - - Click on *Create* to finish the creation of the synchronized group. The LDAP memberships of each user will be synchronized hourly through a background job on your packaged installation. Changes and output will be logged to */var/log/openproject/cron-hourly.log*. If you want to trigger the synchronization *manually* you can do so by running the respective rake task directly. @@ -88,13 +83,10 @@ In the packaged installation, for instance, this would work like this: sudo openproject run bundle exec rake ldap_groups:synchronize ``` - - This method of creating synchronized groups is well-suited for a small number of groups, or a very individual set of groups that you need to synchronize. It is very flexible by allowing individual groups to synchronize users into OpenProject. If you need to synchronize a large number of groups that follow a common pattern, consider using the following filter functionality. - ## FAQ ### Are nested / recursive LDAP groups supported? @@ -104,18 +96,12 @@ However, there is a feature ticket for this in the wish list: https://community. If you'd like to voice your interest in this feature, please comment it with your use-case to provide visibility. - - ## Troubleshooting - - ### LDAP groups are not being synchronized Please double check the DN of the groups and the LDAP connection. The base DN of the LDAP connection and the DN must share a common hierarchy. Otherwise, the group DN will not be found by the connection, as the base DN is used for all subsequent queries for the lifetime of the connection. - - ### Users are not being synchronized For users to be automatically synchronized, the following conditions need to be met: diff --git a/docs/system-admin-guide/authentication/oauth-applications/README.md b/docs/system-admin-guide/authentication/oauth-applications/README.md index 9eba0bdc283c..30da9379863d 100644 --- a/docs/system-admin-guide/authentication/oauth-applications/README.md +++ b/docs/system-admin-guide/authentication/oauth-applications/README.md @@ -52,16 +52,16 @@ The authentication endpoints of OpenProject OAuth2 server are: * Auth URL: `https://example.com/oauth/authorize` * Access Token URL: `https://example.com/oauth/token` -## **Authorization code flow** example +## *Authorization code flow* example ### Request authorization code Request an authorization code. Please adopt the following URL replacing: - * `example.com` with the IP/host name of your OpenProject instance, - * `` with your OAuth2 client ID, and - * `` with the redirect URI as configured above. - * You can leave the `scope` value untouched unless you are running the OpenProject BIM edition and also plan to access to the BCF version 2.1 REST API. Then simply replace `api_v3` with `api_v3%20bcf_v2_1`. +* `example.com` with the IP/host name of your OpenProject instance, +* `` with your OAuth2 client ID, and +* `` with the redirect URI as configured above. +* You can leave the `scope` value untouched unless you are running the OpenProject BIM edition and also plan to access to the BCF version 2.1 REST API. Then simply replace `api_v3` with `api_v3%20bcf_v2_1`. `https://example.com/oauth/authorize?response_type=code&client_id=&redirect_uri=&scope=api_v3&prompt=consent` @@ -83,11 +83,11 @@ request an API token. We do this manually in the command line using cURL. Please replace: - * `example.com` with the IP/host name of your OpenProject instance, - * `` with your OAuth2 client ID, - * `` with your OAuth2 client secret, - * `` with the code you obtained above, - * and `` with the redirect URI as configured above. +* `example.com` with the IP/host name of your OpenProject instance, +* `` with your OAuth2 client ID, +* `` with your OAuth2 client secret, +* `` with the code you obtained above, +* and `` with the redirect URI as configured above. ```shell $ curl --request POST \ @@ -116,15 +116,14 @@ The response will look like this: The response contains the bearer token ("access_token") and a refresh token that you will need when working with the API. Please copy the tokens for reference. - ### Perform a request to the OpenProject API with OAuth token With the token that you obtained above you can now make API calls to the OpenProject instance on behalf of the current user. For example, the following cURL command fetches all projects from the API V3. Please replace: - * `example.com` with the IP/host name of your OpenProject instance, and - * `` with the bearer token you obtained above. +* `example.com` with the IP/host name of your OpenProject instance, and +* `` with the bearer token you obtained above. ```shell $ curl --request GET 'https://example.com/api/v3/projects' \ @@ -136,7 +135,7 @@ $ curl --request GET 'https://example.com/api/v3/projects' \ You can exercise the authentication flow above using Postman. Just create a new request: -``` +```text GET {{protocolHostPort}}/api/v3/projects ``` diff --git a/docs/system-admin-guide/authentication/openid-providers/README.md b/docs/system-admin-guide/authentication/openid-providers/README.md index 54baa3f65a9d..6fb9fc175f67 100644 --- a/docs/system-admin-guide/authentication/openid-providers/README.md +++ b/docs/system-admin-guide/authentication/openid-providers/README.md @@ -7,7 +7,6 @@ keywords: OpenID providers --- # OpenID providers - | Topic | Content | | ------------------------------------------------------------ | ------------------------------------------------------------ | | [Google Workspace](#google-workspace) | How to use Google Workspace as an SSO provider for OpenProject? | @@ -33,11 +32,8 @@ You can configure the following options. When checked, users will be created according to the [self-registration setting](../authentication-settings). 6. Press the blue **create** button. - ## Google Workspace - - ### Step 1: Create the OAuth consent screen 1. Navigate to your GCP console. (https://console.cloud.google.com/) @@ -45,8 +41,6 @@ When checked, users will be created according to the [self-registration setting] ![g1-apis-and-services-oauth-consent-screen](g1-apis-and-services-oauth-consent-screen.png) - - 3. Create a new project and a new app or edit an existing project and an existing app, setting the following fields (shall be Internal): 1. **App name** (e.g. EXAMPLE.COM SSO) 2. **User support email** (e.g. user-support@example.com) @@ -60,8 +54,6 @@ When checked, users will be created according to the [self-registration setting] 4. **Scopes** - Press **SAVE AND CONTINUE** 5. **Summary** - Press **SAVE AND CONTINUE** - - ### Step 2: Create the OAuth Client 1. Under **APIs & Services**, go to **Credentials**. @@ -87,11 +79,9 @@ After pressing **CREATE** you will get a pop-up window like the following ![g5-oauth-client-created](g5-oauth-client-created.png) - - ### Step 3: Add Google as an OpenID Provider to OpenProject -1. Login as Open Project Administrator +1. Login as OpenProject Administrator 2. navigate to -> *Administration* -> *Authentication* and choose -> *OpenID providers*. 1. **Name** Choose Google 2. **Display Name** (e.g. **EXAMPLE.COM SSO**) @@ -105,10 +95,6 @@ After pressing **CREATE** you will get a pop-up window like the following ![g7-successful-creation-google](g7-successful-creation-google.png) - - - - ## Azure Active Directory ### Step 1: Register an App in Azure Active Directory @@ -119,23 +105,19 @@ The steps are as follows: Log into your Microsoft account, and go to the Azure Active Directory administration page. -![](01-menu.png) - - +![Azure Active Directory administration page](01-menu.png) In the sidebar, click on "All services". -![](02-admin-dashboard.png) +![Azure Active Directory All services](02-admin-dashboard.png) Click on the link named "App registrations". -![](03-app-registrations.png) - - +![Azure Active Directory App registrations](03-app-registrations.png) Click on "New registration". -![](04-register-app.png) +![Azure Active Directory New registration](04-register-app.png) You are now asked for a few settings: @@ -145,21 +127,19 @@ You are now asked for a few settings: When you are done, click on the "Register" button at the end of the page. You are redirected to your new App registration, be sure to save the "Application (client) ID" that is now displayed. You will need it later. -![](02-admin-dashboard-1580821056307.png) - - +![Azure Active Directory Admin Dashboard](02-admin-dashboard-1580821056307.png) You can now click on "Certificates & secret". -![](06-certificates.png) +![Azure Active Directory Certificates](06-certificates.png) Then click on "New client secret", set the description to "client_secret", and the expiration to "never". Then click on "Add". -![](07-client-secret.png) +![Azure Active Directory New Client Secret](07-client-secret.png) A secret should have been generated and is now displayed on the page. Be sure to save it somewhere because it will only be displayed once. -![](08-add-secret.png) +![Azure Active Directory Add Secret](08-add-secret.png) At the end of this step, you should have a copy of the Application client ID as well as the client Secret you just generated. @@ -214,5 +194,4 @@ exit Then, existing users should be able to log in using their Azure identity. Note that this works only if the user is using password-based authentication, and is not linked to any other authentication source (e.g. LDAP) or OpenID provider. - Note that this setting is set to true by default for new installations already. diff --git a/docs/system-admin-guide/authentication/saml/README.md b/docs/system-admin-guide/authentication/saml/README.md index bb3e15fef3ed..67d3e33962dc 100644 --- a/docs/system-admin-guide/authentication/saml/README.md +++ b/docs/system-admin-guide/authentication/saml/README.md @@ -40,8 +40,6 @@ The configuration can be provided in one of two ways: * for OpenProject version 11 and older in `config/configuration.yml` file (1.3) - - Whatever means are chosen, the plugin simply passes all options to omniauth-saml. See [their configuration documentation](https://github.com/omniauth/omniauth-saml#usage) for further details. The options are mutually exclusive. If you decide to save settings in the database, they will override any ENV variables you might have set. (*For OpenProject version 11 and older:* If settings are already provided via ENV variables, they will overwrite settings in a `configuration.yml` file.) @@ -129,8 +127,8 @@ Setting.plugin_openproject_auth_saml = Hash(Setting.plugin_openproject_auth_saml ### awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' "idp_cert" => "-----BEGIN CERTIFICATE-----\nMI................IEr\n-----END CERTIFICATE-----\n", # Otherwise, the certificate fingerprint must be added - # Either `idp_cert` or `idp_cert_fingerprint` must be present! - "idp_cert_fingerprint" => "E7:91:B2:E1:...", + # Either `idp_cert` or `idp_cert_fingerprint` must be present! + "idp_cert_fingerprint" => "E7:91:B2:E1:...", # Replace with your SAML 2.0 redirect flow single sign on URL # For example: "https://sso.example.com/saml/singleSignOn" @@ -156,13 +154,11 @@ Setting.plugin_openproject_auth_saml = Hash(Setting.plugin_openproject_auth_saml }) ``` - - #### 1.3 config/configuration.yml file > **NOTE**: ONLY for OpenProject version 11 and older -In your OpenProject packaged installation, you can modify the `/opt/openproject/config/configuration.yml` file. +In your OpenProject packaged installation, you can modify the `/opt/openproject/config/configuration.yml` file. Edit the file in your favorite editor ```shell @@ -239,9 +235,9 @@ SAML responses by identity providers are required to be signed. You can configur #### 2.2 Mandatory: Attribute mapping -Use the key `attribute_statements` to provide mappings for attributes returned by the SAML identity provider's response to OpenProject internal attributes. +Use the key `attribute_statements` to provide mappings for attributes returned by the SAML identity provider's response to OpenProject internal attributes. -You may provide attribute names or namespace URIs as follows: `email: ['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress']`. +You may provide attribute names or namespace URIs as follows: `email: ['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress']`. The OpenProject username is taken by default from the `email` attribute if no explicit login attribute is present. @@ -289,7 +285,6 @@ default: last_name: ['sn'] ``` - #### 2.3 Optional: Set the attribute format By default, the attributes above will be requested with the format `urn:oasis:names:tc:SAML:2.0:attrname-format:basic`. @@ -326,8 +321,6 @@ default: last_name: ['urn:oid:2.5.4.4'] ``` - - #### 2.4 Optional: Request signature and Assertion Encryption Your identity provider may optionally encrypt the assertion response, however note that with the required use of TLS transport security, in many cases this is not necessary. You may wish to use Assertion Encryption if TLS is terminated before the OpenProject application server (e.g., on the load balancer level). @@ -371,8 +364,6 @@ default: With request signing enabled, the certificate will be added to the identity provider to validate the signature of the service provider's request. - - #### 2.5. Optional: Restrict who can automatically self-register You can configure OpenProject to restrict which users can register on the system with the [authentication self-registration setting](../authentication-settings) @@ -387,14 +378,13 @@ default: limit_self_registration: true ``` - #### 2.6. Optional: Set name_identifier_format There are a number of name identifier formats that are relevant, so if you have specific requirements or configuration on the identity provider side, you might need to set the name_identifier_format property. The default behavior would be to use the email Address like so: -``` +```yaml default: # <-- other configuration --> mysaml1: @@ -426,14 +416,10 @@ When you return from the authentication provider, you might be shown one of thes 3. You are being redirected to the account registration modal as user name or email is already taken. In this case, the account you want to authenticate already has an internal OpenProject account. You need to follow the [Troubleshooting](#troubleshooting) guide below to enable taking over that existing account. 4. You are getting an internal or authentication error message. This is often a permission or invalid certificate/fingerprint configuration. Please consult the server logs for any hints OpenProject might log there. - - ## Instructions for common SAML providers In the following, we will provide configuration values for common SAML providers. Please note that the exact values might differ depending on your idP's version and configuration. If you have additions to these variables, please use the "Edit this file" functionality in the "Docs feedback" section of this documentation. - - ### ADFS For ADFS, you need add OpenProject as a "relying part trust" entry within the ADFS management screen. Please follow this guide to be guided through the steps: https://learn.microsoft.com/en-us/windows-server/identity/ad-fs/operations/create-a-relying-party-trust @@ -470,8 +456,6 @@ Add the following Claim rules: | Surname | `sn` | | Given-name | `givenName` | - - #### Export the ADFS public certificate OpenProject needs the certificate or fingerprint of the ADFS to validate the signature of incoming tokens. Here are the steps on how to do that: @@ -483,12 +467,8 @@ OpenProject needs the certificate or fingerprint of the ADFS to validate the sig - Export the file and move it to the OpenProject instance or open a shell - Run the command `awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' ` - - #### Set up OpenProject for ADFS integration - - In OpenProject, these are the variables you will need to set. Please refer to the above documentation for the different ways you can configure these variables OpenProject ```shell @@ -505,8 +485,6 @@ OPENPROJECT_SAML_SAML_ISSUER="https://" OPENPROJECT_SAML_SAML_IDP__CERT="" ``` - - ### Keycloak In Keycloak, use the following steps to set up a SAML integration OpenProject: @@ -514,23 +492,21 @@ In Keycloak, use the following steps to set up a SAML integration OpenProject: - Select or create a realm you want to authenticate OpenProject with. Remember that realm identifier. - Under "Clients" menu, click on "Create" - **Add client**: Enter the following details - - **Client ID**: `https://` + - **Client ID**: `https://` - **Client protocol**: Set to "saml" - - **Client SAML Endpoint**: `https:///auth/saml` + - **Client SAML Endpoint**: `https:///auth/saml` You will be forwarded to the settings tab of the new client. Change these settings: - Enable **Sign Documents** -- **Master SAML Processing URL**: Set to `https:///auth/saml` +- **Master SAML Processing URL**: Set to `https:///auth/saml` - **Name ID Format** Set to username - Expand section "Fine Grain SAML Endpoint Configuration" - - **Assertion Consumer Service POST Binding URL**: Set to `https:///auth/saml/callback` - - **Assertion Consumer Service Redirect Binding URL**: Set to `https:///auth/saml/callback` + - **Assertion Consumer Service POST Binding URL**: Set to `https:///auth/saml/callback` + - **Assertion Consumer Service Redirect Binding URL**: Set to `https:///auth/saml/callback` Go the "Mappers" tab and create the following mappers. Note that the "User attribute" values might differ depending on your LDAP or Keycloak configuration. - - | Mapper Type | User Attribute | Friendly Name | SAML Attribute Name | SAML Attribute NameFormat | | -------------- | -------------- | ------------- | ------------------- | ------------------------- | | User Attribute | uid | uid | uid | Basic | @@ -538,13 +514,9 @@ Go the "Mappers" tab and create the following mappers. Note that the "User attri | User Attribute | firstName | givenName | givenName | Basic | | User Attribute | email | mail | mail | Basic | - - #### Export the Keycloak public certificate -To view the certificate in Base64 encoding, go to the menu "Realm settings" and click on "Endpoints -> SAML 2.0 Identity Provider Metadata". This will open an XML file, and the certificate is stored in the `ds:X509Certificate `node under the signing key. Copy the content of the certificate (`MII.....`) - - +To view the certificate in Base64 encoding, go to the menu "Realm settings" and click on "Endpoints -> SAML 2.0 Identity Provider Metadata". This will open an XML file, and the certificate is stored in the `ds:X509Certificate` node under the signing key. Copy the content of the certificate (`MII.....`) #### Set up OpenProject for Keycloak integration @@ -567,8 +539,6 @@ OPENPROJECT_SAML_SAML_IDP__CERT=" SAML 2.0 Identity Provider Metadata". This will include URLs for the `SingleSignOnService` and `SingleLogoutService`. - - ## Troubleshooting **Q: After clicking on a provider badge, I am redirected to a signup form that says a user already exists with that login.** @@ -588,7 +558,6 @@ Then, existing users should be able to log in using their SAML identity. Note th Note that this setting is set to true by default for new installations already. - **Q: Could the users be automatically logged in to OpenProject if they are already authenticated at the SAML Identity Provider?** A: You are able to chose a default direct-login-provider in the by using environment variables @@ -599,11 +568,8 @@ OPENPROJECT_OMNIAUTH__DIRECT__LOGIN__PROVIDER="saml" [Read more](../../../installation-and-operations/configuration/#omniauth-direct-login-provider) - - **Q:** `"certificate"` **and** `"private key"` **are used in the SAML configuration and openproject logs show a FATAL error after GET "/auth/saml"** `**FATAL** -- : OpenSSL::PKey::RSAError (Neither PUB key nor PRIV key: nested asn1 error):` -A1: The given private_key is encrypted. The key is needed without the password (cf., https://github.com/onelogin/ruby-saml/issues/473) +A1: The given private_key is encrypted. The key is needed without the password (cf., [see](https://github.com/onelogin/ruby-saml/issues/473)) A2: The provided key pair is not an RSA key. ruby-saml might expect an RSA key. - diff --git a/docs/system-admin-guide/backup/README.md b/docs/system-admin-guide/backup/README.md index 83e5e7908b39..c4350e223da9 100644 --- a/docs/system-admin-guide/backup/README.md +++ b/docs/system-admin-guide/backup/README.md @@ -29,8 +29,6 @@ The system generates the token which you then fill in where requested in the fie Each time you request a backup this token has to be provided. This also applies when requesting a backup via the API where on top of the API token the _backup token_ will have to be provided as well. - - ## Notifications Each time a _backup token_ is created or reset an email notification will be sent to all administrators take make everyone aware that there is a new user with access to backups. @@ -52,7 +50,7 @@ As a system administrator you can skip this period by running the following rake sudo openproject run rake backup:allow_now ``` -__In a docker setup you can open a terminal on any of the web or worker processes and run the rake task there.__ +**In a docker setup you can open a terminal on any of the web or worker processes and run the rake task there.** ## Pull a backup via APIv3 diff --git a/docs/system-admin-guide/calendars-and-dates/README.md b/docs/system-admin-guide/calendars-and-dates/README.md index 90e851163159..2b8c91f12f0b 100644 --- a/docs/system-admin-guide/calendars-and-dates/README.md +++ b/docs/system-admin-guide/calendars-and-dates/README.md @@ -45,15 +45,15 @@ Click on **Apply changes** at the end of the page for the changes to take effect ### Effect on scheduling -As an instance-level setting, any change here will affect the scheduling of *all work packages* in *all projects* in that instance. It is currently not possible to define working days at a project-level. +As an instance-level setting, any change here will affect the scheduling of *all work packages* in *all projects* in that instance. It is currently not possible to define working days at a project-level. However, it *is* possible to override this setting at the level of individual work packages via the date picker. For more information on how to schedule work packages on non-working days, refer to [Duration and Non-working days in the user guide](../../user-guide/work-packages/set-change-dates/#working-days-and-duration). -> **Important:** Changing this setting will reschedule work packages automatically to the next available working day after clicking on **Save**. For example, removing Friday as a working day by unchecking it will mean that work packages that included Friday will now end one day in the future, and ones that started or ended on Friday will now start and end on Monday. +> **Important:** Changing this setting will reschedule work packages automatically to the next available working day after clicking on **Save**. For example, removing Friday as a working day by unchecking it will mean that work packages that included Friday will now end one day in the future, and ones that started or ended on Friday will now start and end on Monday. > -> Depending on the number of projects and work packages in your instance, this process can take from a couple of minutes to hours. +> Depending on the number of projects and work packages in your instance, this process can take from a couple of minutes to hours. -Changing this setting is likely to cause changes to scheduling in unexpected ways, and generate a significant number of notifications for assignees, responsibles and watchers for work packages whose dates change as a result. +Changing this setting is likely to cause changes to scheduling in unexpected ways, and generate a significant number of notifications for assignees, responsibles and watchers for work packages whose dates change as a result. We only recommend changing this setting if you are absolutely sure and you are aware of the potential consequences. @@ -74,7 +74,7 @@ To change this setting, navigate to **Date format** inside of the **Calendar and 3. **Week starts on**: configure what date the week starts on (e.g. in the calendar view). Default is `Based on user's language`. You can also choose to start a week always on Mondays, Sundays or Saturdays. If you set **Week starts on**, you must also set the **First week in year contains** or you will probably get inconsistencies in week numbering in calendars and the Gantt chart. -4. **First week in year contains**: select the day that needs to be contained in the first week of the year. This value is used together with _Week starts on_ to determine the first week of the year. +4. **First week in year contains**: select the day that needs to be contained in the first week of the year. This value is used together with _Week starts on_ to determine the first week of the year. - For European ISO-8601 standard, set **Week starts on** to `Monday` and First week in year to `Thursday`. - For US and Canada, set **First week in year contains** to `Sunday` and Day of Year to `6`. - If you leave both on `Based on user's language`, the information provided by moment.js will be used: For more information, please also see [this document from moment.js](https://momentjscom.readthedocs.io/en/latest/moment/07-customization/16-dow-doy/). diff --git a/docs/system-admin-guide/colors/README.md b/docs/system-admin-guide/colors/README.md index 2e7e0439da7c..64bd93bebd48 100644 --- a/docs/system-admin-guide/colors/README.md +++ b/docs/system-admin-guide/colors/README.md @@ -7,7 +7,7 @@ keywords: colors --- # Colors -To define a set of colors in OpenProject, navigate to -> *Administration* -> *Colors*. +To define a set of colors in OpenProject, navigate to -> *Administration* -> *Colors*. You can configure a set of predefined colors in OpenProject which you can choose for e.g. [set colors for work package types](../manage-work-packages/work-package-types/) or attribute highlighting, e.g. for [status](../manage-work-packages/work-package-status/). diff --git a/docs/system-admin-guide/custom-fields/README.md b/docs/system-admin-guide/custom-fields/README.md index 4963ce43de11..f3c5d5308e16 100644 --- a/docs/system-admin-guide/custom-fields/README.md +++ b/docs/system-admin-guide/custom-fields/README.md @@ -25,7 +25,7 @@ If none have been created so far, click on the link **Create a new custom field* Depending on the module, for which the new custom field is being created, slightly different options may be offered. This is an example of a new custom field for a work package. -![Sys-admin-create-custom-field](openproject_system_guide_new_custom_field.png) +![Sys-admin-create-custom-field](openproject_system_guide_new_custom_field_new.png) 1. Custom field **Name**, which will appear as the attribute name on the work package form. 2. Choose a **Format** of the custom field, e.g. text, list, date, boolean. You can choose between the following formats for custom fields: @@ -34,20 +34,19 @@ Depending on the module, for which the new custom field is being created, sligh 3. Specify the **minimal and maximal length**. If a 0 is chosen, no restriction will be imposed on the length of the custom field. 4. **Regular expression** specifying which values are allowed for the custom field. -5. **Default value** will be used as a default value for the custom field. +5. **Default value** will be used as a default value for the custom field. 6. Set if the new custom field should be a **required** field. 7. Specify if the new custom field should be **used for all projects**. This means the custom field will be active for all projects and does not need to be activated separately per project. 8. Specify if the new custom field should be **used as a filter for work packages**. See [here](../../user-guide/work-packages/work-package-table-configuration/#filter-work-packages) how to filter work packages. 9. Specify if the new custom field should be **searchable** via the global search. 10. **Save** the new custom field. - - ## Assign a custom field to a work package type and project > **Note**: Custom fields need to be activated per work package type and per project. Work package custom fields are only visible when two conditions are met: -> 1. Custom field has been added to the work package type (form configuration). -> 2. Custom field is activated for the project. +> +> 1. Custom field has been added to the work package type (form configuration). +> 2. Custom field is activated for the project. 1. [Assign a custom field to a work package type](../manage-work-packages/work-package-types/#work-package-form-configuration-enterprise-add-on) (Form configuration). You can do this directly via the link in the custom field overview. @@ -65,8 +64,6 @@ To **delete** a custom field, click on the delete icon next to the respective cu ![Edit or delete a custom field in OpenProject administration](system-admin-edit-delete-custom-field.png) - - ## Create a multi-select custom field For work package custom fields of type **List** and **User** you may also select **multi-select custom fields** to select more than one value at once. diff --git a/docs/system-admin-guide/custom-fields/administration-custom-fields.png b/docs/system-admin-guide/custom-fields/administration-custom-fields.png index 3198adeb3474..aa25eae27640 100644 Binary files a/docs/system-admin-guide/custom-fields/administration-custom-fields.png and b/docs/system-admin-guide/custom-fields/administration-custom-fields.png differ diff --git a/docs/system-admin-guide/custom-fields/custom-fields-faq/README.md b/docs/system-admin-guide/custom-fields/custom-fields-faq/README.md index 9c66628f74da..06dc360b71c3 100644 --- a/docs/system-admin-guide/custom-fields/custom-fields-faq/README.md +++ b/docs/system-admin-guide/custom-fields/custom-fields-faq/README.md @@ -10,9 +10,9 @@ keywords: custom field FAQ, project custom field, create own attribute ## Is there a limit to how many values can be added to a work package custom field of the type list? -A hard limit does not exist. Nevertheless, there are factors that can represent a restriction in usability: +A hard limit does not exist. Nevertheless, there are factors that can represent a restriction in usability: -- Performance: So far, the allowed field values are all entered into the work package form retrieved before processing a work package. It is only a guess, but no problems should arise when rendering in the frontend (displaying in the select field), as an autocompleter is already used here. The performance on the administration page of the user-defined field, where the possible values are maintained, could also be a factor. +- Performance: So far, the allowed field values are all entered into the work package form retrieved before processing a work package. It is only a guess, but no problems should arise when rendering in the frontend (displaying in the select field), as an autocompleter is already used here. The performance on the administration page of the user-defined field, where the possible values are maintained, could also be a factor. - On the same administration page, editing could be difficult from a UI point of view. Especially if the user wants to sort. For example, there is currently no way to sort the values automatically. If 4000 values have to be entered and sorted, it could be a lengthy process. ## Is it possible to set a custom field as "required" when it's already in use? What will happen to the existing work packages for which the custom field is activated? diff --git a/docs/system-admin-guide/custom-fields/custom-fields-projects/README.md b/docs/system-admin-guide/custom-fields/custom-fields-projects/README.md index abc9b2aa0a2d..f27f06de32f3 100644 --- a/docs/system-admin-guide/custom-fields/custom-fields-projects/README.md +++ b/docs/system-admin-guide/custom-fields/custom-fields-projects/README.md @@ -9,6 +9,6 @@ keywords: custom fields for projects, show custom fields As a user of [OpenProject Enterprise on-premises](https://www.openproject.org/enterprise-edition/) or [OpenProject Enterprise cloud](https://www.openproject.org/enterprise-edition/#hosting-options) you can customize work package lists and show additional project information by adding custom attributes to project lists, e.g. adding accountable, project due date, progress, and more. ->**Important**: Starting with version 14.0, project custom fields are called "project attributes". Please refer to our [user guide on project attributes](../../../user-guide/project-overview) for more information. +>**Important**: Starting with version 14.0, project custom fields are called "project attributes". Please refer to our [user guide on project attributes](../../../user-guide/project-overview) for more information. > ->If you are an administrator and wish to configure project attributes, please refer to our [admin guide on project attributes](../../projects/project-attributes). \ No newline at end of file +>If you are an administrator and wish to configure project attributes, please refer to our [admin guide on project attributes](../../projects/project-attributes). diff --git a/docs/system-admin-guide/custom-fields/image-20200122112806127.png b/docs/system-admin-guide/custom-fields/image-20200122112806127.png index 701cfd121a9a..eabd1246dbcd 100644 Binary files a/docs/system-admin-guide/custom-fields/image-20200122112806127.png and b/docs/system-admin-guide/custom-fields/image-20200122112806127.png differ diff --git a/docs/system-admin-guide/custom-fields/openproject_system_guide_new_custom_field_new.png b/docs/system-admin-guide/custom-fields/openproject_system_guide_new_custom_field_new.png new file mode 100644 index 000000000000..b511007ab336 Binary files /dev/null and b/docs/system-admin-guide/custom-fields/openproject_system_guide_new_custom_field_new.png differ diff --git a/docs/system-admin-guide/custom-fields/system-admin-add-field-to-wp-type.png b/docs/system-admin-guide/custom-fields/system-admin-add-field-to-wp-type.png index d8d646392609..09ac1443c6fa 100644 Binary files a/docs/system-admin-guide/custom-fields/system-admin-add-field-to-wp-type.png and b/docs/system-admin-guide/custom-fields/system-admin-add-field-to-wp-type.png differ diff --git a/docs/system-admin-guide/custom-fields/system-admin-allow-multi-select.png b/docs/system-admin-guide/custom-fields/system-admin-allow-multi-select.png index 3c602ad9a910..f755bcc9781b 100644 Binary files a/docs/system-admin-guide/custom-fields/system-admin-allow-multi-select.png and b/docs/system-admin-guide/custom-fields/system-admin-allow-multi-select.png differ diff --git a/docs/system-admin-guide/custom-fields/system-admin-edit-delete-custom-field.png b/docs/system-admin-guide/custom-fields/system-admin-edit-delete-custom-field.png index 871d3be83220..88007ea0adb6 100644 Binary files a/docs/system-admin-guide/custom-fields/system-admin-edit-delete-custom-field.png and b/docs/system-admin-guide/custom-fields/system-admin-edit-delete-custom-field.png differ diff --git a/docs/system-admin-guide/design/README.md b/docs/system-admin-guide/design/README.md index 304522980305..3da56ca75e90 100644 --- a/docs/system-admin-guide/design/README.md +++ b/docs/system-admin-guide/design/README.md @@ -26,7 +26,7 @@ The design page provides several options to customize your OpenProject Enterpris You can choose between the three default color themes for OpenProject: -* OpenProject +* OpenProject * OpenProject Light * OpenProject Dark @@ -34,8 +34,6 @@ Press the Save button to apply your changes. The theme will then be changed. ![System-admin-guide_color-theme](System-admin-guide_color-theme.png) - - ## Upload a custom logo To replace the default OpenProject logo with your own logo, make sure that your logo has the dimensions 460 by 60 pixels. Select the *Browse* button and select the file from your hard drive to upload it. @@ -64,7 +62,7 @@ When you bookmark your OpenProject environment’s URL, you will see that the up ## Advanced settings -Aside from uploading logos and icons, you can also customize the colors used within your OpenProject environment. +Aside from uploading logos and icons, you can also customize the colors used within your OpenProject environment. To do this change the color values (entered as color hex code) in the *Advanced settings* section. In order to find the right hex code for a color, you can use a website, such as [color-hex.com](https://www.color-hex.com/). You can see the selected color in the preview area next to the color hex code. Therefore, it is possible to see the selected color before saving the changes. @@ -72,4 +70,3 @@ To do this change the color values (entered as color hex code) in the *Advanced ![Advanced color settings in OpenProject](openproject_system_guide_design_advanced_settings_primer.png) As soon as you press the **Save** button your changes are applied and the colors of your OpenProject environment are adjusted accordingly. - diff --git a/docs/system-admin-guide/design/pdf-export-styles/README.md b/docs/system-admin-guide/design/pdf-export-styles/README.md index 308466235fe2..0ab461f0659b 100644 --- a/docs/system-admin-guide/design/pdf-export-styles/README.md +++ b/docs/system-admin-guide/design/pdf-export-styles/README.md @@ -22,6 +22,7 @@ Properties to set borders Key: `border` Example: + ```yaml border_color: F000FF border_color_top: 000FFF @@ -58,6 +59,7 @@ Styling for the cover page of the PDF report export Key: `cover` Example: + ```yaml cover: header: {} @@ -78,6 +80,7 @@ Styling for the cover page footer of the PDF report export Key: `cover_footer` Example: + ```yaml footer: offset: 20 @@ -97,6 +100,7 @@ Styling for the cover page header of the PDF report export Key: `cover_header` Example: + ```yaml header: logo_height: 25 @@ -118,6 +122,7 @@ Styling for the cover page header border of the PDF report export Key: `cover_header_border` Example: + ```yaml border: color: d3dee3 @@ -140,6 +145,7 @@ Styling for the hero banner at the bottom at the cover page Key: `cover_hero` Example: + ```yaml header: padding_right: 150 @@ -164,6 +170,7 @@ Properties to set the font style Key: `font` Example: + ```yaml font: OpenSans size: 10 @@ -201,6 +208,7 @@ Properties to set margins Key: `margin` Example: + ```yaml margin: 10mm margin_top: 15mm @@ -221,6 +229,7 @@ Styling a clickable link Key: `link` Example: + ```yaml link: color: '000088' @@ -237,6 +246,7 @@ Styling for content of work package description and long text custom fields Key: `markdown` Example: + ```yaml markdown: font: {} @@ -290,6 +300,7 @@ Styling to denote a paragraph as quote Key: `blockquote` Example: + ```yaml blockquote: background_color: f4f9ff @@ -320,6 +331,7 @@ Styling to denote a word or phrase as code Key: `code` Example: + ```yaml code: font: Consolas @@ -337,6 +349,7 @@ Styling to denote a paragraph as code Key: `codeblock` Example: + ```yaml codeblock: background_color: F5F5F5 @@ -360,6 +373,7 @@ codeblock: Key: `header` Example: + ```yaml header: styles: @@ -389,6 +403,7 @@ Tables without or empty header rows can be styled differently. Key: `headless_table` Example: + ```yaml headless_table: auto_width: true @@ -411,6 +426,7 @@ Styling for horizontal lines Key: `hrule` Example: + ```yaml hrule: line_width: 1 @@ -428,6 +444,7 @@ Styling of images Key: `image` Example: + ```yaml image: max_width: 50mm @@ -451,6 +468,7 @@ image: Key: `ordered_list` Example: + ```yaml ordered_list: spacing: 2mm @@ -469,6 +487,7 @@ ordered_list: Key: `ordered_list_point` Example: + ```yaml ordered_list_point: template: "." @@ -492,6 +511,7 @@ A block of text Key: `paragraph` Example: + ```yaml paragraph: align: justify @@ -509,6 +529,7 @@ paragraph: Key: `table` Example: + ```yaml table: auto_width: true @@ -534,6 +555,7 @@ table: Key: `task_list_point` Example: + ```yaml task_list_point: checked: "☑" @@ -553,6 +575,7 @@ task_list_point: Key: `unordered_list` Example: + ```yaml unordered_list: spacing: 1.5mm @@ -571,6 +594,7 @@ unordered_list: Key: `unordered_list_point` Example: + ```yaml unordered_list_point: sign: "•" @@ -590,6 +614,7 @@ Styling for the PDF table export Key: `overview` Example: + ```yaml overview: group_heading: {} @@ -608,6 +633,7 @@ Styling for the group label if grouping is activated Key: `group_heading` Example: + ```yaml group_heading: size: 11 @@ -626,6 +652,7 @@ group_heading: Key: `table` Example: + ```yaml table: subject_indent: 0 @@ -659,6 +686,7 @@ Properties to set paddings Key: `padding` Example: + ```yaml padding: 10mm padding_top: 15mm @@ -677,6 +705,7 @@ padding_top: 15mm Key: `page_footer` Example: + ```yaml page_footer: offset: -30 @@ -694,6 +723,7 @@ page_footer: Key: `page_header` Example: + ```yaml page_header: align: left @@ -714,6 +744,7 @@ The main page title heading Key: `page_heading` Example: + ```yaml page_heading: size: 14 @@ -734,6 +765,7 @@ Styling for logo image in the page header. Key: `page_logo` Example: + ```yaml page_logo: height: 20 @@ -753,6 +785,7 @@ Properties to set the basic page settings Key: `page` Example: + ```yaml page: page_size: EXECUTIVE @@ -780,6 +813,7 @@ Styling for a table cell Key: `table_cell` Example: + ```yaml table_cell: size: 9 @@ -801,6 +835,7 @@ Styling for a table header cell Key: `table_header` Example: + ```yaml table_header: size: 9 @@ -821,6 +856,7 @@ Styling for the table of content of the PDF report export Key: `toc` Example: + ```yaml toc: subject_indent: 4 @@ -856,6 +892,7 @@ Default styling for TOC items on all levels.
    use item_level_x` as key for TO Key: `item` Example: + ```yaml item: size: 9 @@ -882,6 +919,7 @@ Key: `item_level_x` Key: `title` Example: + ```yaml title: max_height: 30 @@ -902,6 +940,7 @@ title: Key: `subheading` Example: + ```yaml subheading: max_height: 30 @@ -921,6 +960,7 @@ subheading: Key: `heading` Example: + ```yaml heading: spacing: 10 @@ -942,6 +982,7 @@ Styling for the Work package section Key: `work_package` Example: + ```yaml work_package: margin_bottom: 20 @@ -972,6 +1013,7 @@ Styling for the Work package attributes table Key: `attributes_table` Example: + ```yaml attributes_table: margin_bottom: 10 @@ -1002,6 +1044,7 @@ Label headline for work package description and long text custom fields Key: `markdown_label` Example: + ```yaml markdown_label: size: 12 @@ -1023,6 +1066,7 @@ Margins for work package description and long text custom fields Key: `markdown_margin` Example: + ```yaml markdown_margin: margin_bottom: 16 @@ -1039,6 +1083,7 @@ Styling for the Work package subject headline Key: `subject` Example: + ```yaml subject: size: 10 @@ -1047,16 +1092,17 @@ subject: margin_bottom: 10 ``` -| Key | Description | Data type | -| - | - | - | -| … | See [Font properties](#font-properties) | | -| … | See [Margin properties](#margin-properties) | | +| Key | Description | Data type | +|-----|---------------------------------------------|-----------| +| … | See [Font properties](#font-properties) | | +| … | See [Margin properties](#margin-properties) | | ## Work package subject level Key: `subject_level_x` Example: + ```yaml subject_level_1: size: 14 @@ -1076,6 +1122,7 @@ subject_level_3: | - | - | - | | … | See [Font properties](#font-properties) | | | … | See [Margin properties](#margin-properties) | | + ## Units available units are diff --git a/docs/system-admin-guide/emails-and-notifications/README.md b/docs/system-admin-guide/emails-and-notifications/README.md index 39b9198c2090..1f83d42c286f 100644 --- a/docs/system-admin-guide/emails-and-notifications/README.md +++ b/docs/system-admin-guide/emails-and-notifications/README.md @@ -41,7 +41,7 @@ Configure your notification email header and footer which will be sent out for e 1. **Formulate header and/or footer** for the email notifications. These are used for all the email notifications from OpenProject (e.g. when creating a work package). 2. **Choose a language** for which the email header and footer will apply. -3. **Send a test email**. Please note: This test email does *not* test the notifications for work package changes etc. Find out more in [this FAQ](../../installation-and-operations/installation-faq/#i-dont-receive-emails-test-email-works-fine-but-not-the-one-for-work-package-updates). +3. **Send a test email**. Please note: This test email does *not* test the notifications for work package changes etc. Find out more in [this FAQ](../../installation-and-operations/installation-faq/#i-dont-receive-emails-test-email-works-fine-but-not-the-one-for-work-package-updates-what-can-i-do). 4. Do not forget to **save** your changes. ## Incoming emails settings diff --git a/docs/system-admin-guide/enumerations/README.md b/docs/system-admin-guide/enumerations/README.md index c756bcd7c82f..055591a30db0 100644 --- a/docs/system-admin-guide/enumerations/README.md +++ b/docs/system-admin-guide/enumerations/README.md @@ -8,12 +8,9 @@ keywords: enumerations, time tracking, priority, document categories # Manage Enumerations
    -**Enumerations** is a menu item in admin settings that allows the configuration of Activities (for time tracking), project status and work package priorities. +**Enumerations** is a menu item in admin settings that allows the configuration of Activities (for time tracking), project status and work package priorities.
    - - - To get an overview of existing enumeration values for all of these categories, navigate to *Administration -> Enumerations*. You will see the enumerations overview, divided into respective sections. ![enumerations](image-20200122161732016.png) @@ -40,6 +37,4 @@ You will then be able to name the value, activate it and choose if it should be To **change the color of work package priorities** choose the respective priority in the section Work package priorities. - - -> **Note**: To activate the [Activities for time tracking](../../user-guide/projects/project-settings/activities-time-tracking) in a certain project, navigate to *Project settings -> Time tracking activities*. +> **Note**: To activate the [Activities for time tracking](../../user-guide/projects/project-settings/activities-time-tracking) in a certain project, navigate to *Project settings -> Time tracking activities*. diff --git a/docs/system-admin-guide/file-storages/openproject_admin_guide_file_storages.png b/docs/system-admin-guide/file-storages/openproject_admin_guide_file_storages.png deleted file mode 100644 index 4c1df5d8ad3f..000000000000 Binary files a/docs/system-admin-guide/file-storages/openproject_admin_guide_file_storages.png and /dev/null differ diff --git a/docs/system-admin-guide/files/README.md b/docs/system-admin-guide/files/README.md new file mode 100644 index 000000000000..82e043c6e073 --- /dev/null +++ b/docs/system-admin-guide/files/README.md @@ -0,0 +1,22 @@ +--- +sidebar_navigation: + title: Files + priority: 830 +description: File storages in OpenProject. +keywords: files, file storages, Nextcloud integration, OneDrive setup, Sharepoint setup, OneDrive, Sharepoint, attachments +--- + +# Files + +Under *Administration -> Files* you can add external file storages, such as Nextcloud or OneDrive/SharePoint and manage settings for attachments to work packages. + +## External file storages + +Under [external file storages](./external-file-storages) you can add Nextcloud or OneDrive/SharePoint integration to OpenProject. + +## Attachments + +Under [attachments](./attachments) you can manage settings for attachments in work packages. You will also find the [virus scanning](./attachments/virus-scanning) settings here. + + + diff --git a/docs/system-admin-guide/attachments/README.md b/docs/system-admin-guide/files/attachments/README.md similarity index 61% rename from docs/system-admin-guide/attachments/README.md rename to docs/system-admin-guide/files/attachments/README.md index e869b21f204f..4b27339c94d9 100644 --- a/docs/system-admin-guide/attachments/README.md +++ b/docs/system-admin-guide/files/attachments/README.md @@ -1,7 +1,7 @@ --- sidebar_navigation: title: Attachments - priority: 955 + priority: 800 title: Attachments in OpenProject description: Attachment settings and virus scanning in OpenProject keywords: Attachment, attachment settings, virus scanning, clamav @@ -10,29 +10,29 @@ keywords: Attachment, attachment settings, virus scanning, clamav # Attachments in OpenProject -In OpenProject you can determine the maximum attachment size and activate the virus scanning functionality. To do that navigate to **System Administration** and select **Attachments** +In OpenProject you can determine the maximum attachment size and activate the virus scanning functionality. To do that navigate to *System Administration* -> *Files* and select *Attachments* -![Navigation to attachment settings in OpenProject](openproject_system_adminstration_attachments.png) +![Navigation to attachment settings in OpenProject](openproject_system_adminstration_files.png) +![Attachment settings in OpenProject administration](openproject_system_adminstration_files_attachments.png) +## Attachment general settings -## Attachment settings +1. Here you can select whether **Attachments** should be shown in the **Files** tab under work packages by default throughout the entire instance. It can still be de-activated for specific projects. -1. Here you can increase or decrease **maximum attachment size** (in kB). +2. Here you can increase or decrease **maximum attachment size** (in kB). -2. The box next to **Attachment upload whitelist** is an open-entry text box in which some common file formats are pre-populated by default. The file formats in this list are specifically whitelisted or allowed to be attached to work packages. +3. The box next to **Attachment upload whitelist** is an open-entry text box in which some common file formats are pre-populated by default. The file formats in this list are specifically whitelisted or allowed to be attached to work packages. If you wish, you can add additional file formats. Use only one file format entry per line, and keep to the following cadence: `*****.[**file extension**]` Example: To add mp3-files to the whitelist, your entry would be `***.mp3**`. -3. Do not forget to **save** your changes. + Do not forget to **save** your changes. ![attachment settings](openproject_system_adminstration_attachment_settings.png) - - ## Virus scanning (Enterprise-add-on) For information about virus scanning, please see the [documentation on virus scanning](./virus-scanning/). diff --git a/docs/system-admin-guide/files/attachments/openproject_system_adminstration_attachment_settings.png b/docs/system-admin-guide/files/attachments/openproject_system_adminstration_attachment_settings.png new file mode 100644 index 000000000000..55830cc184f0 Binary files /dev/null and b/docs/system-admin-guide/files/attachments/openproject_system_adminstration_attachment_settings.png differ diff --git a/docs/system-admin-guide/files/attachments/openproject_system_adminstration_files.png b/docs/system-admin-guide/files/attachments/openproject_system_adminstration_files.png new file mode 100644 index 000000000000..79caf0d10cb2 Binary files /dev/null and b/docs/system-admin-guide/files/attachments/openproject_system_adminstration_files.png differ diff --git a/docs/system-admin-guide/files/attachments/openproject_system_adminstration_files_attachments.png b/docs/system-admin-guide/files/attachments/openproject_system_adminstration_files_attachments.png new file mode 100644 index 000000000000..e19d698cf91c Binary files /dev/null and b/docs/system-admin-guide/files/attachments/openproject_system_adminstration_files_attachments.png differ diff --git a/docs/system-admin-guide/attachments/virus-scanning/README.md b/docs/system-admin-guide/files/attachments/virus-scanning/README.md similarity index 95% rename from docs/system-admin-guide/attachments/virus-scanning/README.md rename to docs/system-admin-guide/files/attachments/virus-scanning/README.md index 21b9d458691a..fe35d49f0411 100644 --- a/docs/system-admin-guide/attachments/virus-scanning/README.md +++ b/docs/system-admin-guide/files/attachments/virus-scanning/README.md @@ -9,6 +9,7 @@ keywords: Virus scanning, clamav --- # Virus scanning (Enterprise add-on) +> > **Note**: This functionality is an Enterprise add-on. It is currently not available on the Hosted Enterprise Cloud. You can configure OpenProject to automatically scan uploaded attachments for viruses using the [ClamAV antivirus](https://www.clamav.net/) engine. @@ -27,32 +28,26 @@ On a packaged installation, you can simply install ClamAV locally on your distri When installed as a package on the same server, you can configure OpenProject to use the `ClamAV socket` mode of operation, which uses a local unix socket to communicate with ClamAV. - - **Debian, Ubuntu distributions** ClamAV is part of the standard packages and can be installed as a daemon just like this: -```bash +```shell apt-get install clamav clamav-daemon ``` The installer will launch a `clamd` daemon that can be used to transmit files to the daemon for scanning. A `freshclam` daemon is also started to ensure the definitions are kept up-to-date. In any case, double-check the configuration and ensure they are running. - - **RHEL Linux, Centos** On RedHad Enterprise Linux and Centos, you need to install the epel-release packages first, followed by ClamaV -``` +```shell dnf install -y epel-release dnf install -y clamav clamd clamav-update ``` -For these distributions, you need to manually create the configuration files for `freshclam` and `clamd`. For more information, see https://docs.clamav.net/manual/Installing.html#rpm-packages-for-centos-redhat-fedora-suse-etc - - +For these distributions, you need to manually create the configuration files for `freshclam` and `clamd`. For more information, see https://docs.clamav.net/manual/Installing.html#rpm-packages-for-centos-redhat-fedora-suse-etc ### Docker @@ -60,7 +55,7 @@ To run ClamAV in Docker, follow this guide: https://docs.clamav.net/manual/Insta As a quick-start, you can use this command to start clamav with local volume mounts for the virus database: -```bash +```shell docker run -it --rm \ --name clamav \ --publish 3310 \ @@ -68,16 +63,14 @@ docker run -it --rm \ clamav/clamav:stable_base ``` -This will publish the `clamd` TCP connection on port `3310`. - +This will publish the `clamd` TCP connection on port `3310`. - -**Docker-Compose** +**Docker-Compose** On docker compose, you can register clamav as a separate service to have hostname resolution: -``` -... other configuration +```yaml +# ... other configuration services: clamav: image: "clamav/clamav:stable_base" @@ -92,11 +85,9 @@ services: In both these cases, use the `ClamAV (Host)` option with `clamav:3310` as the host value. - - ## Configuration in OpenProject -To enable the virus scanning functionality, visit *Administration > Attachments > Virus scanning*. +To enable the virus scanning functionality, visit *Administration > Files > Attachments > Virus scanning*. You will see the following options: @@ -108,9 +99,9 @@ You will see the following options: - This value is only shown when Scan mode is enabled. - Enter the path to the local socket or `hostname:port` for the host mode according to the ClamAV installation documentation. 3. **Infected file action** - - Here you can select the action to take place when a virus was found: - + + Here you can select the action to take place when a virus was found: + - **Quarantine the file**: quarantined files will be displayed under *Administration > Attachments > Quarantined attachments* for review or deletion. - **Delete the file directly**. @@ -132,8 +123,7 @@ If the virus scanning mode has been enabled, all uploaded attachments will be sc > **Note**: While attachments are in the process of being scanned, they are only accessible to the original author. As soon as they are scanned without any findings, they are made accessible to all other users. -If viruses are found, they are treated according to the *Infected file action* setting. +If viruses are found, they are treated according to the *Infected file action* setting. - Quarantine: The files are still visible in the container (e.g., in the work package they were uploaded in), but are no longer accessible. A comment is made to inform users about it. - Delete: The file is deleted straight away. A comment is made to inform the users about it. - diff --git a/docs/system-admin-guide/files/attachments/virus-scanning/openproject_system_settings_virus_scanning.png b/docs/system-admin-guide/files/attachments/virus-scanning/openproject_system_settings_virus_scanning.png new file mode 100644 index 000000000000..0a89bef143cb Binary files /dev/null and b/docs/system-admin-guide/files/attachments/virus-scanning/openproject_system_settings_virus_scanning.png differ diff --git a/docs/system-admin-guide/file-storages/README.md b/docs/system-admin-guide/files/external-file-storages/README.md similarity index 66% rename from docs/system-admin-guide/file-storages/README.md rename to docs/system-admin-guide/files/external-file-storages/README.md index 0f6d50e0fb3f..597eeadf74b4 100644 --- a/docs/system-admin-guide/file-storages/README.md +++ b/docs/system-admin-guide/files/external-file-storages/README.md @@ -1,14 +1,14 @@ --- sidebar_navigation: title: File storages - priority: 830 + priority: 990 description: File storages in OpenProject. keywords: file storages, Nextcloud setup, Nextcloud integration, OneDrive setup, Sharepoint setup, OneDrive, Sharepoint --- -# File storages +# External file storages -You can connect your OpenProject installation to Nextcloud or OneDrive/SharePoint. To do that navigate to **Administration** -> **Settings** -> **File storages** and select the respective option. +You can connect your OpenProject installation to Nextcloud or OneDrive/SharePoint. To do that navigate to **Administration** -> **Files** -> **External file storages** and select the respective option. You need to have administrator rights to be able to setup the integration. @@ -16,23 +16,22 @@ You need to have administrator rights to be able to setup the integration. ## Nextcloud integration setup guide -For detailed guide on the initial setup, please consult [Nextcloud integration setup guide](../integrations/nextcloud/). +For detailed guide on the initial setup, please consult [Nextcloud integration setup guide](../../integrations/nextcloud/). -Please also remember to activate the **File storages** module under [project settings in a respective project](../../user-guide/projects/project-settings/file-storages/). +Please also remember to activate the **File storages** module under [project settings in a respective project](../../../user-guide/projects/project-settings/files/). -For instructions on using the integration after the setup has been complete please refer to [Nextcloud integration user guide](../../user-guide/file-management/nextcloud-integration/). +For instructions on using the integration after the setup has been complete please refer to [Nextcloud integration user guide](../../../user-guide/file-management/nextcloud-integration/). ## OneDrive/SharePoint integration (Enterprise add-on) setup guide -> **Note**: OneDrive/SharePoint integration is an Enterprise add-on and can only be used with [Enterprise cloud](../../enterprise-guide/enterprise-cloud-guide/) or [Enterprise on-premises](../../enterprise-guide/enterprise-on-premises-guide/). An upgrade from the free Community edition is easy and helps support OpenProject. +> **Note**: OneDrive/SharePoint integration is an Enterprise add-on and can only be used with [Enterprise cloud](../../../enterprise-guide/enterprise-cloud-guide/) or [Enterprise on-premises](../../../enterprise-guide/enterprise-on-premises-guide/). An upgrade from the free Community edition is easy and helps support OpenProject. -For detailed guide on the initial setup, please consult [OneDrive/SharePoint integration setup guide](../integrations/one-drive/). +For detailed guide on the initial setup, please consult [OneDrive/SharePoint integration setup guide](../../integrations/one-drive/). -Please also remember to activate the **File storages** module under [project settings in a respective project](../../user-guide/projects/project-settings/file-storages/). +Please also remember to activate the **File storages** module under [project settings in a respective project](../../../user-guide/projects/project-settings/files/). -For instructions on using the integration after the setup has been complete please refer to [SharePoint/OneDrive integration user guide](../../user-guide/file-management/one-drive-integration/). +For instructions on using the integration after the setup has been complete please refer to [SharePoint/OneDrive integration user guide](../../../user-guide/file-management/one-drive-integration/). ## File storage troubleshooting For troubleshooting guidance related to file storages, visit the [File storage troubleshooting](./file-storage-troubleshooting) page. Here you will find possible explanations and suggested solutions. If you encounter any challenges not addressed here, do not hesitate to reach out to the [OpenProject community](https://community.openproject.org/projects/openproject/forums) or [support team](https://www.openproject.org/contact/) for further assistance. - diff --git a/docs/system-admin-guide/file-storages/file-storage-troubleshooting/README.md b/docs/system-admin-guide/files/external-file-storages/file-storage-troubleshooting/README.md similarity index 100% rename from docs/system-admin-guide/file-storages/file-storage-troubleshooting/README.md rename to docs/system-admin-guide/files/external-file-storages/file-storage-troubleshooting/README.md diff --git a/docs/system-admin-guide/file-storages/file-storage-troubleshooting/openproject_file_storages_health_message.png b/docs/system-admin-guide/files/external-file-storages/file-storage-troubleshooting/openproject_file_storages_health_message.png similarity index 100% rename from docs/system-admin-guide/file-storages/file-storage-troubleshooting/openproject_file_storages_health_message.png rename to docs/system-admin-guide/files/external-file-storages/file-storage-troubleshooting/openproject_file_storages_health_message.png diff --git a/docs/system-admin-guide/files/external-file-storages/openproject_admin_guide_file_storages.png b/docs/system-admin-guide/files/external-file-storages/openproject_admin_guide_file_storages.png new file mode 100644 index 000000000000..2b59a60d4130 Binary files /dev/null and b/docs/system-admin-guide/files/external-file-storages/openproject_admin_guide_file_storages.png differ diff --git a/docs/system-admin-guide/initial-setup/README.md b/docs/system-admin-guide/initial-setup/README.md index 985e43933da4..65ec20b338d2 100644 --- a/docs/system-admin-guide/initial-setup/README.md +++ b/docs/system-admin-guide/initial-setup/README.md @@ -11,8 +11,6 @@ keywords: initial setup, initial configuration in frontend This section will guide you through some basic recommendations for setting up your OpenProject instance as a system administrator and for preparing it for its users. For the backend setup and initial technical configurations for on-premise editions please have a look at the [respective section](../../installation-and-operations/installation/packaged/#initial-configuration) in the installation guide. - - Before adding users we recommend to check and configure the following topics: | Topic | What to set up | diff --git a/docs/system-admin-guide/integrations/README.md b/docs/system-admin-guide/integrations/README.md index d4b645ad04b4..5221d4653968 100644 --- a/docs/system-admin-guide/integrations/README.md +++ b/docs/system-admin-guide/integrations/README.md @@ -53,9 +53,9 @@ OpenProject offers an integration with OneDrive/Sharepoint for file storage and ## Slack There is a rudimentary OpenProject Slack integration from the community. It messages a configured Slack channel, every time a Work Package or Wiki site is modified. This integration is not officially supported by OpenProject. -To activate it in the Enterprise cloud please [get in touch](https://www.openproject.org/contact/). For the Enterprise on-premises edition and the Community edition you can find the plugin and its documentation on GitHub: [OpenProject Slack plugin](https://github.com/opf/openproject-slack) +To activate it in the Enterprise cloud please [get in touch](https://www.openproject.org/contact/). For the Enterprise on-premises edition and the Community edition you can find the plugin and its documentation on GitHub: [OpenProject Slack plugin](https://github.com/opf/openproject-slack) -## Testuff +## Testuff There is an OpenProject integration with Testuff. Please note that it was developed directly by Testuff and we do not provide any support for it. You can find it [here](https://testuff.com/product/help/openproject/). @@ -65,7 +65,7 @@ There is an OpenProject integration with Thunderbird from the Community. Please ## TimeCamp -There is an integration between OpenProject and TimeCamp. We provide a [short instruction](../../user-guide/time-and-costs/time-tracking/timecamp-integration/) how to set it up and use it. However, please note that this add-on is not officially supported and we do not take any liability when you use it. +There is an integration between OpenProject and TimeCamp. We provide a [short instruction](../../user-guide/time-and-costs/time-tracking/timecamp-integration/) how to set it up and use it. However, please note that this add-on is not officially supported and we do not take any liability when you use it. ## Timesheet @@ -73,7 +73,7 @@ Currently, there is no direct integration between OpenProject and Timesheet. If ## Time Tracker for OpenProject -[Time Tracker](https://open-time-tracker.com/) is a mobile app that records time spent on tasks and logs it to your Open Project instance. We provide a [short instruction](../../user-guide/time-and-costs/time-tracking/time-tracker-integration/) how to set it up and use it. Please keep in mind that it is not developed by OpenProject and is not supported by us. +[Time Tracker](https://open-time-tracker.com/) is a mobile app that records time spent on tasks and logs it to your OpenProject instance. We provide a [short instruction](../../user-guide/time-and-costs/time-tracking/time-tracker-integration/) how to set it up and use it. Please keep in mind that it is not developed by OpenProject and is not supported by us. ## Toggl diff --git a/docs/system-admin-guide/integrations/excel-synchronization/README.md b/docs/system-admin-guide/integrations/excel-synchronization/README.md index e9576ea99dc8..d78bbbbc1a06 100644 --- a/docs/system-admin-guide/integrations/excel-synchronization/README.md +++ b/docs/system-admin-guide/integrations/excel-synchronization/README.md @@ -50,7 +50,6 @@ Unfortunately, there is no way to create relation with translated terms via API - ## Step-by-step guide ### Setting-up the Excel list @@ -73,14 +72,10 @@ Unfortunately, there is no way to create relation with translated terms via API ![Enable-content-and-macros](Enable-content-and-macros-1594297486714.png) - - 7. Enter settings (URL and API-Token) and choose a project (and optional a work package query) which you want to synchronize your data with. ![Choose-project-900x479@2x](Choose-project-900x479@2x.png) - - **URL**: the URL of your OpenProject instance. **API-Token**: can be generated within your OpenProject installation ->*My Account* -> *Access token*. Generate a new API token and copy & paste it to this form. **Project**: this is the project identifier which can be found within the project you want to synchronize -> *Project settings* -> *Information*. It is also shown in the URL if you open a project. @@ -105,14 +100,10 @@ Copy and paste all data accordingly from your existing Excel list to this sheet. ![Select-columns](Select-columns.png) - - 11. Important: **Ctrl + B** will open the synchronization module to choose between the following options: ![Ctrl-B](Ctrl-B.png) - - **Download work packages**: initially downloads all work packages from the selected project (and query). **Upload / update work packages**: makes changes to the work packages, e.g. adding new work packages or changing any information. This option needs to be chosen in order to initially import and existing Excel list. **Show chosen project**: Opens the settings to adapt URL, API key, project or query ID. @@ -121,8 +112,6 @@ Congratulations! You can now synchronize your data between Excel and OpenProject ![Excel-OpenProject-synch-900x630@2x](Excel-OpenProject-synch-900x630@2x.png) - - 12. To synchronize hierarchies (Parent and child relations), insert the column **Parent** within the header of the Excel Sheet as described above (screen 10). To add or edit a new parent-child relation, you have two possibilities: @@ -139,8 +128,6 @@ Click *OK* when the screen for the Search characters (screen 13) appears. The ID ![Search-character-parent](Search-character-parent.png) - - Pressing **Cancel** will ignore the Hierarchy – no matter what has been inserted. This is relevant for option B: **B)** you can edit the IDs in the parent column manually. If you have edited the IDs manually in the parent column, just click *Cancel* when the above Search character option (screen 13) appears. Then, the hierarchy will be updated according to the IDs in the column *Parent*. @@ -149,6 +136,4 @@ Pressing **Cancel** will ignore the Hierarchy – no matter what has been insert ![Parent-child-OpenProject](Parent-child-OpenProject.png) - - Hopefully, this will save you lots of time to import all your old Excel To-Do lists and get started with OpenProject for project management. diff --git a/docs/system-admin-guide/integrations/github-integration/README.md b/docs/system-admin-guide/integrations/github-integration/README.md index fff564826bc6..acc4ece9428b 100644 --- a/docs/system-admin-guide/integrations/github-integration/README.md +++ b/docs/system-admin-guide/integrations/github-integration/README.md @@ -126,9 +126,8 @@ The **Payload URL** must point to your OpenProject server's GitHub webhook endpo Now you need the API key you copied earlier. Append it to the *Payload URL* as a simple GET parameter named `key`. In the end the URL should look something like this: -``` -https://myopenproject.com/webhooks/github?key=42 -``` +`https://myopenproject.com/webhooks/github?key=42` + _Earlier version may have used the `api_key` parameter. In OpenProject 10.4, it is `key`._ Now the integration is set up on both sides and you can use it. diff --git a/docs/system-admin-guide/integrations/gitlab-integration/README.md b/docs/system-admin-guide/integrations/gitlab-integration/README.md index 559a9d5d2334..91ebb08bb653 100644 --- a/docs/system-admin-guide/integrations/gitlab-integration/README.md +++ b/docs/system-admin-guide/integrations/gitlab-integration/README.md @@ -31,14 +31,16 @@ Merge request activities will also show up in the Activity tab when the merge re ![GitLab comments on work package activity tab](openproject-system-guide-gitlab-integration-activity-tab.png) ## Configuration + You will first have to configure both OpenProject and GitLab for the integration to work. ### OpenProject + First you will need to create a user in OpenProject that has the permission to make comments. This role only requires two permissions, *View work packages* and *Add notes*, which you will find in the **Work packages and Gantt charts** section under [**Roles and Permissions**](../../users-permissions/roles-permissions/). ![GitLab role with required permissions in OpenProject](openproject-system-guide-gitlab-integration-role.png) -This user will then have to be **added to each project** with a role that allows them to see work packages and comment on them. +This user will then have to be **added to each project** with a role that allows them to see work packages and comment on them. ![GitLab user added as member to project with respective role](openproject-system-guide-gitlab-integration-project-member.png) @@ -49,7 +51,7 @@ Once the user is created you need to generate an OpenProject API token for this 3. Go to [*Access Tokens*](../../../getting-started/my-account/#access-tokens) 4. Click on **+ API token** -> Make sure you copy the generated key and securely save it, as you will not be able to retrieve it later. +> Make sure you copy the generated key and securely save it, as you will not be able to retrieve it later. You can then configure the necessary webhook in [GitLab](#gitlab). @@ -57,7 +59,7 @@ Finally you will need to activate the GitLab module under [Project settings](../ ![Activate a GitLab module in OpenProject](openproject-system-guide-gitlab-integration-project-modules.png) -Seeing the **GitLab** tab requires **Show GitLab content** permission, so this permission needs to be granted to all roles in a project allowed to see the tab. +Seeing the **GitLab** tab requires **Show GitLab content** permission, so this permission needs to be granted to all roles in a project allowed to see the tab. ![Grant permission to show GitLab content to user roles in OpenProject](openproject-system-guide-gitlab-integration-gitlab-content-role-permission.png) @@ -71,9 +73,7 @@ You need to configure the **URL** . It must point to your OpenProject server's G You will need the API key you copied earlier in OpenProject. Append it to the *URL* as a simple GET parameter named `key`. In the end the URL should look something like this: -``` -https://myopenproject.com/webhooks/gitlab?key=4221687468163843 -``` +`https://myopenproject.com/webhooks/gitlab?key=4221687468163843` > **Note**: For the events that should be triggered by the webhook, please select the following > @@ -87,8 +87,8 @@ https://myopenproject.com/webhooks/gitlab?key=4221687468163843 > **Note**: Please note that the *Pipeline events* part of the integration is still in the early stages. If you have any feedback on the *Pipeline events*, please let us know [here](https://community.openproject.org/wp/54574). ->**Note**: If you are in a local network you might need to allow requests to the local network in your GitLab instance. ->You can find this settings in the **Outbound requests** section when you navigate to **Admin area -> Settings -> Network**. +> **Note**: If you are in a local network you might need to allow requests to the local network in your GitLab instance. +> You can find this settings in the **Outbound requests** section when you navigate to **Admin area -> Settings -> Network**. We recommend that you enable the **SSL verification** before you **Add webhook**. @@ -104,7 +104,9 @@ Before upgrading, please do the following: 2. Remove the module code traces of the GitLab integration by running this command: `rm -rf /path/to/openproject/modules/gitlab_integration` ## Using GitLab integration + ### Create merge requests + As merge requests are based on branches, a new branch needs to be created first. For that, open the GitLab tab in your OpenProject work package detailed view. Click on **Git snippets** to extend the menu. First, copy the branch name by clicking the corresponding button. ![Copy the branch name for GitLab in OpenProject](openproject-system-guide-gitlab-integration-branch-name.png) @@ -125,7 +127,7 @@ Once you are satisfied with the changes you can create a commit. Within the 'Git ![Copy a Git commit message in OpenProject](openproject-system-guide-gitlab-integration-git-snippets-commit-message.png) -A URL pointing to a work package in the merge request description or a comment will link the two. The link needs to be in the MR and not in a commit, but GitLab will use the first commit message as the proposed branch description (as long as there is only one commit). Alternatively you can also use 'OP#' as a work package reference in an issue or a MR title, in this case "OP#388", where 388 is the ID of the work package. +A URL pointing to a work package in the merge request description or a comment will link the two. The link needs to be in the MR and not in a commit, but GitLab will use the first commit message as the proposed branch description (as long as there is only one commit). Alternatively you can also use 'OP#' as a work package reference in an issue or a MR title, in this case "OP#388", where 388 is the ID of the work package. ![Commit message in a Git client](openproject-system-guide-gitlab-integration-commit-message-in-client.png) @@ -157,16 +159,16 @@ If the status of a merge request changes, it will be reflected in the OpenProjec ### Link issues -OpenProject GitLab integration allows linking GitLab issues directly with OpenProject work packages. +OpenProject GitLab integration allows linking GitLab issues directly with OpenProject work packages. -Initially when no issues were linked yet you will see the following message under **GitLab** tab. +Initially when no issues were linked yet you will see the following message under **GitLab** tab. -![](openproject-system-guide-gitlab-integration-no-issues.png) +![Gitlab no link issues](openproject-system-guide-gitlab-integration-no-issues.png) -You can either create a new issue in GitLab, or edit an already existing one. Enter the code **OP#388** into the issue title or description to create the link between the GitLab issue and the OpenProject work package. In this case 388 is the work package ID. +You can either create a new issue in GitLab, or edit an already existing one. Enter the code **OP#388** into the issue title or description to create the link between the GitLab issue and the OpenProject work package. In this case 388 is the work package ID. ![Link a GitLab issue to OpenProject work package](openproject-system-guide-gitlab-integration-gitlab-issue.png) -Once you save your changes or create a GitLab issue, it will become visible under the **GitLab** tab in OpenProject. +Once you save your changes or create a GitLab issue, it will become visible under the **GitLab** tab in OpenProject. ![New GitLab issues shown in OpenProject work packages](openproject-system-guide-gitlab-integration-new-issues.png) diff --git a/docs/system-admin-guide/integrations/integrations-faq/README.md b/docs/system-admin-guide/integrations/integrations-faq/README.md index 1bb7a2d27abd..3b3f509ad816 100644 --- a/docs/system-admin-guide/integrations/integrations-faq/README.md +++ b/docs/system-admin-guide/integrations/integrations-faq/README.md @@ -24,4 +24,4 @@ For Enterprise cloud please contact support to have it activated in your instanc ## Can I migrate or synchronize boards from e.g. MS Project to OpenProject? -You can synchronize the work packages in your board using the [Excel synchronization](../excel-synchronization). However, the boards themselves (the structure you built) can't be synced. \ No newline at end of file +You can synchronize the work packages in your board using the [Excel synchronization](../excel-synchronization). However, the boards themselves (the structure you built) can't be synced. diff --git a/docs/system-admin-guide/integrations/nextcloud/README.md b/docs/system-admin-guide/integrations/nextcloud/README.md index d46b53791b92..7cd6b2848531 100644 --- a/docs/system-admin-guide/integrations/nextcloud/README.md +++ b/docs/system-admin-guide/integrations/nextcloud/README.md @@ -31,13 +31,13 @@ OpenProject offers close integration with Nextcloud to allow users to: OpenProject makes significant efforts to ensure that the integration works with all the latest stable versions. We strongly recommend continuously updating all systems to the current stable version. This ensures access to the latest features and prompt fixes for any potential bugs. -- OpenProject [latest release](https://www.openproject.org/docs/release-notes/). +- OpenProject [latest release](../../../release-notes/). - The latest version of the [OpenProject Integration Nextcloud app](https://apps.nextcloud.com/apps/integration_openproject) from the Nextcloud App Store. -- Nextcloud version in the latest `stable` version. - - If you run Nextcloud in the community edition be careful to not +- Nextcloud version in the latest `stable` version. + - If you run Nextcloud in the community edition be careful to not blindly follow the update hints in the administration area of a Nextcloud instance, as they nudge you to use the `latest` version, which might not be the latest `stable` version. We recommend to check the [tags of Nextcloud's official - Docker image](https://hub.docker.com/_/nextcloud). There you can see which version is currently the stable one. + Docker image](https://hub.docker.com/_/nextcloud). There you can see which version is currently the stable one. - If you installed Nextcloud via Docker then we advise you to pin it to a `stable` tag. ## Set up the integration @@ -47,16 +47,15 @@ OpenProject makes significant efforts to ensure that the integration works with Watch this video to find out how to set up the Nextcloud integration as an Administrator and as a user. - -#### 1. Add the "OpenProject Integration" app in Nextcloud and point it to your OpenProject instance +### 1. Add the "OpenProject Integration" app in Nextcloud and point it to your OpenProject instance Start by opening your Nextcloud instance as an administrator. -Navigate to the Nextcloud app store by clicking on *your avatar in the top right corner → Apps*. +Navigate to the Nextcloud app store by clicking on *your avatar in the top right corner → Apps*. ![Go to the Nextcloud app store ](apps-in-top-right-menu.png) -On the left menu, click on **Integration** and look for the "[OpenProject Integration](https://apps.nextcloud.com/apps/integration_openproject)" app. +On the left menu, click on **Integration** and look for the "[OpenProject Integration](https://apps.nextcloud.com/apps/integration_openproject)" app. You can also use the search field in the top right corner and type "OpenProject" to find it. Once you have found the app, click the **Download and enable** button. @@ -68,15 +67,15 @@ In the configuration page that appears, you'll see a blank text field titled **O ![Enter your OpenProject instance URL in the OpenProject host field](3_2_01-NC_Step_1.png) -Click on the **Save** button. +Click on the **Save** button. > **Note:** If the OpenProject host cannot be added, you may check the [Troubleshooting](#troubleshooting) section at the bottom of this page. Please note, when you use the **Terms of Service** app on the Nextcloud side, all terms also need to be accepted for the OpenProject user that gets created during the setup. This is set to happen automatically during the initial set-up. If you see an error message indicating otherwise or the integration does not behave as expected, please refer to the [Troubleshooting](#troubleshooting) section at the bottom of this page. -The next part of the setup will require you to enter OpenProject OAuth values here, but before we do that, you will need to generate them in OpenProject. To do so, navigate to your OpenProject instance in a new browser tab. +The next part of the setup will require you to enter OpenProject OAuth values here, but before we do that, you will need to generate them in OpenProject. To do so, navigate to your OpenProject instance in a new browser tab. -#### 2. Create a Nextcloud file storage in your OpenProject instance +### 2. Create a Nextcloud file storage in your OpenProject instance Navigate to your administration settings page by clicking on *your avatar in the top right corner → Administration*. From the side menu on the left, click on **File storages**. @@ -86,9 +85,9 @@ Click on **+ Storage** to add a new file storage. A new page titled **New storage** will appear, where you will be able to configure your new Nextcloud storage. -By default, **Provider type** is set to Nextcloud. This does not need to be modified. +By default, **Provider type** is set to Nextcloud. This does not need to be modified. -Give a **name** to this new storage. This will be visible to all users in all projects using this file storage. We highly recommended choosing a distinct name that allows users to differentiate it from any other file storages you may add in the future. +Give a **name** to this new storage. This will be visible to all users in all projects using this file storage. We highly recommended choosing a distinct name that allows users to differentiate it from any other file storages you may add in the future. Next, enter the **Host URL** of your Nextcloud instance. This is simply the address of your Nextcloud instance, including the "https://". @@ -96,7 +95,7 @@ Next, enter the **Host URL** of your Nextcloud instance. This is simply the addr Click on **Save and continue setup**. Your new storage is now created, but before you can use it, you will need to exchange OAUth IDs and secrets between your Nextcloud and OpenProject instances. You will do this in the next step. -#### 3. Enter OpenProject OAuth values in Nextcloud settings +### 3. Enter OpenProject OAuth values in Nextcloud settings At this point, you will see a page titled **OpenProject OAuth application details**. @@ -104,19 +103,17 @@ Note that OpenProject has automatically generated an OAuth **client ID** and a * > **Important**: These generated values are not accessible again after you close the window. Please do not navigate away from this page before copying them over to Nextcloud, as instructed below. Treat these values with care, as you would an important password. Please do not reveal them to anyone else. - - ![OpenProject generates OAuth values to copy over to Nextcloud](OP-OAuth-values.png) Go back to the browser tab where you were configuring the **OpenProject Integration** app. (We recommend you have two browser tabs open: the current one with OpenProject and the former one with Nextcloud). -Copy the two generated values (client ID and secret) from the OpenProject tab to the respective fields in Nextcloud, namely **OpenProject OAuth client ID** and **OpenProject OAuth client secret**. +Copy the two generated values (client ID and secret) from the OpenProject tab to the respective fields in Nextcloud, namely **OpenProject OAuth client ID** and **OpenProject OAuth client secret**. ![OAuth values generated by OpenProject are entered into Nextcloud app configuration](3_2_03-NC_Step_2.png) Once you have copied the values, click on **Save** to proceed to the next step. -#### 4. Enter Nextcloud OAuth values in OpenProject +### 4. Enter Nextcloud OAuth values in OpenProject In the page that appears, you will see new OAuth values that are once again generated automatically, but this time by Nextcloud. @@ -126,13 +123,13 @@ Much like in the previous step, you will need to copy these two generated values ![Nextcloud also generates OAuth values that need to be copied to OpenProject](3_2_04-NC_Step_3.png) -Navigate back to your OpenProject tab and click on the **Done. Continue setup** button on the screen you previously left it at. You will now see a screen where you will be able to enter the Nextcloud values. +Navigate back to your OpenProject tab and click on the **Done. Continue setup** button on the screen you previously left it at. You will now see a screen where you will be able to enter the Nextcloud values. ![OpenProject_NC_OAuth_values](openproject-oauth.png) Once you have entered the client ID and client secrets on this page, click on **Save and continue setup**. -#### 5. Automatically managed folders +### 5. Automatically managed folders As a last step, you will be asked if you want to use automatically managed folders. If you choose this option, OpenProject will automatically create project folders in Nextcloud and manage permissions such that all project members always have the necessary access privileges. Unless you already have a particular folder structure in place, we recommend choosing this option. @@ -154,21 +151,20 @@ The **OpenProject Integration** page on your Nextcloud tab should also indicate ![Integration successfully set up on the Nextcloud end, three green checks visible](nc-complete_setup.png) -The integration is now complete, and your OpenProject and Nextcloud instances are ready to share information. +The integration is now complete, and your OpenProject and Nextcloud instances are ready to share information. Additional settings on this page also allow you, as an administrator, to define default settings for options that are available to each user. These can of course be overridden by a user to their liking: ![Admin settings to configure default settings for all users](NC_admin-defaults-user-options.png) -- **Enable navigation link** displays a link to the OpenProject instance in the Nextcloud header -- **Enable unified search for tickets** allows users to search for OpenProject work packages via the universal search bar in Nextcloud +- **Enable navigation link** displays a link to the OpenProject instance in the Nextcloud header +- **Enable unified search for tickets** allows users to search for OpenProject work packages via the universal search bar in Nextcloud - -#### 6. Add your new Nextcloud file storage to a project +### 6. Add your new Nextcloud file storage to a project Now that the integration is set up, the next step is to make the Nextcloud file storage you just created available to individual projects. -To do so, navigate to any existing project in your OpenProject instance and click on **Project settings** **→ Modules** and follow the instructions in the [Project settings user guide](../../../user-guide/projects/project-settings/file-storages). +To do so, navigate to any existing project in your OpenProject instance and click on **Project settings** **→ Modules** and follow the instructions in the [Project settings user guide](../../../user-guide/projects/project-settings/files/). > **Note:** For information on how to use the file storage (link Nextcloud user accounts at a user level, link files to a work package, view and download linked files, unlink files), please read our [Nextcloud integration user guide](../../../user-guide/file-management/nextcloud-integration/). @@ -182,10 +178,9 @@ If you wish to reset OAuth values for any reason, you can do so on either side b ![A dialogue asking the user to confirm they want to replace OpenProject OAuth values](3_4_03-OP_Replace_Alert.png) - ## Delete a Nextcloud file storage -You can delete a Nextcloud file storage either at a project level or at an instance-level. +You can delete a Nextcloud file storage either at a project level or at an instance-level. Deleting a file storage at a project level simply makes it unavailable to that particular project, without affecting the integration for other projects. Project admins can do so by navigating to *Project settings → File storages* and clicking the **delete** icon next to the file storage you would like to remove. @@ -197,14 +192,10 @@ Deleting a file storage at an instance level deletes the Nextcloud integration c > **Important:** Deleting a file storage as an instance administrator will also delete all settings and links between work packages and Nextcloud files/folders. This means that should you want to reconnect your Nextcloud instance with OpenProject, will need complete the entire setup process once again. - - ## Using the integration Once the file storage is added and enabled for projects, your users are able to take full advantage of the integration between Nextcloud and OpenProject. For more information on how to link Nextcloud files to work packages in OpenProject and access linked work packages in Nextcloud, please refer to the [Nextcloud integration guide](../../../user-guide/file-management/nextcloud-integration/). - - ## Troubleshooting ### Setting up OpenProject in Nextcloud @@ -213,10 +204,9 @@ Once the file storage is added and enabled for projects, your users are able to On Nextcloud inside the _OpenProject Integration_ App, when adding the OpenProject host, it shows the error **"Please enter a valid OpenProject hostname"**. There are multiple reasons that can cause the error; -- The host address could be wrong. Please check in a separate browser tab that the URL that you have provided is correct. OpenProject should load. +- The host address could be wrong. Please check in a separate browser tab that the URL that you have provided is correct. OpenProject should load. - If your Nextcloud and OpenProject servers are both in a local network, it might be necessary to explicitly [allow local remote servers in Nextcloud](https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/config_sample_php_parameters.html) by setting a system configuration via your Nextcloud command line. This allows Nextcloud to connect to other local servers. Use the command `sudo -u www-data php occ config:system:set allow_local_remote_servers --value 1` in order to enable the setting for Nextcloud. - Your Nextcloud server does not have access to the OpenProject server. To test the connection between Nextcloud and OpenProject, you can use the following command on your Nextcloud server's command line: - ```shell curl https://openproject.example.com ``` @@ -267,8 +257,7 @@ If you are facing any of the aforementioned errors while trying to set up the `P - Enable the _OpenProject Integration_ App - Set up the project folders again - -If you do care about the `OpenProject` user/group/folder data then the conditions that bring the project folder setup to error state, and its possible solutions are as listed below: +If you do care about the `OpenProject` user/group/folder data then the conditions that bring the project folder setup to error state, and its possible solutions are as listed below: - User `OpenProject` doesn't exist. Please check if the user exists, if not create a user named `OpenProject` with username and display name `OpenProject`, some secure random password, email is not necessary. - Group `OpenProject` doesn't exist. Please check if the group exists, if not create a group named `OpenProject`. @@ -285,11 +274,11 @@ If you do care about the `OpenProject` user/group/folder data then the condition If you face an error while trying to delete or disable user/group "OpenProject" then that's because user/group is protected by the _OpenProject Integration_ App. If you really need to delete the user or group follow these steps: -1. Disable the _OpenProject Integration_ App +1. Disable the _OpenProject Integration_ App **Note**: Disabling and enabling the app is safe. No app data will be deleted. 2. Remove user `OpenProject` 3. Remove group `OpenProject` -4. Inside the _Group folders_ App (*Administration settings → Administration → Group folders*), remove group folder `OpenProject`. +4. Inside the _Group folders_ App (*Administration settings → Administration → Group folders*), remove group folder `OpenProject`. **Caution: this step will delete all files in that folder. Make sure to make a copy if you want to keep these files!** 5. Enable the _OpenProject Integration_ App @@ -312,6 +301,7 @@ On OpenProject inside the storage administration (*Administration → File stora ```json {"ocs":{"meta":{"status":"ok","statuscode":200,"message":"OK"},"data":{"version":{"major":24,"minor":0,"micro":6,"string":"24.0.6","edition":"","extendedSupport":false},"capabilities":{"bruteforce":{"delay":0},"metadataAvailable":{"size":["\/image\\\/.*\/"]},"theming":{"name":"Nextcloud","url":"https:\/\/nextcloud.com","slogan":"a safe home for all your data","color":"#0082c9","color-text":"#ffffff","color-element":"#0082c9","color-element-bright":"#0082c9","color-element-dark":"#0082c9","logo":"https:\/\/nextcloud.example.com\/nextcloud\/core\/img\/logo\/logo.svg?v=0","background":"https:\/\/nextcloud.example.com\/nextcloud\/core\/img\/background.png?v=0","background-plain":false,"background-default":true,"logoheader":"https:\/\/nextcloud.example.com\/nextcloud\/core\/img\/logo\/logo.svg?v=0","favicon":"https:\/\/nextcloud.example.com\/nextcloud\/core\/img\/logo\/logo.svg?v=0"}}}}} ``` + If you do not get such a response check out what the `curl` command above is telling you. Typical reasons for connection issues are misconfigured firewalls, proxies, or a bad TLS/SSL setup. ##### While using a self signed TLS/SSL certificate you receive "certificate verify failed" @@ -320,36 +310,34 @@ Some administrators setup Nextcloud using a self signed TLS/SSL certificate with Attention: Please do not confuse the CA for the Nextcloud server's certificate with the CA of the OpenProject server's certificate which you might have provided in the OpenProject installation wizard. They do not necessarily need to be the same. - #### Error message "Host is not fully set up" ![Host is not fully set up](nextcloud_not_fully_set_up.png) The integration OpenProject with Nextcloud makes use of authorized HTTP requests between the two servers. The HTTP requests contain a `Authorization` header, containing a `Bearer` access token. Sometimes Nextcloud installations are not fully setup and the HTTP server strips the `Authorization` header, with the consequence that Nextcloud does not know which Nextcloud user is requesting. Run the following command on the command line of your OpenProject server to check that your installation is complete - ```shell - curl --location --request GET 'https://nextcloud.example.com/index.php/apps/integration_openproject/check-config' --header 'Authorization: foo' - ``` +```shell +curl --location --request GET 'https://nextcloud.example.com/index.php/apps/integration_openproject/check-config' --header 'Authorization: foo' +``` - If Nextcloud setup correctly the response should look like the following +If Nextcloud setup correctly the response should look like the following - ```json - {"user_id":"","authorization_header":foo} - ``` +```json +{"user_id":"","authorization_header":foo} +``` - If not, first verify that the app **OpenProject Integration** is installed. +If not, first verify that the app **OpenProject Integration** is installed. - If that is the case verify that the mod_rewrite is activated on the Nextcloud server. - To activate mod_rewrite the following commands can be used on the Nextcloud server: - ```shell - sudo a2enmod rewrite - sudo systemctl restart apache2 - ``` +If that is the case verify that the mod_rewrite is activated on the Nextcloud server. +To activate mod_rewrite the following commands can be used on the Nextcloud server: - If that also not work please check the [instructions for setting up pretty URLs in Nextcloud](https://docs.nextcloud.com/server/22/admin_manual/installation/source_installation.html#pretty-urls). This usually also resolves the issue of stripped `Authorization` headers. +```shell +sudo a2enmod rewrite +sudo systemctl restart apache2 +``` +If that also not work please check the [instructions for setting up pretty URLs in Nextcloud](https://docs.nextcloud.com/server/22/admin_manual/installation/source_installation.html#pretty-urls). This usually also resolves the issue of stripped `Authorization` headers. - #### Project folders are not created or you do not have access You have setup the *Project folder* in both environments (Nextcloud and OpenProject), but you cannot see any folder named `OpenProject` in the root directory of **Files** app in Nextcloud. @@ -365,14 +353,14 @@ You have setup the *Project folder* in both environments (Nextcloud and OpenProj 2. Ensure that your project is setup correctly: 1. In your browser navigate to the project for which you want the **Project folders** feature to be working. - 2. In the *Project settings*, make sure that: + 2. In the *Project settings*, make sure that: - the **File storages** module is enabled - - the correct storage is enabled for that project + - the correct storage is enabled for that project - that **Project folders** setting is set to "New folder with automatically managed permissions" -3. Ensure that your user is fully set up: OpenProject needs to know your Nextcloud user ID so that it can give your Nextcloud account the correct access rights to the project folder. That ID is obtained when you log into Nextcloud from within OpenProject. +3. Ensure that your user is fully set up: OpenProject needs to know your Nextcloud user ID so that it can give your Nextcloud account the correct access rights to the project folder. That ID is obtained when you log into Nextcloud from within OpenProject. - To check: navigate to any work package in that project , open the **Files** tab and make sure that you are logged into the Nextcloud storage. If you are not logged in, you should see a *Log in* button. Click that button and follow the instructions on the screen. @@ -383,13 +371,13 @@ You have setup the *Project folder* in both environments (Nextcloud and OpenProj 6. If none of the aforementioned steps worked, check whether your network connection is fine: 1. Login into your OpenProject server via the command line interface. If you have multiple servers, chose the one that has the background workers running. - 2. Test the network connection from this server to your Nextcloud server. All you need is the Nextcloud host name and the **Application password**. You received the application password at the end of the setup of the app **OpenProject integration** in Nextcloud. + 2. Test the network connection from this server to your Nextcloud server. All you need is the Nextcloud host name and the **Application password**. You received the application password at the end of the setup of the app **OpenProject integration** in Nextcloud. If you do not posses the application password anymore, you can reset it. Make sure not to forget updating the settings of the file storage in OpenProject accordingly. The following cURL command should respond with an XML containing details for the **OpenProject** user (**Please make sure to use the right application-password and Nextcloud host name**): - ```shell - curl -u 'OpenProject:' https:///ocs/v1.php/cloud/users/OpenProject -H 'OCS-APIRequest: true' -v` - ``` + ```shell + curl -u 'OpenProject:' https:///ocs/v1.php/cloud/users/OpenProject -H 'OCS-APIRequest: true' -v` + ``` ## Getting support diff --git a/docs/system-admin-guide/integrations/one-drive/README.md b/docs/system-admin-guide/integrations/one-drive/README.md index 56d9e91ebcb7..2403fafaca49 100644 --- a/docs/system-admin-guide/integrations/one-drive/README.md +++ b/docs/system-admin-guide/integrations/one-drive/README.md @@ -28,7 +28,7 @@ OpenProject offers an integration with OneDrive/SharePoint to allow users to: - Link files and folders stored in OneDrive/SharePoint with OpenProject work packages - View, open and download files and folder linked to a work package via the Files tab -The goal here is to provide a *Document Library*, embedded in a SharePoint site, as a file storage system for OpenProject. +The goal here is to provide a *Document Library*, embedded in a SharePoint site, as a file storage system for OpenProject. > Note: This guide only covers the integration setup. Please go to > our [OneDrive/SharePoint integration user guide](../../../user-guide/file-management/nextcloud-integration/) to learn @@ -79,7 +79,7 @@ Finally, copy the *Redirect URl* and click the green *Done, complete setup* butt ![Redirect URI details in OneDrive/SharePoint file storage setup in OpenProject](openproject_system_guide_new_onedrive_storage_redirect_URL.png) -You will see the following message confirming the successful setup on top of the page. +You will see the following message confirming the successful setup on top of the page. ![System message on successful OneDrive/SharePoint file storages setup in OpenProject](openproject_system_guide_new_onedrive_message_successful_setup.png) @@ -87,7 +87,7 @@ You will see the following message confirming the successful setup on top of the ## Using the integration -Once the [file storage is added and enabled for projects](../../../user-guide/projects/project-settings/file-storages), +Once the [file storage is added and enabled for projects](../../../user-guide/projects/project-settings/files/), your users are able to take full advantage of the integration between OneDrive/SharePoint and OpenProject. For more information on how to link SharePoint files to work packages in OpenProject, please refer to the [OneDrive/SharePoint integration user guide](../../../user-guide/file-management/one-drive-integration). @@ -104,7 +104,7 @@ information the redirect URI will get generated again and thus needs to be copie by clicking on the **Copy-to-Clipboard** element next to the information text, or by entering the form by clicking the **View** icon. -**Note**: if you have selected that automatically managed access and folders you will also see the *Health status* message on the right side. If the file storage set-up is incomplete or faulty, an error message will be displayed in that section. Read more about errors and troubleshooting [here](../../file-storages/file-storage-troubleshooting). +**Note**: if you have selected that automatically managed access and folders you will also see the *Health status* message on the right side. If the file storage set-up is incomplete or faulty, an error message will be displayed in that section. Read more about errors and troubleshooting [here](../../files/external-file-storages/file-storage-troubleshooting/). ![Edit OneDrive/SharePoint in OpenProject](openproject_system_guide_edit_icon_onedrive_storage.png) diff --git a/docs/system-admin-guide/manage-work-packages/README.md b/docs/system-admin-guide/manage-work-packages/README.md index 9dee66c4ad7d..eb5eba3a9afa 100644 --- a/docs/system-admin-guide/manage-work-packages/README.md +++ b/docs/system-admin-guide/manage-work-packages/README.md @@ -18,4 +18,3 @@ Manage work packages in OpenProject. | [Status](work-package-status) | Create and manage work package status. | | [Workflows](work-package-workflows) | Create and manage workflows for work packages in OpenProject. | | [Custom actions](custom-actions) | Create custom actions for work packages (Enterprise add-on) | - diff --git a/docs/system-admin-guide/manage-work-packages/custom-actions/README.md b/docs/system-admin-guide/manage-work-packages/custom-actions/README.md index 8f5e6bab6755..e3aa20e29bc2 100644 --- a/docs/system-admin-guide/manage-work-packages/custom-actions/README.md +++ b/docs/system-admin-guide/manage-work-packages/custom-actions/README.md @@ -17,7 +17,7 @@ The workflows with custom actions are an Enterprise add-on and only available fo Watch the following video to see how you can configure your custom actions: -![](https://openproject-docs.s3.eu-central-1.amazonaws.com/videos/OpenProject-Custom-Actions.mp4) +![Video](https://openproject-docs.s3.eu-central-1.amazonaws.com/videos/OpenProject-Custom-Actions.mp4) ## Create custom actions diff --git a/docs/system-admin-guide/manage-work-packages/work-package-settings/README.md b/docs/system-admin-guide/manage-work-packages/work-package-settings/README.md index 718b6352273e..f862c3d25144 100644 --- a/docs/system-admin-guide/manage-work-packages/work-package-settings/README.md +++ b/docs/system-admin-guide/manage-work-packages/work-package-settings/README.md @@ -18,8 +18,8 @@ You can adjust the following: 3. **Use current date as start date for new work packages**. This way the current date will always be set as a start date if your create new work packages. Also, if you copy projects, the new work packages will get the current date as start date. 4. **Progress calculation** lets you pick between two modes for how the **%&nsbp;Complete** field is calculated for work packages. - - **Work-based**: % Complete is automatically calculated based on Work and Remaining work values for that work package, both of which are then necessary to have a value for % Complete. - - **Status-based**: you will have to define fixed % Complete values for each [work package status](../work-package-status), which will update automatically when team members update the status of their work packages. + - **Work-based**: % Complete is automatically calculated based on Work and Remaining work values for that work package, both of which are then necessary to have a value for % Complete. + - **Status-based**: you will have to define fixed % Complete values for each [work package status](../work-package-status), which will update automatically when team members update the status of their work packages. 5. **Default highlighting mode** (Enterprise add-on) defines which should be the default [attribute highlighting](../../../user-guide/work-packages/work-package-table-configuration/#attribute-highlighting-enterprise-add-on) mode, e.g. to highlight the following criteria in the work package table. This setting is only available for Enterprise on-premises and Enterprise cloud users. diff --git a/docs/system-admin-guide/manage-work-packages/work-package-status/README.md b/docs/system-admin-guide/manage-work-packages/work-package-status/README.md index 209b72070d43..1894a91ab8ae 100644 --- a/docs/system-admin-guide/manage-work-packages/work-package-status/README.md +++ b/docs/system-admin-guide/manage-work-packages/work-package-status/README.md @@ -12,12 +12,12 @@ Work packages can have various status depending on their types, e.g. tasks can h The status can be set at the top of the work package details view or in the table view in the corresponding column. -![Work packages status dropdown menu in OpenProject](openproject_system_guide_create_wp_stati_dropdown.png)The status field can be configured under *Administration ->* *Work packages* -> *Status*. You will see the list of all the existing work package status in the system. You can add new status or change the name and order of existing status. +![Work packages status dropdown menu in OpenProject](openproject_system_guide_create_wp_stati_dropdown.png)The status field can be configured under *Administration ->* *Work packages* -> *Status*. You will see the list of all the existing work package status in the system. You can add new status or change the name and order of existing status. To learn about the options for configuring the transition from one status to another navigate to [Manage work package workflows](../work-package-workflows). ## Create a new work package status -To create a new work package status click the green ***+ Status*** icon. +To create a new work package status click the green ***+ Status*** icon. A new window will open, where you will be able to specify the following: @@ -44,7 +44,7 @@ When you decide to set the new status as default status please note the followin ## Edit, re-order or remove a work package status -1. To **edit** an existing work package type click on the work package name. +1. To **edit** an existing work package type click on the work package name. 2. To **sort** the status, e.g. in the status drop-down list of the work packages, click on the arrows to move the status up or down in the list. 3. To **delete** the work package type click on the delete icon. diff --git a/docs/system-admin-guide/manage-work-packages/work-package-types/README.md b/docs/system-admin-guide/manage-work-packages/work-package-types/README.md index dea7624719bc..be3cfd1bf912 100644 --- a/docs/system-admin-guide/manage-work-packages/work-package-types/README.md +++ b/docs/system-admin-guide/manage-work-packages/work-package-types/README.md @@ -15,7 +15,7 @@ In the **Administration -> Work packages -> Types** you can add or edit the work You will see a list of all work package types in the system. 1. Click the work package type name to **edit an existing work package type**. -2. Click the arrows (up or down) to change the order how work package types should be displayed, e.g. in the list when creating new work packages or when changing the type. +2. Click the arrows (up or down) to change the order how work package types should be displayed, e.g. in the list when creating new work packages or when changing the type. The work package type you moved to the top of the list is the current default type and will be selected when you create a new work package. 3. Delete work package types. @@ -86,15 +86,15 @@ Click the blue **Apply** button to add this work package list to your form. ![Sys-admin-work-package-table-config](op_sys_admin_filter_wp.png) -The embedded related work package table in the work package form will look like this. Here, the work packages with the chosen relation will be shown automatically (based on the filtered criteria in the embedded list) or new work packages with this relation can be added. +The embedded related work package table in the work package form will look like this. Here, the work packages with the chosen relation will be shown automatically (based on the filtered criteria in the embedded list) or new work packages with this relation can be added. ![Sys-admin-related-work-package-table](open_project_admin_related_wp_table.png) ## Activate work package types for projects -Under **Administration -> Work packages -> Types** on the tab **Projects** you can select for which projects this work package type should be activated. +Under **Administration -> Work packages -> Types** on the tab **Projects** you can select for which projects this work package type should be activated. -The **Activated for new projects by default** setting in the Types will only activate this type for new projects. For existing projects, the type needs to be activated manually. +The **Activated for new projects by default** setting in the Types will only activate this type for new projects. For existing projects, the type needs to be activated manually. This can be also configured in the [project settings](../../../user-guide/projects/project-settings). ![activate projects for work package types](image-20200116150513323.png) diff --git a/docs/system-admin-guide/manage-work-packages/work-packages-faq/README.md b/docs/system-admin-guide/manage-work-packages/work-packages-faq/README.md index 0cb79176c016..87405f53560b 100644 --- a/docs/system-admin-guide/manage-work-packages/work-packages-faq/README.md +++ b/docs/system-admin-guide/manage-work-packages/work-packages-faq/README.md @@ -24,6 +24,3 @@ The work package type that is at the top of the [list](../work-package-types) is ## Why can I not find the option to set a progress percentage for a work package status? You have to activate the progress calculation by status first. Find out [here](../work-package-settings) how to do it. - - - diff --git a/docs/system-admin-guide/openproject_system_administration_start_page.png b/docs/system-admin-guide/openproject_system_administration_start_page.png index 11d54b5a834e..c3f1f6aaf70a 100644 Binary files a/docs/system-admin-guide/openproject_system_administration_start_page.png and b/docs/system-admin-guide/openproject_system_administration_start_page.png differ diff --git a/docs/system-admin-guide/plugins/README.md b/docs/system-admin-guide/plugins/README.md index 6da13f86e520..16b983c51c74 100644 --- a/docs/system-admin-guide/plugins/README.md +++ b/docs/system-admin-guide/plugins/README.md @@ -13,4 +13,4 @@ We recommend to use the plugins as suggested in our deployment packages. You wil ![OpenProject plugins](image-20200124100220714.png) -If you want to write your own plugin, please follow our respective [development guide](../../development/create-openproject-plugin). +If you want to write your own plugin, please follow our respective [development guide](../../development/create-openproject-plugin). diff --git a/docs/system-admin-guide/projects/new-project/README.md b/docs/system-admin-guide/projects/new-project/README.md index 97d4bd6a01e1..d9d2be0ab19a 100644 --- a/docs/system-admin-guide/projects/new-project/README.md +++ b/docs/system-admin-guide/projects/new-project/README.md @@ -8,9 +8,9 @@ keywords: new project, settings, default, modules # New project -To set defaults for new projects, navigate to **Administration settings** → **Projects** → **New project**. +To set defaults for new projects, navigate to **Administration settings** → **Projects** → **New project**. -![New project settings in OpenProject adminstration](open_project_system_guide_new_project_settings.png) +![New project settings in OpenProject administration](open_project_system_guide_new_project_settings.png) You will find the following options on this page: @@ -19,4 +19,4 @@ You will find the following options on this page: - **Default enabled modules for new projects:** The checked modules will be enabled by default when a new project is created. Project admins can enable or disable specific modules later. - **Role given to a non-admin users who creates project**: The default role you want to assign *in the project* to the user that created it (if this user is not an instance admin). By default, the default role is 'Project admin'. -Once you make your modifications, click on **Save** to apply the settings instance-wide. \ No newline at end of file +Once you make your modifications, click on **Save** to apply the settings instance-wide. diff --git a/docs/system-admin-guide/projects/project-attributes/README.md b/docs/system-admin-guide/projects/project-attributes/README.md index 15b7a6677877..ae4a853640aa 100644 --- a/docs/system-admin-guide/projects/project-attributes/README.md +++ b/docs/system-admin-guide/projects/project-attributes/README.md @@ -10,13 +10,13 @@ keywords: project attributes, create, project settings Project attributes are custom fields that allow you to communicate key information relevant to a project in the [Project Overview](../../../user-guide/project-overview) page. ->**Note**: Prior to version 14.0, these were called "project custom fields" and described under the [Custom fields](../../custom-fields/custom-fields-projects/) page. Starting with 14.0, there is now a new entry in the administration section called 'Project attributes' under 'Projects'. +>**Note**: Prior to version 14.0, these were called "project custom fields" and described under the [Custom fields](../../custom-fields/custom-fields-projects/) page. Starting with 14.0, there is now a new entry in the administration section called 'Project attributes' under 'Projects'. This page describes how to create, order and group project attributes and is directed at instance administrators. If you want know how to enable and set the values for project attributes at a project level, please refer to the [Project Overview](../../../user-guide/project-overview) page of the user guide. ## View project attributes -To view all existing project attributes, navigate to **Administration settings** → **Projects** → **Project attributes**. +To view all existing project attributes, navigate to **Administration settings** → **Projects** → **Project attributes**. ![List of existing project attributes in OpenProject administration](open_project_system_admin_guide_project_attributes_list.png) @@ -30,20 +30,21 @@ Each project attribute will be displayed in individual rows, which contain: 4. Number of projects using the attribute 5. More button -Attributes may also be contained in [sections](#sections). +Attributes may also be contained in [sections](#sections). ## Create a project attribute -To create a new project attribute, click on the **+ Project attribute** button in the top right corner. + +To create a new project attribute, click on the **+ Project attribute** button in the top right corner. This will display the "New attribute" form with these options: -![Create a new attribute form in OpenProject adminstration](open_project_system_guide_project_attributes_new_attribute.png) +![Create a new attribute form in OpenProject administration](open_project_system_guide_project_attributes_new_attribute.png) - **Name**: This is the name that will be visible in the [Project Overview](../../../user-guide/project-overview) page. - **Section:** If there are sections, you can pick where this new project attribute should appear. [Learn about sections](#sections) for more information. -- **Format**: You can pick from nine different types of fields: text, long text, integer, float, list, date, boolean, user and version. +- **Format**: You can pick from nine different types of fields: text, long text, integer, float, list, date, boolean, user and version. > **Note**: You cannot change this once the project attribute is created. @@ -51,31 +52,29 @@ This will display the "New attribute" form with these options: - **Required**: Checking this makes this project attribute a required field in projects where it is enabled, i.e. it cannot be left empty. -- **Visible**: Checking this field makes the attribute visible to non-admins. +- **Visible**: Checking this field makes the attribute visible to non-admins. > **Note**: This is enabled by default. Only disable this if you want this field to be invisible to non-admin users. - **Searchable**: Checking this makes this project attribute (and its value) available to the search engine and filters. - -## Modify project attributes +## Modify project attributes You can edit existing attributes under **Administration settings** → **Projects** → **Project attributes**. ![Edit or move a project attribute in the OpenProject administration](open_project_system_admin_guide_project_attributes_more_icon_menu.png) -Click on the More icon to the right of each project attribute to edit, re-order or delete a project attribute. +Click on the More icon to the right of each project attribute to edit, re-order or delete a project attribute. >**Note:** Deleting a project attribute will delete it and the corresponding values for it from all projects. -You can also use the drag handles to the left of each project attribute to drag and drop it to a new position. +You can also use the drag handles to the left of each project attribute to drag and drop it to a new position. >**Note**: Project admins can chose to enable or disable a project attribute from their project, but they cannot change the order. The order set in this page is the order in which they will appear in all projects. - ## Sections -You can group project attributes into sections to better organise them. +You can group project attributes into sections to better organize them. You can click on more icon to the right of each section to rename it, delete it or change its order. @@ -83,7 +82,6 @@ You can click on more icon to the right of each section to rename it, delete it You can drag any existing project attribute into a section to move it there. You may also drag and drop entire sections up and down to re-order them. ->**Note:** If a project attribute belongs to a section, it will be displayed within that section in _all_ projects. +>**Note:** If a project attribute belongs to a section, it will be displayed within that section in _all_ projects. ![Edit project attribute sections in OpenProject administration](open_project_system_admin_guide_project_attributes_section_more_icon_menu.png) - diff --git a/docs/system-admin-guide/projects/project-lists/README.md b/docs/system-admin-guide/projects/project-lists/README.md index 3f414f561c5b..3037d381306a 100644 --- a/docs/system-admin-guide/projects/project-lists/README.md +++ b/docs/system-admin-guide/projects/project-lists/README.md @@ -8,9 +8,9 @@ keywords: project attributes, project lists, columns, gantt # Project lists -OpenProject lets users access Project lists, which allow them to get an overview of all projects to which they have access. This page describes how to modify the columns displayed in each project list. For more information on using project lists, read our [user guide on Project lists](../../../user-guide/projects/project-lists). +OpenProject lets users access Project lists, which allow them to get an overview of all projects to which they have access. This page describes how to modify the columns displayed in each project list. For more information on using project lists, read our [user guide on Project lists](../../../user-guide/projects/project-lists). -To configure project lists, navigate to **Administration settings** → **Projects** → **Project lists**. +To configure project lists, navigate to **Administration settings** → **Projects** → **Project lists**. ![Project lists in OpenProject administration](open_project_system_guide_projects_project_lists.png) @@ -18,7 +18,7 @@ To configure project lists, navigate to **Administration settings** → **Projec > **Please note:** The ability to configure which project attributes are visible as columns in project lists is an Enterprise add-on and will only be displayed here for Enterprise on-premises and Enterprise cloud. -Here, you can view a list of *chips*, or little rectangles with names of project attributes. Each one represents a column in the Project list tables. You can drag and drop these around to change the order in which they appear. +Here, you can view a list of *chips*, or little rectangles with names of project attributes. Each one represents a column in the Project list tables. You can drag and drop these around to change the order in which they appear. To add a new project attribute as a column, click on the field with the label **Add columns** (where it says *Select a column*). You will be shown a list of existing project attributes. You can type in a keyword to search through this list and find the project attribute you would like to add. @@ -26,4 +26,4 @@ To add a new project attribute as a column, click on the field with the label ** OpenProject lets users view a list of projects as a Gantt chart. You can edit the default query that is used to display this Gantt chart by clicking on the **Edit query** link. This displays a modal that lets you modify the visible the columns, filters, sort order and other view configuration options. -![Work package table configuration in OpenProject administration](open_project_system_guide_projects_project_lists_gannt_query.png) \ No newline at end of file +![Work package table configuration in OpenProject administration](open_project_system_guide_projects_project_lists_gannt_query.png) diff --git a/docs/system-admin-guide/system-admin-guide-faq/README.md b/docs/system-admin-guide/system-admin-guide-faq/README.md index a39a1261c0d2..dff4faf8bf9f 100644 --- a/docs/system-admin-guide/system-admin-guide-faq/README.md +++ b/docs/system-admin-guide/system-admin-guide-faq/README.md @@ -28,7 +28,6 @@ Please have a look at [these instructions](../../installation-and-operations/ope The OpenProject installations do not configure a default timeout for the outer Apache2 web server. Please increase the Apache `Timeout` directive. Please see the Apache web server documentation for more information: [https://httpd.apache.org/docs/2.4/mod/core.html#timeout](https://httpd.apache.org/docs/2.4/mod/core.html#timeout) - ## Further information More FAQ can be found in the respective sections of this System admin guide. diff --git a/docs/system-admin-guide/system-settings/README.md b/docs/system-admin-guide/system-settings/README.md index 85de5a399e35..f862271fe316 100644 --- a/docs/system-admin-guide/system-settings/README.md +++ b/docs/system-admin-guide/system-settings/README.md @@ -13,7 +13,6 @@ To modify these settings, navigate to **Administration → System settings**. ![Administration system settings](system-settings.png) - ## Overview | Topic | Content | @@ -22,4 +21,3 @@ To modify these settings, navigate to **Administration → System settings**. | [Languages](languages) | How to configure languages. | | [Project](../projects) | Settings for new projects. | | [Repositories](repositories) | How to integrate SVN or GIT repositories. | - diff --git a/docs/system-admin-guide/system-settings/general-settings/README.md b/docs/system-admin-guide/system-settings/general-settings/README.md index 21b8c93ee9b4..e3f85afc52a0 100644 --- a/docs/system-admin-guide/system-settings/general-settings/README.md +++ b/docs/system-admin-guide/system-settings/general-settings/README.md @@ -48,4 +48,3 @@ Create a welcome text block to display the most important information to users o 4. Do not forget to **save** your changes. ![image-20211209162118090](image-20211209162118090.png) - diff --git a/docs/system-admin-guide/system-settings/repositories/README.md b/docs/system-admin-guide/system-settings/repositories/README.md index cfe8f9a0e2ba..f4cd6746c793 100644 --- a/docs/system-admin-guide/system-settings/repositories/README.md +++ b/docs/system-admin-guide/system-settings/repositories/README.md @@ -24,8 +24,6 @@ To adapt repositories settings, go to System settings on the tab **Repositories* ![image-20211209174118702](image-20211209174118702.png) - - ## Checkout instructions for Subversion and GIT Show checkout instructions for Subversion and GIT. @@ -47,4 +45,4 @@ Show checkout instructions for Subversion and GIT. ![Sys-admin-system-settings-repositories-fixing-commit-messages](Sys-admin-system-settings-repositories-fixing-commit-messages.png) -7. Do not forger to **Save** all your changes. \ No newline at end of file +7. Do not forger to **Save** all your changes. diff --git a/docs/system-admin-guide/users-permissions/README.md b/docs/system-admin-guide/users-permissions/README.md index a6956221c0ee..5fb501a3f7ff 100644 --- a/docs/system-admin-guide/users-permissions/README.md +++ b/docs/system-admin-guide/users-permissions/README.md @@ -19,4 +19,3 @@ In this section of the System Administration guide you can learn how to manage u | [Groups](groups) | View groups, create new groups, add users to groups. | | [Roles and permissions](roles-permissions) | See / manage roles and permissions and add new roles. | | [Avatars](avatars) | Activate / deactivate user avatars (profile pictures). | - diff --git a/docs/system-admin-guide/users-permissions/avatars/README.md b/docs/system-admin-guide/users-permissions/avatars/README.md index c2f303eba4da..519e85078ab0 100644 --- a/docs/system-admin-guide/users-permissions/avatars/README.md +++ b/docs/system-admin-guide/users-permissions/avatars/README.md @@ -14,4 +14,3 @@ You can choose whether to allow user gravatars or enable to upload custom avatar The Avatars can be configured via the [user profile](../users). ![OpenProject avatars](system-guide-avatar.png) - diff --git a/docs/system-admin-guide/users-permissions/groups/README.md b/docs/system-admin-guide/users-permissions/groups/README.md index 0a6ce0cc5992..acd32384ddbd 100644 --- a/docs/system-admin-guide/users-permissions/groups/README.md +++ b/docs/system-admin-guide/users-permissions/groups/README.md @@ -12,7 +12,6 @@ keywords: manage groups A **Group** is defined as a list of users which can be assigned to a project with a selected role. New groups can be defined in **Administration -> Users and permissions -> Groups**.
    - OpenProject allows creating tailored project member **groups**, which grant additional permissions to individual users within a project. Instead of adding individual users to a project you can add a user group, e.g. Marketing. You can edit existing groups, create new ones, add and remove users or delete groups. ## Add a new group @@ -39,8 +38,6 @@ After clicking on a group's name, you can **change the group name**, **add or re ![edit-groups](image-20210505162541644.png) - - ### Add users to a group Click the **Users** tab. Select the users you want to add to this group from the **New user** drop-down list. Click the blue **Add** button. Users already in the group are not shown in the list. Click the **X** next to a user to remove that user from the group. diff --git a/docs/system-admin-guide/users-permissions/placeholder-users/README.md b/docs/system-admin-guide/users-permissions/placeholder-users/README.md index 38469a1f484f..418c5b3e78e1 100644 --- a/docs/system-admin-guide/users-permissions/placeholder-users/README.md +++ b/docs/system-admin-guide/users-permissions/placeholder-users/README.md @@ -15,15 +15,12 @@ Another use case would be to include customers, vendors or partners in your plan Placeholder users can be managed by system admins and by users with the [role](../roles-permissions/#global-role) "Create, edit and delete placeholder users". - | Topic | Content | |-----------------------------------------------------------------------|------------------------------------------------------| | [Placeholder user list](#placeholder-user-list) | Manage placeholder users in OpenProject. | | [Create placeholder users](#create-placeholder-users) | Add new placeholder users. | | [Manage placeholder user settings](#manage-placeholder-user-settings) | Change names and add placeholders users to projects. | - - ## Placeholder user list To manage placeholder users navigate to **Administration -> Users and permissions -> Placeholder users**. The placeholder user list gives you an overview of all placeholder users with their names and creation dates. From here you can also [add](#create-placeholder-users) placeholder users, [edit](#manage-placeholder-user-settings) them and [delete](#delete-placeholder-users) them. @@ -32,13 +29,12 @@ The column headers can be clicked to toggle sort direction. Arrows indicate sort ![placeholder-users-overview](image-20210305150925563.png) - ### Filter placeholder users -The placeholder user list can be filtered by name. +The placeholder user list can be filtered by name. At the top of the user list is a filter box. Enter a name, then click the blue **Apply** button to filter the list. Click the **Clear** button to reset the filter field and refresh the list. -You can enter any parts of a placeholder user name; this can also contain a **%** wild card for zero or more characters. +You can enter any parts of a placeholder user name; this can also contain a **%** wild card for zero or more characters. ### Delete placeholder users @@ -51,6 +47,7 @@ You will then be asked to type in the placeholder user name to confirm the delet > **Note**: Deleting a placeholder user account is an irreversible action and cannot be revoked. The previous activities from this user will still be displayed in the system but reassigned to **Deleted user**. ## Create placeholder users + To add a new placeholder, user click on **+ Placeholder user** in the upper right corner of the [placeholder user list](#placeholder-user-list). Enter a name and click on **Create** to save or on **Create and continue** to save and create another placeholder user. @@ -58,10 +55,9 @@ Enter a name and click on **Create** to save or on **Create and continue** to sa It is not possible to create two placeholder users with the exact same name. - ## Manage placeholder user settings -You can change a placeholder user's name and add it to a project if you click on its name in the [placeholder user list](#placeholder-user-list). +You can change a placeholder user's name and add it to a project if you click on its name in the [placeholder user list](#placeholder-user-list). On the **General** tab you can change the placeholder user's name. @@ -87,9 +83,9 @@ In the future, additional changes and features for placeholder users will be imp ## Placeholder user profile -Similar to users, placeholder users have a profile page which shows their name and project memberships. +Similar to users, placeholder users have a profile page which shows their name and project memberships. -The projects are only visible for users who are allowed to see the project (e.g. user has permission to see this placeholder user in a common project or has a sufficient global role (e.g. system administrator)). +The projects are only visible for users who are allowed to see the project (e.g. user has permission to see this placeholder user in a common project or has a sufficient global role (e.g. system administrator)). ![image-20210305180853254](image-20210305180853254.png) diff --git a/docs/system-admin-guide/users-permissions/roles-permissions/README.md b/docs/system-admin-guide/users-permissions/roles-permissions/README.md index 477b1a13192d..8ae4d186ed4e 100644 --- a/docs/system-admin-guide/users-permissions/roles-permissions/README.md +++ b/docs/system-admin-guide/users-permissions/roles-permissions/README.md @@ -17,23 +17,23 @@ Permissions control what users can see and do within OpenProject. Permission are ### File storages permissions -File storages permissions include the following: +Permissions related to the external file storages are part of the *Projects* and *Work packages and Gantt charts*: ![Files storages permissions in OpenProject](openproject_user_guide_file_storages_permissions.png) Following are the permissions for file storages within OpenProject: -- **View file links**: Allows a user to see file links to external storages Files tab of work packages +- **View file links**: Allows a user to see file links to external storages in the Files tab of work packages - **Manage file links**: Allows a user to create and edit file links to work packages - **Manage file storages in project**: Allows a user to add or edit file storages for a project Following user permissions are set on files and folder in **External Storages**: -- **External Storage: Read files (Nextcloud, OneDrive/SharePoint)** -- **External Storage: Write files (Nextcloud, OneDrive/SharePoint)** -- **External Storage: Create files (Nextcloud)** -- **External Storage: Share files (Nextcloud)** -- **External Storage: Delete files (Nextcloud)** +- **Automatically managed folders: Read files (Nextcloud, OneDrive/SharePoint)** +- **Automatically managed folders: Write files (Nextcloud, OneDrive/SharePoint)** +- **Automatically managed folders: Create files (Nextcloud)** +- **Automatically managed folders: Delete files (Nextcloud)** +- **Automatically managed folders: Share files (Nextcloud)** > Please note that not all file permissions are applicable to all storage providers. @@ -47,7 +47,6 @@ A user can have one or more roles which grant permissions on different levels. **Administrators** have full access to all settings and all projects in an OpenProject environment. The permissions of the Administrator role can not be changed. - | Scope of the role | Permission examples | Customization options | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | | Application-level: Full control of all aspects of the application | - Assign administration privileges to other users
    - Create and restore backups in the web interface
    - Create and configure an OAuth app
    - Configure custom fields
    - Archive projects/restore projects
    - Configure global roles
    - Configure project roles | Cannot be changed | @@ -76,12 +75,10 @@ A user can have one or more roles which grant permissions on different levels. **Note:** The *Non-member* role cannot be deleted. - | Scope of the role | Permission examples | Customization options | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | | Project-level: Permissions scoped to individual projects for users which are logged in | - View work packages for users that are logged in | Assign different permissions to the role *Non-member* | - ### Anonymous OpenProject allows to share project information with **anonymous** users which are not logged in. This is helpful to communicate projects goals and activities with a public community.
    @@ -127,7 +124,7 @@ Administrators can create new global roles in *Administration* > *Users and perm - [Edit users](../users/) - > **Note:** This allows the *Administrator* to delegate the administration of users to other people that should not have full control of the entire OpenProject installation (Administrator). These users can edit attributes of any users, except administrators. This means they are able to impersonate another user by changing email address to match theirs. This is a security risk and should be considered with caution. + > **Note:** This allows the *Administrator* to delegate the administration of users to other people that should not have full control of the entire OpenProject installation (Administrator). These users can edit attributes of any users, except administrators. This means they are able to impersonate another user by changing email address to match theirs. This is a security risk and should be considered with caution. - [Create, edit, and delete placeholder users](../placeholder-users/) diff --git a/docs/system-admin-guide/users-permissions/roles-permissions/openproject_user_guide_file_storages_permissions.png b/docs/system-admin-guide/users-permissions/roles-permissions/openproject_user_guide_file_storages_permissions.png index 85dedeabd813..86ce9a11a116 100644 Binary files a/docs/system-admin-guide/users-permissions/roles-permissions/openproject_user_guide_file_storages_permissions.png and b/docs/system-admin-guide/users-permissions/roles-permissions/openproject_user_guide_file_storages_permissions.png differ diff --git a/docs/system-admin-guide/users-permissions/users-permissions-faq/README.md b/docs/system-admin-guide/users-permissions/users-permissions-faq/README.md index 094eb99268ce..ebeb42b320de 100644 --- a/docs/system-admin-guide/users-permissions/users-permissions-faq/README.md +++ b/docs/system-admin-guide/users-permissions/users-permissions-faq/README.md @@ -8,7 +8,7 @@ keywords: manage users FAQ, permissions, groups, roles, user settings # Frequently asked questions (FAQ) for users and permissions -## I want to delete a user but it fails. +## I want to delete a user but it fails. What can I do? If you are using the Enterprise cloud and the user you are trying to delete is the user that initially set up OpenProject, you will need to contact us to delete this user. For other users please make sure the box **User accounts deletable by admins** in **Administration -> Users and permissions -> Settings** is checked. @@ -23,14 +23,13 @@ There are two possibilities: There is no built in way to do that. -The best way of achieving the result is via the API v3 by [fetching users](../../../api/endpoints/users/#list-users) based on their creation date and for every newly created user, [assign the roles](../../../api/endpoints/memberships/#create-a-membership) that a new user should have. +The best way of achieving the result is via the API v3 by [fetching users](../../../api/endpoints/users/#list-users) based on their creation date and for every newly created user, [assign the roles](../../../api/endpoints/memberships/#create-a-membership) that a new user should have. Starting with OpenProject 11.2 this is also possible for global roles. ## What happens to a user's contributions (e.g. work packages) if I delete their account? When a user is deleted his/her change history is preserved. All actions made by him/her are attributed to a user called **Deleted user**. E.g. a work package created by that user or a wiki page updated by him/her will remain unchanged. This means that you can continue to work with all work packages etc.. If you delete at least two users, you will no longer be able to identify which change was made by whom, as everything will be aggregated under the **Deleted user** user. Only information that is stored for the sake of the user alone, e.g. private queries or user preferences, will be deleted. - ## Can I give users the ability to change work package status only? -It is possible to give users the ability to change status without that user having the rights to edit the rest of the work package. To do that you need to grant the **Change work package status** permission to the role this user is assigned. \ No newline at end of file +It is possible to give users the ability to change status without that user having the rights to edit the rest of the work package. To do that you need to grant the **Change work package status** permission to the role this user is assigned. diff --git a/docs/system-admin-guide/users-permissions/users/README.md b/docs/system-admin-guide/users-permissions/users/README.md index 4eb0a1a8f065..1ae8e263f00f 100644 --- a/docs/system-admin-guide/users-permissions/users/README.md +++ b/docs/system-admin-guide/users-permissions/users/README.md @@ -8,14 +8,14 @@ keywords: manage users, lock, unlock, invite, default language # Manage users -The user list provides an overview of all users in OpenProject. You can create new users, make changes to existing user accounts and block or delete users from the system. +The user list provides an overview of all users in OpenProject. You can create new users, make changes to existing user accounts and block or delete users from the system.
    **User** is defined as a person (described by an identifier) who uses OpenProject. Users can become project members by assigning them a role and adding them via the project settings.
    To manage users click on your avatar (top right corner) and select **Administration**. Select ***Users and permissions -> Users**. The list of current users is shown. -In the Community edition there is no limit to the number of users. In Enterprise editions (cloud and on-premises) the user limit is based on your subscription. The number of users for your subscription is thus not bound to names. For example, if you block a user you can add a new one without upgrading. +In the Community edition there is no limit to the number of users. In Enterprise editions (cloud and on-premises) the user limit is based on your subscription. The number of users for your subscription is thus not bound to names. For example, if you block a user you can add a new one without upgrading. | Topic | Content | | ----------------------------------------------- | -------------------------------------------------------- | @@ -59,7 +59,7 @@ If a user has repeated failed logins the user will be locked temporarily and a * ## Create users -New users can be created and configured by an administrator or by the users themselves (if activated). +New users can be created and configured by an administrator or by the users themselves (if activated). ### Invite user (as administrator) @@ -76,13 +76,13 @@ When adding the last of multiple users you can click on **Create** or click the ### Create user (via self-registration) -To allow users to create their own user accounts enable self-registration in the [authentication settings](../../authentication/authentication-settings). A person can then create their own user from the home page by clicking on the **Sign in** button (top right), then on the **Create a new account** link in the sign in box. +To allow users to create their own user accounts enable self-registration in the [authentication settings](../../authentication/authentication-settings). A person can then create their own user from the home page by clicking on the **Sign in** button (top right), then on the **Create a new account** link in the sign in box. Enter values in all fields (they cannot be left blank). The email field must be a valid email address that is not used in this system. Click the **Create** button. Depending on the [settings](../../authentication/authentication-settings) the account is created but it could be that it still needs to be activated by an administrator. #### Activate users -Open the user list. If a user has created their own account (and it has not been activated automatically) it is shown in the user list with an **Activate** link on the right. Click this link and continue to add details to this user as below. +Open the user list. If a user has created their own account (and it has not been activated automatically) it is shown in the user list with an **Activate** link on the right. Click this link and continue to add details to this user as below. ![Activate a user](system_guide_activate_user_list.png) @@ -93,7 +93,7 @@ There is also an **Activate** button at the top of the user's details page. ### Set initial details You can edit the details of a newly created user. Useful fields might be **Username**, **Language** and **Time zone**. You might also fill Projects, Groups and Rates, or leave these to the **Project creator**. -Also consider the [authentication](#authentication) settings. +Also consider the [authentication](#authentication) settings. See [Manage user settings](#manage-user-settings) for full details. @@ -105,9 +105,9 @@ In the top right, click the **Send invitation** button in order to send the emai ![Send user invitation in OpenProject](openproject_system_guide_send_user_invitation.png) - ### Delete user invitations -To invalidate or revoke a user's invitation click on the user name and then on **Delete** in the upper right corner. This will prevent the invited user from logging in. + +To invalidate or revoke a user's invitation click on the user name and then on **Delete** in the upper right corner. This will prevent the invited user from logging in. Please note: this only works for users who haven't logged in yet. If the user is already active this will delete his/her whole profile and account. Deleting users can't be revoked. ## Manage user settings @@ -148,7 +148,7 @@ On the **Projects** tab, select the new project from the drop-down list, choose ### Add users to groups -On the **Groups** tab you can see the groups the user belongs to. If a group is shown, click the group name link. +On the **Groups** tab you can see the groups the user belongs to. If a group is shown, click the group name link. ![User groups](system_guide_user_groups.png) @@ -184,7 +184,7 @@ If you want to set a different hourly rate for the user on different projects, y To enter a new hourly rate, click on the **Update** icon next to the rate history. You can either set a **default hourly rate** or define a rate for a certain project. -![set-hourly-rate-administration](system_guide_rate_history.png) +![set-hourly-rate-administration](system_guide_rate_history.png) 1. Enter a date from which the rate is **Valid from**. 2. Enter the (hourly) **Rate**. The currency can only be changed in the [respective settings](../../time-and-costs). @@ -204,7 +204,7 @@ This tab shows whether a user has activated a device for two-factor authenticati ## Authentication -The available authentication methods affect the content of the **Authentication** section in the **General** tab of the user details. +The available authentication methods affect the content of the **Authentication** section in the **General** tab of the user details. Use the **self-registration** field to give the following controls over a new user's access. @@ -223,6 +223,7 @@ Leave all fields blank. When the details are saved OpenProject will send an emai ## Delete users Two [settings](../settings/#user-deletion) allow users to be deleted from the system: + * **User accounts deletable by admins** - if ticked, a **Delete** button is shown on the user details page. * **Users allowed to delete their accounts** - if ticked, a **Delete account** menu entry is shown in the **My Account** page. diff --git a/docs/use-cases/README.md b/docs/use-cases/README.md index c437381a8c11..0b9e21a41e1e 100644 --- a/docs/use-cases/README.md +++ b/docs/use-cases/README.md @@ -13,4 +13,3 @@ keywords: use-cases | [Resource Management](resource-management) | OpenProject does not have the automated functionality to provide detailed resource management or employee work capacity calculations. This guide with detailed step-by-step instructions introduces a workaround that can provide an avenue to accomplish this manually and visually beyond the functionality the Team Planner Module provides. | | [Portfolio Management](portfolio-management) | This guide provides detailed step-by-step instruction on how to set up an overview of your project portfolio and create custom reports using the Project Overview, Wiki and the Rich text (WYSIWYG) editor in OpenProject. | | [Implementing Scaled Agile Framework (SAFe) in OpenProject](safe-framework) | Learn how to set up and configure OpenProject to support the Scaled Agile Framework (SAFe) to successfully deliver value to customers using agile practices at scale. | - diff --git a/docs/use-cases/portfolio-management/README.md b/docs/use-cases/portfolio-management/README.md index fb76ea586f5a..bc6b9d44b7d0 100644 --- a/docs/use-cases/portfolio-management/README.md +++ b/docs/use-cases/portfolio-management/README.md @@ -8,17 +8,17 @@ keywords: use-case, portfolio management # Use Case: Portfolio management and custom reporting options -If you have a lot of projects running at the same time it can be helpful and even necessary to have a meta level overview of your projects, keep track of the project status and due dates. With OpenProject you can do just that. +If you have a lot of projects running at the same time it can be helpful and even necessary to have a meta level overview of your projects, keep track of the project status and due dates. With OpenProject you can do just that. ![OpenProject projects portfolio overview](openproject_projects_overview.png) ## Creating projects overview -Step 1: To view all projects, first select the **Select a project** dropdown menu, then click on the **Projects list** button. +Step 1: To view all projects, first select the **Select a project** dropdown menu, then click on the **Projects list** button. ![open project list](openproject_select_projects_list.png) -Step 2: You will get a list of all the projects that exist in your organization. You can filter the list by various project attributes, such as **project owner** or **creation date**. You can also use project custom fields as filters (please keep in mind that this is an enterprise add-on). If you have not added any custom fields yet, please see [here](../../system-admin-guide/custom-fields/) how to do it. +Step 2: You will get a list of all the projects that exist in your organization. You can filter the list by various project attributes, such as **project owner** or **creation date**. You can also use project custom fields as filters (please keep in mind that this is an enterprise add-on). If you have not added any custom fields yet, please see [here](../../system-admin-guide/custom-fields/) how to do it. ![OpenProject filter projects view](openproject_filter_projects.png) @@ -26,13 +26,13 @@ You can then sort the project list by clicking on a column heading, for example ![OpenProject sort project list by status](sort_by_status.png) -You can add a visual component to the overview by clicking on the **Open as Gantt view** button. +You can add a visual component to the overview by clicking on the **Open as Gantt view** button. ![OpenProject projects Gantt overview](open_as_gantt_view.png) ![OpenProject projects in Gantt view](gantt_view.png) -Step 3: You can also configure this view using the button with the three dots at the upper right corner and select **Configure**. +Step 3: You can also configure this view using the button with the three dots at the upper right corner and select **Configure**. ![OpenProject configure projects overview](openrpoject_configure_projects_overview.png) @@ -40,26 +40,25 @@ You will then be led to the **System settings** of the global Administration. If ![Settings for project overview list](openproject_settings_for_project_overview_list.png) -If you click on **Edit query** you can adjust the project overview when using the Gantt chart option. +If you click on **Edit query** you can adjust the project overview when using the Gantt chart option. ## Creating custom reports ### Exporting reports -For creating custom project reports you can use the export function in the work packages view. - -![Reports export](openproject_export.png) +For creating custom project reports you can use the export function in the work packages view. +![Reports export](openproject_export.png) -You can export the work packages in one of the following formats. +You can export the work packages in one of the following formats. ![Export options](export_options.png) To export or print a Gantt chart use the print function (**CTRL+P**) and then save it as PDF. Only information displayed in the main screen area is included. None of the designs or side or top menus are in it. Please see here [how to print a Gantt chart in OpenProject](../../user-guide/gantt-chart/#how-to-print-a-gantt-chart). - ### Project status reporting -You can [display and configure the individual project status](../../user-guide/projects/project-status/) on the project overview page. + +You can [display and configure the individual project status](../../user-guide/projects/project-status/) on the project overview page. For more advanced project reporting requirements, using the Wiki module is another powerful tool. The Wiki allows you to build complete custom reports using embedded work package tables, macros and even embedded calculations. diff --git a/docs/use-cases/resource-management/README.md b/docs/use-cases/resource-management/README.md index 07d5a12144c0..405bc89937cc 100644 --- a/docs/use-cases/resource-management/README.md +++ b/docs/use-cases/resource-management/README.md @@ -8,25 +8,25 @@ keywords: use-case, resource management # Use Case: Resource management -**Note:** OpenProject does not have the automated functionality to provide detailed resource management or employee work capacity calculations. However, there is a workaround that you can use to configure a visual estimate of task distribution and plan accordingly. +**Note:** OpenProject does not have the automated functionality to provide detailed resource management or employee work capacity calculations. However, there is a workaround that you can use to configure a visual estimate of task distribution and plan accordingly. ## Work packages view -These are the steps you can follow to adjust a work package overview to suit your goals. +These are the steps you can follow to adjust a work package overview to suit your goals. ![resource management](configure_wp_view.png) -Step 1: Select a project and go to the work package overview by clicking **Work packages** in the project menu on the left. If you would like to create an overview over multiple projects, select the respective projects and/or subprojects in the **Include projects** menu between the **+ Create** and the **Filter** buttons. +Step 1: Select a project and go to the work package overview by clicking **Work packages** in the project menu on the left. If you would like to create an overview over multiple projects, select the respective projects and/or subprojects in the **Include projects** menu between the **+ Create** and the **Filter** buttons. Alternatively, you can also chose the **Global work package overview** by selecting the **Waffle icon** in the top right corner: ![OpenProject global work packages overview](openproject_global_wp_view.png) -Step 2: You can add existing fields, such as **Work** (earlier called **Estimated time**), **Spent time** and **Remaining work** (earlier called **Remaining hours**) to your work packages list. Also, you can [create additional custom fields](../../system-admin-guide/custom-fields/), e.g. **Scope (h)**, to get an overview of the team capacity. +Step 2: You can add existing fields, such as **Work** (earlier called **Estimated time**), **Spent time** and **Remaining work** (earlier called **Remaining hours**) to your work packages list. Also, you can [create additional custom fields](../../system-admin-guide/custom-fields/), e.g. **Scope (h)**, to get an overview of the team capacity. -Step 3: You can add these fields via the **Insert columns** option on the drop-down menu. +Step 3: You can add these fields via the **Insert columns** option on the drop-down menu. -Step 4: You can add any filters necessary and sort or group the work packages by assignee. +Step 4: You can add any filters necessary and sort or group the work packages by assignee. ![OpenProject sort work packages by assignee](openproject_sort_by_assignee.png) @@ -42,7 +42,7 @@ You can also use the sum function. Select **\[⋮\]** -> ***Configure view*** -> ![OpenProject work package configure view](openproject_configure_view.png) -![OpenProject display sums](openproject_display_sums.png) +![OpenProject display sums](openproject_display_sums.png) You will see the **Work** (previously called estimated time), **Spent time** and **Remaining work** (called remaining hours) summed up by user, as well as the overall sum. @@ -54,6 +54,6 @@ You could also add the Gantt view to add an additional dimension to your overvie ![OpenProject work packages Gantt view](openproject_wp_gantt_view.png) -This will provide a rough overview of the various tasks assigned to a specific person or team. Adding the Gantt view provides a supplementary overview of when these tasks are scheduled. It is a visual way of looking at approximately how many tasks are assigned to an individual. This view gives you an estimate about the timeline, allowing for adjustments in assignments and timing to be made to balance your resources. +This will provide a rough overview of the various tasks assigned to a specific person or team. Adding the Gantt view provides a supplementary overview of when these tasks are scheduled. It is a visual way of looking at approximately how many tasks are assigned to an individual. This view gives you an estimate about the timeline, allowing for adjustments in assignments and timing to be made to balance your resources. To get a more in-depth overview about who does which tasks and when, you can also switch to the [team planner view](../../user-guide/team-planner/). diff --git a/docs/use-cases/safe-framework/README.md b/docs/use-cases/safe-framework/README.md index 080c428ab65f..5216fc294fb1 100644 --- a/docs/use-cases/safe-framework/README.md +++ b/docs/use-cases/safe-framework/README.md @@ -22,8 +22,6 @@ This guide contains the following sections: | [Organizing work using table view, Gantt view](#organizing-work-using-table-view-gantt-view) | Using table and Gantt views to visualize, sort, filter and group work packages and save custom views at all levels (agile team, Agile Release Train or Solution Train) | | [Backlogs, Kanban and Team planner](#backlogs-kanban-and-team-planner) | Organizing work and facilitating planning using Backlogs, Kanban boards and Team planner | - - ## Structure and terminology Preparing OpenProject for SAFe involves configuration and access at two levels: @@ -31,7 +29,7 @@ Preparing OpenProject for SAFe involves configuration and access at two levels: - **Individual projects** are self-contained and consist of a set of modules, members, work packages and project-level settings. Each can further contain sub-projects for additional hierarchy. They represent **Agile Release Trains** in SAFe. - **Global modules** encompass content from all projects (and sub-projects) and instance-level settings that affect all modules for all users; these settings can sometimes be overridden at a project-level. The global level serves as a **Solution Train-level** view in SAFe. -Individual users will generally work within one or a set of different projects to deliver value. +Individual users will generally work within one or a set of different projects to deliver value. It is important to note that OpenProject terminology can vary somewhat form SAFe terminology: @@ -57,7 +55,7 @@ In OpenProject, each **Agile Release Train** (ART) is set up as an individual pr A project consists of a number of different elements: -- **Members**: individual members can be created at an instance-level and then added to individual projects, or external users +- **Members**: individual members can be created at an instance-level and then added to individual projects, or external users - can directly be "invited" to a project. Each member can have different roles in different projects. - **Modules** like Work packages, Gantt, Backlog, Team planner, Wiki, Forums, Meetings. - **Work packages** that can be of different types, including epics, features, enablers, user stories, and bugs. @@ -69,7 +67,7 @@ To learn how to use the Work packages module to configure epics, features and us > **Demo:** View an [overview of an ART set up as a project](https://safe.openproject.com/projects/art-2-design/work_packages?query_id=58). -### Project templates +### Project templates You can also use [project templates](../../user-guide/projects/project-templates/) and to make it easier to create news ARTs with the same structure, set of enabled modules, project structure or work package templates. Once a new ART is created using a template, it can then be modified in any way. @@ -82,11 +80,11 @@ Project portfolios allow you to view, organize, sort and filter through all proj ![All Features and User Stories across all teams](all_features_across_all_teams.png) > In a near future release, OpenProject will have dedicated project portfolio features. [View mockups.](https://www.figma.com/file/YCCMdJWkrtP9YSmf49Od0i/Project-lists?type=design&node-id=470%3A13037&mode=design&t=g1EZesuy0Jj0VZFD-1) -> +> > For the moment, [global modules](../../user-guide/home/global-modules/) give you an overview of content from all projects, including the ability to view and filter though a **project list**, and view, sort and filter **work packages at a global level**. > **Demo:** [Solution train (project list)](https://safe.openproject.com/projects) -> +> > **Demo:** [Global work package view (epics, features and stories from all ARTs)](https://safe.openproject.com/projects/safe-solution-train-1/work_packages?query_id=120) ## Using versions to set Program Increments @@ -137,7 +135,7 @@ Similarly, a template can be defined for **User stories** so that they can be ex > **As a** *{role}* > > **I want to** *{activity}* -> +> > **so that** *{business or user value}* > **Demo**: Defining a [type template for user stories](https://safe.openproject.com/types/6/edit/settings) (requires admin privileges). @@ -176,7 +174,6 @@ Progress can be viewed at a team label, at an ART-level or at a solution train l > **Demo:** [Progress overview at a PI level](https://safe.openproject.com/projects/safe-demo/work_packages?query_id=78) - ## Organizing work using table view, Gantt view OpenProject is a powerful tool that allows you to view work packages in a variety of different ways. @@ -203,7 +200,6 @@ The [Gantt chart](../../user-guide/gantt-chart/) module allows you to quickly vi > **Demo:** [A Gantt view of a sprint within an ART](https://safe.openproject.com/projects/art-0-test-release-train/work_packages?query_id=39) - ## Backlogs, Kanban and Team planner The **Backlog** and **Kanban** are key tools in a scaled agile environment, not only during PI Planning but during the course of the entire project. @@ -256,4 +252,4 @@ At a Solution train level, it also allows you to view the work of members across OpenProject is a powerful and highly-configurable tool that can be customized to fit the needs of your particular scaled agile implementation. Beyond the basics covered in this guide, OpenProject has many additional features and modules (such as [budgets](../../user-guide/budgets/), [time and cost tracking](../../user-guide/time-and-costs/), [wiki](../../user-guide/wiki/), [meetings](../../user-guide/meetings/) and [file storage integrations](../../development/file-storage-integration/)) that further enable your agile teams to work efficiently and deliver value. -If you have questions about how to [use](../../getting-started/) and [configure](../../system-admin-guide/) OpenProject to work for you, please [get in touch](https://www.openproject.org/contact/) or [start a free trial](https://start.openproject.com/) to see for yourself. +If you have questions about how to [use](../../getting-started/) and [configure](../../system-admin-guide/) OpenProject to work for you, please [get in touch](https://www.openproject.org/contact/) or [start a free trial](https://start.openproject.com/) to see for yourself. diff --git a/docs/user-guide/README.md b/docs/user-guide/README.md index c70f346b3d43..7eda2b792dd7 100644 --- a/docs/user-guide/README.md +++ b/docs/user-guide/README.md @@ -25,7 +25,7 @@ Both the Community edition and Enterprise edition allow you to create an unlimit
    -Within a project Modules can be activated and deactivated under "Modules" in the project settings menu by project members who have sufficient permissions to adjust project settings. Which modules or single functionalities will be available within projects is controlled in the global Administration settings (please see [System admin guide](../system-admin-guide/projects) to see how this is done). +Within a project Modules can be activated and deactivated under "Modules" in the project settings menu by project members who have sufficient permissions to adjust project settings. Which modules or single functionalities will be available within projects is controlled in the global Administration settings (please see [System admin guide](../system-admin-guide/projects) to see how this is done). Please choose the module or feature you want to learn more about. @@ -54,4 +54,3 @@ Please choose the module or feature you want to learn more about. | [Time and costs](time-and-costs) | How to track time and costs in OpenProject and report spent time and costs. | | [Wiki](wiki) | How to create and manage a wiki to collaboratively document and share information. | | [Work packages](work-packages) | How to manage your work in a project. | - diff --git a/docs/user-guide/activity/README.md b/docs/user-guide/activity/README.md index cffa1a4f38da..b5759220829b 100644 --- a/docs/user-guide/activity/README.md +++ b/docs/user-guide/activity/README.md @@ -26,7 +26,7 @@ Within a project, navigate to the **Project settings > Modules** page. Make sure ### View project activity -Click on the **Activity** option that is now visible in the sidebar of a project. This will show you recent activity in the project, with the most recent changes at the top. +Click on the **Activity** option that is now visible in the sidebar of a project. This will show you recent activity in the project, with the most recent changes at the top. For each update concerning a work package, you will see: @@ -58,7 +58,7 @@ To filter the project activity list, use the filters on the sidebar. You may fil - Work packages - Project attributes -Additionally, you can choose to include or exclude updates concerning sub-projects. +Additionally, you can choose to include or exclude updates concerning sub-projects. ![Project activity filters](project-activity-filter-list.png) @@ -75,14 +75,8 @@ When you open a work package, e.g. by clicking on the ID of the work package in ![work package activity](work-package-activity.png) - -There, all changes and activities concerning the work package are documented, e.g. if a user changes the status of the work package, this activity is recorded with the information who, when and what in the Activity area and is visible for other users who have the corresponding authorization. +There, all changes and activities concerning the work package are documented, e.g. if a user changes the status of the work package, this activity is recorded with the information who, when and what in the Activity area and is visible for other users who have the corresponding authorization. You can also use the Activity area as a chat portal and share messages with other team members there.![Work package activity flag someone](Work-package-activity-flag-someone.png) - - If you want to notify a specific user about something in the Activity section, you can also flag them with an "@" symbol in front of their username so that they receive a notification within OpenProject. - - - diff --git a/docs/user-guide/agile-boards/README.md b/docs/user-guide/agile-boards/README.md index b7c4d85110e1..02c05e6f7848 100644 --- a/docs/user-guide/agile-boards/README.md +++ b/docs/user-guide/agile-boards/README.md @@ -6,7 +6,7 @@ description: How to get started with Agile boards for Kanban, Scrum and Agile Pr keywords: agile boards, Kanban, Scrum, agile project management, action boards --- -# Boards for Agile Project Management +# Boards for Agile Project Management Boards support agile project management methodologies, such as Scrum or Kanban. @@ -14,7 +14,6 @@ Our Agile boards can be for anything you would like to keep track of within your > **Note**: The basic board is included in the OpenProject Community edition. OpenProject Action boards are an Enterprise add-on and can only be used with [Enterprise cloud](../../enterprise-guide/enterprise-cloud-guide/) or [Enterprise on-premises](../../enterprise-guide/enterprise-on-premises-guide/). An upgrade from the free Community edition is easily possible. - | Topic | Content | |-----------------------------------------------------------|----------------------------------------------------------------------------------| | [Create new boards](#create-a-new-board) | How to create a new Agile board. | @@ -28,7 +27,7 @@ Our Agile boards can be for anything you would like to keep track of within your | [Manage boards](#manage-boards) | How to manage permissions for boards. | | [Examples for agile boards](#agile-boards-examples) | Best practices for using the basic board and status, assignee and version board. | - + ## Agile boards in OpenProject @@ -38,11 +37,11 @@ The new Boards are tightly integrated with all other project management function ## Create a new board -You can create as many Agile boards in a project as you need and configure them to your needs. First, you need to create a new Boards view. +You can create as many Agile boards in a project as you need and configure them to your needs. First, you need to create a new Boards view. If you haven't done so yet, [activate the Boards module](../projects/project-settings/modules) within your project. Also, we recommend to verify [Roles and Permissions](../../system-admin-guide/users-permissions/roles-permissions/) within your system's Administration. -Click on the green **+Board** button to create a new Board view. +Click on the green **+Board** button to create a new Board view. ![create a new board in the boards module](create-a-new-board-in-the-boards-module.png) @@ -51,7 +50,8 @@ Click on the green **+Board** button to create a new Board view. Next, you need to choose which kind of Agile board you want to create. ## Basic board (Community edition) -The Basic board is included in the OpenProject Community edition. You can freely create lists, name them and order your work packages within. If you move work packages between the lists, there will be **NO changes** to the work package itself. This allows you to create flexible boards for any kind of activity you would like to track, e.g. Management of Ideas. + +The Basic board is included in the OpenProject Community edition. You can freely create lists, name them and order your work packages within. If you move work packages between the lists, there will be **NO changes** to the work package itself. This allows you to create flexible boards for any kind of activity you would like to track, e.g. Management of Ideas. ![Board types basic board](Board-types-basic-board.png) @@ -64,29 +64,34 @@ After [adding lists to your board](#add-lists-to-your-board) they will automatic There are several **types of Action boards** available: ### Status board -Each list represents a status. That means that e.g. all work packages with the status "New" will be automatically displayed in the column "New". + +Each list represents a status. That means that e.g. all work packages with the status "New" will be automatically displayed in the column "New". When creating a new Status board a list with all work packages in the default status (usually this is the status "New") will be added automatically, while additional lists need to be added manually. Please note: You can't move work packages from or to every status. Please find out more about the work-flow logics restricting this here: [Allowed transitions between status](../../system-admin-guide/manage-work-packages/work-package-workflows/) ![create status board](create-status-board.png) ### Assignee board + Every list represents one assignee. You can choose regular users, [placeholder users](../../system-admin-guide/users-permissions/placeholder-users) and groups as assignees. When you move a card from one list to another, the assigned user is changed to the user that is selected for the list you moved the card to. ![create assignee board](create-assignee-board.png) ### Version board + Every list represents a version. This board is ideal for product development or planning software releases. When creating a new Version board a list with all work packages in the version(s) belonging to the current project will be added automatically, while additional lists need to be added manually. By moving a card from one list to another, the version for the work package is changed to the version of the corresponding list. ![create version board](create-version-board.png) ### Subproject board + Every list represents a subproject. Within the list you will find the subproject's work packages. By moving a card within a list you can change the order of the cards and if you move a card to another list you change the (sub)project of this work package. ![create subproject board](create-subproject-board.png) ### Parent-child board -Every list represents a parent work package. Within the list you will find the work package's children. + +Every list represents a parent work package. Within the list you will find the work package's children. Only work packages from the current project can be selected as a list, i.e. can be chosen as the name of the list. The Parent-child board is ideal for depicting a **work breakdown structure (WBS)**. By moving cards to another list you can reorder the work package as a child to another work package. Please note: This will only display one hierarchy level below the displayed work package, i.e. only immediate children and no grandchildren. @@ -108,8 +113,6 @@ Choose a meaningful title for your Board so that it is clear, e.g. for other tea ![this-is-a-list-in-a-board](this-is-a-list-in-a-board.png) - - Click **+ add list** to add lists to your board. ![add-list-to-a-board](add-list-to-a-board.png) @@ -117,7 +120,7 @@ Click **+ add list** to add lists to your board. **Basic board lists:** Give the list any meaningful name. **Action board lists:** The list's name will depend on the type of Action board you chose, e.g. "New", "In Progress", etc. for the Status board. -![image-20201006111714525](image-20201006111714525.png) +![image-20201006111714525](image-20201006111714525.png) ## Remove lists @@ -148,13 +151,11 @@ You can update cards in the following ways: ![OpenProject-Boards_update-cards](OpenProject-Boards_update-cards.png) - - -Apart from the Status board you can **update a work package's status** directly in the card. +Apart from the Status board you can **update a work package's status** directly in the card. ![boards-select-status-from-card](boards-select-status-from-card.png) -A **double click on a card** will open the work package's **fullscreen view.** The **arrow** on top will bring you back to the boards view. +A **double click on a card** will open the work package's **fullscreen view.** The **arrow** on top will bring you back to the boards view. ![back-to-boards-view-button](back-to-boards-view-button.png) @@ -182,11 +183,9 @@ Verify and **update roles and permissions for boards** in the [system's administ ![roles and permissions](image-20201006120925442.png) - - ## Agile boards examples -We would like to show you some examples so that you get an idea on how to use Agile boards. +We would like to show you some examples so that you get an idea on how to use Agile boards. Also, once you have set up your custom boards, you can easily copy them along with your (whole) project to use them as a basis for new ones. Please note: The subprojects in the Subproject board won't be copied. ### Basic board diff --git a/docs/user-guide/agile-boards/agile-boards-faq/README.md b/docs/user-guide/agile-boards/agile-boards-faq/README.md index ddbec3032102..09377d7f0f48 100644 --- a/docs/user-guide/agile-boards/agile-boards-faq/README.md +++ b/docs/user-guide/agile-boards/agile-boards-faq/README.md @@ -12,16 +12,16 @@ keywords: kanban faq, boards, agile board, basic board, swimlane To do this, you can (provided you have set the end dates for the work packages) add the filter "finish date" to the Kanban board and select "In less than 15 days" there. Then you will see the tasks that have a finish date in less than 15 (i.e. 14 days or less). -## How can I activate Boards in OpenProject? +## How can I activate Boards in OpenProject? The Boards module is an Enterprise add-on of OpenProject Enterprise on-premises and OpenProject Enterprise cloud. You can upgrade your Community edition installation by entering a valid subscription token in the application administration. You can purchase the token on our [website](https://www.openproject.org/enterprise-edition/). In addition, you need to activate the Boards module in the project settings. -## Is it possible that we can have a board over all OpenProject tasks and users? +## Is it possible that we can have a board over all OpenProject tasks and users? Yes, to achieve the desired result you can navigate to the main project and on the Kanban view add the filter "subproject" "all". This will display the work packages in the main project and all subprojects. As a precondition, you will need a central parent project within your project hierarchy. ## What does the error message "Parent is invalid because the work package (...) is a backlog task and therefore cannot have a parent outside of the current project" mean? -This message appears when the Backlogs module is activated and you try to set a work package belonging to project A as a child of another work package belonging to project B. +This message appears when the Backlogs module is activated and you try to set a work package belonging to project A as a child of another work package belonging to project B. In the Backlogs module work packages can only have children of the same version and the same project. To avoid displaying different information in the backlog and in the boards view this restriction is in place. You can solve it by disabling the Backlogs module or by changing the project (and if necessary version) of the work package you'd like to move. diff --git a/docs/user-guide/backlogs-scrum/README.md b/docs/user-guide/backlogs-scrum/README.md index fdfe78f8bf13..5c96535b1c49 100644 --- a/docs/user-guide/backlogs-scrum/README.md +++ b/docs/user-guide/backlogs-scrum/README.md @@ -16,7 +16,6 @@ OpenProject supports your work with the Scrum methodology by providing a variety A **Backlog** is defined as a plugin that allows to use the backlogs feature in OpenProject. In order to use backlogs in a project, the backlogs module has to be activated in the project settings of a project. - Please note that this user guide does not represent an introduction into scrum methodology, but merely explains the scrum-related functionalities and user instructions in OpenProject. | Topic | Content | diff --git a/docs/user-guide/backlogs-scrum/backlogs-faq/README.md b/docs/user-guide/backlogs-scrum/backlogs-faq/README.md index d7e9862acf40..3593788c9aab 100644 --- a/docs/user-guide/backlogs-scrum/backlogs-faq/README.md +++ b/docs/user-guide/backlogs-scrum/backlogs-faq/README.md @@ -10,7 +10,7 @@ keywords: backlogs FAQ, back-logs. task board, version, sprint, scrum ## What can I do to show the tasks of shared sub-projects in the backlog? -This is not possible. "Work packages from sub-projects are not displayed in the backlog of a main project" is the currently implemented behavior. +This is not possible. "Work packages from sub-projects are not displayed in the backlog of a main project" is the currently implemented behavior. ## I assigned a version to work packages. Why can't I see them in the respective backlog? @@ -30,4 +30,4 @@ Please try these approaches: ## How can I change the user's colors in the task board? -The colors can be changed in each user's personal settings: Please click on your avatar, then navigate to *My account ->Settings ->Backlogs*. There you can change the task color. \ No newline at end of file +The colors can be changed in each user's personal settings: Please click on your avatar, then navigate to *My account ->Settings ->Backlogs*. There you can change the task color. diff --git a/docs/user-guide/backlogs-scrum/manage-sprints/README.md b/docs/user-guide/backlogs-scrum/manage-sprints/README.md index 3aea7cc840d1..edb0be61de50 100644 --- a/docs/user-guide/backlogs-scrum/manage-sprints/README.md +++ b/docs/user-guide/backlogs-scrum/manage-sprints/README.md @@ -23,10 +23,10 @@ Click on the green **+ Version** button to add a new sprint. Click on the arrow > **Note**: The columns of the version are actually sorted differently. The left column for sprints is sorted chronologically, i.e. according to the time of creation, since sprints usually also run chronologically in project management planning. > The right column (for backlogs) is sorted alphabetically, so that you can determine the sequence of the backlogs yourself. -On the new page, you can specify details of the version such as description, status, (sprint) wiki page, start and end date, as well as sharing options across projects. Moreover, you can create a custom field and decide where the version is to be displayed in the backlog. +On the new page, you can specify details of the version such as description, status, (sprint) wiki page, start and end date, as well as sharing options across projects. Moreover, you can create a custom field and decide where the version is to be displayed in the backlog. The Column in backlog settings define whether the version should be displayed in the backlogs view on the left side (recommended for sprints) or on the right side (recommended for product backlog, bug backlog, wishlist, etc.) > **Note**: Sprints (versions displayed on the left side of the backlogs page) offer more options – such as opening the task board and displaying the burndown chart. -![User-guide-backlogs-manage-versions](User-guide-backlogs-manage-versions.png) \ No newline at end of file +![User-guide-backlogs-manage-versions](User-guide-backlogs-manage-versions.png) diff --git a/docs/user-guide/backlogs-scrum/taskboard/README.md b/docs/user-guide/backlogs-scrum/taskboard/README.md index db237aaac4e3..4b7228df40ea 100644 --- a/docs/user-guide/backlogs-scrum/taskboard/README.md +++ b/docs/user-guide/backlogs-scrum/taskboard/README.md @@ -14,8 +14,6 @@ To open the task board view, click on the small arrow next to the respective spr ![User-guide-taskboard](User-guide-taskboard.png) - - You will find user stories in the left column, followed by their individual tasks (as child work packages) which are sorted by status. Therefore, you can immediately see the status of a user story and its associated tasks. Clicking on the ***+***-icon next to a user story opens a window to create a new task. ![User-guide-new-task](User-guide-new-task.png) @@ -35,14 +33,12 @@ On the very top of the table, sprint impediments are documented and assigned to ![sprint impediments](User-guide-add-impediment.png) - - The task colors are different for every team member, making it easy to associate tasks with their respective assignees. ## Configure Backlogs settings under My Account If needed, the coloring can be adjusted in the personal user account settings (-> *My Account*). Use hex codes to specify the desired color. -![User-guide-task-color](User-guide-task-color.png) +![User-guide-task-color](User-guide-task-color.png) -Here, you can also specify whether the versions in the Backlogs view should be displayed folded. You can choose whether backlogs are to be displayed folded or collapsed by default. In *My account*, select *Settings* from the side menu and check or uncheck the respective box next to the field *Show versions folded*. +Here, you can also specify whether the versions in the Backlogs view should be displayed folded. You can choose whether backlogs are to be displayed folded or collapsed by default. In *My account*, select *Settings* from the side menu and check or uncheck the respective box next to the field *Show versions folded*. diff --git a/docs/user-guide/backlogs-scrum/work-with-backlogs/README.md b/docs/user-guide/backlogs-scrum/work-with-backlogs/README.md index c4f9d8f09307..06fbad75b4cb 100644 --- a/docs/user-guide/backlogs-scrum/work-with-backlogs/README.md +++ b/docs/user-guide/backlogs-scrum/work-with-backlogs/README.md @@ -60,7 +60,6 @@ This will take you to the filtered work package view of all user stories and tas > **Note**: All tasks created for a user story via the task board view are automatically configured as child work packages of a user story. The task is thus always automatically assigned to the target version of the parent work package (i.e. the user story). - ## Prioritize user stories You can prioritize different work packages within the product backlog using drag & drop and you can assign them to a specific sprint backlog or re-order them within a sprint. @@ -95,7 +94,6 @@ Moreover, you can adjust the start and end date of a backlog in the backlogs vie > **Note**: A backlog version will be shown under [Roadmap](../../roadmap/), but not in a [Gantt chart](../../gantt-chart). If you want to display a sprint in a timeline, you can create a new work package, select a phase as a work package type, give it the same name as to a specific version (for example Sprint 1) and assign the same start and end date. - ## Burndown chart **Burndown charts** are a helpful tool to visualize a sprint’s progress. With OpenProject, you can generate sprint and task burndown charts automatically. As a precondition, the sprint’s start and end date must be entered in the title and the information on story points is well maintained. diff --git a/docs/user-guide/budgets/README.md b/docs/user-guide/budgets/README.md index f31ff7ba44e6..85fc38f059c9 100644 --- a/docs/user-guide/budgets/README.md +++ b/docs/user-guide/budgets/README.md @@ -46,9 +46,9 @@ You can add planned unit costs to a budget in your project. These [unit costs fi 5. Enter the number of **units** of the cost type to add to your project budgets. -6. Choose the **cost type** you would like to plan for your budget from the drop-down list. -The **unit name** will be set automatically according to the configuration of the cost types in your system administration. - +6. Choose the **cost type** you would like to plan for your budget from the drop-down list. +The **unit name** will be set automatically according to the configuration of the cost types in your system administration. + 7. Add a **comment** to specify the unit costs. 8. The **planned costs** for this cost type will be calculated automatically based on the configuration of the cost per unit for this cost type. The cost rate will be taken from the fixed date you have configured for your budget. @@ -104,10 +104,8 @@ You will get and overview of planned as well as spent costs and the available co 6. The **planned labor costs** are displayed for this budget. 7. The **actual labor costs** list all work packages that are [assigned to this budget](#assign-a-work-package-to-a-budget) and have logged time on it. - ![Budgets-details-view](Budgets-details-view.png) - > **Note**: The costs are calculated based on the [configuration for cost types](../../system-admin-guide) and the [configured hourly rate](../time-and-costs/time-tracking/#define-hourly-rate-for-labor-costs) in the user profile. ## Frequently asked questions (FAQ) diff --git a/docs/user-guide/calendar/README.md b/docs/user-guide/calendar/README.md index 3489d73ae41a..945ee4e00b5c 100644 --- a/docs/user-guide/calendar/README.md +++ b/docs/user-guide/calendar/README.md @@ -19,7 +19,6 @@ You must first enable the Calendar module in your [project settings](../projects | [Use the calendar](#use-the-calendar) | How to view, modify, create and filter work packages in the calendar. | | [Subscribe to a calendar](#subscribe-to-a-calendar) | How to subscribe to and access a calendar from an external client. | - ## Create a new calendar Once enabled, clicking on the **Calendars** entry on the left sidebar takes you to the Calendar module with a list of all existing calendars. Initially, it will be empty. @@ -27,17 +26,11 @@ Once enabled, clicking on the **Calendars** entry on the left sidebar takes you ![Calendar overview](calendar-overview.png) - You can create a new calendar by clicking on either the **+ Calendar** button at the top right corner near your avatar or at the bottom of the sidebar on the left. - - Click on an existing (saved) calendar to view it. - - You can change the visibility settings of any calendar by clicking on **\[⋮\] (more)** -> **Visibility settings.** - - - Any calendar that has the **Favored** option checked will be displayed under the **Favorite** heading in the sidebar to the left. - - - Any calendar that has the **Public** option checked will be visible to all members of the current project and listed under the **Public** heading in the sidebar to the left. - - - Any calendar that has the **Public** option unchecked will be considered **private** and displayed under the **Private** heading in the menu bar to the left. - + - Any calendar that has the **Favored** option checked will be displayed under the **Favorite** heading in the sidebar to the left. + - Any calendar that has the **Public** option checked will be visible to all members of the current project and listed under the **Public** heading in the sidebar to the left. + - Any calendar that has the **Public** option unchecked will be considered **private** and displayed under the **Private** heading in the menu bar to the left. ## Use the calendar @@ -47,13 +40,13 @@ Once enabled, clicking on the **Calendars** entry on the left sidebar takes you When you open a new calendar, all work packages within the current project are displayed as horizontal strips that span all dates between the start and finish dates (inclusive). The color represents the [work package type](../../system-admin-guide/manage-work-packages/work-package-types). The subject or title displayed on the strip (insomuch as the length allows). -The current month is automatically selected. +The current month is automatically selected. ![Calendar time controls](Calendar-timeControls.png) -1. You can use the previews/next arrow controls (←, →) in the top left corner to move forwards or backwards in time. +1. You can use the previews/next arrow controls (←, →) in the top left corner to move forwards or backwards in time. 2. The **today** button brings you back to the current date. -3. You can use the month/week toggle on the top right corner to switch between either a month view or a week view. +3. You can use the month/week toggle on the top right corner to switch between either a month view or a week view. If multiple work packages are scheduled on the same day, they are displayed in a vertical stack. @@ -115,10 +108,10 @@ This makes it possible for you to keep an eye on your project schedule from any To subscribe to a calendar: -1. Click on the **\[⋮\] (more) button** on the toolbar and select **Subscribe to calendar**. -2. In the modal that appears, give this calendar a unique name (you can only use it once). We recommend naming it based on where you will be subscribing to this calendar from ("personal phone" or "work tablet" for example). -3. Click on **Copy URL**. This creates the a [calendar token](../../getting-started/my-account/#access-tokens) and copies the calendar URL to your clipboard. -4. Paste this URL in your desired calendar client to subscribe. +1. Click on the **\[⋮\] (more) button** on the toolbar and select **Subscribe to calendar**. +2. In the modal that appears, give this calendar a unique name (you can only use it once). We recommend naming it based on where you will be subscribing to this calendar from ("personal phone" or "work tablet" for example). +3. Click on **Copy URL**. This creates the a [calendar token](../../getting-started/my-account/#access-tokens) and copies the calendar URL to your clipboard. +4. Paste this URL in your desired calendar client to subscribe. ![Subscribe to calendar modal](subscribeToCalendar-modal.png) diff --git a/docs/user-guide/documents/README.md b/docs/user-guide/documents/README.md index c8d52d495124..6edb5cf8249e 100644 --- a/docs/user-guide/documents/README.md +++ b/docs/user-guide/documents/README.md @@ -29,7 +29,7 @@ The uploaded documents are visible to all project members who have the necessary You can edit or delete documents anytime. To do that, navigate to the Documents overview and select the document you want to edit. By selecting *Edit* or *Delete* respectively you can either adjust the document file and related information or remove the file permanently. You can add the file again at a later point. -![edit or delete document](image-20200130111121885.png) +![edit or delete document](image-20200130111121885.png) ## Frequently asked questions (FAQ) diff --git a/docs/user-guide/file-management/README.md b/docs/user-guide/file-management/README.md index 9283527bd02c..7c0146896b5a 100644 --- a/docs/user-guide/file-management/README.md +++ b/docs/user-guide/file-management/README.md @@ -17,11 +17,11 @@ keywords: files, attachment, Nextcloud, OneDrive, SharePoint There are several ways of adding or linking files to work packages in OpenProject. You can manually attach files directly to work packages or use one of the integrations with file management systems. -> Note: in order to use Nextcloud or OneDrive/SharePoint integrations you first need to activate the [File storages module](../projects/project-settings/file-storages/) in your project settings. +> Note: in order to use Nextcloud or OneDrive/SharePoint integrations you first need to activate the [File storages module](../projects/project-settings/files/) in your project settings. ## Manual upload -For the manual upload please refer to documentation on [attaching files to work packages](../work-packages/create-work-package/#add-attachments-to-work-packages). +For the manual upload please refer to documentation on [attaching files to work packages](../work-packages/create-work-package/#add-attachments-to-work-packages). ## Nextcloud integration @@ -40,4 +40,3 @@ You can also use OneDrive/SharePoint integration to link OpenProject work packag Please refer to [OneDrive/SharePoint integration user guide](./one-drive-integration) for further instructions on using the integration. For the initial setup please refer to the [OneDrive/SharePoint integration setup guide](../../system-admin-guide/integrations/one-drive/). - diff --git a/docs/user-guide/file-management/file-management-faq/README.md b/docs/user-guide/file-management/file-management-faq/README.md index 833ea80433d2..301ea2704c77 100644 --- a/docs/user-guide/file-management/file-management-faq/README.md +++ b/docs/user-guide/file-management/file-management-faq/README.md @@ -10,13 +10,14 @@ keywords: files, attachment, Nextcloud, OneDrive, SharePoint, FAQ ## Why am I not allowed to see/read a certain file in OneDrive/SharePoint or Nextcloud? -It is possible that you lack the necessary permissions to view a certain file. In this case please contact your administrator. +It is possible that you lack the necessary permissions to view a certain file. In this case please contact your administrator. Another explanation may be that you have been removed from a project in OpenProject, which will also mean that you lost your viewing or reading privileges in OneDrive/SharePoint or Nextcloud project folders. It can also be that case, that a project admin revoked your permission to view files on file storages within a project in OpenProject. ## Can I rename a project with an established file storage (Nextcloud or OneDrive/SharePoint) connection? + Yes, that is possible. If you work with automatically managed folders, the corresponding project folder will also be renamed automatically after a few minutes. ## Can I copy a project, including the OneDrive/SharePoint file storage? @@ -28,4 +29,4 @@ Yes, you can. If the OneDrive/SharePoint file storage in your project had the au ## Is there a virus scanner for the files attachments in OpenProject? -Yes, there is a virus scanner for attachments in OpenProject. At the moment it is only available for on-premises installations and is an Enterprise add-on. Your system administrator will need to [configure it first](../../../system-admin-guide/attachments/virus-scanning). +Yes, there is a virus scanner for attachments in OpenProject. At the moment it is only available for on-premises installations and is an Enterprise add-on. Your system administrator will need to [configure it first](../../../system-admin-guide/files/attachments/virus-scanning/). diff --git a/docs/user-guide/file-management/nextcloud-integration/README.md b/docs/user-guide/file-management/nextcloud-integration/README.md index dbcd776f45c2..4b970b7427cc 100644 --- a/docs/user-guide/file-management/nextcloud-integration/README.md +++ b/docs/user-guide/file-management/nextcloud-integration/README.md @@ -24,10 +24,9 @@ Additionally you can: - Pick and preview links to work packages in Nextcloud - Search for work packages using Nextcloud's search bar -It is also possible to automatically create dedicated [project folders](../../projects/project-settings/file-storages/#project-folders), which makes documentation structure clearer and makes navigation more intuitive. - -> **Important note**: To be able to use Nextcloud as a file storage in your project, the administrator of your instance should first have completed the [Nextcloud integration setup](../../../system-admin-guide/integrations/nextcloud). Then a project administrator can activate Nextcloud in the [File storages](../../projects/project-settings/file-storages/) for a project. +It is also possible to automatically create dedicated [project folders](../../projects/project-settings/files/#project-folders), which makes documentation structure clearer and makes navigation more intuitive. +> **Important note**: To be able to use Nextcloud as a file storage in your project, the administrator of your instance should first have completed the [Nextcloud integration setup](../../../system-admin-guide/integrations/nextcloud). Then a project administrator can activate Nextcloud in the [File storages](../../projects/project-settings/files/) for a project. | Topic | Description | |-----------------------------------------------------------------------------------------------------|:------------------------------------------------------------------------------------------| @@ -50,7 +49,7 @@ To begin using this integration, you will need to first connect your OpenProject 2. You will see a Nextcloud screen asking you to log in before granting OpenProject access to your Nextcloud account. You will also see a security warning, but since you are indeed trying to connect the two accounts, you can safely ignore it. Click on **Log in** and enter your Nextcloud credentials. ![Nextcloud login step 2](login_nc_step2-1.png) - + ![Nextcloud login step 3](login_nc_step2-2.png) 3. Once you are logged in to Nextcloud, click on **Grant access** to confirm you want to give OpenProject access to your Nextcloud account. @@ -63,7 +62,6 @@ To begin using this integration, you will need to first connect your OpenProject 5. The one-time process to connect your two accounts is complete. You will now be directed back to the original work package, where you can view and open any Nextcloud files that are already linked, or start linking new ones. - > **Note**: To disconnect the link between your OpenProject and Nextcloud accounts, head on over to Nextcloud and navigate to _Settings → OpenProject_. There, click *Disconnect from OpenProject* button. To re-link the two accounts, simply follow [the above instructions](#connect-your-openproject-and-nextcloud-accounts) again. ## Link files and folders to work packages @@ -85,17 +83,17 @@ To link a Nextcloud file to the current work package, you can either: ![Link existing file in Nextcloud](link_existing_files.png) -> **Info**: The default project that opens in the location picker is set by the project administrators in the [File storages settings](../../projects/project-settings/file-storages). +> **Info**: The default project that opens in the location picker is set by the project administrators in the [File storages settings](../../projects/project-settings/files/). ![Select a file to be linked in Nextcloud](nc_select_file_to_link.png) #### Upload and link new files -If the file you want to link has not yet been uploaded to Nextcloud, you can do so by clicking on the **Upload files** link. +If the file you want to link has not yet been uploaded to Nextcloud, you can do so by clicking on the **Upload files** link. ![Upload new files to Nextcloud](NC_12.5-uploadFilesLink.png) -You will then be prompted to select a file (or multiple files) on your computer that you want to upload to Nextcloud. +You will then be prompted to select a file (or multiple files) on your computer that you want to upload to Nextcloud. ![Pick a file from your computer](NC_12.5-selctFileToUpload.png) @@ -103,13 +101,13 @@ Alternatively, you can also simply drag a file or folder from your computer to t Once you have selected or dropped the files you would like to upload, you will need to select a folder on Nextcloud to which they should be stored. -> **Info**: The default project that opens in the location picker is defined by the project administrators in the [File storages settings](../../projects/project-settings/file-storages). +> **Info**: The default project that opens in the location picker is defined by the project administrators in the [File storages settings](../../projects/project-settings/files/). ![Select the destination folder on Nextcloud](NC_12.5-selectLocationToUploadTo.png) -You can click on folders you see to navigate to them. A helpful breadcrumb shows you where you are in the folder hierarchy. +You can click on folders you see to navigate to them. A helpful breadcrumb shows you where you are in the folder hierarchy. -To navigate one level up or to go back to the root, simply click on the relevant parent in the breadcrumb. +To navigate one level up or to go back to the root, simply click on the relevant parent in the breadcrumb. > **Info**: If you have navigated particularly deep (over 4 levels), intermediate levels might be collapsed to save space, but you'll always be able to navigate back to the immediate parent or the root to go backwards. @@ -125,11 +123,11 @@ If a file has been deleted from a Nextcloud storage, it will still be visible un #### Download, open folders and remove links -If you wish to unlink any linked file or folder, hover to it in the list of linked Files and click on the **Unlink** icon. +If you wish to unlink any linked file or folder, hover to it in the list of linked Files and click on the **Unlink** icon. ![Unlinking linked file in OpenProject](op_unlink_download_openfolder.png) -Respectively in order to download a file, hover over the **Download** icon in the list of the linked files. +Respectively in order to download a file, hover over the **Download** icon in the list of the linked files. If you click the **Folder** icon, the Nextcloud folder containing this file will open in a separate tab. @@ -145,7 +143,7 @@ On the file or folder that you want to link to a work package, click on the *thr ![Open files details in Nextcloud](Nextcloud_open_file_details.png) -In the **Details** side panel, click on the **OpenProject** tab. This tab lets you link work packages in OpenProject to the current file, and will list all linked work packages. When nothing is yet linked, the list will be empty. +In the **Details** side panel, click on the **OpenProject** tab. This tab lets you link work packages in OpenProject to the current file, and will list all linked work packages. When nothing is yet linked, the list will be empty. ![Nextcloud no file relation defined](NC_0_00-FileNoRelation.png) @@ -162,7 +160,7 @@ This linked file will then appear underneath the search bar. Doing so will also You can also **link multiple files** to a single OpenProject work package. To do that, select the files you want to link, click the *Actions* menu and select the respective option. ![Select multiple files in Nextcloud to link to a single work package in OpenProject](nc_select_multiple_files.png) -A dialogue will open, allowing you to search for and then select an OpenProject work package to add all of the files to. The newly added files will become visible under the **Files** tab in the work package. +A dialogue will open, allowing you to search for and then select an OpenProject work package to add all of the files to. The newly added files will become visible under the **Files** tab in the work package. ![Select an OpenProject work package in Nextcloud](nc_select_wp_to_link.png) @@ -186,6 +184,7 @@ You will be asked to confirm that you want to unlink. Click on **Remove link** t > **Info**: Unlinking a file or folder simply removes the connection with this work package; the original file or folder will _not_ be deleted or affected in any way. The only change is it will no longer appear in the Files tab on OpenProject, and the work package will no longer be listed in the "OpenProject" tab for that file on Nextcloud. ## Nextcloud dashboard + In addition to actions related to individual files, you can also choose to display the OpenProject widget on your Nextcloud dashboard in order to keep an eye on your OpenProject notifications. ![Add widget in Nextcloud](nc_widget_choice.png) @@ -195,7 +194,7 @@ In addition to actions related to individual files, you can also choose to displ There are two additional features related to the integration that you can enable in Nextcloud. In your personal settings page, under **OpenProject**, you will find these options: -- **Enable navigation link** displays a link to your OpenProject instance in the Nextcloud header +- **Enable navigation link** displays a link to your OpenProject instance in the Nextcloud header - **Enable unified search for tickets** allows you to search OpenProject work packages via the universal search bar in Nextcloud ![Nextcloud settings for OpenProject](nextcloud_openproject_account.png) @@ -206,7 +205,7 @@ There are two additional features related to the integration that you can enable Starting with **OpenProject Nextcloud Integration App 2.4** a work package link preview will be shown if you use Nextcloud Talk or Text apps. Please note that you will need Nextcloud 26 or higher to be able to use this feature. -You can [copy a work package link](../../work-packages/copy-move-delete/#copy-link-to-clipboard) and paste it into a text field, e.g in Nextcloud Talk or Nextcloud Collectives. Whenever you paste a a URL to a work package in a text field, a card for previewing the work package will get rendered. +You can [copy a work package link](../../work-packages/copy-move-delete/#copy-link-to-clipboard) and paste it into a text field, e.g in Nextcloud Talk or Nextcloud Collectives. Whenever you paste a a URL to a work package in a text field, a card for previewing the work package will get rendered. Alternatively you can use **/** to activate the **smart picker** and find the work package by searching. @@ -214,7 +213,7 @@ Alternatively you can use **/** to activate the **smart picker** and find the wo ![smart picker search in nextcloud](nc_smartpicker_search.png) -Once you have selected a work package to share in the talk or text app, a preview of this work package will be displayed. +Once you have selected a work package to share in the talk or text app, a preview of this work package will be displayed. ![work package preview in nextcloud](nc_smartpicker_preview.png) @@ -228,10 +227,9 @@ When a Nextcloud file or folder is linked to a work package, an OpenProject user However, all available actions depend on permissions the OpenProject user (or more precisely, the Nextcloud account tied to that user) has in Nextcloud. In other words, a user who does not have the permission to access the file in Nextcloud will also *not* be able to open, download, modify or unlink the file in OpenProject. - ## Possible errors and troubleshooting -### No permission to see this file +### No permission to see this file If you are unable to see the details of a file or are unable to open some of the files linked to a work package, it could be related to your Nextcloud account not having the necessary permissions. In such a case, you will be able to see the name, time of last modification and the name of the modifier but you will not be able to perform any further actions. To open or access these files, please contact your Nextcloud administrator or the creator of the file so that they can grant you the necessary permissions. @@ -239,7 +237,7 @@ If you are unable to see the details of a file or are unable to open some of the ### User not logged in to Nextcloud -If you see the words "Login to Nextcloud" where you would normally see a list of linked files in the Files tab in OpenProject, it is because you have logged out of (or have been automatically logged out of) Nextcloud. Alternatively, you could be logged in with a different account than the one you set up to use with OpenProject. +If you see the words "Login to Nextcloud" where you would normally see a list of linked files in the Files tab in OpenProject, it is because you have logged out of (or have been automatically logged out of) Nextcloud. Alternatively, you could be logged in with a different account than the one you set up to use with OpenProject. In this case, you will still be able to see the list of linked files, but not perform any actions. To restore full functionality, simply log back in to your Nextcloud account. diff --git a/docs/user-guide/file-management/one-drive-integration/README.md b/docs/user-guide/file-management/one-drive-integration/README.md index 9b29dce4242e..a45a8c8c3f39 100644 --- a/docs/user-guide/file-management/one-drive-integration/README.md +++ b/docs/user-guide/file-management/one-drive-integration/README.md @@ -15,9 +15,9 @@ You can use **OneDrive/SharePoint** as an integrated file storage in OpenProject This integration makes it possible for you to: - Link files and folders stored in OneDrive/SharePoint with work packages in OpenProject -- View, open and download files and folders linked to a work package via the **Files** tab +- View, open and download files and folders linked to a work package via the **Files** tab -> **Important note**: To be able to use OneDrive/SharePoint as a file storage in your project, the administrator of your instance should first have completed the [OneDrive/SharePoint integration setup](../../../system-admin-guide/integrations/one-drive). Then a project administrator can activate the integrated storage in the [File storages](../../projects/project-settings/file-storages/) for a project. +> **Important note**: To be able to use OneDrive/SharePoint as a file storage in your project, the administrator of your instance should first have completed the [OneDrive/SharePoint integration setup](../../../system-admin-guide/integrations/one-drive). Then a project administrator can activate the integrated storage in the [File storages](../../projects/project-settings/files/) for a project. | Topic | Description | | ------------------------------------------------------------ | :----------------------------------------------------------- | @@ -26,18 +26,19 @@ This integration makes it possible for you to: | [Upload files from OpenProject](#upload-files-from-openproject) | How to upload files to OneDrive/SharePoint from OpenProject | | [Download, open folders and remove links](#download-open-folders-and-remove-links) | How to download and open files and folders and remove links | | [Permissions and access control](#permissions-and-access-control) | Permissions and access control in OneDrive/SharePoint file storage | +| [Possible errors and troubleshooting](#possible-errors-and-troubleshooting) | Common errors in OneDriveS/SharePoint integration and how to troubleshoot them | ## Connect your OpenProject and OneDrive/SharePoint accounts To begin using this integration, you will need to first connect your OpenProject and Microsoft accounts. To do this, open any work package in a project where a OneDrive/SharePoint file storage has been added and enabled by an administrator and follow these steps: 1. Select any work package. Go to the **Files tab** and, within the correct file storage section, click on **Storage login** button. - + ![Login to Sharepoint storage from an OpenProject work package](openproject_onedrive_login_to_storage.png) - -2. You will see a Microsoft login prompt asking you to log in. Enter your credentials and log in. + +2. You will see a Microsoft login prompt asking you to log in. Enter your credentials and log in. 3. Once you have logged in, you will automatically return to the work package in OpenProject and see that you can now start uploading and linking files. - + ![OneDrive storage is available in an OpenProject work package](openproject_onedrive_available.png) ## Link files and folders to work packages @@ -55,7 +56,7 @@ To link a SharePoint file to the current work package, you can either: ![Select a SharePoint file or folder to link to an OpenProject work package](openproject_onedrive_link_files.png) -## Upload files from OpenProject +## Upload files from OpenProject If the file you want to link has not yet been uploaded to SharePoint, you can do so by clicking on the **Upload files** link. @@ -89,8 +90,6 @@ If a file has been deleted on the OneDrive/SharePoint file storage it will still ![A file has been deleted from the OneDrive/SharePoint file storage](oneproject_onedrive_deleted_file.png) - - ## Download, open folders and remove links If you wish to unlink any linked file or folder, hover it in the list of linked files and click on the **Unlink** icon. @@ -101,7 +100,7 @@ Respectively in order to download a file, click on the **Download icon** in the If you click the **Folder icon**, the OneDrive/SharePoint folder containing this file will open in a separate tab. -## Permissions and access control +## Permissions and access control When a file or folder from OneDrive/SharePoint is linked to a work package, an OpenProject user who has access to that work package will be able to: @@ -112,3 +111,11 @@ When a file or folder from OneDrive/SharePoint is linked to a work package, an O However, all available actions depend on permissions the OpenProject user (or more precisely, the OneDrive/SharePoint account tied to that user) has in OneDrive/SharePoint. In other words, a user who does not have the permission to access the file in OneDrive/SharePoint will also *not* be able to open, download, or modify the file in OpenProject. Please note, that with automatically managed project folders these permissions are set by OpenProject based on user permissions in OpenProject. + +## Possible errors and troubleshooting + +### No permission to see this file + +If you are unable to see the details of a file or are unable to open some of the files linked to a work package, it could be related to your OneDrive/SharePoint account not having the necessary permissions. In such a case, you will be able to see the name of file, time of last modification and the name of the modifier but you will not be able to perform any further actions. To open or access these files, please contact your OneDrive/SharePoint administrator or the creator of the file so that they can grant you the necessary permissions. + +![Error message based on missing permissions to see a file in OpenProject](openproject_onedrive_no_permission_to_view.png) diff --git a/docs/user-guide/file-management/one-drive-integration/openproject_onedrive_no_permission_to_view.png b/docs/user-guide/file-management/one-drive-integration/openproject_onedrive_no_permission_to_view.png new file mode 100644 index 000000000000..2aafb90d0523 Binary files /dev/null and b/docs/user-guide/file-management/one-drive-integration/openproject_onedrive_no_permission_to_view.png differ diff --git a/docs/user-guide/forums/README.md b/docs/user-guide/forums/README.md index a91a9d3a3c38..97af4c6e1450 100644 --- a/docs/user-guide/forums/README.md +++ b/docs/user-guide/forums/README.md @@ -10,7 +10,7 @@ keywords: forum, forums In the forum in OpenProject you can discuss topics in a project with the team: post questions, comment on it and document answers. -
    +
    **Forum** is defined as a module used to display forums and forum entries. The module has to be activated in the project settings and a forum has to be created in the forums tab in the project settings to be displayed in the side navigation.
    @@ -63,8 +63,6 @@ To add a **reply to an existing message** in a forum, click on the Subject in or Click the blue **Reply** button underneath the forum message. - - ![Forum-message-reply](Forum-message-reply.png)Enter your **Message content** what you want to add as a reply to the existing message. You can choose to also **add a file** if needed. diff --git a/docs/user-guide/gantt-chart/README.md b/docs/user-guide/gantt-chart/README.md index a12ea02c31dc..e55012c81902 100644 --- a/docs/user-guide/gantt-chart/README.md +++ b/docs/user-guide/gantt-chart/README.md @@ -12,7 +12,6 @@ keywords: gantt chart, timeline, project plan The **Gantt charts** module in OpenProject displays the work packages in a timeline. You can collaboratively create and manage your project plan, have your project timelines available to all team members and share up-to-date information with stakeholders. You can add start and finish dates and adapt it via drag and drop directly in the Gantt chart. Also, you can add dependencies, predecessors or followers within the Gantt chart.
    - | Topic | Content | |-----------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------| | [Activate the Gantt chart](#activate-the-gantt-chart) | How to activate the Gantt chart in OpenProject. | @@ -24,18 +23,17 @@ The **Gantt charts** module in OpenProject displays the work packages in a timel | [Multi project views](#multi-project-views) | Create project overarching timelines. | | [Aggregation by project](#aggregation-by-project) | How to display an aggregated view of all milestones of multiple projects. | - ## Activate the Gantt chart -A Gantt chart view can be activated either for a specific project, or on the project overarching level if you need to view the timeline for multiple projects. +A Gantt chart view can be activated either for a specific project, or on the project overarching level if you need to view the timeline for multiple projects. -For a specific project, select the **Gantt charts** module from the project module menu on the left side. +For a specific project, select the **Gantt charts** module from the project module menu on the left side. ![activate-gantt](openproject-user-guide-select-gantt-charts.png) -To view multiple projects in a single timeline, select **Gantt charts** from the **Global Modules** menu. +To view multiple projects in a single timeline, select **Gantt charts** from the **Global Modules** menu. ![Select Gantt charts from the global modules menu in OpenProject](openproject-user-guide-select-gantt-charts-global.png) @@ -43,9 +41,9 @@ Alternatively, you can also use the **Include projects** filter. ## Gantt charts views -Once you opened the Gantt charts module, the default view will show all open work packages. You can adjust the view using the filters or select one the following view options: +Once you opened the Gantt charts module, the default view will show all open work packages. You can adjust the view using the filters or select one the following view options: -![View options in OpenProject Gantt charts](openproject-user-guide-gantt-charts-views.png) +![View options in OpenProject Gantt charts](openproject-user-guide-gantt-charts-views.png) **Favorite**: lists all saved Gantt charts view that are marked as favorite @@ -60,24 +58,23 @@ Once you opened the Gantt charts module, the default view will show all open wor ## Quick context menu in Gantt chart view -Once you have selected the Gantt chart view, you can use the quick context menu. To do that, right-click on any of the work packages. +Once you have selected the Gantt chart view, you can use the quick context menu. To do that, right-click on any of the work packages. > **Note**: if you use the [work packages view](../work-packages/edit-work-package#update-a-work-package-in-a-work-package-table-view) in the **Work packages** module, the options in the quick context menu will differ slightly from the ones in the Gantt chart view. - ![Quick context menu in OpenProject Gantt chart work packages view](gantt-context-menu.png) -You can use any of the following options. +You can use any of the following options. - **Open details view** - opens the details view of a work package on the right side of the screen. - **Open fullscreen view** - opens the detailed view of a work package across the entire screen. - **Change project** - allows moving the selected work package to a different project. -- **Copy link to clipboard** - copies a short link to the selected work package to your clipboard. +- **Copy link to clipboard** - copies a short link to the selected work package to your clipboard. - **Delete** - deletes a work package. You will need to confirm the deletion. - **Indent hierarchy** - creates a child-parent relationship with the work package directly above. The work package you selected become the child work package. The work package directly above becomes the parent work package. - **Add predecessor** - adds a predecessor (it will prompt you to select a work package in Gantt view). - **Add follower** - adds a follower (it will prompt you to select a work package in Gantt view). - **Show relations** - open the details view of a work package and displays the **Relations** tab. -- **Create new child** - opens a new work package on the right side of the screen. This new work package already has a child relationship to the work package you selected. **This option will not be available if the work package type is a milestone**. +- **Create new child** - opens a new work package on the right side of the screen. This new work package already has a child relationship to the work package you selected. **This option will not be available if the work package type is a milestone**. ## Create a new element in the Gantt chart @@ -111,7 +108,6 @@ Select the item to which you want to create a dependency. The precede and follow The quickest way to remove a relation is to select **Show relations** from the quick context menu and removing the relation in the work package details view. - ![dependencies-gantt-chart](gantt-chart.gif) When work packages have a precedes/follows relationship: @@ -134,8 +130,6 @@ Scheduling modes can also affect work package relations. Read about [automatic a - A **diamond symbol** stands for a milestone. - A **bar** stands for work packages like phases and tasks. - - ## Gantt chart configuration To open the Gantt chart configuration, please open the **settings** icon with the three dots on the upper right of the work package module. @@ -181,6 +175,24 @@ For other browsers, please simply follow the browser's printing instruction to o To synchronize your work package data between OpenProject and Excel (two-way synchronization) please have a look at [this instruction](../../system-admin-guide/integrations/excel-synchronization/). +### Gantt chart PDF Export (Enterprise add-on) + +> **Note**: Gantt chart PDF export is an Enterprise add-on and can only be used with [Enterprise cloud](https://www.openproject.org/docs/enterprise-guide/enterprise-cloud-guide) or [Enterprise on-premises](https://www.openproject.org/docs/enterprise-guide/enterprise-on-premises-guide). An upgrade from the free Community edition is easy and helps support OpenProject. + +To export a Gantt chart in a PDF format click the **More** (three dots) icon in the top right corner and select *Export*. + +![Export Gantt chart option in OptionProject](openproject-user-guide-gantt-charts-export.png) + +Then select the **PDF Gantt** option. + +![Gantt chart export options in OpenProject](openproject-user-guide-gantt-pdf-gantt-icon.png) + +Configure the parameters of the PDF export, such as zoom level for the dates, column width and paper size. Then click the green **Export** button. + +![Configure PDF Gantt export in OpenProject](openproject-user-guide-gantt-pdf-gantt-options.png) + +You can now save the Gantt chart in PDF form to share with your project stakeholders or print it directly. + ## Gantt chart views ### Zoom in the Gantt chart @@ -189,25 +201,20 @@ To zoom in and zoom out in the Gantt chart view, click on the button with the ** ![Zooming into a Gantt chart in OpenProject](openproject-user-guide-gantt-charts-zoom.png) - - ### Auto zoom -Select the **auto zoom button** on top of the Gantt chart to have the best view of your Gantt chart. +Select the **auto zoom button** on top of the Gantt chart to have the best view of your Gantt chart. Please note that the **auto zoom button** may not be selectable if it has been pre-selected in the [Gantt charts configuration](#gantt-chart-configuration) ![auto-zoom-Gantt](openproject-user-guide-gantt-charts-auto-zoom.png) - - ### Zen mode The zen mode gives you more space to focus on the tasks at hand. It's almost like activating the full screen view in your browser. To exit press the *Esc* key or click on the **zen mode** symbol again. ![zen-mode-Gantt-chart](openproject-user-guide-gantt-charts-zen-mode.png) - ## Multi project views With the Gantt charts in OpenProject you can create project overarching timelines. @@ -233,7 +240,7 @@ Use the minus next to the project's name or the **collapse button** in the upper ![collapse-button](openproject-user-guide-gantt-charts-collapse-all.png) -This will give you an **aggregated view of the projects' work packages**. You can further adjust this view by using the Filter functionality, for example display work package type Bugs. +This will give you an **aggregated view of the projects' work packages**. You can further adjust this view by using the Filter functionality, for example display work package type Bugs. ![Filtering project aggregated projects Gantt chart view in OpenProject](openproject-user-guide-gantt-charts-filters.png) diff --git a/docs/user-guide/gantt-chart/gantt-chart-faq/README.md b/docs/user-guide/gantt-chart/gantt-chart-faq/README.md index e1414bb04ad2..f1522de66344 100644 --- a/docs/user-guide/gantt-chart/gantt-chart-faq/README.md +++ b/docs/user-guide/gantt-chart/gantt-chart-faq/README.md @@ -12,18 +12,18 @@ keywords: Gantt chart FAQ, time line, scheduling Make sure that you remove the relations of the milestone to other work packages. Then its date won't change when you change the timings of other work packages. For releases from 11.0.0 onwards (October 2020) you can use the [manual scheduling mode](../scheduling) for this. -## When I am working in the Gantt chart, every change seems to take quite long. +## When I am working in the Gantt chart, every change seems to take quite long. What can I do? -We understand that the loading time when working in Gantt Chart is too long for you. The reason for this is that every single action is saved. So everything is fine with your installation. We have already taken up the point with us and already have first ideas for a technical solution. The respective feature request can be found [here](https://community.openproject.org/wp/34176). +We understand that the loading time when working in Gantt Chart is too long for you. The reason for this is that every single action is saved. So everything is fine with your installation. We have already taken up the point with us and already have first ideas for a technical solution. The respective feature request can be found [here](https://community.openproject.org/wp/34176). ## Can I export the Gantt? -At the moment that's not possible, but you can use the print feature of your browser to print it as PDF (we optimized this for Google Chrome). Please find out more [here](../#how-to-print-a-gantt-chart). +At the moment that's not possible, but you can use the print feature of your browser to print it as PDF (we optimized this for Google Chrome). Please find out more [here](../#how-to-print-a-gantt-chart). The respective feature request can be found [here](https://community.openproject.org/wp/15444). ## I can no longer see my Gantt chart filters, what can I do? -Gantt charts became a separate module in OpenProject 13.3. To see the filters you created and saved earlier please select the **Gantt charts** module either from the global modules menu or from the project menu on the left. +Gantt charts became a separate module in OpenProject 13.3. To see the filters you created and saved earlier please select the **Gantt charts** module either from the global modules menu or from the project menu on the left. ## How can I build in a "buffer" (e.g. two weeks gap) between two consecutive work packages, so that even if the first one is postponed the second one always starts e.g. two weeks later? @@ -32,4 +32,4 @@ As a workaround you could create a separate work package (type) which acts as a ## Is there a critical path feature? -Unfortunately, we don't have the critical path feature yet. We have a feature request for it though and will check how to integrate it into our road map. A workaround could be to [create predecessor-successor relations](../../work-packages/work-package-relations-hierarchies/#work-package-relations) for only the work packages that are in the critical path. +Unfortunately, we don't have the critical path feature yet. We have a feature request for it though and will check how to integrate it into our road map. A workaround could be to [create predecessor-successor relations](../../work-packages/work-package-relations-hierarchies/#work-package-relations) for only the work packages that are in the critical path. diff --git a/docs/user-guide/gantt-chart/openproject-user-guide-gantt-charts-export.png b/docs/user-guide/gantt-chart/openproject-user-guide-gantt-charts-export.png new file mode 100644 index 000000000000..b0a06fbb6ca8 Binary files /dev/null and b/docs/user-guide/gantt-chart/openproject-user-guide-gantt-charts-export.png differ diff --git a/docs/user-guide/gantt-chart/openproject-user-guide-gantt-pdf-gantt-icon.png b/docs/user-guide/gantt-chart/openproject-user-guide-gantt-pdf-gantt-icon.png new file mode 100644 index 000000000000..c01fb22916b4 Binary files /dev/null and b/docs/user-guide/gantt-chart/openproject-user-guide-gantt-pdf-gantt-icon.png differ diff --git a/docs/user-guide/gantt-chart/openproject-user-guide-gantt-pdf-gantt-options.png b/docs/user-guide/gantt-chart/openproject-user-guide-gantt-pdf-gantt-options.png new file mode 100644 index 000000000000..3f1b88c1ee46 Binary files /dev/null and b/docs/user-guide/gantt-chart/openproject-user-guide-gantt-pdf-gantt-options.png differ diff --git a/docs/user-guide/gantt-chart/scheduling/README.md b/docs/user-guide/gantt-chart/scheduling/README.md index c4492753205d..52155496e00e 100644 --- a/docs/user-guide/gantt-chart/scheduling/README.md +++ b/docs/user-guide/gantt-chart/scheduling/README.md @@ -16,14 +16,12 @@ To schedule work packages in the Gantt chart there is an **automatic scheduling As the scheduling mode only affects individual work packages you can combine manual scheduling mode (top-down planning) and automatic scheduling mode (bottom-up planning) within the same project. - | Topic | Content | | ------------------------------------------------------- | ------------------------------------------------------------ | | [Automatic scheduling mode](#automatic-scheduling-mode) | What happens to work packages, when you connect them in automatic scheduling mode? | | [Manual scheduling mode](#manual-scheduling-mode) | What happens to work packages, when you connect them in manual scheduling mode? | | [Changing mode](#changing-mode) | How can I change between manual and automatic scheduling mode? | - ## Automatic scheduling mode The automatic scheduling mode is generally set as **the default mode** for new work packages. For [dependencies](../#relations-in-the-gantt-chart) between two work packages this means: @@ -49,7 +47,6 @@ Moving a child work package in the manual scheduling mode will not move the date - ## Changing mode You can **activate the manual scheduling mode** by clicking on the date of a work package and selecting the box next to "Manual scheduling". This will activate the manual scheduling mode only for the respective work package. diff --git a/docs/user-guide/home/README.md b/docs/user-guide/home/README.md index 2bafebe87e88..9b73684a28b2 100644 --- a/docs/user-guide/home/README.md +++ b/docs/user-guide/home/README.md @@ -8,7 +8,7 @@ keywords: application start page # Application Home page -On the **application home page** (start page) you will get an overview about important information. From here you can access all [global modules](./global-modules) in the left hand navigation. +On the **application home page** (start page) you will get an overview about important information. From here you can access all [global modules](./global-modules) in the left hand navigation. To get to the application home page, click on the logo in the header of the application. diff --git a/docs/user-guide/home/global-modules/README.md b/docs/user-guide/home/global-modules/README.md index 7eaf8bda69b0..09754ce320d7 100644 --- a/docs/user-guide/home/global-modules/README.md +++ b/docs/user-guide/home/global-modules/README.md @@ -9,7 +9,7 @@ keywords: global modules, project overarching modules, global index pages Global modules present an overview of the projects of which you are a member or have permissions to see. On this page, you will find a summary of all the sidebar menu entries for module across all your projects, such as **Activity, Work packages, Calendars, Boards**, etc. -To access the **Global modules** side menu, simply click on the logo in the header. +To access the **Global modules** side menu, simply click on the logo in the header. ![Navigating to global modules menu in OpenProject](open_project_user_guide_global_modules_menu.png) @@ -17,11 +17,10 @@ You can also use the grid icon in the top right corner to access the **Global mo ![Navigating to global modules menu in OpenProject via grid icon](open_project_user_guide_global_modules_menu_grid_icon.png) -> It is possible that some of the global modules are not visible to you. This will be the case if said module is not activated in the [Project settings](../../projects/project-settings/) in any of the active projects in you instance. If, for example, the **News** module is not enabled in any of the active projects, you will not see it in the **Global modules** menu. +> It is possible that some of the global modules are not visible to you. This will be the case if said module is not activated in the [Project settings](../../projects/project-settings/) in any of the active projects in you instance. If, for example, the **News** module is not enabled in any of the active projects, you will not see it in the **Global modules** menu. You can also use the grid icon in the top right corner to access the **Global modules** side menu. - ## Projects The **Projects** global module will display all projects in your OpenProject instance of which you are a member and/or have the right to see (for example as an administrator), including public projects. @@ -44,12 +43,10 @@ The **Activity** global module provides an overview of all project activities ac The timeframe for tracing and displaying activities starts with the current date. You can adjust how far back the activities should be traced by adjusting [System settings](../../../system-admin-guide/system-settings/general-settings/). -You can adjust the view by using the filters on the left menu and clicking the **Apply** button. +You can adjust the view by using the filters on the left menu and clicking the **Apply** button. >Note: **Changesets** filter comes from repositories that are managed by OpenProject. For example, if you make a commit to a GIT or SVN repository, these changes will be displayed here. At the moment this filter is only relevant for self-hosted editions. - - ## Work packages The **Work packages** global module will show a work packages table from the projects of which you are a member or have the right to view, including public projects. You can select your **Favorite** and **Default** work package filters in the left side menu. Please note that if a view is marked as favorite it will be shown in the **Favorite** section, whether it is also saved as public or private or not. @@ -74,15 +71,15 @@ The **Calendars** global module displays all calendars to which you have access, ![The Calendars global module](openproject_global_modules_calendars.png) -You can also create a new calendar directly from the global modules menu by clicking the green **+ Calendar** button. +You can also create a new calendar directly from the global modules menu by clicking the green **+ Calendar** button. ![Creating a new calendar from the Calendars global module](openproject_global_modules_add_calendar.png) -Here you can name the calendar, select a project to which the calendar should belong and set it to be public or favored. Find out more about editing calendars [here](../../calendar). +Here you can name the calendar, select a project to which the calendar should belong and set it to be public or favored. Find out more about editing calendars [here](../../calendar). ## Team planners -The **Team planners** global module will display all team planners from the projects you are a member of, have administrative privileges to see and the public ones. +The **Team planners** global module will display all team planners from the projects you are a member of, have administrative privileges to see and the public ones. ![The Team planners global module](openproject_global_modules_team_planner.png) @@ -90,11 +87,11 @@ You can also create a new team planner directly from the global modules menu by ![Creating a new team planner from the Team planners global module](openproject_global_modules_add_team_planner.png) -You can name the new team planner, select a project to which it should belong and set to be public or favored. Find out more about editing team planners [here](../../team-planner). +You can name the new team planner, select a project to which it should belong and set to be public or favored. Find out more about editing team planners [here](../../team-planner). ## Boards -The **Boards** global module will list all boards to which you have access across all projects, including public projects. +The **Boards** global module will list all boards to which you have access across all projects, including public projects. ![The Boards global module](openproject_global_modules_boards.png) @@ -102,11 +99,11 @@ You can also create a board directly from the global modules menu by clicking th ![Creating a new board the Boards global module](openproject_global_modules_add_board.png) -You can name the board, select a project to which the new board should belong and choose the board type. Find out more about editing boards [here](../../agile-boards). +You can name the board, select a project to which the new board should belong and choose the board type. Find out more about editing boards [here](../../agile-boards). ## News -The **News** global module will display all news that have been published in projects of which you are a member, have the administrative privileges to view and public projects. +The **News** global module will display all news that have been published in projects of which you are a member, have the administrative privileges to view and public projects. ![The News global module](openproject_global_modules_news.png) @@ -116,7 +113,7 @@ Read more about writing, editing and commenting on **News** in OpenProject [here The **Time and costs** global module will list time and cost reports created by you and the ones set to be public in the left hand menu. The filters you see initially will be pre-filled based on the values you used for filtering during your last session, or the default ones if you have never used them. -You can create new time and cost reports by adjusting filters, grouping criteria and units accordingly and clicking the **Apply** button. Do not forget to **Save** your report. +You can create new time and cost reports by adjusting filters, grouping criteria and units accordingly and clicking the **Apply** button. Do not forget to **Save** your report. ![The Time and costs global module](openproject_global_modules_time_costs.png) @@ -128,7 +125,7 @@ Read more about creating and editing **Time and cost reports** [here](../../time ![The Meetings global module](openproject_global_modules_meetings.png) -You can also choose to view all **Past meetings** or apply one of the filters based on your **Involvement** in a meeting. +You can also choose to view all **Past meetings** or apply one of the filters based on your **Involvement** in a meeting. You can create a new meeting directly from within the global modules menu by clicking a green **+ Meeting** button either in the top right corner at the bottom of the sidebar: diff --git a/docs/user-guide/meetings/README.md b/docs/user-guide/meetings/README.md index c850d1259be3..fc2eb976d089 100644 --- a/docs/user-guide/meetings/README.md +++ b/docs/user-guide/meetings/README.md @@ -11,8 +11,8 @@ keywords: meetings Meetings in OpenProject allow you to manage and document your project meetings, prepare a meeting agenda together with your team and document and share minutes with attendees, all in one central place.
    -**Meetings** is defined as a module that allows the organization of meetings. -**Note:** In order to be able to use the meetings plugin, the **Meetings module needs to be activated** in the [Project Settings](../projects/project-settings/modules/). +**Meetings** is defined as a module that allows the organization of meetings. +**Note:** In order to be able to use the meetings plugin, the **Meetings module needs to be activated** in the [Project Settings](../projects/project-settings/modules/).
    | Topic | Content | @@ -23,9 +23,6 @@ Meetings in OpenProject allow you to manage and document your project meetings, ## Meetings in OpenProject -You can view existing meetings within a project or create a new meeting by selecting the **Meetings** module on the left-hand project menu. Alternatively, you can access the transversal cross-project **Meetings** module from the [global modules](../home/global-modules/) menu. +You can view existing meetings within a project or create a new meeting by selecting the **Meetings** module on the left-hand project menu. Alternatively, you can access the transversal cross-project **Meetings** module from the [global modules](../home/global-modules/) menu. >With OpenProject 13.1.0 there will be two types of meetings that you can create: [dynamic](dynamic-meetings/) and [classic](classic-meetings). Please keep in mind that the ability to create classic meetings will eventually be removed from OpenProject. - - - diff --git a/docs/user-guide/meetings/classic-meetings/README.md b/docs/user-guide/meetings/classic-meetings/README.md index 84e5fcd212d9..3ffe529a6464 100644 --- a/docs/user-guide/meetings/classic-meetings/README.md +++ b/docs/user-guide/meetings/classic-meetings/README.md @@ -15,7 +15,6 @@ Meetings in OpenProject allow you to manage and document your project meetings, > *Note:* [Dynamic meetings](../dynamic-meetings) were introduced in OpenProject 13.1. At the moment, the Meetings module lets you create classic or dynamic meetings but please keep in mind that the ability to create classic meetings will eventually be removed from OpenProject. - | Topic | Content | |---------------------------------------------------------------------------|---------------------------------------------| | [Meetings in OpenProject](#meetings-in-openproject) | How to open meetings in OpenProject. | @@ -56,8 +55,6 @@ An edit screen is displayed and the meeting information can be adjusted. Do not forget to save the changes by clicking the blue **Save** button. Cancel will bring you back to the details view. - - ## Add meeting participants You can **add participants** (Invitees and Attendees) to a meeting while being in the [edit mode](#edit-a-meeting). The process is the same whether you are creating a new meeting or editing an existing one. Additionally you can record after the meeting who actually took part in it. @@ -80,7 +77,6 @@ After creating a meeting, you can set up a **meeting agenda**. 4. All changes made to the agenda are tracked. You can click the **History** button to get an overview of all the changes including the persons who made the changes. 7. At the beginning of the meeting, **Close** the agenda to prevent any other changes and provide the same basis for all meeting participants. After closing the agenda, the meeting minutes are displayed to capture the results of the meeting. - ![edit-meeting-agenda](edit-meeting-agenda.png) ## Create or edit meeting minutes @@ -101,7 +97,7 @@ To quickly notify participants about the meeting and send them a link to the mee ## Download iCalendar event -To add a meeting to a calendar, select the dropdown menu behind the three dots and select **Download iCalendar event**. You can then quickly add the meeting to your calendar or forward it other meeting participants. +To add a meeting to a calendar, select the dropdown menu behind the three dots and select **Download iCalendar event**. You can then quickly add the meeting to your calendar or forward it other meeting participants. ![Download a classic meeting as an iCalendar event in OpenProject](download-a-meeting.png) @@ -115,8 +111,6 @@ You can now edit the copied meeting and add the new details. Click the **Save** > **Note**: all the settings will be copied, except for the minutes, participants and meeting history. So if you want to keep the minutes as well, you have to copy it separately. - - ## Delete a meeting You can delete a meeting. To do so, click on the three dots in the top right corner, select **Delete meeting** and confirm your choice. diff --git a/docs/user-guide/meetings/dynamic-meetings/README.md b/docs/user-guide/meetings/dynamic-meetings/README.md index d3f099b4b097..d11b4862e5cd 100644 --- a/docs/user-guide/meetings/dynamic-meetings/README.md +++ b/docs/user-guide/meetings/dynamic-meetings/README.md @@ -8,11 +8,10 @@ keywords: meetings, dynamic meetings, agenda, minutes # Dynamic meetings management -Introduced in OpenProject 13.1, dynamic meetings offer easier meeting management, improved agenda creation and the ability to link work packages to meetings and vice-versa. +Introduced in OpenProject 13.1, dynamic meetings offer easier meeting management, improved agenda creation and the ability to link work packages to meetings and vice-versa. > **Note:** The **Meetings module needs to be activated** in the [Project Settings](../../projects/project-settings/modules/) to be able to create and edit meetings. - | Topic | Content | | ------------------------------------------------------------ | ---------------------------------------------------------- | | [Meetings in OpenProject](#meetings-in-openproject) | How to open meetings in OpenProject. | @@ -37,14 +36,15 @@ To get an overview of the meetings across multiple projects, you can select **Me ![Select meetings module from openproject global modules ](openproject_userguide_meetings_module_select.png) -The menu on the left will allow you to filter for upcoming or past meetings. You can also filter the list of the meetings based on your involvement. +The menu on the left will allow you to filter for upcoming or past meetings. You can also filter the list of the meetings based on your involvement. ![Meetings overview in openproject global modules](openproject_userguide_dynamic_meetings_overview.png) ## Create and edit dynamic meetings + ### Create a new meeting -You can either create a meeting from within a project or from the global **Meetings** module. +You can either create a meeting from within a project or from the global **Meetings** module. > *Note:* Dynamic meetings were introduced in OpenProject 13.1. At the moment, the Meetings module lets you create [classic](../classic-meetings) or dynamic meetings but please keep in mind that the ability to create [classic meetings](../classic-meetings) will eventually be removed from OpenProject. @@ -60,13 +60,12 @@ Click the blue **Create** button to save your changes. ### Edit a meeting -If you want to change the details of a meeting, for example its time or location, open the meetings details view by clicking on pencil icon next to the **Meeting details**. +If you want to change the details of a meeting, for example its time or location, open the meetings details view by clicking on pencil icon next to the **Meeting details**. ![edit-meeting](openproject_userguide_edit_dynamic_meeting.png) An edit screen will be displayed, where you can adjust the date, time, duration and location of the meeting. - ![edit-meeting](openproject_userguide_edit_screen.png) Do not forget to save the changes by clicking the green **Save** button. Cancel will bring you back to the details view. @@ -75,24 +74,59 @@ In order to edit the title of the meeting select the dropdown menu behind the th ![Edit a meeting title in OpenProject](openproject_userguid_dynamic_meeting_edit_title.png) - ### Create or edit the meeting agenda After creating a meeting, you can set up a **meeting agenda**. -You can add items to an agenda or directly link to existing work packages by selecting the desired option under the green **Add** button. You can add notes and [attachments](#meeting-attachments) to every agenda item. +You do this by adding sections, agenda items or existing work packages by selecting the desired option under the green **Add** button. You can then add notes and to each agenda item. + +![The add button with three choices: section, agenda item or work package](openproject_dynamic_meetings_add_agenda_item.png) + +#### Add an agenda section + +Sections allow you to group agenda items into blocks for better organization. + +To add a section, click on the *+ Add* button at the bottom of the agenda items and select the **Section** option. This will add a new empty section to the very end of the meeting and prompt you to give it a name. + +![Add a new section to a meeting agenda in OpenProject](openproject_dynamic_meetings_add_section.png) + +If, prior to creating your first section, your meeting already had existing [agenda items](#add-an-agenda-item), they will automatically be contained in a section called **Unnamed section**. You can rename this if you wish. + +> Note: If you use sections, all agenda items must have sections. + + ![Untitled section in OpenProject meeting](openproject_dynamic_meetings_untitled section.png) + +![Add an agenda item to a meeting section](openproject_dynamic_meetings_add_item_to_section.png) + +Sections will show the sum of all the duration of all containing items (or at least, those that have a duration specified). -![The add button with two choices: agenda item or work package](openproject_dynamic_meetings_add_agenda_item.png) +![Duration of a section in OpenProject meeting](openproject_dynamic_meetings_section_duration.png) -If you select the **Agenda item** option, you can name that item, set the anticipated duration in minutes and select a user to be displayed next to the agenda item. This could for example be a meeting or a project member that is accountable for or a presenter of this particular agenda item. By default the name of the user adding the agenda item will be pre-selected, but it can either be removed or replaced by one of the other meeting invitees. -![](openproject_userguide_add_agenda_item.png) +You can then add agenda items to specific sections by either dragging and dropping items into each, or by clicking on the **More** button (⋯) and choosing your desired action. -If you select the **Work package** option, you can link a work package by entering either a work package ID, or starting to type in a keyword, which will open a list of possible options. +This menu also lets you rename a section, move it or delete the entire section by selecting the respective option from the dropdown menu behind the **More** (⋯) icon on the right side. -![](openproject_userguide_add_work_package.png) +> Deleting a section will delete all containing agenda items. If a section contains agenda items, you will asked for confirmation before deletion. -After you have finalized the agenda, you can always edit the agenda items, add notes, move an item up or down or delete it. Clicking on the three dots on the right edge of each agenda item will display a menu of available options, including editing, copying link to clipboard, moving the agenda item within the agenda or deleting it. +![Edit or delete a section in an OpenProject meeting](openproject_dynamic_meetings_edit_section_options.png) + +You can also re-arrange sections by dragging and dropping sections up and down. If a section is moved, the agenda items will move along with it. + +#### Add an agenda item +If you select the **Agenda item** option, you can name that item, add notes, set the anticipated duration in minutes and select a user to be displayed next to the agenda item. This could for example be a meeting or a project member that is accountable for the item or someone who will present that particular topic. + +By default, when creating an agenda item, this will be pre-filled with the name of the user adding the agenda item, but it can either be removed or replaced by one of the other meeting participants. + +![Add agenda item](openproject_userguide_add_agenda_item.png) + +#### Link a work package to a meeting + +If you select the **Work package** option, you can link a work package by entering either a work package ID, or starting to type in a keyword, which will open a list of possible options. + +![Add work package](openproject_userguide_add_work_package.png) + +After you have finalized the agenda, you can always edit the agenda items, add notes, move an item up or down or delete it. Clicking on the three dots on the right edge of each agenda item will display a menu of available options, including editing, copying link to clipboard, moving the agenda item within the agenda or deleting it. ![Edit agenda in OpenProject dynamic meetings](openproject_dynamic_meetings_edit_agenda.png) @@ -106,23 +140,24 @@ The durations of each agenda item are automatically summed up. If that sum excee ### Add a work package to the agenda -There are two ways to add a work package to a meeting agenda. +There are two ways to add a work package to a meeting agenda. - **From the Meetings module**: using the **+ Add** button [add a work package agenda item](#create-or-edit-the-meeting-agenda) or - **From a particular work package**: using the **+ Add to meeting** button on the [Meetings tab](../../work-packages/add-work-packages-to-meetings) -You can add a work package to both upcoming or past meetings as long as the work package is marked **open**. +You can add a work package to both upcoming or past meetings as long as the work package is marked **open**. ![OpenProject work packages in meetings agenda](openproject_dynamic_meetings_wp_agenda.png) ## Meeting participants + ### Add meeting participants -You will see the list of all the invited project members under **Participants**. You can **add participants** (Invitees and Attendees) to a meeting in [edit mode](#edit-a-meeting). The process is the same whether you are creating a new meeting or editing an existing one. +You will see the list of all the invited project members under **Participants**. You can **add participants** (Invitees and Attendees) to a meeting in [edit mode](#edit-a-meeting). The process is the same whether you are creating a new meeting or editing an existing one. ![adding meeting participants](openproject_dynamic_meetings_add_participants.png) -You will see the list of all the project members and be able to tell, based on the check marks next to the name under the *Invited* column, who was invited. After the meeting, you can record who actually took part using the checkmarks under the Attended column. +You will see the list of all the project members and be able to tell, based on the check marks next to the name under the *Invited* column, who was invited. After the meeting, you can record who actually took part using the checkmarks under the Attended column. ![invite meeting participants](openproject_dynamic_meetings_add_new_participants.png) @@ -134,19 +169,17 @@ Click on the **Save** button to confirm the changes. You can send an email reminder to all the meeting participants. Select the dropdown by clicking on the three dots in the top right corner and select **Send email to all participants**. An email reminder with the meeting details (including a link to the meeting) is immediately sent to all invitees and attendees. -## Meeting attachments +## Meeting attachments -You can attachments in the meetings in the **Attachments** section in the right bottom corner. You can either user the **+Attach files** link to select files from your computer or drag and drop them. +You can attachments in the meetings in the **Attachments** section in the right bottom corner. You can either user the **+Attach files** link to select files from your computer or drag and drop them. -Added attachments can be added to the Notes section of agenda packages by dragging and dropping them from the Attachments section. +Added attachments can be added to the Notes section of agenda packages by dragging and dropping them from the Attachments section. ![Attachments in OpenProject dynamic meetings](openproject_dynamic_meetings_attachments.png) +## Meeting history - -## Meeting history - -You can track what changes were made to a meeting and by which user. Select the dropdown by clicking on the three dots in the top right corner and select **Meeting history**. +You can track what changes were made to a meeting and by which user. Select the dropdown by clicking on the three dots in the top right corner and select **Meeting history**. ![Select Meeting history option in OpenProject dynamic meetings](openproject_dynamic_meetings_select_meeting_history.png) @@ -162,7 +195,7 @@ Read more about [subscribing to a calendar](../../calendar/#subscribe-to-a-calen ## Close a meeting -Clicking on the **Close meeting** after the meeting is completed with lock the current state and make render it read-only. +Clicking on the **Close meeting** after the meeting is completed with lock the current state and make render it read-only. ![Close a meeting in OpenProject](openproject_userguide_close_meeting.png) @@ -174,16 +207,14 @@ Once a meeting has been closed, it can no longer be edited. Project members with ## Copy a meeting -You can copy an existing meeting. This is useful if you have recurring meetings. To copy a meeting, click on the three dots in the top right corner and select **Copy**. +You can copy an existing meeting. This is useful if you have recurring meetings. To copy a meeting, click on the three dots in the top right corner and select **Copy**. ![Copy a dynamic meeting in OpenProject](openproject_dynamic_meetings_copy_meeting.png) -A screen will open, which will allow you adjust the name, time, location and further details of the copied meeting. By default, the date for the copied meeting will be moved forward by one week from the original meeting's date. You also have an option of copying the agenda and attachments. Don't forget to **Save** the copied meeting by clicking the green **Create** button. +A screen will open, which will allow you adjust the name, time, location and further details of the copied meeting. By default, the date for the copied meeting will be moved forward by one week from the original meeting's date. You also have an option of copying the agenda and attachments. If you copy a closed meeting, the new meeting status will automatically be set to open. Don't forget to **Save** the copied meeting by clicking the green **Create** button. ![Edit details of a copied dynamic meeting in OpenProject](openproject_dynamic_meetings_copy_meeting_details.png) - - ## Delete a meeting You can delete a meeting. To do so, click on the three dots in the top right corner, select **Delete meeting** and confirm your choice. diff --git a/docs/user-guide/meetings/dynamic-meetings/openproject_dynamic_meetings_add_agenda_item.png b/docs/user-guide/meetings/dynamic-meetings/openproject_dynamic_meetings_add_agenda_item.png index fe4dfc5407a5..7e20eed2a982 100644 Binary files a/docs/user-guide/meetings/dynamic-meetings/openproject_dynamic_meetings_add_agenda_item.png and b/docs/user-guide/meetings/dynamic-meetings/openproject_dynamic_meetings_add_agenda_item.png differ diff --git a/docs/user-guide/meetings/dynamic-meetings/openproject_dynamic_meetings_add_item_to_section.png b/docs/user-guide/meetings/dynamic-meetings/openproject_dynamic_meetings_add_item_to_section.png new file mode 100644 index 000000000000..399531bb4874 Binary files /dev/null and b/docs/user-guide/meetings/dynamic-meetings/openproject_dynamic_meetings_add_item_to_section.png differ diff --git a/docs/user-guide/meetings/dynamic-meetings/openproject_dynamic_meetings_add_section.png b/docs/user-guide/meetings/dynamic-meetings/openproject_dynamic_meetings_add_section.png new file mode 100644 index 000000000000..80c32c52e605 Binary files /dev/null and b/docs/user-guide/meetings/dynamic-meetings/openproject_dynamic_meetings_add_section.png differ diff --git a/docs/user-guide/meetings/dynamic-meetings/openproject_dynamic_meetings_edit_item_in_section.png b/docs/user-guide/meetings/dynamic-meetings/openproject_dynamic_meetings_edit_item_in_section.png new file mode 100644 index 000000000000..b777ca404d63 Binary files /dev/null and b/docs/user-guide/meetings/dynamic-meetings/openproject_dynamic_meetings_edit_item_in_section.png differ diff --git a/docs/user-guide/meetings/dynamic-meetings/openproject_dynamic_meetings_edit_section_options.png b/docs/user-guide/meetings/dynamic-meetings/openproject_dynamic_meetings_edit_section_options.png new file mode 100644 index 000000000000..4651558e0b19 Binary files /dev/null and b/docs/user-guide/meetings/dynamic-meetings/openproject_dynamic_meetings_edit_section_options.png differ diff --git a/docs/user-guide/meetings/dynamic-meetings/openproject_dynamic_meetings_section_duration.png b/docs/user-guide/meetings/dynamic-meetings/openproject_dynamic_meetings_section_duration.png new file mode 100644 index 000000000000..78f35507510f Binary files /dev/null and b/docs/user-guide/meetings/dynamic-meetings/openproject_dynamic_meetings_section_duration.png differ diff --git a/docs/user-guide/meetings/dynamic-meetings/openproject_dynamic_meetings_untitled section.png b/docs/user-guide/meetings/dynamic-meetings/openproject_dynamic_meetings_untitled section.png new file mode 100644 index 000000000000..76cbd2ac56f4 Binary files /dev/null and b/docs/user-guide/meetings/dynamic-meetings/openproject_dynamic_meetings_untitled section.png differ diff --git a/docs/user-guide/meetings/dynamic-meetings/openproject_userguide_add_agenda_item.png b/docs/user-guide/meetings/dynamic-meetings/openproject_userguide_add_agenda_item.png index 074f3a2ee759..34e5d9644eb7 100644 Binary files a/docs/user-guide/meetings/dynamic-meetings/openproject_userguide_add_agenda_item.png and b/docs/user-guide/meetings/dynamic-meetings/openproject_userguide_add_agenda_item.png differ diff --git a/docs/user-guide/meetings/meetings-faq/README.md b/docs/user-guide/meetings/meetings-faq/README.md index a9271acaeba1..9d7e6dba6414 100644 --- a/docs/user-guide/meetings/meetings-faq/README.md +++ b/docs/user-guide/meetings/meetings-faq/README.md @@ -14,8 +14,12 @@ keywords: meetings, meetings faq, tickets, how to, task ## How long will the classic meetings be available? -[Classic meetings](../classic-meetings) will be deprecated with one of the future releases after 13.1. We will communicate this in advance to ensure a smooth transition for all our users. +[Classic meetings](../classic-meetings) will be deprecated with one of the future releases after 13.1. We will communicate this in advance to ensure a smooth transition for all our users. ## Can I add a meeting to a calendar? Yes, you can [download a meeting as an iCalendar event](../dynamic-meetings/#download-a-meeting-as-an-icalendar-event). + +## Are the meetings shown in calendar widgets? + +Yes, the Calendar widget on the [project overview page](../../project-overview/#calendar-widget) and [My Page](../../../getting-started/my-page/#add-widgets) displays meetings. Meetings links in this widget are clickable and open the meeting directly. \ No newline at end of file diff --git a/docs/user-guide/members/README.md b/docs/user-guide/members/README.md index d4e81a5488e4..c7e30c2f6349 100644 --- a/docs/user-guide/members/README.md +++ b/docs/user-guide/members/README.md @@ -17,7 +17,7 @@ keywords: members, project participants | [Roles and permissions](#roles-and-permissions) | How to manage roles and permissions for members. | | [Groups](#groups) | How to add members to a group and add groups to a project. | - +![Video](https://openproject-docs.s3.eu-central-1.amazonaws.com/videos/OpenProject-Invite-and-Manage-Members.mp4) ## Project members overview @@ -25,7 +25,7 @@ On the left side menu you will see **Members**. When selected, it will show a li ![Project members overview in OpenProject](members-overview.png) -Standard filters on the left side menu include the following: +Standard filters on the left side menu include the following: - **All** - returns all members and groups of the project, as well as non-members, with whom one or more work packages from this project have been shared @@ -33,22 +33,21 @@ Standard filters on the left side menu include the following: - **Invited** - returns all users that have been invited, but have not yet registered -- **Project roles** provides filters based on all the member roles that have been assigned to users in that specific project. +- **Project roles** provides filters based on all the member roles that have been assigned to users in that specific project. - **Work package shares** provides filters based on all the roles available for sharing work packages. They include: - - **All shares** - returns all users that a work package in this project has been shared with + - **All shares** - returns all users that a work package in this project has been shared with - **View** - returns all users that can view, but not edit or comment on a work package that has been shared with them - **Comment** - returns all users that are allowed to add comments to a work package that has been shared with them - **Edit** - returns all users that are permitted to edit a work package that has been shared with them - > Note: users, with whom work packages from a given project have been shared, can not be edited or deleted under **Members**. To edit or revoke their viewing rights you can click on the "Number of work package(s) in the column "Shared" (3 work packages in the example above). This will open an already filtered work package list of all work packages shared with that user. > > Another way is to navigate to **Work packages**, select the **Shared with users** filter and adjust the privileges accordingly. [Read more here](../work-packages/share-work-packages/#remove-sharing-privileges). -- **Groups** lists all the groups that have been added to this project (this filter will only be visible if a group has been added to the project). +- **Groups** lists all the groups that have been added to this project (this filter will only be visible if a group has been added to the project). > Note: members that are part of a group will also be displayed as members individually. In that case you can only edit the roles assigned to the users, but not delete him or her. If you want to delete a user that is a member of a group (also added to this project) you will have to delete the entire group and add group members individually if needed. @@ -74,19 +73,17 @@ Find out [here](../../getting-started/invite-members/#add-existing-users) how to To change the role of a member within a project, select the corresponding project and open the Members module. -To edit an existing member of a project, click the **More** icon in the list next to the member on the right and select **Manage roles**. Add and remove roles, then press the green **Change ** button so save your changes. +To edit an existing member of a project, click the **More** icon in the list next to the member on the right and select **Manage roles**. Add and remove roles, then press the green **Change** button so save your changes. ![Edit project members in OpenProject](edit-project-member.png) - - ## Remove members To remove members from a project, [select the project](../../getting-started/projects/#open-an-existing-project) for which you want to remove the members. In the project menu on the left, select the **Members** module. In the members list, click the **More** icon at the right end of the row with the corresponding member name and select Remove member. ![Remove project members in OpenProject](delete-project-member.png) -You will be asked to confirm your decision. +You will be asked to confirm your decision. ![Confirm removing a user from a project in OpenProject](confirm-user-deletion.png) @@ -96,7 +93,7 @@ If the project member you are removing has shared work packages, you will also b > Note: please keep in mind that removing project members can only be done if you have correct permissions. -> Note: a project member can be a part of the project either individually, as a member of a group, or both. The role removal will only affect the member's individual roles. All those roles obtained via a group will not be removed. To remove those group roles you can either remove the member from the group or remove the entire group from the project. +> Note: a project member can be a part of the project either individually, as a member of a group, or both. The role removal will only affect the member's individual roles. All those roles obtained via a group will not be removed. To remove those group roles you can either remove the member from the group or remove the entire group from the project. ## Revoke sharing privileges @@ -104,7 +101,7 @@ If a work package has been [shared](../work-packages/share-work-packages), you m ![Remove sharing privileges in OpenProject](openproject_user_guide_members_remove_work_package_shares.png) -> Note: a project member can be a part of the project either individually, as a member of a group, or both. The revoking action will only affect the individual work packages shares. All work package shares with the user as part of a group will not be revoked. To revoke those group shares you can either remove the member from the group or revoke the privileges from the entire group. +> Note: a project member can be a part of the project either individually, as a member of a group, or both. The revoking action will only affect the individual work packages shares. All work package shares with the user as part of a group will not be revoked. To revoke those group shares you can either remove the member from the group or revoke the privileges from the entire group. ## Roles and permissions @@ -116,8 +113,7 @@ A **role** is defined as a set of permissions defined by a unique name. Project To assign work packages to a project member, the respective user's or placeholder user's role needs to be able to be assigned work packages. This is the default setting for default roles. You can check this setting in the [Roles and Permissions section](../../system-admin-guide/users-permissions/roles-permissions/) of the system administration. - ## Groups -Users can be added to groups. A group can be added to a project. With this, all users within a group will have the corresponding role in this project. +Users can be added to groups. A group can be added to a project. With this, all users within a group will have the corresponding role in this project. Find out how to create and manage groups in OpenProject [here](../../system-admin-guide/users-permissions/groups). diff --git a/docs/user-guide/news/README.md b/docs/user-guide/news/README.md index 7c6765578301..bc513184390c 100644 --- a/docs/user-guide/news/README.md +++ b/docs/user-guide/news/README.md @@ -80,4 +80,3 @@ You can also include your latest news from a project on the Project overview pag Find out how to [configure your Project overview](../project-overview/#news-widget) page. ![latest-news-project-overview](latest-news-project-overview.png) - diff --git a/docs/user-guide/notifications/notification-settings/README.md b/docs/user-guide/notifications/notification-settings/README.md index 1c8ae5964499..ed9e5c8461ba 100644 --- a/docs/user-guide/notifications/notification-settings/README.md +++ b/docs/user-guide/notifications/notification-settings/README.md @@ -20,12 +20,11 @@ Notification settings are divided into four sections: | [Non-participating](#non-participating) | Be notified of activities on work packages in which you are not participating. | | [Project-specific](#project-specific-notifications) | Fine-tune your notification settings at the level of individual projects. | - ![A screenshot of the notification settings page](Notification-settings-12.4-overall.png) ## Participating -You participate in a work package by either being [mentioned](../../work-packages/edit-work-package/#-notification-mention), by watching it (being on the _Watchers_ list) or by being designated assignee or accountable. +You participate in a work package by either being [mentioned](../../work-packages/edit-work-package/#-notification-mention), by watching it (being on the _Watchers_ list) or by being designated assignee or accountable. By default, you will be notified of all activities in work packages in which you participate. However, you can choose to change these settings for work packages for which you are an assignee or accountable by checking or unchecking these options: @@ -41,11 +40,11 @@ Starting with 12.4, OpenProject offers notification for date alerts. > **Note**: Date alerts are an Enterprise add-on and can only be used with [Enterprise cloud](../../../enterprise-guide/enterprise-cloud-guide/) or [Enterprise on-premises](../../../enterprise-guide/enterprise-on-premises-guide/). An upgrade from the free Community edition is easy and helps support OpenProject. -Date alerts allow you to receive a notification when a start date or a finish date is approaching for a work package you are participating in (that is, for which you are assignee, accountable or a watcher). +Date alerts allow you to receive a notification when a start date or a finish date is approaching for a work package you are participating in (that is, for which you are assignee, accountable or a watcher). ![A screenshot of options for date alerts](Notification-settings-12.4-dateAlerts.png) -For **start** and **finish dates**, you can choose to be alerted the same day, 1 day before, 3 days before or a week before. +For **start** and **finish dates**, you can choose to be alerted the same day, 1 day before, 3 days before or a week before. > **Info:** Please note that these are natural days and not working days. For a work package starting on a Monday, "3 days before" would be Friday. > Date alerts are generated once a day at 1am local time. @@ -73,15 +72,13 @@ You can be notified of: > **Info:** Please note that these apply to _all_ work packages in _all_ of your projects. If you enable many of them, you may receive too many irrelevant notifications. Please use this feature with parsimony. - - ## Project-specific notifications In some cases, you may wish to fine-tune your notification settings at a project-level. This might be because you are more active in certain projects than others or because certain activities (like date alerts or the creation of new work packages) might be more important to you than others. -To add project-specific notification settings, first click on **+ Add setting for project** and select a project. +To add project-specific notification settings, first click on **+ Add setting for project** and select a project. Once you do so, you will see a table with a column for that project and and the same three sections (Participating, Date alerts, Non-participating) as your overall notification settings. You can now select and unselect any number of options from this list for more specific project-level notification settings. diff --git a/docs/user-guide/project-overview/README.md b/docs/user-guide/project-overview/README.md index e48939a4d2a1..c5d7d81f723f 100644 --- a/docs/user-guide/project-overview/README.md +++ b/docs/user-guide/project-overview/README.md @@ -8,12 +8,14 @@ keywords: project overview page # Project overview -The **Project overview** page is a dashboard with important information about your respective project(s). This page displays all relevant information for your team, such as members, news, project description, work package reports, or project status. +The **Project overview** page is a dashboard with important information about your respective project(s). This page displays all relevant information for your team, such as members, news, project description, work package reports, or project status. | Topic | Content | | ------------------------------------------------------------ | ------------------------------------------------------------ | | [What is the project overview?](#what-is-the-project-overview) | What can I do with the project overview page? | | [Project attributes](#project-attributes) | What are project attributes and how can I use them? | +| [Mark project as a favorite](#mark-a-project-as-favorite) | How can I mark a project as favorite? | +| [Archive a project](#archive-a-project) | How can I archive a project from the project overview page? | | [Widgets](#widgets) | What are widgets, and how can I add them to my project overview page? | | [Project status](#project-status) | Set your project status | | [Available project overview widgets](#available-project-overview-widgets) | What kind of widgets can I add to the project overview? | @@ -22,30 +24,55 @@ The **Project overview** page is a dashboard with important information about yo ## What is the project overview? -The project overview is a single dashboard page where all important information of a selected project can be displayed. The idea is to provide a central repository of information for the whole project team. +The project overview is a single dashboard page where all important information of a selected project can be displayed. The idea is to provide a central repository of information for the whole project team. -Project information is added to the dashboard as either [project attributes](#project-attributes) or [widgets](#widgets). +Project information is added to the dashboard as either [project attributes](#project-attributes) or [widgets](#widgets). Open the project overview by navigating to **Overview** in the project menu on the left. -![project_overview](project_overview.png) +![project_overview](openproject_user_guide_project_overview.png) ## Project attributes -**[Project attributes]**(#project-attributes) are a set of project-level custom fields that let you display certain types of information relevant to your project. +**Project attributes** are a set of project-level custom fields that let you display certain types of information relevant to your project. You will see a list of all available project attributes in a pane on the right side of of your Project overview page. They may be grouped in sections. -![Project overview page showing project attributes on the right side](openproject_user_guide_project_overview_project_attributes_section.png) +![Project overview page showing project attributes on the right side](openproject_user_guide_project_overview_project_attributes_section_new.png) To edit the value of any visible project attribute, click on the **Edit** (pencil) icon next to the name of the section containing that project attribute. A modal will be displayed with all the attributes in that section. -![Edit a project attribute section on project overview page](openproject_user_guide_project_overview_project_attributes_section_edit.png) +![Edit a project attribute section on project overview page](openproject_user_guide_project_overview_project_attributes_section_edit_new.png) Edit the values for each project attribute and click on **Save** to confirm and save your changes. >**Note:** If you are an instance admin and would like to create, modify or add project attributes, please read our [admin guide to project attributes](../../system-admin-guide/projects/project-attributes). +### Project attribute settings + +To adjust the the project attribute settings for a specific project click the **More** (three dots) icon and select *Manage project attributes*. This will lead you directly to the [project attribute settings](../projects/project-settings/project-attributes/). + +![Link to project attribute settings from project overview page in OpenProject](openproject_user_guide_project_overview_project_attributes_settings.png) + +>Note: This option is always available to instance and project administrators. It can also be activated for specific roles by enabling the *select_project_attributes* permission for that role via the [Roles and permissions page](../../system-admin-guide/users-permissions/roles-permissions/) in the administrator settings. + +## Mark a project as favorite + +You can mark the project as a *Favorite* by clicking the **Favorite** (star) icon in the upper right corner. The icon color will change to yellow and the project will be marked as favorite both on the overview page and in the projects list. Read more about [project lists](../projects/project-lists/). + +![Mark a project as favorite in OpenProject](openproject_user_guide_project_overview_mark_favorite.png) + +To remove a project from favorites click the **Favorite** icon again. + +## Archive a project +You can archive a project directly from the project overview page. To do that click the **More** (three dots) icon and select *Archive project*. + +![Archive a project on the project overview page in OpenProject](openproject_user_guide_project_overview_archive_project.png) + +>Note: This option is always available to instance and project administrators. It can also be activated for specific roles by enabling the *archive_project* permission for that role via the [Roles and permissions page](../../system-admin-guide/users-permissions/roles-permissions/) in the administrator settings. + +You can also archive a project under [project settings](../projects/#archive-a-project) or in a [projects list](../projects/project-lists/). + ## Widgets **Widgets** are small blocks of information that you can customize to display pertinent project information (such as project description, status, work package lists or graphs). You can add and remove multiple widgets, re-order them and resize them to your liking. @@ -54,24 +81,19 @@ To add a new widget: 1. Choose the place where to add the new widget. -To add a widget to the project overview, click on the **+ button** on the top right of the page. - -![Overview-add-widget](Overview-add-widget-1573564870548.png) +To add a widget to the project overview, hover around the existing widgets. The **+** icon will appear automatically. -2. Choose the location of the widget by clicking on one the **+** icons surrounding other widgets. +![Add a widget on the project overview page in OpenProject](openproject_user_guide_project_overview_add_widget_icon.png) - ![Choose widget location on the project overview page](openproject_user_guide_project_overview_select_widget_location.png) +2. Click the **+** icon and choose which kind of widget you want to add. -2. Choose which kind of widget you want to add. ![add widget](image-20191112142303373.png) - ## Project status On the project overview page, you can set your project status and give a detailed description. The project status is a widget that you add to your project overview. Find the description [below](#project-status-widget). - ## Available project overview widgets You can add various widgets to your project overview. @@ -94,9 +116,9 @@ You can also add files to be displayed or attached to your project overview. You can add a widget which displays all project members and their corresponding role for this project on the project overview page. This includes both, groups and users (placeholders or registered). -![project members](image-20191112134827557.png) +![project members](openproject_user_guide_project_overview_project_members_widget.png) -You can [add members to your project](../../getting-started/invite-members/) via the green **+ Member** button in the bottom left corner. +You can [add members to your project](../../getting-started/invite-members/) via the green **+ Member** button in the bottom left corner. The **View all members** button displays the list of project members that have been added to your project. Members can be individuals as well as entire groups. @@ -108,7 +130,7 @@ Display the latest project news in the news widget on the project overview page. ### Project description -The project description widget adds the project description to your project overview. +The project description widget adds the project description to your project overview. The description can be added or changed in the [project settings](../projects/project-settings). @@ -116,6 +138,8 @@ The description can be added or changed in the [project settings](../projects/pr ### Project details widget +> **Important note**: Project details widget was replaced by [Project attributes](#project-attributes) in [OpenProject 14.0](../../release-notes/14-0-0/) and will be removed in the future. + The project details widget displays all custom fields for projects, e.g. project owner, project due date, project number, or any other custom field for this project. The custom fields can be adapted in the [project settings](../projects/project-settings/). As a system administrator you can [create new custom fields for projects](../../system-admin-guide/custom-fields/custom-fields-projects/). @@ -178,19 +202,17 @@ To configure the work package graph, click on the three dots in the top right co Select the **Axis criteria** to be displayed on the axis of the graph, e.g. Accountable, Priority, Status, Type. -![axis criteria widget](image-20191112151252153.png) +![axis criteria widget](openproject_user_guide_project_overview_axis_criteria_widget.png) Next, select the **Chart type** how the work package information shall be displayed, e.g. as a bar graph, a line, a pie chart. -![chart type widget](image-20191112151204029.png) - **Filter** the work packages for your chart. Click on the Filter tab in order to configure the work packages to be displayed, e.g. only work packages with the priority "high". -![filter work package graph widget](image-20191112151535247.png) +![filter work package graph widget](openproject_user_guide_project_overview_filter_criteria_widget.png) -Click the blue **Apply** button to save your changes. +Click the green**Apply** button to save your changes. If you want to replicate the widgets shown in the example in the screen-shot above: diff --git a/docs/user-guide/project-overview/configure-view-widgets.png b/docs/user-guide/project-overview/configure-view-widgets.png index 4e4d76245f2f..1d7dab649039 100644 Binary files a/docs/user-guide/project-overview/configure-view-widgets.png and b/docs/user-guide/project-overview/configure-view-widgets.png differ diff --git a/docs/user-guide/project-overview/openproject_user_guide_project_overview.png b/docs/user-guide/project-overview/openproject_user_guide_project_overview.png new file mode 100644 index 000000000000..fa9c020d5bc3 Binary files /dev/null and b/docs/user-guide/project-overview/openproject_user_guide_project_overview.png differ diff --git a/docs/user-guide/project-overview/openproject_user_guide_project_overview_add_widget_icon.png b/docs/user-guide/project-overview/openproject_user_guide_project_overview_add_widget_icon.png new file mode 100644 index 000000000000..451cf3250373 Binary files /dev/null and b/docs/user-guide/project-overview/openproject_user_guide_project_overview_add_widget_icon.png differ diff --git a/docs/user-guide/project-overview/openproject_user_guide_project_overview_archive_project.png b/docs/user-guide/project-overview/openproject_user_guide_project_overview_archive_project.png new file mode 100644 index 000000000000..b0d483aea77c Binary files /dev/null and b/docs/user-guide/project-overview/openproject_user_guide_project_overview_archive_project.png differ diff --git a/docs/user-guide/project-overview/openproject_user_guide_project_overview_axis_criteria_widget.png b/docs/user-guide/project-overview/openproject_user_guide_project_overview_axis_criteria_widget.png new file mode 100644 index 000000000000..7beb8d47f60d Binary files /dev/null and b/docs/user-guide/project-overview/openproject_user_guide_project_overview_axis_criteria_widget.png differ diff --git a/docs/user-guide/project-overview/openproject_user_guide_project_overview_filter_criteria_widget.png b/docs/user-guide/project-overview/openproject_user_guide_project_overview_filter_criteria_widget.png new file mode 100644 index 000000000000..ce201c323424 Binary files /dev/null and b/docs/user-guide/project-overview/openproject_user_guide_project_overview_filter_criteria_widget.png differ diff --git a/docs/user-guide/project-overview/openproject_user_guide_project_overview_mark_favorite.png b/docs/user-guide/project-overview/openproject_user_guide_project_overview_mark_favorite.png new file mode 100644 index 000000000000..ca94f6848021 Binary files /dev/null and b/docs/user-guide/project-overview/openproject_user_guide_project_overview_mark_favorite.png differ diff --git a/docs/user-guide/project-overview/openproject_user_guide_project_overview_project_attributes_section.png b/docs/user-guide/project-overview/openproject_user_guide_project_overview_project_attributes_section.png index d30d6d6a1373..573248126412 100644 Binary files a/docs/user-guide/project-overview/openproject_user_guide_project_overview_project_attributes_section.png and b/docs/user-guide/project-overview/openproject_user_guide_project_overview_project_attributes_section.png differ diff --git a/docs/user-guide/project-overview/openproject_user_guide_project_overview_project_attributes_section_edit_new.png b/docs/user-guide/project-overview/openproject_user_guide_project_overview_project_attributes_section_edit_new.png new file mode 100644 index 000000000000..4d6e408d88dd Binary files /dev/null and b/docs/user-guide/project-overview/openproject_user_guide_project_overview_project_attributes_section_edit_new.png differ diff --git a/docs/user-guide/project-overview/openproject_user_guide_project_overview_project_attributes_section_new.png b/docs/user-guide/project-overview/openproject_user_guide_project_overview_project_attributes_section_new.png new file mode 100644 index 000000000000..e1051186e7d3 Binary files /dev/null and b/docs/user-guide/project-overview/openproject_user_guide_project_overview_project_attributes_section_new.png differ diff --git a/docs/user-guide/project-overview/openproject_user_guide_project_overview_project_attributes_settings.png b/docs/user-guide/project-overview/openproject_user_guide_project_overview_project_attributes_settings.png new file mode 100644 index 000000000000..92013e9259c2 Binary files /dev/null and b/docs/user-guide/project-overview/openproject_user_guide_project_overview_project_attributes_settings.png differ diff --git a/docs/user-guide/project-overview/openproject_user_guide_project_overview_project_members_widget.png b/docs/user-guide/project-overview/openproject_user_guide_project_overview_project_members_widget.png new file mode 100644 index 000000000000..e81ad397b600 Binary files /dev/null and b/docs/user-guide/project-overview/openproject_user_guide_project_overview_project_members_widget.png differ diff --git a/docs/user-guide/project-overview/project-overview-faq/README.md b/docs/user-guide/project-overview/project-overview-faq/README.md index 22b424056b89..b6878b2e1b02 100644 --- a/docs/user-guide/project-overview/project-overview-faq/README.md +++ b/docs/user-guide/project-overview/project-overview-faq/README.md @@ -10,5 +10,5 @@ keywords: project overview FAQ ## When I set up the overview page for a project, work packages can be arranged as a Gantt chart. I would also need this for the subprojects, how does it work? -If you have selected the "Work package table" widget in the overview page, you can select a small mini-menu at the top right of the widget and click on **Configure view**. There you can also select subprojects under *Filter*. There you can either select all subprojects, only one or several subprojects. And in the *Gantt chart* tab of the Work package table configuration, tick the box next to "Show Gantt chart". All work packages of the selected subprojects will then be shown in a common Gantt chart view. -If you want to see the individual Gantt charts of the subprojects separately, you need to add a widget to the work package table for each subproject. \ No newline at end of file +If you have selected the "Work package table" widget in the overview page, you can select a small mini-menu at the top right of the widget and click on **Configure view**. There you can also select subprojects under *Filter*. There you can either select all subprojects, only one or several subprojects. And in the *Gantt chart* tab of the Work package table configuration, tick the box next to "Show Gantt chart". All work packages of the selected subprojects will then be shown in a common Gantt chart view. +If you want to see the individual Gantt charts of the subprojects separately, you need to add a widget to the work package table for each subproject. diff --git a/docs/user-guide/project-overview/remove-widget.png b/docs/user-guide/project-overview/remove-widget.png index 35f36a12da38..98c839e8ceef 100644 Binary files a/docs/user-guide/project-overview/remove-widget.png and b/docs/user-guide/project-overview/remove-widget.png differ diff --git a/docs/user-guide/projects/README.md b/docs/user-guide/projects/README.md index 6af50ca5fbd7..e29cddeaeeb8 100644 --- a/docs/user-guide/projects/README.md +++ b/docs/user-guide/projects/README.md @@ -26,7 +26,7 @@ Your projects can be available publicly or internally. OpenProject does not limi | [Archive a project](#archive-a-project) | Find out how to archive completed projects. | | [Delete a project](#delete-a-project) | How to delete a project. | -![](https://openproject-docs.s3.eu-central-1.amazonaws.com/videos/OpenProject-Projects-Introduction.mp4) +![Video](https://openproject-docs.s3.eu-central-1.amazonaws.com/videos/OpenProject-Projects-Introduction.mp4) ## Select a project @@ -44,8 +44,6 @@ Then follow the instructions to [create a new project](../../getting-started/pro ![project settings subproject](project-settings-subproject.png) - - ## Project structure Projects build a structure in OpenProject. You can have parent projects and sub-projects. A project can represent an organizational unit of a company, e.g. to have issues separated: @@ -85,12 +83,12 @@ You can specify further advanced settings for your project. Navigate to your pro - Enter a detailed description for your project. -- You see the default project **Identifier**. The identifier will be shown in the URL. +- You see the default project **Identifier**. The identifier will be shown in the URL. **Note**: Changing the project identifier while the project is already being worked on can have major effects and is therefore not recommended. For example, repositories may not be loaded correctly and deep links may no longer work (since the project URL changes when the project identifier is changed). - You can set a project to **Public**. This means it can be accessed without signing in to OpenProject. -- Click the blue **Save** button to save your changes. +- Click the green **Save** button to save your changes. - If you like, use the autocompleter to fill in the project attributes. ![project information description status](project-information-description-status.png) @@ -106,12 +104,11 @@ Press the blue **Save** button to apply your changes. ![project settings information change hierarchy](project-settings-information-change-hierarchy.png) - ### Set a project to public If you want to set a project to public, you can do so by ticking the box next to "Public" in the [project settings](project-settings) *->Information*. -Setting a project to public will make it accessible to all people within your OpenProject instance. +Setting a project to public will make it accessible to all people within your OpenProject instance. (Should your instance be [accessible without authentication](../../system-admin-guide/authentication/authentication-settings) this option will make the project visible to the general public outside your registered users, too) @@ -121,7 +118,7 @@ You can copy an existing project by navigating to the [project settings](project ![project information copy project](project-information-copy-project.png) -Give the new project a name. Under **Copy options** select which modules and settings you want to copy and whether or not you want to notify users via email during copying. +Give the new project a name. Under **Copy options** select which modules and settings you want to copy and whether or not you want to notify users via email during copying. You can copy existing [boards](../agile-boards) (apart from the Subproject board) and the [Project overview](../project-overview/#project-overview) dashboards along with your project, too. ![project settings information copy project copy options](project-settigns-copy-project.png) @@ -140,7 +137,7 @@ Under the **Copy options** section you can select what additional project data a If you select the **File Storages: Project folders** option, both the storage and the storage folders are copied into the new project if automatically managed project folders were selected for the original file storage. For storages with manually managed project folders setup the copied storage will be referencing the same folder as the original project. -If you de-select the **File Storages: Project folders** option, the storage is copied, but no specific folder is set up. +If you de-select the **File Storages: Project folders** option, the storage is copied, but no specific folder is set up. If you de-select the **File Storages** option, no storages are copied to the new project. @@ -154,18 +151,18 @@ In order to archive a project, navigate to the [project settings](project-settin ![project settings archive project](project-settings-archive-project.png) -Then, the project cannot be selected from the project selection anymore. It is still available in the **View all projects** dashboard if you set the "Active" filter to "off" (move slider to the left). You can un-archive it there, too, using the three dots at the right end of a row. +Then, the project cannot be selected from the project selection anymore. It is still available in the **[Project lists](./project-lists)** dashboard if you set the "Active" filter to "off" (move slider to the left). You can un-archive it there, too, using the three dots at the right end of a row. ![project list filter](project-list-filter.png) +You can also archive a project directly on the [project overview page.](../project-overview/#archive-a-project) ### Delete a project -If you want to delete a project, navigate to the [Project settings](project-settings). Click the button **Delete project** on the top right of the page. +If you want to delete a project, navigate to the [Project settings](project-settings). Click the button **Delete project** on the top right of the page. ![delete a project](delete-a-project.png) -Also, you can delete a project via the [projects overview](./project-lists/). +You can also delete a project via the [projects overview list](./project-lists/). **Note**: Deleting projects is only available for System administrators. - diff --git a/docs/user-guide/projects/delete-a-project.png b/docs/user-guide/projects/delete-a-project.png index ba6a37d14f34..993756661ef0 100644 Binary files a/docs/user-guide/projects/delete-a-project.png and b/docs/user-guide/projects/delete-a-project.png differ diff --git a/docs/user-guide/projects/image-20220728200830893.png b/docs/user-guide/projects/image-20220728200830893.png index 1c08fa6019d6..92f13257bd9c 100644 Binary files a/docs/user-guide/projects/image-20220728200830893.png and b/docs/user-guide/projects/image-20220728200830893.png differ diff --git a/docs/user-guide/projects/project-information-description-status.png b/docs/user-guide/projects/project-information-description-status.png index 514905818b9f..9c623142ce4e 100644 Binary files a/docs/user-guide/projects/project-information-description-status.png and b/docs/user-guide/projects/project-information-description-status.png differ diff --git a/docs/user-guide/projects/project-list-filter.png b/docs/user-guide/projects/project-list-filter.png index 816ec641625b..b8c5d7d2e323 100644 Binary files a/docs/user-guide/projects/project-list-filter.png and b/docs/user-guide/projects/project-list-filter.png differ diff --git a/docs/user-guide/projects/project-lists/Project-list-button.png b/docs/user-guide/projects/project-lists/Project-list-button.png index 120e2c05128b..392ff19838ec 100644 Binary files a/docs/user-guide/projects/project-lists/Project-list-button.png and b/docs/user-guide/projects/project-lists/Project-list-button.png differ diff --git a/docs/user-guide/projects/project-lists/README.md b/docs/user-guide/projects/project-lists/README.md index 7c69b5cb9e79..0e281d4df8a0 100644 --- a/docs/user-guide/projects/project-lists/README.md +++ b/docs/user-guide/projects/project-lists/README.md @@ -20,10 +20,9 @@ Your projects can be available publicly or internally. OpenProject does not limi | [Export project list](#export-project-lists) | You can export the project list to XLS or CSV. | | [Project overarching reports](#project-overarching-reports) | How to create project overarching reports across multiple projects. | - ## Select project lists -There are several ways to get an overview of all your projects. You can press the **Project lists** button at the bottom of the **Select a project** menu in the top left header navigation. +There are several ways to get an overview of all your projects. You can press the **Project lists** button at the bottom of the **Select a project** menu in the top left header navigation. You can search through the projects or use the **Favorites** button to find your projects quicker. ![project lists button](Project-list-button.png) @@ -31,7 +30,7 @@ Alternatively, you can use the [**Global modules menu**](../../home/global-modul ![Select all projects from the global modules menu in OpenProject](view_all_projects_options.png) -You will then get a list of all your active projects in OpenProject. +You will then get a list of all your active projects in OpenProject. ![A list of all projects in OpenProject](projects-list.png) @@ -41,39 +40,63 @@ You can use the Project overview page to **create a multi-project status dashboa > **Please note:** Project attributes are an Enterprise add-on and will only be displayed here for Enterprise on-premises and Enterprise cloud. -Each project is displayed in a single line. For the the fields where the text is too long to be displayed completely, please use the **Expand** link. +Each project is displayed in a single line, starting with the **Favorite** column, marking favorite projects. For the the fields where the text is too long to be displayed completely, please use the **Expand** icon. ![Open a project description in the project lists view in OpenProject](expand-link-project-description.png) -With the horizontal **three dots** icon on the right side of the list you can open **further features**, such as [creating a new subproject](../#create-a-subproject), [project settings](../project-settings), [archiving a project](../#archive-a-project), [copying](../#copy-a-project) and [deleting a project](../#delete-a-project). Please note that you have to be a System Administrator in OpenProject to access these features. Find out how to un-archive projects [here](../#archive-a-project). +With the horizontal **three dots** icon on the right side of the list you can open **further features**, such as [creating a new subproject](../#create-a-subproject), [project settings](../project-settings), [add a project to favorites](../../project-overview/#mark-a-project-as-favorite), [archiving a project](../#archive-a-project), [copying](../#copy-a-project) and [deleting a project](../#delete-a-project). Please note that you have to be a System Administrator in OpenProject to access these features. Find out how to un-archive projects [here](../#archive-a-project). ![new subproject project list](new-subproject-project-list.png) -You can choose the **columns displayed by default** in the [Project lists settings](../../../system-admin-guide/projects/project-lists) in the Administration. + + +## Configure project lists view + +You can choose the **columns displayed by default** in the [Project lists settings](../../../system-admin-guide/projects/project-lists) in the Administration. You can add the columns, as well as define the order of the columns by using the **Configure view** modal. Navigate to it via the menu in the far right corner (three dots) and click **Configure view**. ![Configure view of project lists in OpenProject](configure-view-project-list.png) -A dialogue will open, allowing you to manage and reorder columns. Click **Apply** to see the changes. +A dialogue will open, allowing you to manage and reorder columns under the tab *Columns*. ![Configuration form for project lists in OpenProject](configure-view-form-project-list.png) To change the order of the displayed [project attributes](../../../system-admin-guide/projects/project-lists) (columns) follow the instructions here: [Displaying a project attribute (formerly called custom field)](../../../system-admin-guide/projects/project-lists). +Under the tab *Sort* you can select the sort order for the project lists. You can select up to three criteria and define the sorting order (ascending or descending). You will be able to change the sorting order later by clicking the column header. + +![Define sort order for project lists in OpenProject](configure-view-form-project-list-sort-order.png) + + Click **Apply** to see the changes. + +If the list that you were adjusting is a private list, you will then be able to save the changes to that list by clicking the *Save* link. Alternatively you can click the *More* icon and select the *Save as* option from the dropdown menu that will open and save it under a different name. + +**Note:** The *Save as* option in the *More* dropdown menu is always available. The *Save* action will not be visible if you are working with a static list, which can not be modified. + +![Save a project list view in OpenProject](save-link-project-list.png) + +You will then need to name the project list and click the green **Save** button. + +![Name and save a new project list in OpenProject](name-new-project-list.png) + +If it is a newly created list then it will appear under **My private project lists**, same as if you adjust the filters and save the list. + ### Project lists filters Projects can be filtered in OpenProject. The default view will list all currently active projects. Project filters include: **Active projects** - returns all projects that are active, of which you are a member or have the right to see. -**My projects** - returns all active projects that you are a member of. +**Favorite projects** - returns all projects that you marked as favorite. + +**My projects** - returns all active projects that you are a member of. **Archived projects** - returns all projects that are not active, of which you were a member or have the right to see. -**My private project lists** - shows all the project filters that you have customized and saved. +**My private project lists** - shows all the project lists that you have customized and saved. -**Project status** - includes projects filters based on a project status. +**Project status** - includes projects filters based on a project status. - **On track** - returns all active projects with the project status *On track*. - **Off track** - returns all active projects with the project status *Off track*. @@ -87,7 +110,7 @@ If you want to save this filtered list use the **Save as** link next to the info ![Save a filtered project list](save-button-filtered-view.png) -You will then need to enter the name for the filtered view and click the green **Save** button. +You will then need to enter the name for the filtered view and click the green **Save** button. ![Name and save a private projects filter in OpenProject](Name-private-projects-filter.png) @@ -101,7 +124,7 @@ You can always remove your private project lists by using the **Delete** option. ### Gantt chart view -To **display the work packages** of all your projects **in a Gantt chart** click on the **Open as Gantt view** icon on the upper right. This is a shortcut to quickly get to the report described in the [section below](#project-overarching-reports). +To **display the work packages** of all your projects **in a Gantt chart** click on the **Open as Gantt view** icon on the upper right. This is a shortcut to quickly get to the report described in the [section below](#project-overarching-reports). The Gantt chart view can be configured in the [System settings](../../../system-admin-guide/projects/project-lists) in the Administration. @@ -111,7 +134,7 @@ Alternatively you can also select the [Gantt charts from the global modules menu ### Overall activity -Besides the Gantt chart view and the filter function for the project lists, you can also access the activity of all users in all active projects. +Besides the Gantt chart view and the filter function for the project lists, you can also access the activity of all users in all active projects. ![overall activity button](overall-activity-link.png) @@ -123,8 +146,6 @@ By selecting *Overall activity* you can open a view in which all the latest glob ![overall activity meeting filter](actvity-global-filter.png) - - ## Export project lists You can export a project list by clicking on the three dots in the upper right hand corner and selecting > **Export**. @@ -139,7 +160,7 @@ It can be exported as .xls or .csv. ## Project overarching reports -Often you need to see information about more than one project at once and want to create project overarching reports. +Often you need to see information about more than one project at once and want to create project overarching reports. Click on the **Modules** icon with the nine squares in the header navigation. These are the [global modules in OpenProject](../../home/global-modules/). diff --git a/docs/user-guide/projects/project-lists/configure-view-form-project-list-sort-order.png b/docs/user-guide/projects/project-lists/configure-view-form-project-list-sort-order.png new file mode 100644 index 000000000000..c35bc17bb417 Binary files /dev/null and b/docs/user-guide/projects/project-lists/configure-view-form-project-list-sort-order.png differ diff --git a/docs/user-guide/projects/project-lists/configure-view-form-project-list.png b/docs/user-guide/projects/project-lists/configure-view-form-project-list.png index 3240d3b13de2..8a011e37b732 100644 Binary files a/docs/user-guide/projects/project-lists/configure-view-form-project-list.png and b/docs/user-guide/projects/project-lists/configure-view-form-project-list.png differ diff --git a/docs/user-guide/projects/project-lists/configure-view-project-list.png b/docs/user-guide/projects/project-lists/configure-view-project-list.png index 8ffa1b67f883..37361fd96d22 100644 Binary files a/docs/user-guide/projects/project-lists/configure-view-project-list.png and b/docs/user-guide/projects/project-lists/configure-view-project-list.png differ diff --git a/docs/user-guide/projects/project-lists/expand-link-project-description.png b/docs/user-guide/projects/project-lists/expand-link-project-description.png index e59f128607bd..45f804117434 100644 Binary files a/docs/user-guide/projects/project-lists/expand-link-project-description.png and b/docs/user-guide/projects/project-lists/expand-link-project-description.png differ diff --git a/docs/user-guide/projects/project-lists/name-new-project-list.png b/docs/user-guide/projects/project-lists/name-new-project-list.png new file mode 100644 index 000000000000..fbcdb8fa1420 Binary files /dev/null and b/docs/user-guide/projects/project-lists/name-new-project-list.png differ diff --git a/docs/user-guide/projects/project-lists/new-subproject-project-list.png b/docs/user-guide/projects/project-lists/new-subproject-project-list.png index b0c06a445ed9..35594ea2fddf 100644 Binary files a/docs/user-guide/projects/project-lists/new-subproject-project-list.png and b/docs/user-guide/projects/project-lists/new-subproject-project-list.png differ diff --git a/docs/user-guide/projects/project-lists/private-project-list.png b/docs/user-guide/projects/project-lists/private-project-list.png new file mode 100644 index 000000000000..e777753bd727 Binary files /dev/null and b/docs/user-guide/projects/project-lists/private-project-list.png differ diff --git a/docs/user-guide/projects/project-lists/projects-list.png b/docs/user-guide/projects/project-lists/projects-list.png index b1d14b79350e..81820a4c3df2 100644 Binary files a/docs/user-guide/projects/project-lists/projects-list.png and b/docs/user-guide/projects/project-lists/projects-list.png differ diff --git a/docs/user-guide/projects/project-lists/save-link-project-list.png b/docs/user-guide/projects/project-lists/save-link-project-list.png new file mode 100644 index 000000000000..a7bf3b8976bd Binary files /dev/null and b/docs/user-guide/projects/project-lists/save-link-project-list.png differ diff --git a/docs/user-guide/projects/project-settings-archive-project.png b/docs/user-guide/projects/project-settings-archive-project.png index f7322de982de..179e028fd302 100644 Binary files a/docs/user-guide/projects/project-settings-archive-project.png and b/docs/user-guide/projects/project-settings-archive-project.png differ diff --git a/docs/user-guide/projects/project-settings-subproject.png b/docs/user-guide/projects/project-settings-subproject.png index 99853c293f10..0f7f8ff96c17 100644 Binary files a/docs/user-guide/projects/project-settings-subproject.png and b/docs/user-guide/projects/project-settings-subproject.png differ diff --git a/docs/user-guide/projects/project-settings/README.md b/docs/user-guide/projects/project-settings/README.md index 432ef4abd4d9..7cf84414cb62 100644 --- a/docs/user-guide/projects/project-settings/README.md +++ b/docs/user-guide/projects/project-settings/README.md @@ -15,7 +15,6 @@ Open a project via the Select a project drop-down menu and navigate to -> *Proje > **Note**: You have to be a project administrator in order to see and access the project settings. - ## Overview | Topic | Content | @@ -30,5 +29,4 @@ Open a project via the Select a project drop-down menu and navigate to -> *Proje | [Repository](repository) | Activate and manage a SVN or GIT repository for a project. | | [Activities (time tracking)](activities-time-tracking) | Activate or deactivate Activities (for time tracking) in a project. | | [Backlogs settings](backlogs-settings) | Manage backlogs settings for a project. | -| [File storages](file-storages) | Manage the storages connected to the project and add a project folder. | - +| [Files](files) | Manage the storages connected to the project, add project folders and activate manual attachment uploads. | diff --git a/docs/user-guide/projects/project-settings/activities-time-tracking/README.md b/docs/user-guide/projects/project-settings/activities-time-tracking/README.md index 76b935fa4a5f..2e8cc40825e3 100644 --- a/docs/user-guide/projects/project-settings/activities-time-tracking/README.md +++ b/docs/user-guide/projects/project-settings/activities-time-tracking/README.md @@ -18,4 +18,3 @@ Navigate to *Project settings -> Time tracking activities*. Select the activities which you want to activate for time tracking in your project. Press the blue **Save** button to apply your changes. ![time tracking activities](image-20200211134150920.png) - diff --git a/docs/user-guide/projects/project-settings/backlogs-settings/README.md b/docs/user-guide/projects/project-settings/backlogs-settings/README.md index 7cb1ab2ba389..7b7a13336a2e 100644 --- a/docs/user-guide/projects/project-settings/backlogs-settings/README.md +++ b/docs/user-guide/projects/project-settings/backlogs-settings/README.md @@ -20,4 +20,3 @@ Press the blue **Save** button to apply your changes. ![manage backlogs settings](image-20200211134305495.png) The **Rebuild positions button** for the backlogs re-calculates the position of a work package in the product backlog. - diff --git a/docs/user-guide/projects/project-settings/custom-fields/README.md b/docs/user-guide/projects/project-settings/custom-fields/README.md index 7466718d418b..bc919b5addbb 100644 --- a/docs/user-guide/projects/project-settings/custom-fields/README.md +++ b/docs/user-guide/projects/project-settings/custom-fields/README.md @@ -7,7 +7,7 @@ keywords: custom fields, activate work package custom field --- # Enable custom fields in projects -**Custom fields for work packages can be activated or deactivated in a project**. +**Custom fields for work packages can be activated or deactivated in a project**.
    **Custom fields** are defined as additional attribute fields which can be added to existing attribute fields. The different sections that can use custom fields are work packages, spent time, projects, versions, users, groups, activities (time tracking), and work package priorities. diff --git a/docs/user-guide/projects/project-settings/file-storages/file-storages-available-in-project.png b/docs/user-guide/projects/project-settings/file-storages/file-storages-available-in-project.png deleted file mode 100644 index 57ea928a69ab..000000000000 Binary files a/docs/user-guide/projects/project-settings/file-storages/file-storages-available-in-project.png and /dev/null differ diff --git a/docs/user-guide/projects/project-settings/file-storages/onedrive-storage-add-folders-new.png b/docs/user-guide/projects/project-settings/file-storages/onedrive-storage-add-folders-new.png deleted file mode 100644 index b6389a000168..000000000000 Binary files a/docs/user-guide/projects/project-settings/file-storages/onedrive-storage-add-folders-new.png and /dev/null differ diff --git a/docs/user-guide/projects/project-settings/file-storages/storage-add-new.png b/docs/user-guide/projects/project-settings/file-storages/storage-add-new.png deleted file mode 100644 index 9244de20f755..000000000000 Binary files a/docs/user-guide/projects/project-settings/file-storages/storage-add-new.png and /dev/null differ diff --git a/docs/user-guide/projects/project-settings/file-storages/storage-add-project-folder.png b/docs/user-guide/projects/project-settings/file-storages/storage-add-project-folder.png deleted file mode 100644 index bd76ba31a2ec..000000000000 Binary files a/docs/user-guide/projects/project-settings/file-storages/storage-add-project-folder.png and /dev/null differ diff --git a/docs/user-guide/projects/project-settings/file-storages/storage-delete.png b/docs/user-guide/projects/project-settings/file-storages/storage-delete.png deleted file mode 100644 index 53f5163fdaf4..000000000000 Binary files a/docs/user-guide/projects/project-settings/file-storages/storage-delete.png and /dev/null differ diff --git a/docs/user-guide/projects/project-settings/file-storages/storage-edit.png b/docs/user-guide/projects/project-settings/file-storages/storage-edit.png deleted file mode 100644 index fe2533444dbb..000000000000 Binary files a/docs/user-guide/projects/project-settings/file-storages/storage-edit.png and /dev/null differ diff --git a/docs/user-guide/projects/project-settings/file-storages/storage-list-edit-delete.png b/docs/user-guide/projects/project-settings/file-storages/storage-list-edit-delete.png deleted file mode 100644 index d1d1f5da7b10..000000000000 Binary files a/docs/user-guide/projects/project-settings/file-storages/storage-list-edit-delete.png and /dev/null differ diff --git a/docs/user-guide/projects/project-settings/file-storages/storage-list-member-status.png b/docs/user-guide/projects/project-settings/file-storages/storage-list-member-status.png deleted file mode 100644 index 42a776373d8a..000000000000 Binary files a/docs/user-guide/projects/project-settings/file-storages/storage-list-member-status.png and /dev/null differ diff --git a/docs/user-guide/projects/project-settings/file-storages/storage-list-members.png b/docs/user-guide/projects/project-settings/file-storages/storage-list-members.png deleted file mode 100644 index 90d4dc311548..000000000000 Binary files a/docs/user-guide/projects/project-settings/file-storages/storage-list-members.png and /dev/null differ diff --git a/docs/user-guide/projects/project-settings/file-storages/storage_delete_icon.png b/docs/user-guide/projects/project-settings/file-storages/storage_delete_icon.png deleted file mode 100644 index c46c42785c50..000000000000 Binary files a/docs/user-guide/projects/project-settings/file-storages/storage_delete_icon.png and /dev/null differ diff --git a/docs/user-guide/projects/project-settings/file-storages/README.md b/docs/user-guide/projects/project-settings/files/README.md similarity index 81% rename from docs/user-guide/projects/project-settings/file-storages/README.md rename to docs/user-guide/projects/project-settings/files/README.md index e5dc87166037..0d33534bd44b 100644 --- a/docs/user-guide/projects/project-settings/file-storages/README.md +++ b/docs/user-guide/projects/project-settings/files/README.md @@ -9,25 +9,29 @@ keywords: file storages, project folder, storages > **Info**: Before a storage service can be added to a project, an administrator must first set up [Nextcloud integration](../../../../system-admin-guide/integrations/nextcloud/) or [OneDrive/SharePoint integration](../../../../system-admin-guide/integrations/one-drive/) with OpenProject. -| Topic | Description | -|------------------------------------------------------------------------------------------------------------------|:--------------------------------------------------| -| [Activate File Storages module](#activate-file-storages-module) | Activate File Storages module in a project | -| [Add Nextcloud storage](#add-a-nextcloud-storage-to-a-project) | Add your Nextcloud storage to a project | -| [Nextcloud and project folders](#project-folders) | How to manage Nextcloud project folders | -| [Edit and delete Nextcloud storage](#edit-an-existing-nextcloud-storage) | Edit and delete an existing Nextcloud storage | +| Topic | Description | +| ------------------------------------------------------------ | :------------------------------------------------ | +| [Files module overview](#files-module-overview) | Files module explained | +| [Add Nextcloud storage](#add-a-nextcloud-storage-to-a-project) | Add your Nextcloud storage to a project | +| [Nextcloud and project folders](#project-folders) | How to manage Nextcloud project folders | +| [Edit and delete Nextcloud storage](#edit-an-existing-nextcloud-storage) | Edit and delete an existing Nextcloud storage | | [Add OneDrive/SharePoint storage to a project](#add-a-onedrivesharepoint-storage-to-a-project-enterprise-add-on) | Add your OneDrive/SharePoint storage to a project | -## Activate File Storages module +## Files module overview -Once you are certain that an administrator has set up a file storage integration (Nextcloud or OneDrive/SharePoint), navigate to any existing project in your OpenProject instance and click on **Project settings -> Modules**. There, activate the **File Storages** module by clicking on the checkbox next to it and then clicking on **Save**. +Under the **Files** module you will be able to manage external file storages, such as Nextcloud or OneDrive/SharePoint and manage attachments upload under *Files* tab in work packages. Navigate to **Project settings -> Files** to get here. + +## Show attachments in the work packages files tab + +To activate or de-activate the attachments being shown under **Files** tab in work packages, navigate to *Project settings > Files* and select the *Attachments* tab. Here you can decide whether the attachments option will be shown under *Files* tab of work packages detailed view for a specific project. + +![Show attachments in the work packages files tab in OpenProject](project-settings-attachments.png) -![List of modules activated for a project](project-modules.png) -A new menu item **Files storages** will appear on the left side menu. ## Add a new storage to a project -Click on this new **Files storages** menu entry. It will take you to a page titled **File storages available in this project**, which will initially be empty. +Click on the **External file storages** tab under **Files**. It will take you to a page showing an overview of all external file storages available in this project, which will initially be empty. Click on **+ Storage** or the **+** icon below the table. @@ -49,19 +53,14 @@ Here you can choose which kind of OneDrive/SharePoint project folder will be the 1. **No specific folder**: By default, each user will start at the drive root when they upload a file or select files for linking. 2. **New folder with automatically managed permissions**: This will automatically create a folder for this project and manage the access permissions for each project member. Each project member will automatically have access to this folder according to the user permissions defined in [File storages permissions](../../../../system-admin-guide/users-permissions/roles-permissions/#permissions). This option will only be available if the system administrator has [set up the storage with automatically managed folders](../../../../system-admin-guide/integrations/one-drive/). -3. **Existing folder with manually managed permissions**: Once you selected this option, you can designate an existing folder as the project folder for this project using the button **Select folder**. The permissions are however not automatically managed, **instead the folder and its content inherits the permissions as configured in the SharePoint site or drive**. The administrator needs to manually ensure relevant users have access. The selected folder can be used by multiple projects. - +3. **Existing folder with manually managed permissions**: Once you selected this option, you can designate an existing folder as the project folder for this project using the button **Select folder**. The permissions are however not automatically managed, **instead the folder and its content inherits the permissions as configured in the SharePoint site or drive**. The administrator needs to manually ensure relevant users have access. The selected folder can be used by multiple projects. Click on **Add** to add your new OneDrive/SharePoint file storage to this project. -![SharePoint/OneDrive file storage is added to an OpenProject project](sharepoint-storage-set.png) - -The SharePoint file storage is now available to all work packages in this project. +The SharePoint file storage is now available to all work packages in this project. > **Note:** Please refer to the [OneDrive/SharePoint user guide](../../../file-management/one-drive-integration) for further instructions on using the integration at a user level. - - ## Add a Nextcloud storage to a project If you have selected the Nextcloud option in the previous step of storage selection, you will now see the **Project folder** options. @@ -78,17 +77,14 @@ In the last step of the process, you will be able to choose which kind of projec Click on **Add** to add your new Nextcloud file storage to this project. -![List of project storages](storage-list.png) +The Nextcloud file storage is now available to all work packages in this project. -The Nextcloud file storage is now available to all work packages in this project. - -> **Note:** For information on how to use the file storage (link Nextcloud user accounts at a user level, link files to a work package, view and download linked files, unlink files), please read our [Nextcloud integration user guide](../../../file-management/nextcloud-integration/). +> **Note:** For information on how to use the file storage (link Nextcloud user accounts at a user level, link files to a work package, view and download linked files, unlink files), please read our [Nextcloud integration user guide](../../../file-management/nextcloud-integration/). If you do not yet have an access token for the file storage in a project, you will be prompted to log into your file storage. You can choose to login immediately to establish the connection or to do it later. ![OAuth for file storages in OpenProject project settings](file-storages-oauth-nudge-nextcloud.png) - ### Project folder member connection status As a project administrator you can see which of the project members have access to the automatically managed folders for Nextcloud integration. To see the list of users click on the users icon on the right side of the list. diff --git a/docs/user-guide/projects/project-settings/files/file-storages-available-in-project.png b/docs/user-guide/projects/project-settings/files/file-storages-available-in-project.png new file mode 100644 index 000000000000..344b9e6bbd0a Binary files /dev/null and b/docs/user-guide/projects/project-settings/files/file-storages-available-in-project.png differ diff --git a/docs/user-guide/projects/project-settings/file-storages/file-storages-oauth-nudge-nextcloud.png b/docs/user-guide/projects/project-settings/files/file-storages-oauth-nudge-nextcloud.png similarity index 100% rename from docs/user-guide/projects/project-settings/file-storages/file-storages-oauth-nudge-nextcloud.png rename to docs/user-guide/projects/project-settings/files/file-storages-oauth-nudge-nextcloud.png diff --git a/docs/user-guide/projects/project-settings/files/onedrive-storage-add-folders-new.png b/docs/user-guide/projects/project-settings/files/onedrive-storage-add-folders-new.png new file mode 100644 index 000000000000..02978bead2fe Binary files /dev/null and b/docs/user-guide/projects/project-settings/files/onedrive-storage-add-folders-new.png differ diff --git a/docs/user-guide/projects/project-settings/file-storages/onedrive-storage-add-folders.png b/docs/user-guide/projects/project-settings/files/onedrive-storage-add-folders.png similarity index 100% rename from docs/user-guide/projects/project-settings/file-storages/onedrive-storage-add-folders.png rename to docs/user-guide/projects/project-settings/files/onedrive-storage-add-folders.png diff --git a/docs/user-guide/projects/project-settings/file-storages/project-modules.png b/docs/user-guide/projects/project-settings/files/project-modules.png similarity index 100% rename from docs/user-guide/projects/project-settings/file-storages/project-modules.png rename to docs/user-guide/projects/project-settings/files/project-modules.png diff --git a/docs/user-guide/projects/project-settings/files/project-settings-attachments.png b/docs/user-guide/projects/project-settings/files/project-settings-attachments.png new file mode 100644 index 000000000000..edf2824a947e Binary files /dev/null and b/docs/user-guide/projects/project-settings/files/project-settings-attachments.png differ diff --git a/docs/user-guide/projects/project-settings/file-storages/sharepoint-storage-set.png b/docs/user-guide/projects/project-settings/files/sharepoint-storage-set.png similarity index 100% rename from docs/user-guide/projects/project-settings/file-storages/sharepoint-storage-set.png rename to docs/user-guide/projects/project-settings/files/sharepoint-storage-set.png diff --git a/docs/user-guide/projects/project-settings/files/storage-add-new.png b/docs/user-guide/projects/project-settings/files/storage-add-new.png new file mode 100644 index 000000000000..958c2f1bc388 Binary files /dev/null and b/docs/user-guide/projects/project-settings/files/storage-add-new.png differ diff --git a/docs/user-guide/projects/project-settings/files/storage-add-project-folder.png b/docs/user-guide/projects/project-settings/files/storage-add-project-folder.png new file mode 100644 index 000000000000..232575cbdada Binary files /dev/null and b/docs/user-guide/projects/project-settings/files/storage-add-project-folder.png differ diff --git a/docs/user-guide/projects/project-settings/files/storage-delete.png b/docs/user-guide/projects/project-settings/files/storage-delete.png new file mode 100644 index 000000000000..e1573d991014 Binary files /dev/null and b/docs/user-guide/projects/project-settings/files/storage-delete.png differ diff --git a/docs/user-guide/projects/project-settings/files/storage-edit.png b/docs/user-guide/projects/project-settings/files/storage-edit.png new file mode 100644 index 000000000000..f24426c63b2f Binary files /dev/null and b/docs/user-guide/projects/project-settings/files/storage-edit.png differ diff --git a/docs/user-guide/projects/project-settings/files/storage-list-edit-delete.png b/docs/user-guide/projects/project-settings/files/storage-list-edit-delete.png new file mode 100644 index 000000000000..b8255807a8d9 Binary files /dev/null and b/docs/user-guide/projects/project-settings/files/storage-list-edit-delete.png differ diff --git a/docs/user-guide/projects/project-settings/files/storage-list-member-status.png b/docs/user-guide/projects/project-settings/files/storage-list-member-status.png new file mode 100644 index 000000000000..f802d402605e Binary files /dev/null and b/docs/user-guide/projects/project-settings/files/storage-list-member-status.png differ diff --git a/docs/user-guide/projects/project-settings/files/storage-list-members.png b/docs/user-guide/projects/project-settings/files/storage-list-members.png new file mode 100644 index 000000000000..7b321f224089 Binary files /dev/null and b/docs/user-guide/projects/project-settings/files/storage-list-members.png differ diff --git a/docs/user-guide/projects/project-settings/file-storages/storage-list.png b/docs/user-guide/projects/project-settings/files/storage-list.png similarity index 100% rename from docs/user-guide/projects/project-settings/file-storages/storage-list.png rename to docs/user-guide/projects/project-settings/files/storage-list.png diff --git a/docs/user-guide/projects/project-settings/files/storage_delete_icon.png b/docs/user-guide/projects/project-settings/files/storage_delete_icon.png new file mode 100644 index 000000000000..61a596b71b98 Binary files /dev/null and b/docs/user-guide/projects/project-settings/files/storage_delete_icon.png differ diff --git a/docs/user-guide/projects/project-settings/modules/Modules-overview.png b/docs/user-guide/projects/project-settings/modules/Modules-overview.png index ab551d82deee..ae4141ac6b32 100644 Binary files a/docs/user-guide/projects/project-settings/modules/Modules-overview.png and b/docs/user-guide/projects/project-settings/modules/Modules-overview.png differ diff --git a/docs/user-guide/projects/project-settings/project-attributes/README.md b/docs/user-guide/projects/project-settings/project-attributes/README.md index f8fa2a598c3d..a956cf636de6 100644 --- a/docs/user-guide/projects/project-settings/project-attributes/README.md +++ b/docs/user-guide/projects/project-settings/project-attributes/README.md @@ -8,17 +8,17 @@ keywords: project attributes, project settings, enable, disable, project admin # Project attributes -**Project attributes**are a set of project-level custom fields that let you display certain types of information relevant to your project in the [Project overview](../../../project-overview) page. +**Project attributes**are a set of project-level custom fields that let you display certain types of information relevant to your project in the [Project overview](../../../project-overview) page. -This guide is aimed at project administrators who want to enable or disable certain project attributes for their project. +This guide is aimed at project administrators who want to enable or disable certain project attributes for their project. >**Note:** If you are an instance admin and would like to create, modify or add project attributes, please read our [admin guide to project attributes](../../../../system-admin-guide/projects/project-attributes). -Navigate to **Project settings** → **Project attributes**. +Navigate to **Project settings** → **Project attributes**. ![Project attribute list in Project settings](open_project_user_guide_project_settings_project_attributes_list.png) -Here, you will see a list of all existing project attributes and sections. +Here, you will see a list of all existing project attributes and sections. You can use the **On/Off toggle** of each project attribute to enable or disable it in your project. Disabled project attributes are not visible in the [Project Overview](../../../project-overview) page. @@ -26,4 +26,4 @@ You can also use the **Enable all** and **Disable all** buttons visible to the r If your instance has a particularly long list of project attributes, you can use the search bar at the top to find specific ones. ->**Note**: The project settings page for project attributes only lets you enable or disable certain attributes. It does *not* let you set the values for each. To do this, go to the [Project Overview](../../../project-overview) page. \ No newline at end of file +>**Note**: The project settings page for project attributes only lets you enable or disable certain attributes. It does *not* let you set the values for each. To do this, go to the [Project Overview](../../../project-overview) page. diff --git a/docs/user-guide/projects/project-settings/required-disk-storage/README.md b/docs/user-guide/projects/project-settings/required-disk-storage/README.md index 450cfe5200e7..b840c60aa92a 100644 --- a/docs/user-guide/projects/project-settings/required-disk-storage/README.md +++ b/docs/user-guide/projects/project-settings/required-disk-storage/README.md @@ -7,6 +7,6 @@ keywords: required storage, project folder, storages --- # Required disk storage -**Required disk storage** shows the storage space on your servers currently used by the selected project. +**Required disk storage** shows the storage space on your servers currently used by the selected project. ![Required disk storage in OpenProject settings](openproject-user-guide-project-settings-required-disk-storage.png) diff --git a/docs/user-guide/projects/project-settings/versions/README.md b/docs/user-guide/projects/project-settings/versions/README.md index a8e005675754..aa1d9c23e016 100644 --- a/docs/user-guide/projects/project-settings/versions/README.md +++ b/docs/user-guide/projects/project-settings/versions/README.md @@ -43,8 +43,6 @@ Please note: You can only edit versions (i.e. edit icon visible) in their origin ![User-guide-project-settings-edit-versions](User-guide-project-settings-edit-versions.png) - - ## Close a version To close a version, open the details view of a version and set the **Status** to *Closed*. @@ -59,4 +57,4 @@ There are (of course) a few differences between open, locked and closed versions - **Locked version**: No work packages can be added or removed. The version is not visible in the Backlogs module anymore. The version is still visible in the Roadmap module. Use case: E.g. the scope of a new software release or a sprint has been decided and should not be changed anymore. It is currently being worked on. - **Closed version**: No work packages can be added or removed. The version is not visible in the Backlogs module any more. It will also not be shown in the Roadmap module unless you explicitly filter for it. - Use case: A closed version is meant as a completed version, e.g. the new software release mentioned earlier has been finished and you're working on the next one. \ No newline at end of file + Use case: A closed version is meant as a completed version, e.g. the new software release mentioned earlier has been finished and you're working on the next one. diff --git a/docs/user-guide/projects/project-settings/work-package-categories/README.md b/docs/user-guide/projects/project-settings/work-package-categories/README.md index 6424499f841c..2dd827f09360 100644 --- a/docs/user-guide/projects/project-settings/work-package-categories/README.md +++ b/docs/user-guide/projects/project-settings/work-package-categories/README.md @@ -33,4 +33,4 @@ From the list of categories you can choose a category to edit or delete. 2. Press the **delete** button to delete a category. - ![User-guide-project-settings-edit-category](User-guide-project-settings-edit-category.png) \ No newline at end of file + ![User-guide-project-settings-edit-category](User-guide-project-settings-edit-category.png) diff --git a/docs/user-guide/projects/project-settings/work-package-types/README.md b/docs/user-guide/projects/project-settings/work-package-types/README.md index 482376a4257e..a225254b4289 100644 --- a/docs/user-guide/projects/project-settings/work-package-types/README.md +++ b/docs/user-guide/projects/project-settings/work-package-types/README.md @@ -7,7 +7,7 @@ keywords: work package types --- # Work package types -**Activate or deactivate work package types for a project**. +**Activate or deactivate work package types for a project**. Select the respective project via the project drop-down menu at the top left in the header navigation and choose -> *Project settings* -> *Work package types* in the project menu. ![project settings work package types](image-20200211133405469.png) @@ -16,4 +16,4 @@ Check the different types which you want to enable for your project. In the tabl Press the blue **Save** button to confirm your changes. -[Work package types can be managed](../../../../system-admin-guide/manage-work-packages/work-package-types) in the System *Administration* -> *Work packages* -> *Types*. \ No newline at end of file +[Work package types can be managed](../../../../system-admin-guide/manage-work-packages/work-package-types) in the System *Administration* -> *Work packages* -> *Types*. diff --git a/docs/user-guide/projects/project-templates/README.md b/docs/user-guide/projects/project-templates/README.md index 384896f23d7f..1683c8ffbf65 100644 --- a/docs/user-guide/projects/project-templates/README.md +++ b/docs/user-guide/projects/project-templates/README.md @@ -9,7 +9,7 @@ keywords: project templates Project templates can be used for several projects that are similar in structure and members. Creating project templates can save time when creating new projects. -## Create a project template +## Create a project template You can create a project template in OpenProject by [creating a new project](../../../getting-started/projects/#create-a-new-project) and configuring your project to your needs. Name the project so you can identify it as a template, e.g. "Project XY [template]". @@ -20,15 +20,15 @@ Set up everything that you want to have available for future projects. - Setting up a default project structure in the Gantt chart. - Creating your work package templates. -Navigate to the [project settings](../project-settings) and click **Set as template** in the upper right corner. You can remove a project from the template collection on the same spot. +Navigate to the [project settings](../project-settings) and click **Set as template** in the upper right corner. You can remove a project from the template collection on the same spot. > **Please note**: The option to set a project as template or to remove it from templates is only available for Administrators. ![set-as-template](image-20210204170739796-0115761.png) -## Use a project template +## Use a project template -You can create a new project by using an existing template. This causes the properties of the project template to be copied to the new project. Find out in our Getting started guide how to [create a new project](../../../getting-started/projects/#create-a-new-project) in OpenProject. +You can create a new project by using an existing template. This causes the properties of the project template to be copied to the new project. Find out in our Getting started guide how to [create a new project](../../../getting-started/projects/#create-a-new-project) in OpenProject. Another way for using a template project would be to [copy it](../#copy-a-project). diff --git a/docs/user-guide/projects/projects-faq/README.md b/docs/user-guide/projects/projects-faq/README.md index c86a3ee77a42..081aebade114 100644 --- a/docs/user-guide/projects/projects-faq/README.md +++ b/docs/user-guide/projects/projects-faq/README.md @@ -17,7 +17,7 @@ There are several possibilities: 3. Select a project with subprojects, go to the Project overview, add the widget "Work package table" and set the filter "Including subproject". Find more information on this topic [here](../../project-overview/#widgets). Additionally you could add the column "Progress" to compare your different Project progress. 4. Add the widget "Work package table" to your My page and set the filter mentioned above. Find more information on this topic [here](../../../getting-started/my-page/#configure-the-my-page). Additionally you could add the column "Progress". -We will introduce further similar functions in the course of implementing multi-project management. +We will introduce further similar functions in the course of implementing multi-project management. ## What is the difference between creating a project from a template and copying the template project? @@ -33,7 +33,7 @@ Yes, that is in most cases the best solution. In OpenProject, you can work agilely according to Scrum ([backlogs](../../backlogs-scrum)) or Kanban ([boards](../../agile-boards)). Versions in OpenProject represent a "container" that contains the work packages to be processed. Versions serve a double function: On the one hand, you can use them to plan your product releases, and on the other hand, you can use them to map the product backlog(s) and sprints required for Scrum. As soon as you have created at least one version in a project, the module "[Roadmap](../../roadmap)" is displayed on the left side in your project, which you can use to get an overview of the versions (intended primarily for releases). -The [Backlogs module](../../backlogs-scrum) uses versions to map the product backlog or sprints. By using the backlog, however, some special rules occur: For example, tasks must be assigned to the same version as the associated (parent) work packages. +The [Backlogs module](../../backlogs-scrum) uses versions to map the product backlog or sprints. By using the backlog, however, some special rules occur: For example, tasks must be assigned to the same version as the associated (parent) work packages. If you do not work according to Scrum we would recommend to deactivate the Backlogs module and use the [Boards module](../../agile-boards) instead. If you have activated the boards module you can create a version board. You can find an example [here](https://community.openproject.org/projects/openproject/boards/2077). ## Can I assign work packages in subprojects to versions of the parent project? @@ -56,6 +56,6 @@ Afterwards, you could adjust the hierarchy of the child project (which you origi ## Does OpenProject offer portfolio management? -For portfolio management or custom reporting, you can use either the project list, or the global work package table. Both views can be used to create optimal reports via filtering, sorting and other configuration options. +For portfolio management or custom reporting, you can use either the project list, or the global work package table. Both views can be used to create optimal reports via filtering, sorting and other configuration options. For more information on portfolio management options in OpenProject please refer to this [Use Case](../../../use-cases/resource-management). diff --git a/docs/user-guide/repository/README.md b/docs/user-guide/repository/README.md index fa91fea23ba7..6610307bf4ec 100644 --- a/docs/user-guide/repository/README.md +++ b/docs/user-guide/repository/README.md @@ -14,7 +14,6 @@ keywords: svn, git, repository management > **Note**: Repositories are currently only available for the packaged-based on-premises installations. In order to use Repository functionality please make sure that the Repository module is [activated in the project settings](../projects/project-settings/modules/). - ## Repository browser view An important part of working on a project as a team is sharing files and source code. Keeping track of the latest versions can sometimes be a challenge. Therefore, OpenProject provides two types of version control systems (Git and Subversion) which – after being properly configured – can be used to store relevant data in the different projects. @@ -31,8 +30,6 @@ You can create a comparison of two versions to see the changes made for specific ![User-guide-repository3](User-guide-repository3.png) - - ## Working with an SVN or Git client The data contained in a project repository can be downloaded to your computer using one of several clients, for example [Tortoise SVN](https://tortoisesvn.net/) for Subversion, and the [git client](https://git-scm.com/) or [one of the recommended GUI clients](https://git-scm.com/downloads/guis) for Git. @@ -47,13 +44,10 @@ In the commit message you can reference a work package ID (e.g. #1234). In the r In any textile field you can reference revisions by putting an "r" in front of the revision number (e.g. r123). - ## Configure Repositories in OpenProject Please see our system admin guide [how to configure repositories in OpenProject](../../system-admin-guide/system-settings/repositories/). - - ## Repository integration See our Installation and operations guide how to [integrate repositories in OpenProject](../../installation-and-operations/configuration/repositories/#repository-integration-in-openproject). diff --git a/docs/user-guide/search/README.md b/docs/user-guide/search/README.md index 3b6120bc966e..ac6ff317156c 100644 --- a/docs/user-guide/search/README.md +++ b/docs/user-guide/search/README.md @@ -8,7 +8,7 @@ keywords: search, find, filter, search bar # Search features -There are two ways to search for work packages, documents, projects, etc. in OpenProject: The search bar and the advanced search. +There are two ways to search for work packages, documents, projects, etc. in OpenProject: The search bar and the advanced search. ## Search bar diff --git a/docs/user-guide/team-planner/README.md b/docs/user-guide/team-planner/README.md index d867c665013b..ff00bd9c9db0 100644 --- a/docs/user-guide/team-planner/README.md +++ b/docs/user-guide/team-planner/README.md @@ -7,6 +7,7 @@ keywords: team planner, planning, calendar, resource management, assign, team vi --- # Team planner + The team planner module helps you get a complete overview of what each member of your team is working on. You can use it to track the current progress of work packages your team is working on, schedule new tasks, reschedule them or even reassign them to different members. ![Example team planner showing a two-week view of work packages assigned to team members](TeamPlanner-12.4-twoWeeks.png) @@ -25,7 +26,7 @@ To use this module, you must have the work packages module enabled. | [Work package detail view](#work-package-details-view) | View or edit a specific work package | | [Removing a work package](#remove-a-work-package) | Removing (unscheduling) visible work packages | - +![Video](https://openproject-docs.s3.eu-central-1.amazonaws.com/videos/OpenProject-Team-Planner.mp4) ## Module overview @@ -41,7 +42,6 @@ Clicking on the **Team planners** entry on the left sidebar takes you to the tea > **Info**: Both *public* and *private* team planners can be added as **favored** planners; they will then appear under the **Favorite** heading in the menu bar. - ## Team planner basics ![A screenshot of an example team planner with different functions highlighted](TeamPlanner-12.4-oneWeek.png) @@ -93,7 +93,6 @@ A **new work package dialog** will open. The assignee, start and finish dates wi ![An example of the new work package split screen view](TeamPlanner-12.4-newTask-splitScreen.png) - #### Add an existing work package If you would like to take an existing work package and assign it to your team member for a certain start date, the team planner makes it easy to do so. diff --git a/docs/user-guide/time-and-costs/README.md b/docs/user-guide/time-and-costs/README.md index 2a8733ad36a6..bf02fd54a8dc 100644 --- a/docs/user-guide/time-and-costs/README.md +++ b/docs/user-guide/time-and-costs/README.md @@ -24,6 +24,7 @@ Create budgets, log time and costs on specific work packages and create time and Watch this short video to get a first overview about time and cost reporting in OpenProject. + ## Frequently asked questions (FAQ) ### Does OpenProject provide resource management? diff --git a/docs/user-guide/time-and-costs/cost-tracking/README.md b/docs/user-guide/time-and-costs/cost-tracking/README.md index b92acce7ba07..b94b23c6e6ec 100644 --- a/docs/user-guide/time-and-costs/cost-tracking/README.md +++ b/docs/user-guide/time-and-costs/cost-tracking/README.md @@ -16,12 +16,11 @@ You can log unit costs on a work package within a project to keep track on certa | [Edit logged costs](#edit-logged-costs) | How to edit spent costs logged to a work package. | | [Delete logged costs](#delete-logged-costs) | How to delete spent costs logged to a work package. | - ## Log costs to a work package In order to log unit costs, you must first activate the **Time and costs** module and the **Budget** module in the project settings. Then select a budget from the drop-down menu of the work package details and link it to the selected work package![select-budget-work-package-details](select-budget-work-package-details.png) -To log costs to a work package you can either press the button on the top right in the work package detail view or double-click on the line of the work package in the work package table. In both cases a function menu appears in which you can select **log unit costs**. +To log costs to a work package you can either press the button on the top right in the work package detail view or double-click on the line of the work package in the work package table. In both cases a function menu appears in which you can select **log unit costs**. ![log-unit-costs](log-unit-costs.png) @@ -52,12 +51,8 @@ A new form is opened, where you can log unit costs. You can edit the following i The **spent unit costs** as well as the total amount of **overall costs** are displayed on the work packages details view. - - ![Cost tracking overview](Cost-tracking-overview.png) - - ## Edit logged costs To display and edit the logged costs to a work package, navigate to the work package details view. Here, the total amount of spent costs are displayed. Click on the sum of logged costs on a work package to display the details. diff --git a/docs/user-guide/time-and-costs/progress-tracking/README.md b/docs/user-guide/time-and-costs/progress-tracking/README.md index 1882e25bedf5..c8bfb2a4f044 100644 --- a/docs/user-guide/time-and-costs/progress-tracking/README.md +++ b/docs/user-guide/time-and-costs/progress-tracking/README.md @@ -8,19 +8,19 @@ keywords: Progress tracking, estimated time, remaining time, work, % complete, p # Progress tracking -OpenProject lets you track and monitor the progress of your work packages. +OpenProject lets you track and monitor the progress of your work packages. > **Note:** Since OpenProject 14.0, the way progress is reported and calculated has changed significantly. Please read the documentation below to understand how OpenProject handles work and progress estimates. ## Terms -[OpenProject 13.2](https://www.openproject.org/docs/release-notes/13-2-0/) introduced important changes in the names of three work package fields: +[OpenProject 13.2](../../../release-notes/13-2-0/) introduced important changes in the names of three work package fields: -| **Old term** | **New term** | +| **Old term** | **New term** | |--------------------|------------------------| -| Progress | % Complete | -| Estimated time | Work | -| Remaining time | Remaining work | +| Progress | % Complete | +| Estimated time | Work | +| Remaining time | Remaining work | >**Note**: You will still find the new attributes if you search using their older names (in the list of filters, for example). @@ -37,7 +37,7 @@ OpenProject offers two modes for reporting progress: % Complete is an automatically calculated value that is a function of Work and Remaining work, unless % Complete is configured to be [set by status](#status-based-progress-reporting). ->**% Complete** is work done (**Work** - **Remaining work**) divided by **Work**, expressed as a percentage. For example, if Work is set at 50h and Remaining work is 30h, this means that % Complete is _(50h-30h)/50h))_ = **40%**. Please note that these calculations are independent and unrelated to the value of **Spent time** (which is based on actual time logged). +>**% Complete** is work done (**Work** - **Remaining work**) divided by **Work**, expressed as a percentage. For example, if Work is set at 50h and Remaining work is 30h, this means that % Complete is _(50h-30h)/50h))_ = **40%**. Please note that these calculations are independent and unrelated to the value of **Spent time** (which is based on actual time logged). This means that for a work package to have a value for % Complete, both Work and Remaining work are required to be set. To make this link clear and transparent, clicking on *Work* or *Remaining work* to modify them will display the following pop-over: @@ -47,11 +47,11 @@ This allows you to edit Work or Remaining work and get a preview of the updated >**Note:** If you enter a value for Remaining work that is higher than Work, you will see an error message telling you that this is not possible. You will have to enter a value lower than Work to be able to save the new value. > ->Additionally, the value for Remaining work cannot be removed if a value for Work exists. If you wish to unset Remaining work, you need to also unset Work. +>Additionally, the value for Remaining work cannot be removed if a value for Work exists. If you wish to unset Remaining work, you need to also unset Work. ### Status-based progress reporting -Administrators can also switch to [status-based progress reporting mode](../../../system-admin-guide/manage-work-packages/work-package-settings/) for their instance. +Administrators can also switch to [status-based progress reporting mode](../../../system-admin-guide/manage-work-packages/work-package-settings/) for their instance. In this mode, each status is associated with a fixed % Complete value in the [admin settings for each one](../../../system-admin-guide/manage-work-packages/work-package-status/), which can be freely updated by changing the status of a work package. This allows teams to report progress simply by changing the status of their work packages over time. @@ -69,14 +69,13 @@ This allows you to edit % Complete (by changing status) or Work and get a p >**Note:** In the upcoming version, statuses cannot have an empty % Complete value in status-based progress reporting mode.When upgrading, all statuses that do not have a value will take the default value of 0%. - ## Hierarchy totals OpenProject will automatically show totals for Work, Remaining work and % Complete in a work package hierarchy (any parent with children). These appear in a work package table as a number with a Σ sign next to it, indicating that it is a total of the values of the parent _and_ children. ![Hierarchy totals for Work, Remaining work and % Complete](hierarchy-totals.png) -> **Note**: The total % Complete value of a hierarchy is a weighted average tied to Work. For example, a feature with Work set to 50h that is 30% done will influence the total of % Complete of the parent more than a feature with Work set to 5h that is 70% done. +> **Note**: The total % Complete value of a hierarchy is a weighted average tied to Work. For example, a feature with Work set to 50h that is 30% done will influence the total of % Complete of the parent more than a feature with Work set to 5h that is 70% done. -## Changing modes +## Changing modes When an administrator changes the progress calculation mode from Work-based to Status-based, the % Complete values might be in a transitional stage. @@ -101,11 +100,8 @@ When switching from Work-based to Status-based mode, the previous value for %&nb ## Status- to work-based -In Status-based mode, it is possible for work packages to have a % Complete value (defined by the status) without having values for Work or Remaining work. In other words, the Work and Remaining work can be empty. +In Status-based mode, it is possible for work packages to have a % Complete value (defined by the status) without having values for Work or Remaining work. In other words, the Work and Remaining work can be empty. -When switching to Work-based mode, OpenProject will retain the value for % Complete that was set with status. It can then be modified by inputing Work and Remaining work, thereby overwriting the previous value with a new computed value: +When switching to Work-based mode, OpenProject will retain the value for % Complete that was set with status. It can then be modified by putting in Work and Remaining work, thereby overwriting the previous value with a new computed value: ![Work estimates and progress pop-over with only the previous % Complete value](progress-popover-percentage-complete-only.png) - - - diff --git a/docs/user-guide/time-and-costs/reporting/README.md b/docs/user-guide/time-and-costs/reporting/README.md index b8cd7b76b029..5e95ac37ae67 100644 --- a/docs/user-guide/time-and-costs/reporting/README.md +++ b/docs/user-guide/time-and-costs/reporting/README.md @@ -12,7 +12,6 @@ You can easily report spent time and costs in OpenProject and filter, group and > **Note**: To use the time tracking functionality, the **Time and costs module** needs to be activated in the [project settings](../../projects/project-settings/modules/). - | Topic | Content | |---------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------| | [Time and costs report](#time-and-costs-reports) | How to open time and costs reports in OpenProject. | @@ -39,7 +38,7 @@ You can change the view of a cost reports and adapt it to your needs. You can select and apply various filters, such as work package, author, start date or target version. -Multiple projects can be selected by adding a **Projects** filter. +Multiple projects can be selected by adding a **Projects** filter. Depending on your rights in the project, multiple users can also be selected. This way you can filter the time and cost entries exactly to your need, depending on the time, work or user you want to see. The results will then be displayed in the time and cost report below. @@ -54,7 +53,7 @@ To add grouping criteria to the columns or rows of the report, select the drop-d ![Time-costs-group-by](Time-cots-group-by.png) -The grouping criteria will then be added to the columns or rows of the report. +The grouping criteria will then be added to the columns or rows of the report. Click the blue **Apply button** to display your changes. diff --git a/docs/user-guide/time-and-costs/time-and-costs-faq/README.md b/docs/user-guide/time-and-costs/time-and-costs-faq/README.md index 70cf30f0e40b..0387c9e8f2b3 100644 --- a/docs/user-guide/time-and-costs/time-and-costs-faq/README.md +++ b/docs/user-guide/time-and-costs/time-and-costs-faq/README.md @@ -10,13 +10,13 @@ keywords: time and costs FAQ, time tracking, time logging, booking costs ## Is there a way to prevent logging hours for Phases (or other work package types)? -It is not possible to prevent time logging on phases or restrict it to certain work package types. You could deactivate the fields "Work (earlier called Estimated time") and "Spent time" for type Phase (using the [work package form configuration](../../../system-admin-guide/manage-work-packages/work-package-types/#work-package-form-configuration-enterprise-add-on)) but it would still be possible to log time for Phases. +It is not possible to prevent time logging on phases or restrict it to certain work package types. You could deactivate the fields "Work (earlier called Estimated time)" and "Spent time" for type Phase (using the [work package form configuration](../../../system-admin-guide/manage-work-packages/work-package-types/#work-package-form-configuration-enterprise-add-on)) but it would still be possible to log time for Phases. ## Can I log time for another user than myself? Since [12.2 release](../../../release-notes/12/12-2-0/) it is possible to log time for a user other than yourself. This right has to be granted by an admin to users with certain roles. You can find out more [here](../../../user-guide/time-and-costs/time-tracking/#log-and-edit-time-for-other-users). -## Is it possible to view all hours assigned to each member in total? If I work on various projects I'd like to know how many hours I accumulated for all tasks assigned to me. +## If I work on various projects I'd like to know how many hours I accumulated for all tasks assigned to me. Is it possible to view all hours assigned to each member in total? Yes, it is possible to see all hours assigned to each user in total. In your cost report you would just need to [select](../reporting/#filter-cost-reports) all projects that you would want to look at. Click on the **+** next to the project filter, select all projects or the ones that you would like to select (use Ctrl or Shift key), choose all other filters and then click **Apply** to generate the cost report. diff --git a/docs/user-guide/time-and-costs/time-tracking/README.md b/docs/user-guide/time-and-costs/time-tracking/README.md index 042869a99869..24336f7c6ba5 100644 --- a/docs/user-guide/time-and-costs/time-tracking/README.md +++ b/docs/user-guide/time-and-costs/time-tracking/README.md @@ -12,7 +12,6 @@ Users can book their time or units spent on an activity within a project directl > **Note**: To use the time tracking functionality, the **Time and costs module** needs to be activated in the [project settings](../../projects/project-settings/modules/). - | Topic | Content | | ------------------------------------------------------------ | ------------------------------------------------------------ | | [Log time in the work package view](#log-time-in-the-work-package-view) | How to log time to a work package. | @@ -27,10 +26,9 @@ Users can book their time or units spent on an activity within a project directl | [TimeCamp integration](./timecamp-integration) | How to track spent time using TimeCamp. | | [Time Tracker integration](./time-tracker-integration) | How to record and log spent time using Time Tracker. | - ## Log time in the work package view -In order to log spent hours for a certain activity, open the details of the corresponding work package. Select **Log time** from the **More functions** drop down menu, the icon with the three dots in the top right of the work packages details. Or use the **Log time** icon next to **Spent time**. +In order to log spent hours for a certain activity, open the details of the corresponding work package. Select **Log time** from the **More functions** drop down menu, the icon with the three dots in the top right of the work packages details. Or use the **Log time** icon next to **Spent time**. Alternatively, you can also log time via the work package table. To do this, simply click with the right mouse pointer on the line of the work package, which you want to track times for and then select "log time" from the entries in the list. You will then also be led to the form for logging time. @@ -50,7 +48,7 @@ The aggregated time spent on a work package is shown in the work package details ## Log time via the time tracking button -Starting with OpenProject 13.0, you can also track time in real time using the start/stop time tracking button. To do this, navigate to a work package you are working on and click on the **Start time tracking button**. +Starting with OpenProject 13.0, you can also track time in real time using the start/stop time tracking button. To do this, navigate to a work package you are working on and click on the **Start time tracking button**. ![OpenProject start time tracking button](openproject_user_guide_time_tracking_button.png) @@ -60,7 +58,7 @@ This will start the time tracking timer for the current work package. A timer ic Once you are done working, you can stop tracking time by clicking the **Stop time tracking button**. This will open a pop up window with the recorded time spent based on the timer. You may correct or adjust this time manually if you wish. -If you want to continue tracking time, click **Cancel** and the timer will continue running. If you do not want to log time, click **Delete**. Clicking **Save** will log the time the same as if you had manually logged it. +If you want to continue tracking time, click **Cancel** and the timer will continue running. If you do not want to log time, click **Delete**. Clicking **Save** will log the time the same as if you had manually logged it. ![OpenProject stop time tracking button](openproject_user_guide_time_tracking_button_stop.png) @@ -70,9 +68,9 @@ If you navigate away from the work package in which you have a timer running, yo ## Log time via commit message -> **Note**: this is a power user feature that is currently only available for on-premises installations. +> **Note**: this is a power user feature that is currently only available for on-premises installations. > -> **Enable time logging** option must be [activated under system settings](../../../system-admin-guide/system-settings/repositories/) in order to log time via a commit message. +> **Enable time logging** option must be [activated under system settings](../../../system-admin-guide/system-settings/repositories/) in order to log time via a commit message. To log time via commit message **Repository** module must be activated and an SVN or Git repository needs to be configured. Once it is configured you can enter the following syntax into a commit message of your client (for example GitHub desktop client or a command line client) to log time: *refs #work package number @amount of hours*. For example refs #123 @2h will log 2 hours of spent time for the work package number 123.![openproject_user_guide_log_time_commit_message](openproject_user_guide_log_time_commit_message.png) @@ -108,7 +106,7 @@ In the list of time entries, click on the **Delete** icon next to a time entry t ## Log and edit time for other users -Starting with OpenProject 12.2, users with certain roles are able to log and edit time for other users. +Starting with OpenProject 12.2, users with certain roles are able to log and edit time for other users. > To enable this functionality, an administrator has to grant this privilege to a particular role in the **Roles and Permissions** section under **Users and Permissions** in the administrator settings. > @@ -135,7 +133,6 @@ A user with permissions to edit time logged by other users can edit each entry a In order to track labor costs, you need to [define an hourly rate](#define-hourly-rate-for-labor-costs) in your user profile first. The labor costs will then be calculated automatically based on your hours booked and your hourly rate. - ## Define hourly rate for labor costs You can define an hourly rate to track labor costs per user. You will need system admin permissions for this. Please navigate to the user profile, e.g. by clicking on a hyper link of the user name on a work package. @@ -150,4 +147,4 @@ Here, you can click the **Edit button** on the top right corner of the user prof Alternatively, you can navigate to *Administration -> Users and permissions -> Users* and click on the respective user name. -Click on the **Rate history** tab. Find out [here](../../../system-admin-guide/users-permissions/users/#rate-history) how to continue. +Click on the **Rate history** tab. Find out [here](../../../system-admin-guide/users-permissions/users/#rate-history) how to continue. diff --git a/docs/user-guide/time-and-costs/time-tracking/time-tracker-integration/README.md b/docs/user-guide/time-and-costs/time-tracking/time-tracker-integration/README.md index 9bf0a2d39599..25335fc1fb8c 100644 --- a/docs/user-guide/time-and-costs/time-tracking/time-tracker-integration/README.md +++ b/docs/user-guide/time-and-costs/time-tracking/time-tracker-integration/README.md @@ -12,7 +12,7 @@ Please note that the Time Tracker integration is not developed, nor officially s ![Screenshot of the Time Tracker app](time_tracker_app.png) -[Time Tracker for OpenProject](https://open-time-tracker.com/) is a mobile app that records time spent on tasks and logs it to your Open Project instance. +[Time Tracker for OpenProject](https://open-time-tracker.com/) is a mobile app that records time spent on tasks and logs it to your Open Project instance. ## Installation @@ -22,7 +22,6 @@ Time Tracker app is available in the Apple [AppStore](https://apps.apple.com/us/ 1. Log in to the Time Tracker app with your administrator account. - 2. Once logged in, open the Administration panel, navigate to the Authentication page and when go to the OAuth applications tab. ![OAuth applications](openProject_OAuth_applications.png) @@ -31,12 +30,12 @@ Time Tracker app is available in the Apple [AppStore](https://apps.apple.com/us/ ![Add a new OAth application](openproject_new_OAth.png) -4. In the new application window, enter the desired name for the application (for example, Time Tracker) in the Name field. -5. Set the Redirect URI to `openprojecttimetracker://oauth-callback`. This link will be used to redirect users back to the app after they authorize the OAuth application. -6. Set the Scopes to api_v3. This will allow the application to access the necessary APIs. -7. Set the Confidential Property to unchecked. -8. Leave the Client Credentials User field empty. -9. Once you have completed all the fields, press the Create button. +4. In the new application window, enter the desired name for the application (for example, Time Tracker) in the Name field. +5. Set the Redirect URI to `openprojecttimetracker://oauth-callback`. This link will be used to redirect users back to the app after they authorize the OAuth application. +6. Set the Scopes to api_v3. This will allow the application to access the necessary APIs. +7. Set the Confidential Property to unchecked. +8. Leave the Client Credentials User field empty. +9. Once you have completed all the fields, press the Create button. 10. After creating the application, copy the Client ID and Base URL values for future reference and keep them secure. Copy Base URL from Auth URL field, it may look like this: `https://example.com` ![openproject time tracker configured](openproject_timetracker_configured.png) diff --git a/docs/user-guide/time-and-costs/time-tracking/timecamp-integration/README.md b/docs/user-guide/time-and-costs/time-tracking/timecamp-integration/README.md index 538576ab5a22..1ac0ba77209a 100644 --- a/docs/user-guide/time-and-costs/time-tracking/timecamp-integration/README.md +++ b/docs/user-guide/time-and-costs/time-tracking/timecamp-integration/README.md @@ -36,13 +36,13 @@ This integration can be added for Google Chrome as [TimeCamp extension](https:// 1. Create a [TimeCamp account](https://app.timecamp.com/auth/login) if you do not have one yet. -2. In TimeCamp, add a new project and tasks to it if you have not got anything set up yet. +2. In TimeCamp, add a new project and tasks to it if you have not got anything set up yet. ![TimeCamp account with a new project which shows 2 tasks](project-with-2-tasks.png) The time tracked in OpenProject will later on appear in TimeCamp on the task that you select. -3. [Log in to OpenProject](https://www.openproject.org/signin/), open a project and go to a work package. +3. [Log in to OpenProject](https://www.openproject.org/signin/), open a project and go to a work package. If you are already logged in, please make sure to log out and back in again so that the TimeCamp projects and tasks will appear in OpenProject. @@ -50,7 +50,7 @@ This integration can be added for Google Chrome as [TimeCamp extension](https:// Only in the work package form you will see the green **TimeCamp Start timer** button. -4. Click on **Start timer** and select a task from your TimeCamp projects that you would want to use for tracking your time. +4. Click on **Start timer** and select a task from your TimeCamp projects that you would want to use for tracking your time. ![OpenProject work package detail view with drop down from start timer to select TimeCamp project and task](Start-time-in-OP.png) diff --git a/docs/user-guide/time-and-costs/time-tracking/toggl-integration/README.md b/docs/user-guide/time-and-costs/time-tracking/toggl-integration/README.md index 5aa3efdd4c6e..847e06699240 100644 --- a/docs/user-guide/time-and-costs/time-tracking/toggl-integration/README.md +++ b/docs/user-guide/time-and-costs/time-tracking/toggl-integration/README.md @@ -28,16 +28,12 @@ For any other OpenProject Domains you need to exactly add the **Fully Qualified ![toggl-configuration-integrations-openproject](toggl-configuration-integrations-openproject.png) - - ## Track time from OpenProject to Toggl Track If this add-in is installed and the **Integration URL** is configured, a **Start/Stop Timer button** is displayed on the work package details view, which can be used to record times from OpenProject into Toggl: ![toggl button openproject work package detail view](toggl-button-openproject-workpackage-detail-view.png) - - ## Copy time entries from Toggl Track to OpenProject If you would like to use the times tracked in Toggl Track inside of OpenProject, and you are a programmer, you are able to transfer the recorded times back to OpenProject via the API if needed. diff --git a/docs/user-guide/wiki/README.md b/docs/user-guide/wiki/README.md index 873e262ddf5b..ae7615b4d922 100644 --- a/docs/user-guide/wiki/README.md +++ b/docs/user-guide/wiki/README.md @@ -58,19 +58,21 @@ As CKEditor5 currently does not provide support for code blocks, OpenProject can The GFM extension of the CommonMark specs adds a definition for table syntax which the CKEditor build of OpenProject supports. This definition requires all tables to have a heading row. For tables created with CKEditor without heading rows, a HTML table is output instead. This matches the behavior of, e.g., GitHub. ### Emojis + Starting with OpenProject 13.0 you can add emojis to all text editors. Type a colon and a letter, e.g. **:a** into the wiki editor and get a suggested list of emojis you can use. ![openproject_user_guide_wiki_emoji](openproject_user_guide_wiki_emoji.png) - ### Autoformatting CKEditor5 allows certain CommonMark-like autoformatting keyboard strokes: - Create bold or italic styles by typing **will become bold**, _will become italic_, - Create headings of different indentation with #, ##, ###, … - Create a bulleted list by starting the line with * or - and a space - Create a numbered list by starting the line with 1. or 1) and a space +```markdown +Create bold or italic styles by typing **will become bold**, _will become italic_, +Create headings of different indentation with #, ##, ###, … +Create a bulleted list by starting the line with * or - and a space +Create a numbered list by starting the line with 1. or 1) and a space +``` ## Image handling @@ -100,7 +102,7 @@ The rendered page will then fetch the work package table results dynamically, re Use it to embed views in other pages, create reporting of multiple results, or to embed a Gantt chart view. -### Work package button +### Work package button Configure a button or link to target the work package creation screen in the current project. You can preselect a work package type that should be selected, making it easy to guide the users to the work package creation form. @@ -116,30 +118,36 @@ In some resources such as work packages or comments, the editor does not exhibit As with the textile formatting syntax, you can link to other resources within OpenProject using the same shortcuts as before. Create links to: - a wiki page: [[Wiki page]] - a wiki page with separate link name: [[Wiki page|The text of the link]] - a wiki page in the Sandbox project: [[Sandbox:Wiki page]] - - a work package with ID12: #12 - a work package with ID234: view#12 - the default work package view: view:default - - a version by ID or name: version#3, version:"Release 1.0.0" - a project by ID/name: project#12 , project:"My project name" - an attachment by filename: attachment:filename.zip - a user by id or login: user#4 , user:"johndoe" - a forum message by ID: message#1218 - a repository revision 43: r43 - a commit by hash: commit:f30e13e4 - a source file in the repository: source:"some/file" +```wiki +a wiki page: [[Wiki page]] +a wiki page with separate link name: [[Wiki page|The text of the link]] +a wiki page in the Sandbox project: [[Sandbox:Wiki page]] + +a work package with ID12: #12 +a work package with ID234: view#12 +the default work package view: view:default + +a version by ID or name: version#3, version:"Release 1.0.0" +a project by ID/name: project#12 , project:"My project name" +an attachment by filename: attachment:filename.zip +a user by id or login: user#4 , user:"johndoe" +a forum message by ID: message#1218 +a repository revision 43: r43 +a commit by hash: commit:f30e13e4 +a source file in the repository: source:"some/file" +``` You can always prefix these links with a project identifier followed by a colon in order to reference resources from projects other than the one of the current wiki page: - my-project:view:default +```text +my-project:view:default +``` To avoid processing these items, precede them with a bang ! character such as !#12 will prevent linking to a work package with ID 12: - Wiki systems contain all the answers !#42 +```text +Wiki systems contain all the answers !#42 +``` ### Autocompletion for work packages diff --git a/docs/user-guide/wiki/create-edit-wiki/README.md b/docs/user-guide/wiki/create-edit-wiki/README.md index d4ec33b0d89e..01c4458bc423 100644 --- a/docs/user-guide/wiki/create-edit-wiki/README.md +++ b/docs/user-guide/wiki/create-edit-wiki/README.md @@ -77,4 +77,3 @@ If you want to keep updated about any changes to a wiki page, you can make use o ![watch-wiki](watch-wiki.png) With this function being activated, you will receive an e-mail notification (according to your email preferences) after every page update, including a link to the respective changes. - diff --git a/docs/user-guide/wiki/more-wiki-functions/README.md b/docs/user-guide/wiki/more-wiki-functions/README.md index 93b701d436cf..30b9f21802e6 100644 --- a/docs/user-guide/wiki/more-wiki-functions/README.md +++ b/docs/user-guide/wiki/more-wiki-functions/README.md @@ -18,29 +18,24 @@ In the wiki you have more functions to edit or configure your wiki page, e.g. to | [Show wiki page history](#show-wiki-page-history) | How to display changes to a wiki page. | | [Export a wiki page](#export-a-wiki-page) | How to export a wiki page. | - To open further configuration settings, navigate to a wiki page and click on the **More** button on top of the wiki page. In the drop down menu, select the corresponding menu item. ![more-wiki-functions](image-20210429094259782.png) - - ## Lock a wiki page To lock an existing wiki page and prevent others from editing the page, select the **More** button on top of the wiki page. Select the item **Lock** in the drop down menu. -The page is now locked and cannot be edited by any other user. +The page is now locked and cannot be edited by any other user. To unlock a wiki page and make it possible for users to edit it again, select the **Unlock** item under the **More** button on top of a wiki page. ![unlock-wiki-page](image-20210429101715608.png) - - It is now possible to edit the wiki page again. ## Delete a wiki page @@ -66,7 +61,7 @@ First, you will get an overview on author and date of the latest updates. Potent ![view-differences-wiki](1568213985327.png) > **Note**: The more distance between two versions, the more difficult it becomes to compare them, since only the selected versions are compared (ignoring the changes that were made in the meantime). The most comprehensible information is thus provided by comparing two consecutive versions. -> The wiki will merge changes, if changes are entered within less then 5 minutes by the same person. This helps to avoid clutter in the wiki history. +> The wiki will merge changes, if changes are entered within less then 5 minutes by the same person. This helps to avoid clutter in the wiki history. ## Export a wiki page diff --git a/docs/user-guide/wiki/wiki-faq/README.md b/docs/user-guide/wiki/wiki-faq/README.md index 6da137fd3325..479924713210 100644 --- a/docs/user-guide/wiki/wiki-faq/README.md +++ b/docs/user-guide/wiki/wiki-faq/README.md @@ -8,46 +8,46 @@ keywords: wiki faq # Frequently asked questions (FAQ) for wiki -### Is it possible to copy a wiki or a wiki page from one project into another project? +## Is it possible to copy a wiki or a wiki page from one project into another project? -Yes, you can do both, you have to export the wiki or the wiki page as a Markdown (or Atom), than copy the Markdown from the text editor. Now you have to create a new wiki in the project you want to copy the old one (or the page). In the section paragraph you have to change into the markdown modus, then paste the text from you have copied. Unfortunately pictures cannot be copied this way. You have to add them manually. +Yes, you can do both, you have to export the wiki or the wiki page as a Markdown (or Atom), than copy the Markdown from the text editor. Now you have to create a new wiki in the project you want to copy the old one (or the page). In the section paragraph you have to change into the markdown modus, then paste the text from you have copied. Unfortunately pictures cannot be copied this way. You have to add them manually. -### Which image formats can be used to include them on a wiki page? +## Which image formats can be used to include them on a wiki page? Currently supported are PNG and JPEG. -### Can I include a wiki page in another wiki? +## Can I include a wiki page in another wiki? You can paste the content of one wiki into another wiki. To do this, you need to copy the content of your wiki pages and paste the text into a wiki page in another wiki. There exists a macro {{include(wikipage title)}} which includes another page from the same project. If the page is located in a different project the command needs to be changed to the following: {{include(project title: wikipage title)}} -### Can I include wiki pages in the left menu bar? What does "Configure menu item" mean? +## Can I include wiki pages in the left menu bar? What does "Configure menu item" mean? The option configure menu item was designed to ease the handling of page structures. After the initial creation of the page you can select the function. If you select Do not show this wiki page in project navigation the page will be excluded from the menu. Otherwise the page will appear in the project navigation and you can select, whether it shall be a subitem of an existing wiki page. -### I created a wiki page but cannot find it anywhere in the menu - how can I access it? +## I created a wiki page but cannot find it anywhere in the menu - how can I access it? After saving a wiki page, you can create a referencing link for the page to easily access it - either by making it a wiki menu item (s.a.) or by referencing it with a link on the main wiki page. If this chance was missed you can reaccess the page at any time, by typing in the page’s URL in the browser: -The example URL would be: openproject.org/projects/your-projects-name/wiki/your-wiki-page’s-name +The example URL would be: `openproject.org/projects/your-projects-name/wiki/your-wiki-page’s-name` Also, you have the possibility to display the wiki’s Table of Contents, which you also can activate for each wiki page with “configure menu item” (s.a.). Here you see all wiki pages for the project. -### I activated the wiki module in the project settings but cannot see any wiki in the project menu. What happened? +## I activated the wiki module in the project settings but cannot see any wiki in the project menu. What happened? You have probably unchecked the option “show as menu item in project navigation” within the wiki settings “configure menu item” (s.a.). Type in the URL of any wiki page in the browser: `https://www.openproject.org/projects/“project_name”/wiki` to open the wiki. Open “configure menu item” for this page and choose the way you want this wiki to be displayed in the menu bar. -### What is the markup language of the wiki in OpenProject? +## What is the markup language of the wiki in OpenProject? The wiki syntax used in OpenProject is Textile. -### I am not used to Textile - is there any documentation where I can get help? +## I am not used to Textile - is there any documentation where I can get help? Next to the field to enter the page content, some of the basic formatting commands are included. Above you see the commands for text styles, headline options and lists, as well as the command to include an image. On the right, there is also a help link which displays all commands which can be used for formatting. -### How to create a table of content +## How to create a table of content? -The macro to create a table of content is {{toc}}. +The macro to create a table of content is `{{toc}}`. diff --git a/docs/user-guide/wiki/wiki-menu/README.md b/docs/user-guide/wiki/wiki-menu/README.md index 92d90548b159..10373378cd18 100644 --- a/docs/user-guide/wiki/wiki-menu/README.md +++ b/docs/user-guide/wiki/wiki-menu/README.md @@ -14,8 +14,6 @@ Wiki menu items are marked with the wiki icon to clearly identify the pages in t ![wiki-menu](wiki-menu.png) - - ## Add a wiki page to the project menu To add a wiki page as a menu item to the project menu, select the **More** functions button on top of a wiki page and choose the **Configure menu item** topic. @@ -31,8 +29,6 @@ To add a wiki page as a menu item to the project menu, select the **More** funct 3. **Save** your changes to the wiki page menu. - - ![wiki-menu-item-settings](wiki-menu-item-settings.png) **Visibility** show as menu item in the project navigation: @@ -43,4 +39,4 @@ To add a wiki page as a menu item to the project menu, select the **More** funct ![wiki-show-submenu-item](wiki-show-submenu-item.png) -The default option is **Do not show this wiki page in project navigation**. Check this option if you want to undo earlier changes and hide the wiki page from the project menu. \ No newline at end of file +The default option is **Do not show this wiki page in project navigation**. Check this option if you want to undo earlier changes and hide the wiki page from the project menu. diff --git a/docs/user-guide/work-packages/README.md b/docs/user-guide/work-packages/README.md index 5e51d47f6845..2a6259a40a9e 100644 --- a/docs/user-guide/work-packages/README.md +++ b/docs/user-guide/work-packages/README.md @@ -9,20 +9,19 @@ keywords: work packages, tickets # Work packages
    -**Work packages** are items in a project (such as tasks, features, risks, user stories, bugs, change requests). A work package captures important information and can be assigned to project members for execution. +**Work packages** are items in a project (such as tasks, features, risks, user stories, bugs, change requests). A work package captures important information and can be assigned to project members for execution.
    Work packages have a **type**, an **ID**, a **subject** and may have various additional attributes, such as **status**, **assignee**, **priority**, **due date**.
    -**Work package ID** is defined as a unique integer assigned to a newly created work package. Work package IDs cannot be changed and are numbered across all projects of an OpenProject instance (therefore, the numbering within a project may not be sequential). +**Work package ID** is defined as a unique integer assigned to a newly created work package. Work package IDs cannot be changed and are numbered across all projects of an OpenProject instance (therefore, the numbering within a project may not be sequential).
    -**Types** are the different items a work package can represent, such as task, feature, bug, phase, milestone. The work package types can be configured in the system administration. +**Types** are the different items a work package can represent, such as task, feature, bug, phase, milestone. The work package types can be configured in the system administration.
    - Work packages can be displayed in a projects timeline, e.g. as a milestone or a phase. In order to use the work packages, the work package module has to be activated in the project settings. ## Overview @@ -41,4 +40,3 @@ Work packages can be displayed in a projects timeline, e.g. as a milestone or a | [Work package relations and hierarchies](work-package-relations-hierarchies) | How to create work package relations and hierarchies. | - diff --git a/docs/user-guide/work-packages/add-work-packages-to-meetings/README.md b/docs/user-guide/work-packages/add-work-packages-to-meetings/README.md index e754bb10e031..694ebded75ac 100644 --- a/docs/user-guide/work-packages/add-work-packages-to-meetings/README.md +++ b/docs/user-guide/work-packages/add-work-packages-to-meetings/README.md @@ -18,10 +18,10 @@ In the dialog that appears, select a meeting from the list of open upcoming meet ![Add a work package to a new meeting](openproject_user_guide_meeting_dialogue.png) -The newly-created work package agenda item can be [re-ordered and edited](../../meetings/dynamic-meetings/#edit-a-meeting). +The newly-created work package agenda item can be [re-ordered and edited](../../meetings/dynamic-meetings/#edit-a-meeting). ## View existing linked meetings -The **Meetings** tab will also list all meetings, past and upcoming, to which the current work package has already been linked to. +The **Meetings** tab will also list all meetings, past and upcoming, to which the current work package has already been linked to. Each linked meeting will also also include any notes associated with that work package agenda item. This can be useful to recall specific discussion points, open questions or decisions taken during a meeting that concerns the current work package. diff --git a/docs/user-guide/work-packages/baseline-comparison/README.md b/docs/user-guide/work-packages/baseline-comparison/README.md index 51137d31cda6..bd990ba84fd8 100644 --- a/docs/user-guide/work-packages/baseline-comparison/README.md +++ b/docs/user-guide/work-packages/baseline-comparison/README.md @@ -50,7 +50,6 @@ By default, Baseline will compare to 8 AM local time of the relevant day. You ca >**Note:** These are relative comparison points, which means that _Yesterday_ will always refer to the day before the current day, and not a specific date. You can use these to set up "running" baselines that show you all changes within the past day or week. - ### A specific date ![You can compare the present state to a specific date in the past](13-0_Baseline_specificDate.png) @@ -80,8 +79,7 @@ When Baseline is enabled, you will see a legend at the top of the page which sho - The comparison point or comparison period - The number of work packages that now meet the filter criteria (and were thus added to view) - The number of work packages that no longer meet the filter criteria (and were thus removed from view) -- The number of work packages that maintained but were modified - +- The number of work packages that maintained but were modified ### Change icons @@ -89,7 +87,7 @@ When Baseline is enabled, you will see a legend at the top of the page which sho ![Icon](13-0_Baseline_nowMeets.png) -Work packages that meet the filter criteria now but did not in the past are marked with an "Added" icon. These work packages were added to the current query after the selected comparison point, either because they were newly created since then or certain attributes changed such that they meet the filter criteria. +Work packages that meet the filter criteria now but did not in the past are marked with an "Added" icon. These work packages were added to the current query after the selected comparison point, either because they were newly created since then or certain attributes changed such that they meet the filter criteria. > **Note**: These do not necessarily represent _newly created_ work packages; simply those that are new to this particular view because they now meet the filter criteria. @@ -113,7 +111,7 @@ When there are no changes to a work package in the comparison period, no icon is ### Old values -When changes in the comparison period concern attributes that are visible as columns in the work package table, Baseline will show both old and current values. If the attribute you are interested in is not visible, you will need to [add it as a column](../work-package-table-configuration). +When changes in the comparison period concern attributes that are visible as columns in the work package table, Baseline will show both old and current values. If the attribute you are interested in is not visible, you will need to [add it as a column](../work-package-table-configuration). ![Old values are visible in the work package table view](13-0_Baseline_oldNewValues.png) diff --git a/docs/user-guide/work-packages/copy-move-delete/README.md b/docs/user-guide/work-packages/copy-move-delete/README.md index 6d233e9782a4..00c4ae5555fa 100644 --- a/docs/user-guide/work-packages/copy-move-delete/README.md +++ b/docs/user-guide/work-packages/copy-move-delete/README.md @@ -8,7 +8,7 @@ keywords: copy work package, delete work package, move work package # Copy, change project or delete a work package -If you right-click in a work package table, editing options will be displayed. Here, you can change project, copy the work package, or copy its URL to the clipboard, delete it or move it to another project. +If you right-click in a work package table, editing options will be displayed. Here, you can change project, copy the work package, or copy its URL to the clipboard, delete it or move it to another project. ![change copy delete work package](openproject_user_guide_copy_move_delete_wptableview.png) @@ -20,13 +20,13 @@ Alternatively, open the work packages details view by double clicking the respec ![User guide copy change project delete](openproject_user_guide_copy_move_delete_detailed_view.png) -To copy, move or delete multiple work packages at once please refer to the documentation for [bulk edit](../edit-work-package/#bulk-edit-work-packages). +To copy, move or delete multiple work packages at once please refer to the documentation for [bulk edit](../edit-work-package/#bulk-edit-work-packages). ## Copy a work package When copying a work package, a work package form with the pre-set values of the original work package is shown. -Copying a work package allows to easily create and adjust new work packages based on existing one’s. +Copying a work package allows to easily create and adjust new work packages based on existing one’s. ## Copy link to clipboard diff --git a/docs/user-guide/work-packages/create-work-package/README.md b/docs/user-guide/work-packages/create-work-package/README.md index ffb68bbc72ab..3f3c9b4fb229 100644 --- a/docs/user-guide/work-packages/create-work-package/README.md +++ b/docs/user-guide/work-packages/create-work-package/README.md @@ -8,9 +8,9 @@ keywords: create work packages # Create Work packages -| Topic | Content | -| ------------------------------------------------------------ | ---------------------------------------------- | -| [Create Work packages](#create-work-packages) | How to create a new Work package in a project. | +| Topic | Content | +|------------------------------------------------------------------------|------------------------------------------------| +| [Create Work packages](#create-work-packages) | How to create a new Work package in a project. | | [Add attachments to a Work package](#add-attachments-to-work-packages) | How to add attachments to a Work package. | ## Create Work packages @@ -24,19 +24,17 @@ Work packages always belong to a project. Therefore, you first need to [select a Then, navigate to the Work package module in the project navigation. -![work-packages-module](1566302949658.png) - - +![work packages module](1566302949658.png) ### Create a Work package in the table view To create new Work packages directly in line in the table view, click on the **+ Create new Work package** link below the table. -![create-split-screen](create-split-screen.png) +![create split screen](create-split-screen.png) The new Work package appears in a green row. Type in the subject of the Work package, change attributes, such as Type or Status directly in the table and hit Enter to save the changes. -![create-work-package-list](1566303144875.png) +![create work package list](1566303144875.png) This way, you can quickly and easily create new Work packages in the table, just like Excel. @@ -44,24 +42,20 @@ This way, you can quickly and easily create new Work packages in the table, just In order to enter detailed information to the Work package from the start, you can create a Work package in the split screen view. In the Work package module, click the green **+ Create** button and select the type of Work package you want to create. -![select-work-package-type](1566303633018.png) +![Select work package type](1566303633018.png) The new Work package form will open in the split screen view. Enter all information, such as description, assignee, status, priority, due date and more. Click the green **Save** button. -![](1566303947314.png) - - +![create a work package in the split screen view](1566303947314.png) Starting with OpenProject 13.0 you can add emojis to all text editors, including the work package description. Type a colon and a letter, e.g. **:a** into the text editor and get a suggested list of emojis you can use. -![openproject_user_guide_wp_description_emojis](openproject_user_guide_wp_description_emojis.png) +![work package description emojis](openproject_user_guide_wp_description_emojis.png) To find out **how to create a child Work package** please click [here](../work-package-relations-hierarchies/#add-a-child-work-package). - - ## Add attachments to Work packages You can directly add images, e.g. via copy and paste to the **Work package description**. You can also use the toolbar above the Work package description and click the Insert image icon: @@ -72,7 +66,7 @@ Also, at the bottom of the Work package form you can add files via drag and drop ![add-file](1566305040178.png) -> Note: it is also possible for users that are not members of the project to add attachments to work packages if they have been granted the permission by an administrator. This can be useful for example for confirming bug reports. +> Note: it is also possible for users that are not members of the project to add attachments to work packages if they have been granted the permission by an administrator. This can be useful for example for confirming bug reports. Find out how to [edit existing Work packages](../edit-work-package). diff --git a/docs/user-guide/work-packages/edit-work-package/README.md b/docs/user-guide/work-packages/edit-work-package/README.md index 161f7dc0f258..b9a354f8bdb6 100644 --- a/docs/user-guide/work-packages/edit-work-package/README.md +++ b/docs/user-guide/work-packages/edit-work-package/README.md @@ -19,9 +19,9 @@ keywords: edit work packages ## Update a work package -To edit a work package, double-click a work package row in [table view](../../work-packages/work-package-views/#table-view) or open the [split screen view](../../work-packages/work-package-views/#split-screen-view) to see the details. +To edit a work package, double-click a work package row in [table view](../../work-packages/work-package-views/#table-view) or open the [split screen view](../../work-packages/work-package-views/#split-screen-view) to see the details. -In the work package details, you can click in any field to update it, e.g. change the description, status, priority, assignee, or add a comment. +In the work package details, you can click in any field to update it, e.g. change the description, status, priority, assignee, or add a comment. To save changes in the description, click the **checkmark** icon. @@ -69,13 +69,15 @@ You can mention and notify team members via [@notification](../../notifications/ ![comment-work-packages](comment-work-packages.png) ### Emojis + Starting with OpenProject 13.0 you can add emojis to all text editors. Type a colon and a letter, e.g. **:a** into the text editor and get a suggested list of emojis you can use. ![openproject_user_guide_wp_comment_emojis](openproject_user_guide_wp_comment_emojis.png) - ## Attach files to work packages +> **Important note**: please note, that this option needs to activated by your project administrator under [*Project settings*](../../projects/project-settings/files/). + You can manually upload files to work packages directly under the tab **Files** in the work package detailed view. You can either attach files by dragging and dropping or by using the **+Attach files** option. ![Manual attachment upload in an OpenProject work package](openproject_user_guide_wp_file_upload.png) @@ -102,7 +104,7 @@ It is also possible to add oneself as watcher (if you have sufficient permission ### How to remove watchers from a work package -To remove watchers, navigate to the work package [details view](../../work-packages/work-package-views/#full-screen-view) and select the tab Watchers. Click the cross icon next to a watcher to remove the watcher from a work package. +To remove watchers, navigate to the work package [details view](../../work-packages/work-package-views/#full-screen-view) and select the tab Watchers. Click the cross icon next to a watcher to remove the watcher from a work package. The user will no longer get notifications in OpenProject about changes to this work package according to their notification settings. However, if he/she is the author, assignee or accountable of the work package there still might be notifications. Read [here](../../../getting-started/my-account/#notifications-settings) for more information. ![remove-watchers](remove-watchers.png) @@ -132,15 +134,13 @@ Then you have the possibility to: ![bulk edit right mouse click](image-20200331133245192.png) - - At the bottom of the page you can decide whether email updates regarding these changes should be sent or not. It makes sense not to tick the box for large updates to prevent users from getting flooded by emails. ![bulk-edit_email-updates](image-20201119163714831.png) -## Update a work package in a work package table view +## Update a work package in a work package table view -In the work package table view, you can not only open a single work package but also trigger direct actions such as logging time and costs, copying, downloading or deleting said work package. To access the quick context menu, simply right-click any work package in a work package table view and select the preferred action. +In the work package table view, you can not only open a single work package but also trigger direct actions such as logging time and costs, copying, downloading or deleting said work package. To access the quick context menu, simply right-click any work package in a work package table view and select the preferred action. ![Quick context menu in OpenProject work package table](quick-context-menu.png) @@ -152,16 +152,16 @@ You have the following options: - **Log unit costs** - navigates you to the cost logging screen. Once you [log the costs](../../time-and-costs/cost-tracking/) and save the entry, you will return to the work package table view. - **Change project** - allows moving the selected work package to a different project. - **Copy** - opens a details view of a new work package on the right side of the screen. This new work package is an exact copy of the work package you selected, but you can adjust any details you would like to change and then save it. -- **Copy link to clipboard** - copies a short link to the selected work package to your clipboard. -- **Copy to other project** - allows copying the selected work package to a different project. +- **Copy link to clipboard** - copies a short link to the selected work package to your clipboard. +- **Copy to other project** - allows copying the selected work package to a different project. - **Delete** - deletes a work package. You will need to confirm the deletion. -- **Download PDF** - downloads the selected work package as a PDF file. +- **Download PDF** - downloads the selected work package as a PDF file. - **Download Atom** - downloads the selected work package as an Atom file. - **Indent hierarchy** - creates a child-parent relationship with the work package directly above. The work package you selected become the child work package. The work package directly above becomes the parent work package. - **Create new child** - opens a new work package on the right side of the screen. This new work package already has a child relationship to the work package you selected. If you have opened the quick context menu for a work package that has a parent work package, you will also see: -- **Outdent hierarchy** option, which will remove the child-parent relationship. +- **Outdent hierarchy** option, which will remove the child-parent relationship. > **Note**: if you open the [Gantt charts module](../../gantt-chart/), the quick context menu will have different options than in the work package table view. diff --git a/docs/user-guide/work-packages/exporting/README.md b/docs/user-guide/work-packages/exporting/README.md index 69f9e7c22cf0..7f665037c763 100644 --- a/docs/user-guide/work-packages/exporting/README.md +++ b/docs/user-guide/work-packages/exporting/README.md @@ -33,18 +33,21 @@ The exported file will display the columns that are activated for the work packa Some formats such as PDF will limit the number of columns available due to limitations of the PDF rendering engine to avoid overflowing the available space. ## Export format options + OpenProject has multiple options of exporting work packages, including PDF, XLS, CSV and Atom. See below what each format entails. ## PDF export OpenProject has multiple options of exporting work packages in PDF format. -### PDF Table +### PDF Table + PDF Table exports the work package table displaying work packages as single rows with the selected columns for the work package table. Work packages IDs are linked to the respective work packages. Clicking on a work package ID will lead you directly to the work package in OpenProject. ![OpenProject PDF Table export](openproject_pdf_table_export.png) ### PDF Report + With PDF Reports you can export detailed up to date work plans for your project in a clean and practical format. It includes a title page, a table of contents (listing all of the work packages), followed by the description of single work packages in a block form. Table of contents is clickable and is linked to the respective pages within the report, making navigation much easier. For each work package a table of attributes is included (attributes correspond to the columns in the work package table). Work package ID attribute is clickable and linked directly to the respective work package in OpenProject. ![OpenProject_pdf_report_export](openproject-pdf-export-work-plans.png) @@ -55,12 +58,15 @@ With PDF Reports you can export detailed up to date work plans for your project ![OpenProject_pdf_report_sum](openproject_wp_report_total_sum.png) ### PDF Report with images -PDF Report with images is the same as PDF Report, but also includes the images from the work package description. -> **Note**: Images attached or linked in the work package Files section or in the Activity comments are not included into the PDF Report with images. +PDF Report with images is the same as PDF Report, but also includes the images from the work package description. + +> **Note**: Images attached or linked in the work package Files section or in the Activity comments are not included into the PDF Report with images. ![OpenProject_work_package_export](openproject_pdf_report_images.png) +> **Note**: if you need to export work packages in a Gantt chart form, please refer to the [Gantt chart PDF Export guide](../../gantt-chart/#gantt-chart-pdf-export-enterprise-add-on). + ## Excel (XLS) export > **Note**: To open XLS exported files into Microsoft Excel, ensure you set the encoding to UTF-8. Excel will not auto-detect the encoding or ask you to specify it, but simply open with a wrong encoding under Microsoft Windows. @@ -68,16 +74,19 @@ PDF Report with images is the same as PDF Report, but also includes the images f OpenProject can export the table for Microsoft Excel with the following options: ### XLS + **XLS** is a plain sheet that matches the OpenProject work packages table with its columns and work packages as rows matching the selected filter(s). ![OpenProject_work_package_export_excel](openproject_export_excel.png) ### XLS with descriptions + **XLS with descriptions** is same as above, but with an additional column for work package descriptions, which cannot be selected in the table. ![OpenProject_work_package_export_excel_description](openproject_pdf_table_export_description.png) ### XLS with relations + **XLS with relations** same as **XLS**, but with additional columns to list each work package relation in a separate row with the relation target and its ID and relation type included in the export. ![OpenProject_work_package_export_excel_relations](openproject_pdf_table_export_relations.png) @@ -86,7 +95,7 @@ OpenProject can export the table for Microsoft Excel with the following options: The OpenProject XLS export currently does not respect all options in the work package view being exported form: -- The order of work packages in a manually sorted query is not respected. This is known limitation (Ticket https://community.openproject.org/projects/openproject/work_packages/34971/activity) +- The order of work packages in a manually sorted query is not respected. This is known limitation ([Ticket](https://community.openproject.org/projects/openproject/work_packages/34971/activity)). - The hierarchy of work packages as displayed in the work package view. The exported XLS is always in "flat" mode. ## CSV export @@ -95,17 +104,15 @@ OpenProject can export the table into a comma-separated CSV. This file will be U > **Note**: To open CSV exported files into Microsoft Excel, ensure you set the encoding to UTF-8. Excel will not auto-detect the encoding or ask you to specify it, but simply open with a wrong encoding under Microsoft Windows. - ![OpenProject_work_package_export_csv](openproject_export_csv.png) ### Limitations The OpenProject CSV export currently does not respect all options in the work package view being exported form: -- The order of work packages in a manually sorted query is not respected. This is known limitation (Ticket https://community.openproject.org/projects/openproject/work_packages/34971/activity) +- The order of work packages in a manually sorted query is not respected. This is known limitation ([Ticket](https://community.openproject.org/projects/openproject/work_packages/34971/activity)). - The hierarchy of work packages as displayed in the work package view. The exported CSV is always in "flat" mode. - ## Atom (XML) export OpenProject can export the table into a XML-based atom format. This file will be UTF-8 encoded. @@ -121,4 +128,3 @@ It is also possible to export single work packages in PDF and Atom format. To do An exported PDF file will include all the work package fields that are [configured in the work package form](../../../system-admin-guide/manage-work-packages/work-package-types/#work-package-form-configuration-enterprise-add-on), regardless whether they are filled out or not. Atom Export includes a work package Title, Author, a link to the work package and work package activities. - diff --git a/docs/user-guide/work-packages/set-change-dates/README.md b/docs/user-guide/work-packages/set-change-dates/README.md index e9dd1a114451..f138f74395f0 100644 --- a/docs/user-guide/work-packages/set-change-dates/README.md +++ b/docs/user-guide/work-packages/set-change-dates/README.md @@ -17,7 +17,7 @@ keywords: date picker start finish dates duration change modify update relations ## Set start and finish dates -You can change the start and finish dates of a work package by opening the date picker. +You can change the start and finish dates of a work package by opening the date picker. ![The standard date picker with different elements highlighted](standard-date-picker-legend.png) @@ -29,16 +29,15 @@ You can change the start and finish dates of a work package by opening the date You can open the date picker for a work package from a number of different places: -- By clicking on the date field in the work package [details view](../work-package-views/#full-screen-view) +- By clicking on the date field in the work package [details view](../work-package-views/#full-screen-view) - By clicking the the date field in the work package [split screen view](../work-package-views/#split-screen-view) (from any other view, including [notification center](../../notifications), [team planner](../../team-planner/), [boards](../../agile-boards)...) - By clicking the start date, finish date or duration fields in [table view](../work-package-views/#table-view) - ### Using the date picker You can enter dates either by typing them in into the start and finish date fields or by clicking on individual dates in the mini calendar below. -> **Note**: Typed dates need to be in the standard ISO 8601 format: **YYYY-MM-DD** (so 12 October 2022 would be 2022-10-12). +> **Note**: Typed dates need to be in the standard ISO 8601 format: **YYYY-MM-DD** (so 12 October 2022 would be 2022-10-12). > > They will nevertheless be displayed in your desired format (usually depending by your region or language). @@ -60,13 +59,12 @@ Date changes are documented in the work package [Activity](../../activity/). ### Advanced functionality -- The date picker allows you to pick start and finish dates in the opposite order. Clicking on a start date and then moving backwards to click on an earlier date will then use that first date as the finish date and the second (earlier) date as the start date. +- The date picker allows you to pick start and finish dates in the opposite order. Clicking on a start date and then moving backwards to click on an earlier date will then use that first date as the finish date and the second (earlier) date as the start date. - For a work package that already has a start and finish date, it is possible to adjust just the finish date: click on the finish date field and then click on a new date. As long as this date is after the start date, the finish date will update accordingly. If the date you pick is earlier than the start date, the original start date will then be cleared and a click on a second date will define the other end of the new range. - It is possible to set only one of the two dates. To do this, click on the field you would like to set (start date is selected by default, but you can change this manually to finish date) and click on a date. Then save without selecting a second date. Alternatively, if a a range is already selected, simply remove one of the dates and save. - **Note**: The precedes-follows relation can constrain or affect the dates of work packages. For more information, see [Moving related work packages](../work-package-relations-hierarchies/#moving-related-work-packages). ### One-day events @@ -75,17 +73,15 @@ If you want the work package to start and finish on the same date, simply click ![Date picker with the same start and finish dates](one-day-event.png) -Work packages with *only* a start date or only a finish date are automatically considered one-day events. +Work packages with *only* a start date or only a finish date are automatically considered one-day events. Certain work package types (such as Milestones) can only span one day and thus have only one date field: ![Milestones have datepickers with a single date field](milestone-datepicker.png) - - ## Working days and duration -Starting with OpenProject 12.3, it is possible to manually input a duration for a work package and decide whether this duration should include working days only or all calendar days. +Starting with OpenProject 12.3, it is possible to manually input a duration for a work package and decide whether this duration should include working days only or all calendar days. > **Note:** Working dates are currently defined by the administrator of your OpenProject instance. By default, they are Monday to Friday, with Saturday and Sunday considered non-working. If you are an administrator, please read our [admin guide on working days](../../../system-admin-guide/calendars-and-dates/#working-days) > @@ -126,28 +122,27 @@ For example, if you set the start date to *Wednesday, 12 October* and enter a du #### Duration without start and finish dates -It is possible for a work package to have only duration without any start or finish dates set. +It is possible for a work package to have only duration without any start or finish dates set. -> **Note:** If you add even one date to a work package with duration, the other date is automatically derived; it is not possible to have just one date (start *or* finish) and duration set. Please note also that if a work package with only duration derives its start date via a relation, the finish date is then also derived. +> **Note:** If you add even one date to a work package with duration, the other date is automatically derived; it is not possible to have just one date (start *or* finish) and duration set. Please note also that if a work package with only duration derives its start date via a relation, the finish date is then also derived. Setting only duration without start or finish dates is especially useful when you have a general estimation of how long different tasks or phases of a project will take, but do not have exact dates defined quite yet. -> **Pro tip:** This feature makes it possible to automatically derive an estimated start or finish date for entire project. +> **Pro tip:** This feature makes it possible to automatically derive an estimated start or finish date for entire project. > > To do so, create a series of work packages that represent the main phases and set the approximate duration for each. Link them all using follow/precedes relationships. Now, when you set a start date on the first work package in the series, the start and end dates for all other work packages will be derived. - ## Scheduling mode ### Manual scheduling ![A switch on the date picker allows you to enable manual scheduling ](manual-scheduling-switch.png) -Switching "Manual scheduling" on enables [manual scheduling mode](../../gantt-chart/scheduling/#manual-scheduling-mode) for the work package. This ignores work package relations such that you're able to select any start and end dates, even ones that would normally be restricted due to follows/proceeds relationships. +Switching "Manual scheduling" on enables [manual scheduling mode](../../gantt-chart/scheduling/#manual-scheduling-mode) for the work package. This ignores work package relations such that you're able to select any start and end dates, even ones that would normally be restricted due to follows/proceeds relationships. -Manual scheduling also decouples the start and end dates of parent and children work packages. This means that the dates of parents are no longer constrained by those of the children, and children can be scheduled outside of the range of parent work packages. These relationships are completely ignored as far as scheduling is concerned, but are not removed (so they will still be visible in [Gantt view]()); the constraints are respected again if you switch manual scheduling off. +Manual scheduling also decouples the start and end dates of parent and children work packages. This means that the dates of parents are no longer constrained by those of the children, and children can be scheduled outside of the range of parent work packages. These relationships are completely ignored as far as scheduling is concerned, but are not removed (so they will still be visible in Gantt view; the constraints are respected again if you switch manual scheduling off. -Manual scheduling can be useful when you need to anchor a work package to fixed dates, for example because the dates of preceding or following work packages are not yet known. +Manual scheduling can be useful when you need to anchor a work package to fixed dates, for example because the dates of preceding or following work packages are not yet known. ## Information and warning banners @@ -157,15 +152,15 @@ Information banners have a blue background and display information that is helpf There are four possible banners: -#### Automatically scheduled +### Automatically scheduled ![A blue banner informing the user that the worked package is automatically scheduled](banner-automatically-scheduled.png) -This information banner is displayed when the dates of the current work package are derived from existing relations and can therefore not be modified. This is the case of parent work packages whose start and finish dates are derived from the earliest and latest child work packages respectively. +This information banner is displayed when the dates of the current work package are derived from existing relations and can therefore not be modified. This is the case of parent work packages whose start and finish dates are derived from the earliest and latest child work packages respectively. It is nevertheless possible to input specific start and finish dates for such work packages by enabling manual scheduling (which will ignore relations from which the dates were originally derived). -### Available start date and finish dates limited by relations. +### Available start date and finish dates limited by relations ![A blue banner informing the user that certain dates are limited by relations](banner-dates-limited.png) @@ -191,6 +186,6 @@ This warning banner is displayed on work packages whose start and end dates affe ![The Show Relations button in an information or warning banner](banner-show-relations-button.png) -The information and warning banners also feature a **Show Relations** button. Clicking on this will open a new tab that displays work packages with direct relations to the current work package in [Gantt view](../../gantt-chart), in hierarchy mode. +The information and warning banners also feature a **Show Relations** button. Clicking on this will open a new tab that displays work packages with direct relations to the current work package in [Gantt view](../../gantt-chart), in hierarchy mode. > **Info**: This preview is intended to give a quick overview of only _direct_ relations that might affect scheduling options for the current work package. It does not show second-level relations (and above). To get a full overview, please use the project work package [table view](../work-package-views/#table-view) or [Gantt view](../../gantt-chart) with your desired [filter/view configuration](../work-package-table-configuration/). diff --git a/docs/user-guide/work-packages/share-work-packages/README.md b/docs/user-guide/work-packages/share-work-packages/README.md index e8508354cc22..df6c56847340 100644 --- a/docs/user-guide/work-packages/share-work-packages/README.md +++ b/docs/user-guide/work-packages/share-work-packages/README.md @@ -18,13 +18,13 @@ To share a work package with a project non-member select the detailed view of a ![Share button in OpenProject work packages](openproject_user_guide_share_button_wp.png) -A dialogue window will open, showing the list of all users, who this work package has already been shared with. If the work package has not yet been shared, the list will be empty. +A dialogue window will open, showing the list of all users, who this work package has already been shared with. If the work package has not yet been shared, the list will be empty. > **Note**: In order to be able to share a work package with non members you need to have been assigned a [global role *create users*](../../../system-admin-guide/users-permissions/users/#create-users). If you do not see the option to share a work package, please contact your administrator. ![List of users with access to a work package in OpenProject](openproject_user_guide_shared_with_list.png) -If the list contains multiple users you can filter it by Type or Role. +If the list contains multiple users you can filter it by Type or Role. Following user types are available as filters: @@ -48,21 +48,21 @@ Following user roles are available as filters: > **Note:** Please keep in mind that users listed after you have applied a filter may have additional permissions. For example if you select the **View** filter, it is possible that a user is listed, which has inherited additional role as part of user group with permissions exceeding the viewing ones. -You can search for a user or a group via a user name, group name or an email address. You can either select an existing user from the dropdown menu or enter an email address for an entirely new user, who will receive an invitation to create an account on your instance. +You can search for a user or a group via a user name, group name or an email address. You can either select an existing user from the dropdown menu or enter an email address for an entirely new user, who will receive an invitation to create an account on your instance. It is possible to add multiple users or groups at the same time. ![search for a new user to share a work package](openproject_user_guide_shared_search.png) -A user with whom you shared the work package will be added with the role **Work Package Viewer**. However this user is **not** automatically a member of the whole project. A project member will typically have more permissions within the project than viewing a work package. +A user with whom you shared the work package will be added with the role **Work Package Viewer**. However this user is **not** automatically a member of the whole project. A project member will typically have more permissions within the project than viewing a work package. Users with whom you shared the work package will also receive an email notification alerting them that the work package has been shared. -You can always adjust the viewing rights of a user by selecting an option from the dropdown menu next to the user name. +You can always adjust the viewing rights of a user by selecting an option from the dropdown menu next to the user name. ![Shared work package roles](openproject_user_guide_shared_with_list_change_role.png) -> **Note:** granting the **edit** rights to the user will allow you to set this user a work package **Assignee** or **Accountable**. +> **Note:** granting the **edit** rights to the user will allow you to set this user a work package **Assignee** or **Accountable**. Once a work package has been shared, you will see the number of shared users in the **Share** button. @@ -70,21 +70,21 @@ Once a work package has been shared, you will see the number of shared users in ## Remove sharing privileges -You can also remove the user from the list by clicking on **Remove** next to the user name. Please note that this will not remove a user entirely, but only revoke the rights for this work package. User account will remain intact. +You can also remove the user from the list by clicking on **Remove** next to the user name. Please note that this will not remove a user entirely, but only revoke the rights for this work package. User account will remain intact. If you need to revoke all sharing rights from a specific user, please do that under [project members](../../members) or contact your project administrator. -If you need to [delete a user](../../../system-admin-guide/users-permissions/users/#delete-users), please do that in system administration or contact your administrator. +If you need to [delete a user](../../../system-admin-guide/users-permissions/users/#delete-users), please do that in system administration or contact your administrator. ## Shared work packages overview -For an overview of all work packages that have been shared with other users or groups, navigate to the [global modules](../../home/global-modules/), select the module **Work Packages** and choose the filter **Shared with users** from the list of default work package filters on the left side. +For an overview of all work packages that have been shared with other users or groups, navigate to the [global modules](../../home/global-modules/), select the module **Work Packages** and choose the filter **Shared with users** from the list of default work package filters on the left side. The default view will include the **Shared with** column, which lists all users and/or groups that a particular work package was shared with. If there are more than two shared users and/or groups, two of them will be listed and the overall number will be indicated in the badge. Clicking on that number will show the details. If you want to see all shared work packages within a specific project, navigate to that project first and then select the same filter. You can also [adjust this filter](../work-package-table-configuration/#filter-work-packages) and save it under your private work package filters. -You (with the correct permissions) can always change or remove sharing options. +You (with the correct permissions) can always change or remove sharing options. ![Filter for work packages shared with other users in OpenProject](openproject_user_guide_shared_with_users_filter_new.png) diff --git a/docs/user-guide/work-packages/work-package-relations-hierarchies/README.md b/docs/user-guide/work-packages/work-package-relations-hierarchies/README.md index f2e707a096e6..9df54f1e6f54 100644 --- a/docs/user-guide/work-packages/work-package-relations-hierarchies/README.md +++ b/docs/user-guide/work-packages/work-package-relations-hierarchies/README.md @@ -34,11 +34,11 @@ Work package relations indicate that work packages address a similar topic or cr You can select one of the following relations: -- **Related to** - This option adds a link from the work package A to work package B, so that project members can immediately see the connection, even if the work packages are not members of the same hierarchy. +- **Related to** - This option adds a link from the work package A to work package B, so that project members can immediately see the connection, even if the work packages are not members of the same hierarchy. -- **Duplicates / Duplicated by** - This option indicates that the work package B duplicates a work package A in one way or another, for example both address the same task. This can be useful if you have the same work package that needs to be a part of a closed and public projects at the same time. The connection in this case is only semantic, the changes you make in work package A will need to be adapted in work package B manually. +- **Duplicates / Duplicated by** - This option indicates that the work package B duplicates a work package A in one way or another, for example both address the same task. This can be useful if you have the same work package that needs to be a part of a closed and public projects at the same time. The connection in this case is only semantic, the changes you make in work package A will need to be adapted in work package B manually. - **Note**: some changes in statuses will de adjusted automatically for the duplicated work package. Specifically, if the status of a work package A is set to be "closed" (or set to any status that is defined to count as "closed" in the [system settings](../../../system-admin-guide/manage-work-packages/work-package-status/), for example "rejected" often counts as a "closed" status), the status of the work package B will change to "closed". Note that this is direction dependent. Only if the work package A is closed will the work package B be closed as well, not the other way around. + **Note**: some changes in statuses will de adjusted automatically for the duplicated work package. Specifically, if the status of a work package A is set to be "closed" (or set to any status that is defined to count as "closed" in the [system settings](../../../system-admin-guide/manage-work-packages/work-package-status/), for example "rejected" often counts as a "closed" status), the status of the work package B will change to "closed". Note that this is direction dependent. Only if the work package A is closed will the work package B be closed as well, not the other way around. - **Blocks / Blocked by** - This option defines status change restrictions between two work packages. If you set a work package A to be blocking work package B, the status of work package B cannot be set to closed or resolved until the work package A is closed. @@ -52,7 +52,8 @@ You can select one of the following relations: The selected relation status will be automatically displayed in the work package that you enter. For example if you select "Blocks" in the current work package A and specify work package B, work package B will automatically show that it is "Blocked by" A. ### Moving related work packages -The precedes/follows relation is the only one that can constrain or affect the dates of work packages. + +The precedes/follows relation is the only one that can constrain or affect the dates of work packages. Work packages in a precedes/follows relationship do not need to immediately follow one other; there can be a gap. In this case, you can move either forwards or backwards in time without affecting the other as long as the finish date of the predecessor is before the start date of follower. diff --git a/docs/user-guide/work-packages/work-package-table-configuration/README.md b/docs/user-guide/work-packages/work-package-table-configuration/README.md index 4bb57a8fd3dc..2837701b77a1 100644 --- a/docs/user-guide/work-packages/work-package-table-configuration/README.md +++ b/docs/user-guide/work-packages/work-package-table-configuration/README.md @@ -21,15 +21,12 @@ You can configure the work package table view in OpenProject to display the info You can change the header in the table and add or remove columns, filter and group work packages or sort them according to specific criteria. Also, you can change between a flat list view, a hierarchy view and a grouped view. -Save the view to have it available directly from your project menu. A work package view is the sum of all modifications you made to the default table (e.g. filters you set). - - +Save the view to have it available directly from your project menu. A work package view is the sum of all modifications you made to the default table (e.g. filters you set). To open the work package table configuration, open the **Settings** icon with the three dots at the top right of the work package table. ![configure-work-package-table](configure-work-package-table.png) - ## Add or remove columns in the work package table To configure the view of the work package table and have different attributes displayed in the table you can add or remove columns in the work package table. @@ -62,7 +59,7 @@ To add a filter criterion, choose one from the drop-down list next to **+ Add fi ![add-filter](add-filter.png) -You can add as many filter criteria as needed. +You can add as many filter criteria as needed. Also, you can filter by [custom fields](../../../system-admin-guide/custom-fields) if you set this in the custom field configuration. > **Good to know**: Filtering a work package table will temporarily change the default work package type and default status to the values used in the filters to make newly created work packages visible in the table. @@ -82,8 +79,8 @@ Multi-select attributes also have one extra options: Other attributes like Status might offer additional criteria like _open_ or _closed_. Required attributes might only offer two options, _is (OR)_ and _is not_, since they cannot be empty. - ### Filter by text + If you want to search for specific text in the subject, description or comments of a work package, type in the **Filter by text** the expression you want to filter for. The results will be displayed accordingly in the work package table. @@ -92,7 +89,7 @@ The results will be displayed accordingly in the work package table. ### Filter for a work package's children -If you want to only show work package with specific parents (e.g. all work packages belonging to a specific phase of your project) you can use the filter "Parent". Enter all required work packages and press Enter. This will show the selected work package(s) and its/their children. +If you want to only show work package with specific parents (e.g. all work packages belonging to a specific phase of your project) you can use the filter "Parent". Enter all required work packages and press Enter. This will show the selected work package(s) and its/their children. If you only select work packages without children, no work packages will be shown at all. ![filter-for-parent-work-package](filter-for-parent-work-package.png) @@ -108,7 +105,7 @@ To view all work packages across all projects you could select everything, or us ### Filter by ID or work package name -If you want to [create a work package view](#save-work-package-views) with only specific work packages you can use the filter "ID". By entering the ID or subject of work packages you can select them. +If you want to [create a work package view](#save-work-package-views) with only specific work packages you can use the filter "ID". By entering the ID or subject of work packages you can select them. Another use case would be to *exclude* specific work packages (e.g. you want to display all milestones but one). Therefore, use the "is not" option next to the filter's name on the left. ![filtering-by-work-package-id](filtering-by-work-package-id.png) @@ -118,7 +115,7 @@ Another use case would be to *exclude* specific work packages (e.g. you want to There are several options to filter for the assignee of a work package. You can choose one of these filters: - Assignee: Filters for work packages where the specified user or group is set as Assignee -- Assignee or belonging group: +- Assignee or belonging group: - When filtering for a single user: Work packages assigned to this user, and any group it belongs to - When filtering for a group: Work packages assigned to this group, and any users within - Assignee's group: Filters for work packages assigned to a user from this group @@ -134,11 +131,7 @@ Use the filter "Attachment content" or "Attachment file name" to filter attached ![advanced-filter-work-package-table](advanced-filter-work-package-table.png) - - -For both the file name and the content, you can then differentiate the filtering with the "contains" and "does not contain" options for selected keywords and text passages. To do this, please enter the corresponding text in the field next to it. - - +For both the file name and the content, you can then differentiate the filtering with the "contains" and "does not contain" options for selected keywords and text passages. To do this, please enter the corresponding text in the field next to it. ![advanced-filter-options](advanced-filter-options.png) @@ -149,10 +142,11 @@ It will then display the corresponding work package with the attachment. ## Sort the work package table ### Automatic sorting of the work package table -By default, the work package table will be sorted by work package ID. + +By default, the work package table will be sorted by work package ID.
    -The **ID** is unique for a work package within OpenProject. It will be set automatically from the system. With the ID you can reference a specific work package in OpenProject. +The **ID** is unique for a work package within OpenProject. It will be set automatically from the system. With the ID you can reference a specific work package in OpenProject.
    To sort the work package table view, open the [work package table configuration](#work-package-table-configuration) and select the tab **Sort by**. You can sort by up to three attributes, either ascending or descending. @@ -162,9 +156,7 @@ Clicking the blue **Apply** button will save your changes and display the result ![sort-work-packages](sort-work-packages.png) -> **Please note**: If you have the hierarchy mode activated, all filtered table results will be augmented with their ancestors. Hierarchies can be expanded and collapsed. - - +> **Please note**: If you have the hierarchy mode activated, all filtered table results will be augmented with their ancestors. Hierarchies can be expanded and collapsed. Therefore, the results may differ if you sort in a flat list or in a hierarchy mode. @@ -174,14 +166,13 @@ The same filter applied in the hierarchy mode. ### Manual sorting of the work package table -You can sort the work package table manually, using the icon with the 6 dots on the left of each work package to drag and drop it. +You can sort the work package table manually, using the icon with the 6 dots on the left of each work package to drag and drop it. Moving a work package will change its attributes, depending on the kind of table displayed, e.g. hierarchy changes or priority. -To keep the sorting it is necessary to [save the work package view](#save-work-package-views). +To keep the sorting it is necessary to [save the work package view](#save-work-package-views). Please note: This has no effect on the "All open" view; you have to save your sorting with another name. - ## Flat list, Hierarchy mode and Group by You have three different options to display results in the work package table. @@ -196,8 +187,6 @@ To switch between the different criteria, open the [work package table configura ![display-settings](image-20210426164224748.png) - - When you group the work package table by an attribute or by project a **button to collapse groups** shows up: ![collapse-button](collapse-all-expand-all.png) @@ -205,7 +194,7 @@ Use it to quickly collapse or expand all groups at the same time. Find out [here ### Display sums in work package table -To display the sums of eligible work package attributes, go to the work package table configuration and click on the tab **Display settings** (see screenshot above). When you tick the box next to **Display sums** the sums of **Work** (earlier called Estimated time) and **Remaining work** (earlier called Remaining hours) as well as custom fields of the type Integer or Float will be displayed at the bottom of the work package table. +To display the sums of eligible work package attributes, go to the work package table configuration and click on the tab **Display settings** (see screenshot above). When you tick the box next to **Display sums** the sums of **Work** (earlier called Estimated time) and **Remaining work** (earlier called Remaining hours) as well as custom fields of the type Integer or Float will be displayed at the bottom of the work package table. If you group the work package table, sums will be shown for each group. ## Attribute highlighting (Enterprise add-on) @@ -266,6 +255,6 @@ If you make changes to a saved view, e.g. change a filter criteria, you have to ![Work-package-change-saved-views](Work-package-change-saved-views.png) -If you want to save a completely new work package view, again click on the settings and select **Save as...** as described [above](#save-work-package-views). +If you want to save a completely new work package view, again click on the settings and select **Save as...** as described [above](#save-work-package-views). > **Please note**: You can't change the default "All open" view. Therefore pressing the disc icon won't have any effect on the default view that is displayed when navigating to the work packages module. You always have to create a new view (filter, group, etc.), set a name and save it (private or public). diff --git a/docs/user-guide/work-packages/work-package-views/README.md b/docs/user-guide/work-packages/work-package-views/README.md index cf10a0062009..30b6dab6d6e6 100644 --- a/docs/user-guide/work-packages/work-package-views/README.md +++ b/docs/user-guide/work-packages/work-package-views/README.md @@ -33,7 +33,6 @@ The containing work packages in any view can be displayed a number of different * [Gantt view](../../gantt-chart) * [Board view](../../../getting-started/boards-introduction/) - ### Table view The table view shows all work packages in a table with selected attributes in the columns. @@ -62,9 +61,8 @@ Also, you can use the full screen icon in the work package split screen view in ![full-screen-icon](openproject-user-guide-work-packages-full-screen-icon.png) -Then, the work package with all its details will be displayed. +Then, the work package with all its details will be displayed. -The arrow next to the subject will bring you back to the table view. +The arrow next to the subject will bring you back to the table view. ![back-to-list-view](openproject-user-guide-work-package-full-screen-back-arrow.png) - diff --git a/docs/user-guide/work-packages/work-packages-faq/README.md b/docs/user-guide/work-packages/work-packages-faq/README.md index fa3a7715a8db..6496608bb4bb 100644 --- a/docs/user-guide/work-packages/work-packages-faq/README.md +++ b/docs/user-guide/work-packages/work-packages-faq/README.md @@ -45,26 +45,26 @@ You can set the assignee filter in the work package table to "Assignee and belon ### How can I track the progress of my work package? -You can track the progress either manually by changing the progress -bar in the work package details yourself. Or you can track it -automatically by assigning the progress in % to each status of -a work package. Please find the guide on how to do the automatic -tracking (in bullet point 5) +You can track the progress either manually by changing the progress +bar in the work package details yourself. Or you can track it +automatically by assigning the progress in % to each status of +a work package. Please find the guide on how to do the automatic +tracking (in bullet point 5) [here](../../../system-admin-guide/manage-work-packages/work-package-settings). ### How can I track the progress of work packages with children? -OpenProject automatically calculates the progress of work packages with children. +OpenProject automatically calculates the progress of work packages with children. It sums up the progress of the children weighted by the **Work** (earlier called Estimated time) of each child. OpenProject uses 1 hour as the default value if **Work** field -is empty. When adding the progress bar to a work package hierarchy view, -please always add the **Work** column as well so that you can track +is empty. When adding the progress bar to a work package hierarchy view, +please always add the **Work** column as well so that you can track the calculation. **Work** (Estimated time) manually added to work packages with children is ignored. ### Can I set multiple parents for one work package? -No, this is not possible. +No, this is not possible. ### Why can I not log time in a work package? @@ -78,7 +78,7 @@ One possible solution: If you receive this error message when trying to create a You can change this in your account settings. Please find out more [here](../../../getting-started/my-account/#change-the-order-to-display-comments). -### Why are changes on parent work packages which are triggered by making changes to a child work package not aggregated? +### Why are changes on parent work packages which are triggered by making changes to a child work package not aggregated? OpenProject aggregates work package activities only if: @@ -95,13 +95,13 @@ If you create e.g. a Feature and assign it to a sprint, the position of the feat ### Can I restore a deleted work package? -There is no easy way to restore a deleted work package. Generally, you have the option to create and restore your own backups. +There is no easy way to restore a deleted work package. Generally, you have the option to create and restore your own backups. ## Filters and queries ### How can I keep changed columns or filters for the work package tables? -Click on the three dots in the upper right corner and choose **Save** or **Save as**. The view's name will appear in the menu bar on the left. +Click on the three dots in the upper right corner and choose **Save** or **Save as**. The view's name will appear in the menu bar on the left. Please note: You can't change the default view "All open", clicking Save will have no effect. ### How can I set certain filters and columns in the work package tables for my colleagues? @@ -120,16 +120,14 @@ It is most likely that you did not save the view of your work package table afte ### In the global work package tables, not all custom fields are available for filters. Why? -In the [global work package tables](../../projects/project-lists/#global-work-package-tables), only the custom fields that apply to all projects are displayed in the filter area (setting "for all projects" in the administration). +In the [global work package tables](../../projects/project-lists/#global-work-package-tables), only the custom fields that apply to all projects are displayed in the filter area (setting "for all projects" in the administration). There are two reasons for this: 1. Potentially, a lot of values are displayed in the global filter list - especially if a lot of custom fields are used in individual projects. This can impair usability and (in extreme cases) performance. 2. As the values in the filter area are displayed for all users, sensitive information (name of the custom fields and their values) could in principle be visible to users who do not have access to the respective project where the custom field is activated. ### I have a parent work package with multiple children. In the work package table I don't see all of the children below the parent. Why? How can I change this? -Please increase the number of displayed work packages per page [in the administration](../../../system-admin-guide/system-settings/general-settings/#general-system-settings). Then the probability of this phenomenon happening is lower. +Please increase the number of displayed work packages per page [in the administration](../../../system-admin-guide/system-settings/general-settings/#general-system-settings). Then the probability of this phenomenon happening is lower. This is a known behavior of OpenProject, but not trivial to solve. There's already a feature request for this [here](https://community.openproject.org/wp/34925). - - ## Status and type ### When I create a new work package it's always a "Task". How can I change the default work package type? @@ -159,11 +157,9 @@ The status which can be selected by users (based on the workflow) is always dete To work with different status, first create those status in *Administration ->Work packages ->Status*. Next, go to *Administration ->Work packages ->Workflow* and select the combination of Type and Role for which you would like to set the allowed workflow transition. You can e.g. create a role “Marketing – Member” and select it as well as the type (e.g. “Task”). Make sure to uncheck the option “Only display statuses that are used by this type” and click on **Edit**. Now, you can select the correct status transitions. -Repeat this step for the other (department) roles (e.g. “IT – Member”) and select the desired status transitions. This way, you can set different status for each department (only the default status is shared (i.e. “New” by default)). +Repeat this step for the other (department) roles (e.g. “IT – Member”) and select the desired status transitions. This way, you can set different status for each department (only the default status is shared (i.e. “New” by default)). Please keep in mind that it may not be possible for a member of a different department to update the status of a work package if it has been updated before by another department (since the workflow may not support this status transition). - - ## Move and copy ### Which permissions are necessary to move a work package from one project to another? @@ -178,7 +174,7 @@ To move a work package from one project to another, the following requirements m ### How can I copy work package hierarchies with their relations? You can create work package templates with hierarchies (parent and child work packages) and copy these templates, including the relations. -First, navigate to the work package table. Highlight all work packages (in the hierarchy) which you want to copy. +First, navigate to the work package table. Highlight all work packages (in the hierarchy) which you want to copy. To highlight and edit several work packages at once, keep the Ctrl key pressed and select the ones to be copied. **Right-click** on the highlighted work packages. This will open a context menu. @@ -207,7 +203,7 @@ You can create a custom field for this that you add to the work package form. Pl ### Will work package custom fields of the type "long text" be shown in the export of a work package tables? -As custom fields of the type "long text" cannot be added as a column, they cannot be exported via the page-wide export. However, individual work packages can be exported. This can be done either via the "PDF Download" or (better) via the browser print function. +As custom fields of the type "long text" cannot be added as a column, they cannot be exported via the page-wide export. However, individual work packages can be exported. This can be done either via the "PDF Download" or (better) via the browser print function. ### Can I sum up custom fields? @@ -216,8 +212,10 @@ Yes, you can display the sum of custom fields in the work package tables by chec Calculating a sum across different attributes (e.g. Estimated time + added hours) is however not possible. ## Sharing work packages + ### Is it possible to share a work packages with a user outside my project? -Yes, starting with OpenProject 13.1 you can [share a work package](../share-work-packages) with users outside your project or even with user who do not yet have an account on your instance. + +Yes, starting with OpenProject 13.1 you can [share a work package](../share-work-packages) with users outside your project or even with user who do not yet have an account on your instance. ## Export @@ -240,20 +238,18 @@ This provides an overview of "worker_backed_up" which shows the number of backgr For a documentation of how to do this, please refer to [these instructions](../../../installation-and-operations/operation/control) (see section "Scaling the number of web workers"). - - ## Versions and backlog -### I cannot change the version of a parent work package or child work package. +### I cannot change the version of a parent work package or child work package -The fastest way to resolve this issue is to deactivate the backlogs module in the project where your tasks are located. This should instantly resolve the issue that you cannot update the tasks anymore. -If you are actively working with the backlogs module in the project, you could then e.g. move the parent Epic from the parent project to the project where the tasks are located. -Alternatively, you could change the type "Task" to a different type (e.g. "User Story"). This should also resolve the issue. -For context: On the backlogs page you can switch to the "Task board". +The fastest way to resolve this issue is to deactivate the backlogs module in the project where your tasks are located. This should instantly resolve the issue that you cannot update the tasks anymore. +If you are actively working with the backlogs module in the project, you could then e.g. move the parent Epic from the parent project to the project where the tasks are located. +Alternatively, you could change the type "Task" to a different type (e.g. "User Story"). This should also resolve the issue. +For context: On the backlogs page you can switch to the "Task board". The task board shows the work packages assigned to a sprint (e.g. Epic, User Story) as well as the associated tasks. The task board however can only display tasks located in the same project as the (parent) work package (Epic, User story). Therefore, to avoid showing limited data, tasks and their parent work packages must be located in the same project and have to be assigned to the same version. ### What does the error message "Parent is invalid because the work package (...) is a backlog task and therefore cannot have a parent outside of the current project" mean? -This message appears when the Backlogs module is activated and you try to set a work package belonging to project A as a child of another work package belonging to project B. +This message appears when the Backlogs module is activated and you try to set a work package belonging to project A as a child of another work package belonging to project B. In the Backlogs module work packages can only have children of the same version and the same project. To avoid displaying different information in the backlog and in the boards view this restriction is in place. You can solve it by disabling the Backlogs module or by changing the project (and if necessary version) of the work package you'd like to move. diff --git a/docs/user-guide/wysiwyg/README.md b/docs/user-guide/wysiwyg/README.md index 61ce3afd6345..971a84c7b5f7 100644 --- a/docs/user-guide/wysiwyg/README.md +++ b/docs/user-guide/wysiwyg/README.md @@ -12,9 +12,6 @@ Starting with version 8.0.0, OpenProject features a quasi-WYSIWYG editor, powere > **Please note:** In some resources such as work packages or comments, the editor does not exhibit all functionality such as macros or image upload. > In the work package split screen view (details view) you may have to use the three vertical dots to access additional features of the editor. - - - | Topic | Content | | ------------------------------------------------------------ | -------------------------------------------------------- | | [Basic formatting](#basic-formatting) | Basic formatting elements in the WYSIWYG editor | @@ -43,7 +40,6 @@ CKEditor uses widgets to display block elements such as images, tables, and othe When you have a widget selected, you can remove or cut it. You can create a newline below it by selecting the widget and pressing `ENTER` or `↓ (ARROW DOWN)`, or a newline above it by pressing `SHIFT+enter` or `↑ (ARROW UP)`. This is especially needed when the widget is the first or last element on the page to insert a line below or above it. - ### Code Blocks As CKEditor5 currently does not provide support for code blocks, OpenProject can display, but not edit code blocks within the CKEditor instance. A code block can be edited through a modal window within a `CodeMirror` editor instance. This has the advantage of providing syntax highlighting and code sensing ([for supported languages](https://codemirror.net/mode/)). @@ -58,10 +54,9 @@ CKEditor5 allows certain CommonMark-like [autoformatting keyboard strokes](https - Create bold or italic styles by typing `**will become bold**`, `_will become italic_`, - Create heading of different indentation with `#`, `##`, `###`, … -- Create a bulleted list by starting the line with `* ` or `-` and a space +- Create a bulleted list by starting the line with `*` or `-` and a space - Create a numbered list by starting the line with `1.` or `1)` and a space - ## Image handling In supported resources of OpenProject where attachments are allowed, you can add images to the page by either @@ -74,9 +69,7 @@ The image will be automatically uploaded and stored as an attachment. You can ad ![Resize Image](resize-imagesshort.gif) - - -## Keyboard shortcuts +## Keyboard shortcuts CKEditor has a wide variety of keyboard shortcuts you can use. You can find a list of documented shortcuts here: [https://ckeditor.com/docs/ckeditor5/latest/features/keyboard-support.html](https://ckeditor.com/docs/ckeditor5/latest/features/keyboard-support.html). @@ -91,61 +84,48 @@ On top of that, OpenProject adds the following shortcut: OpenProject has supported macros on textile formatted pages and continues to do so with the WYSIWYG editor. Note that macros are not expanded while editing the page, instead a placeholder is shown. You can find the macros here in the text editor: -![Macros text editor](image-20201109183018255.png) - - +![Macros text editor](image-20201109183018255.png) ### Table of contents -Where applicable, the table of contents (TOC) macro will output a listing of all headings on the current page. - - +Where applicable, the table of contents (TOC) macro will output a listing of all headings on the current page. ### Work package button Configure a button or link to target the work package creation screen in the current project. You can preselect a work package type that should be selected, making it easy to guide the users to the work package creation form. - - ### Include wiki page Include the content of a given wiki page in the current, or another visible project. - - ### Embed work package table and Gantt chart This is the most flexible macro that provides extensive functionality regarding the inclusion of dynamic work package tables with all the potential of the regular work package table. -By adding an embedded work package table through the toolbar, you can configure the table view (such as columns, grouping, filters, and further properties) in a popup window. +By adding an embedded work package table through the toolbar, you can configure the table view (such as columns, grouping, filters, and further properties) in a popup window. The rendered page will then fetch the work package table results dynamically, respecting the visibility for each user. Use it to embed views in other pages, create reporting of multiple results, or to embed a Gantt chart view. - - - ## Links to OpenProject resources As with the textile formatting syntax, you can link to other resources within OpenProject using the same shortcuts as before. Create links to a: - - -- **wiki page**: `[[Wiki page]]` -- **wiki page with separate link name**: `[[Wiki page|The text of the link]]` -- **wiki page in the Sandbox project**: `[[Sandbox:Wiki page]]` +- **wiki page**: `[[Wiki page]]` +- **wiki page with separate link name**: `[[Wiki page|The text of the link]]` +- **wiki page in the Sandbox project**: `[[Sandbox:Wiki page]]` - **work package with ID12**: `#12` -- **work package with ID 12 with subject and type**: `##12` -- **work package with ID 12 with subject, type, status, and dates**: `###12` +- **work package with ID 12 with subject and type**: `##12` +- **work package with ID 12 with subject, type, status, and dates**: `###12` - **version by ID or name**: `version#3`, `version:"Release 1.0.0"` - **project by ID/name**: `project#12` , `project:"My project name"` - **attachment by filename**: `attachment:filename.zip` - **meeting by ID/name**: `meeting#12` , `meeting:"My meeting name"` - **document by ID/name**: `document#12` , `document:"My document name"` -- **user by id or login**: `user#4` , `user:"johndoe"` +- **user by id or login**: `user#4` , `user:"johndoe"` - **a forum message by ID**: `message#1218` -- **repository revision 43**: `r43` +- **repository revision 43**: `r43` - **commit by hash:** `commit:f30e13e4` - **To a source file in the repository**: `source:"some/file"` @@ -153,14 +133,10 @@ To avoid processing these items, preceding them with a bang `!` character such a > **Please note**: All these macros need to be written as a new word (i.e., with at least one space before it or at the beginning of a paragraph/sentence. Macros contained within a word such as `somethingmeeting#4` will not be parsed. - - ### Autocompletion for work packages and users For work packages and users, typing `#` or `@` will open an autocompleter for visible work packages and users, respectively. - - ## Embedding of work package attributes and project attributes You can embed specific attributes of work packages or projects using a certain syntax. @@ -172,16 +148,11 @@ Examples: > **Please note**: Referencing a work package by subject results in only looking for work packages with that given subject in the current project (if any). If you need to cross-reference work packages, use their ID to pinpoint the work package you want to reference. - - - ### Embedding attribute help texts -You can also embed attribute values and [their help texts](../../system-admin-guide/attribute-help-texts/) by using `workPackageLabel` instead of: `workPackageLabel:1234:status` which would output the translated label for "Status" and (if exists), the corresponding help text for it. +You can also embed attribute values and [their help texts](../../system-admin-guide/attribute-help-texts/) by using `workPackageLabel` instead of: `workPackageLabel:1234:status` which would output the translated label for "Status" and (if exists), the corresponding help text for it. - -> **Please note**: These macros will only be expanded in the frontend. For each individual user, the correct permissions will be checked and the macro will result in an error if the user is not allowed to view the respective resource. - +> **Please note**: These macros will only be expanded in the frontend. For each individual user, the correct permissions will be checked and the macro will result in an error if the user is not allowed to view the respective resource. ## Attributes @@ -231,4 +202,3 @@ The following list contains all supported attribute names for the `projectValue` | Status description | `projectValue:statusExplanation` | | Parent project | `projectValue:parent` | | Project public? (boolean) | `projectValue:public` | - diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js index c9e146f26c0c..0481eb6edfca 100644 --- a/frontend/.eslintrc.js +++ b/frontend/.eslintrc.js @@ -168,6 +168,9 @@ module.exports = { "no-return-assign": ["error", "except-parens"], "no-plusplus": ["error", { "allowForLoopAfterthoughts": true }], + // https://typescript-eslint.io/rules/no-base-to-string/ Disable false positives due to missing types + "@typescript-eslint/no-base-to-string": ["error", { "ignoredTypeNames": ["URI", "Error", "RegExp", "URL", "URLSearchParams"] }], + ////////////////////////////////////////////////////////////////////// // Anything below this line should be turned on again at some point // ////////////////////////////////////////////////////////////////////// diff --git a/frontend/angular.json b/frontend/angular.json index a873bf0d4cfe..4afd08d3e94a 100644 --- a/frontend/angular.json +++ b/frontend/angular.json @@ -61,8 +61,7 @@ ], "stylePreprocessorOptions": { "includePaths": [ - "src/assets/sass/", - "src/app/spot/styles/sass/variables/" + "src/assets/sass/" ] }, "scripts": [], @@ -136,19 +135,19 @@ "serve": { "builder": "@angular-devkit/build-angular:dev-server", "options": { - "browserTarget": "OpenProject:build", - "proxyConfig": "cli_to_rails_proxy.js" + "proxyConfig": "cli_to_rails_proxy.js", + "buildTarget": "OpenProject:build" }, "configurations": { "production": { - "browserTarget": "OpenProject:build:production" + "buildTarget": "OpenProject:build:production" } } }, "extract-i18n": { "builder": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "OpenProject:build" + "buildTarget": "OpenProject:build" } }, "test": { diff --git a/frontend/doc/STYLING.md b/frontend/doc/STYLING.md index 03d937b0170e..de431a17cbbe 100644 --- a/frontend/doc/STYLING.md +++ b/frontend/doc/STYLING.md @@ -11,7 +11,7 @@ The styleguide itself is just a long html page demonstrating the components. It The general approach here is that for every partial of sass there is a Markdown file (`*.lsg`) describing it: -```bash +```shell $ cd app/assets/stylesheets/content $ ls -la _accounts* _accounts.lsg diff --git a/frontend/package-lock.json b/frontend/package-lock.json index f6c90ff6d8b6..c0632b77b9c5 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -9,54 +9,55 @@ "version": "0.1.0", "license": "GPLv3", "dependencies": { - "@angular-builders/custom-webpack": "^16.0.0", - "@angular/animations": "^16.2.0", - "@angular/cdk": "^16.2.0", - "@angular/cli": "^16.2.0", - "@angular/common": "^16.2.0", - "@angular/compiler": "^16.2.0", - "@angular/compiler-cli": "^16.2.0", - "@angular/core": "^16.2.0", - "@angular/elements": "^16.2.0", - "@angular/forms": "^16.2.0", - "@angular/platform-browser": "^16.2.0", - "@angular/platform-browser-dynamic": "^16.2.0", - "@angular/router": "^16.2.0", - "@appsignal/javascript": "^1.3.26", - "@appsignal/plugin-breadcrumbs-console": "^1.1.27", - "@appsignal/plugin-breadcrumbs-network": "^1.1.21", + "@angular-builders/custom-webpack": "^17.0.2", + "@angular/animations": "^17.3.4", + "@angular/cdk": "^17.3.4", + "@angular/cli": "^17.3.4", + "@angular/common": "^17.3.4", + "@angular/compiler": "^17.3.4", + "@angular/compiler-cli": "^17.3.4", + "@angular/core": "^17.3.4", + "@angular/elements": "^17.3.4", + "@angular/forms": "^17.3.4", + "@angular/platform-browser": "^17.3.4", + "@angular/platform-browser-dynamic": "^17.3.4", + "@angular/router": "^17.3.4", + "@appsignal/javascript": "^1.3.28", + "@appsignal/plugin-breadcrumbs-console": "^1.1.29", + "@appsignal/plugin-breadcrumbs-network": "^1.1.22", "@datorama/akita": "^8.0.1", "@floating-ui/dom": "^1.2.1", - "@fullcalendar/angular": "^6.1.8", + "@fullcalendar/angular": "^6.1.10", "@fullcalendar/common": "^5.11.5", - "@fullcalendar/core": "^6.1.8", - "@fullcalendar/daygrid": "^6.1.8", - "@fullcalendar/interaction": "^6.1.8", - "@fullcalendar/list": "^6.1.8", - "@fullcalendar/resource": "^6.1.8", + "@fullcalendar/core": "^6.1.11", + "@fullcalendar/daygrid": "^6.1.11", + "@fullcalendar/interaction": "^6.1.11", + "@fullcalendar/list": "^6.1.11", + "@fullcalendar/resource": "^6.1.11", "@fullcalendar/resource-common": "^5.11.5", - "@fullcalendar/resource-timeline": "^6.1.8", - "@fullcalendar/timegrid": "^6.1.8", + "@fullcalendar/resource-timeline": "^6.1.11", + "@fullcalendar/timegrid": "^6.1.11", "@github/webauthn-json": "^2.1.1", - "@hotwired/stimulus": "^3.2.1", - "@hotwired/turbo": "^7.3.0", - "@hotwired/turbo-rails": "^7.3.0", + "@hotwired/stimulus": "^3.2.2", + "@hotwired/turbo": "^8.0.4", + "@hotwired/turbo-rails": "^8.0.4", "@kolkov/ngx-gallery": "^2.0.1", - "@ng-select/ng-option-highlight": "0.0.7", - "@ng-select/ng-select": "^11.0.0", + "@ng-select/ng-option-highlight": "12.0.6", + "@ng-select/ng-select": "^12.0.7", "@ngneat/content-loader": "^7.0.0", "@ngx-formly/core": "^6.1.4", - "@openproject/octicons-angular": "^19.10.0", - "@openproject/primer-view-components": "^0.28.1", + "@openproject/octicons-angular": "^19.11.0", + "@openproject/primer-view-components": "^0.29.1", "@openproject/reactivestates": "^3.0.1", - "@primer/css": "^21.1.1", - "@uirouter/angular": "^12.0.0", - "@uirouter/core": "^6.0.8", + "@primer/css": "^21.2.2", + "@types/hotwired__turbo": "^8.0.1", + "@uirouter/angular": "^13.0.0", + "@uirouter/core": "^6.1.0", "@uirouter/rx": "^1.0.0", "@vusion/webfonts-generator": "^0.8.0", "@w11k/ngx-componentdestroyed": "^5.0.2", "@xeokit/xeokit-bim-viewer": "2.5.1-beta-28", - "autoprefixer": "^10.4.16", + "autoprefixer": "^10.4.19", "byte-base64": "^1.1.0", "chart.js": "4.3.0", "chartjs-plugin-datalabels": "^2.2.0", @@ -66,10 +67,9 @@ "crossvent": "^1.5.4", "dom-autoscroller": "^2.2.8", "dom-plane": "^1.0.2", - "dragula": "^3.5.2", + "dragula": "^3.7.3", "expose-loader": "^0.7.5", "flatpickr": "^4.6.13", - "fuse.js": "^3.4.5", "glob": "^7.1.4", "hammerjs": "^2.0.8", "i18n-js": "^4.3.0", @@ -83,12 +83,12 @@ "mark.js": "^8.11.0", "mdx-embed": "^1.1.2", "mime": "^2.5.2", - "moment": "^2.29.4", - "moment-timezone": "^0.5.43", + "moment": "^2.30.1", + "moment-timezone": "^0.5.45", "mousetrap": "~1.6.3", "ng-dynamic-component": "^10.7.0", "ng2-charts": "^4.1.1", - "ng2-dragula": "^3.2.0", + "ng2-dragula": "^5.1.0", "ngx-cookie-service": "^14.0.0", "observable-array": "0.0.4", "pako": "^2.0.3", @@ -96,23 +96,23 @@ "reflect-metadata": "^0.1.13", "rxjs": "^7.8.0", "screenfull": "^4.2.1", - "stimulus-use": "^0.52.0", + "stimulus-use": "^0.52.2", "tablesorter": "^2.31.3", "ts-action": "^11.0.0", "ts-action-operators": "^9.1.2", "typedjson": "^1.5.1", "urijs": "^1.19.11", "uuid": "^8.3.2", - "zone.js": "~0.11.4" + "zone.js": "~0.14.4" }, "devDependencies": { - "@angular-devkit/build-angular": "^16.2.0", - "@angular-eslint/builder": "^16.1.0", - "@angular-eslint/eslint-plugin": "^16.1.0", - "@angular-eslint/eslint-plugin-template": "^16.1.0", - "@angular-eslint/schematics": "16.1.0", - "@angular-eslint/template-parser": "^16.1.0", - "@angular/language-service": "16.2.0", + "@angular-devkit/build-angular": "^17.3.4", + "@angular-eslint/builder": "^17.3.0", + "@angular-eslint/eslint-plugin": "^17.3.0", + "@angular-eslint/eslint-plugin-template": "^17.3.0", + "@angular-eslint/schematics": "17.3.0", + "@angular-eslint/template-parser": "^17.3.0", + "@angular/language-service": "17.3.4", "@html-eslint/eslint-plugin": "^0.15.0", "@html-eslint/parser": "^0.15.0", "@jsdevtools/coverage-istanbul-loader": "3.0.5", @@ -130,12 +130,12 @@ "@types/urijs": "^1.19.6", "@types/uuid": "^8.3.4", "@types/webpack-env": "^1.16.0", - "@typescript-eslint/eslint-plugin": "5.48.0", - "@typescript-eslint/parser": "5.48.0", - "browserslist": "^4.8.7", - "eslint": "^8.34.0", + "@typescript-eslint/eslint-plugin": "^7.7.1", + "@typescript-eslint/parser": "^7.7.1", + "browserslist": "^4.23.0", + "eslint": "^8.57.0", "eslint-config-airbnb-base": "^15.0.0", - "eslint-config-airbnb-typescript": "^17.0.0", + "eslint-config-airbnb-typescript": "^18.0.0", "eslint-plugin-change-detection-strategy": "^0.1.1", "eslint-plugin-import": "^2.26.0", "eslint-plugin-jasmine": "^4.1.3", @@ -157,7 +157,7 @@ "source-map-explorer": "^2.5.2", "theo": "^8.1.5", "ts-node": "~8.3.0", - "typescript": "4.9", + "typescript": "5.4.5", "webpack-bundle-analyzer": "^4.4.2" }, "optionalDependencies": { @@ -185,38 +185,23 @@ "node": ">=6.0.0" } }, - "node_modules/@angular-builders/custom-webpack": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/@angular-builders/custom-webpack/-/custom-webpack-16.0.1.tgz", - "integrity": "sha512-C6INC8UOYDcp8LJwNhE0m66yp+nZX50JdgGI8oRn7fqw3gO58qhDgXrR/8BCrSeC8eOx8WxSuvBJ6u+9dozhyw==", + "node_modules/@angular-builders/common": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@angular-builders/common/-/common-1.0.2.tgz", + "integrity": "sha512-lUusRq6jN1It5LcUTLS6Q+AYAYGTo/EEN8hV0M6Ek9qXzweAouJaSEnwv7p04/pD7yJTl0YOCbN79u+wGm3x4g==", "dependencies": { - "@angular-devkit/architect": ">=0.1600.0 < 0.1700.0", - "@angular-devkit/build-angular": "^16.0.0", - "@angular-devkit/core": "^16.0.0", - "lodash": "^4.17.15", + "@angular-devkit/core": "^17.1.0", "ts-node": "^10.0.0", - "tsconfig-paths": "^4.1.0", - "webpack-merge": "^5.7.3" + "tsconfig-paths": "^4.1.0" }, "engines": { "node": "^14.20.0 || ^16.13.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^16.0.0" } }, - "node_modules/@angular-builders/custom-webpack/node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/@angular-builders/custom-webpack/node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "node_modules/@angular-builders/common/node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -255,110 +240,130 @@ } } }, + "node_modules/@angular-builders/custom-webpack": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@angular-builders/custom-webpack/-/custom-webpack-17.0.2.tgz", + "integrity": "sha512-K0jqdW5UdVIeKiZXO4nLiiiVt0g6PKJELdxgjsBGMtyRk+RLEY+pIp1061oy/Yf09nGYseZ7Mdx3XASYHQjNwA==", + "dependencies": { + "@angular-builders/common": "1.0.2", + "@angular-devkit/architect": ">=0.1700.0 < 0.1800.0", + "@angular-devkit/build-angular": "^17.0.0", + "@angular-devkit/core": "^17.0.0", + "lodash": "^4.17.15", + "webpack-merge": "^5.7.3" + }, + "engines": { + "node": "^14.20.0 || ^16.13.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^17.0.0" + } + }, "node_modules/@angular-devkit/architect": { - "version": "0.1602.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.13.tgz", - "integrity": "sha512-ejrOYoXgbhDYjdaW4B2SyWeb6AqR8vqqzMyvCq2JX7fo08IhLnVu1fcl0fwr161l37TuzgPNWrHSciOzzmZDkw==", + "version": "0.1703.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1703.6.tgz", + "integrity": "sha512-Ck501FD/QuOjeKVFs7hU92w8+Ffetv0d5Sq09XY2/uygo5c/thMzp9nkevaIWBxUSeU5RqYZizDrhFVgYzbbOw==", "dependencies": { - "@angular-devkit/core": "16.2.13", + "@angular-devkit/core": "17.3.6", "rxjs": "7.8.1" }, "engines": { - "node": "^16.14.0 || >=18.10.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@angular-devkit/build-angular": { - "version": "16.2.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.2.13.tgz", - "integrity": "sha512-2G8gnBpBKcu+/jJH5DJZyMgn2RwDFPgiNSkcLKFg5DdqVFVT3CCoZAobfpAEMndrysfMmoUPGuAmsgCfdczQjg==", - "dependencies": { - "@ampproject/remapping": "2.2.1", - "@angular-devkit/architect": "0.1602.13", - "@angular-devkit/build-webpack": "0.1602.13", - "@angular-devkit/core": "16.2.13", - "@babel/core": "7.22.9", - "@babel/generator": "7.22.9", + "version": "17.3.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.3.6.tgz", + "integrity": "sha512-K4CEZvhQZUUOpmXPVoI1YBM8BARbIlqE6FZRxakmnr+YOtVTYE5s+Dr1wgja8hZIohNz6L7j167G9Aut7oPU/w==", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.1703.6", + "@angular-devkit/build-webpack": "0.1703.6", + "@angular-devkit/core": "17.3.6", + "@babel/core": "7.24.0", + "@babel/generator": "7.23.6", "@babel/helper-annotate-as-pure": "7.22.5", "@babel/helper-split-export-declaration": "7.22.6", - "@babel/plugin-proposal-async-generator-functions": "7.20.7", - "@babel/plugin-transform-async-to-generator": "7.22.5", - "@babel/plugin-transform-runtime": "7.22.9", - "@babel/preset-env": "7.22.9", - "@babel/runtime": "7.22.6", - "@babel/template": "7.22.5", + "@babel/plugin-transform-async-generator-functions": "7.23.9", + "@babel/plugin-transform-async-to-generator": "7.23.3", + "@babel/plugin-transform-runtime": "7.24.0", + "@babel/preset-env": "7.24.0", + "@babel/runtime": "7.24.0", "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "16.2.13", - "@vitejs/plugin-basic-ssl": "1.0.1", + "@ngtools/webpack": "17.3.6", + "@vitejs/plugin-basic-ssl": "1.1.0", "ansi-colors": "4.1.3", - "autoprefixer": "10.4.14", + "autoprefixer": "10.4.18", "babel-loader": "9.1.3", "babel-plugin-istanbul": "6.1.1", "browserslist": "^4.21.5", - "chokidar": "3.5.3", "copy-webpack-plugin": "11.0.0", - "critters": "0.0.20", - "css-loader": "6.8.1", - "esbuild-wasm": "0.18.17", - "fast-glob": "3.3.1", - "guess-parser": "0.4.22", - "https-proxy-agent": "5.0.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", + "critters": "0.0.22", + "css-loader": "6.10.0", + "esbuild-wasm": "0.20.1", + "fast-glob": "3.3.2", + "http-proxy-middleware": "2.0.6", + "https-proxy-agent": "7.0.4", + "inquirer": "9.2.15", + "jsonc-parser": "3.2.1", "karma-source-map-support": "1.4.0", - "less": "4.1.3", + "less": "4.2.0", "less-loader": "11.1.0", "license-webpack-plugin": "4.0.2", "loader-utils": "3.2.1", - "magic-string": "0.30.1", - "mini-css-extract-plugin": "2.7.6", - "mrmime": "1.0.1", + "magic-string": "0.30.8", + "mini-css-extract-plugin": "2.8.1", + "mrmime": "2.0.0", "open": "8.4.2", "ora": "5.4.1", "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "2.3.1", - "piscina": "4.0.0", - "postcss": "8.4.31", - "postcss-loader": "7.3.3", + "picomatch": "4.0.1", + "piscina": "4.4.0", + "postcss": "8.4.35", + "postcss-loader": "8.1.1", "resolve-url-loader": "5.0.0", "rxjs": "7.8.1", - "sass": "1.64.1", - "sass-loader": "13.3.2", - "semver": "7.5.4", - "source-map-loader": "4.0.1", + "sass": "1.71.1", + "sass-loader": "14.1.1", + "semver": "7.6.0", + "source-map-loader": "5.0.0", "source-map-support": "0.5.21", - "terser": "5.19.2", - "text-table": "0.2.0", + "terser": "5.29.1", "tree-kill": "1.2.2", - "tslib": "2.6.1", - "vite": "4.5.2", - "webpack": "5.88.2", + "tslib": "2.6.2", + "undici": "6.11.1", + "vite": "5.1.7", + "watchpack": "2.4.0", + "webpack": "5.90.3", "webpack-dev-middleware": "6.1.2", "webpack-dev-server": "4.15.1", - "webpack-merge": "5.9.0", + "webpack-merge": "5.10.0", "webpack-subresource-integrity": "5.1.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "optionalDependencies": { - "esbuild": "0.18.17" + "esbuild": "0.20.1" }, "peerDependencies": { - "@angular/compiler-cli": "^16.0.0", - "@angular/localize": "^16.0.0", - "@angular/platform-server": "^16.0.0", - "@angular/service-worker": "^16.0.0", + "@angular/compiler-cli": "^17.0.0", + "@angular/localize": "^17.0.0", + "@angular/platform-server": "^17.0.0", + "@angular/service-worker": "^17.0.0", + "@web/test-runner": "^0.18.0", + "browser-sync": "^3.0.2", "jest": "^29.5.0", "jest-environment-jsdom": "^29.5.0", "karma": "^6.3.0", - "ng-packagr": "^16.0.0", + "ng-packagr": "^17.0.0", "protractor": "^7.0.0", "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=4.9.3 <5.2" + "typescript": ">=5.2 <5.5" }, "peerDependenciesMeta": { "@angular/localize": { @@ -370,6 +375,12 @@ "@angular/service-worker": { "optional": true }, + "@web/test-runner": { + "optional": true + }, + "browser-sync": { + "optional": true + }, "jest": { "optional": true }, @@ -390,25 +401,37 @@ } } }, + "node_modules/@angular-devkit/build-angular/node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", - "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", + "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.0", + "@babel/parser": "^7.24.0", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.0", + "@babel/types": "^7.24.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", + "json5": "^2.2.3", "semver": "^6.3.1" }, "engines": { @@ -427,21 +450,21 @@ "semver": "bin/semver.js" } }, - "node_modules/@angular-devkit/build-angular/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "node_modules/@angular-devkit/build-angular/node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dependencies": { - "fast-deep-equal": "^3.1.3" + "debug": "^4.3.4" }, - "peerDependencies": { - "ajv": "^8.8.2" + "engines": { + "node": ">= 14" } }, "node_modules/@angular-devkit/build-angular/node_modules/autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "version": "10.4.18", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.18.tgz", + "integrity": "sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==", "funding": [ { "type": "opencollective", @@ -450,12 +473,16 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001591", + "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -470,201 +497,99 @@ "postcss": "^8.1.0" } }, - "node_modules/@angular-devkit/build-angular/node_modules/babel-loader": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", - "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", - "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/@angular-devkit/build-angular/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, - "node_modules/@angular-devkit/build-angular/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "node_modules/@angular-devkit/build-angular/node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8.6.0" } }, - "node_modules/@angular-devkit/build-angular/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "node_modules/@angular-devkit/build-angular/node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dependencies": { - "p-locate": "^6.0.0" + "agent-base": "^7.0.2", + "debug": "4" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 14" } }, - "node_modules/@angular-devkit/build-angular/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, + "node_modules/@angular-devkit/build-angular/node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", "engines": { "node": ">=10" } }, - "node_modules/@angular-devkit/build-angular/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/sass": { - "version": "1.64.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.64.1.tgz", - "integrity": "sha512-16rRACSOFEE8VN7SCgBu1MpYCyN7urj9At898tyzdXFhC+a+yOX5dXwAR7L8/IdPJ1NB8OYoXmD55DM30B2kEQ==", - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, + "node_modules/@angular-devkit/build-angular/node_modules/picomatch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", + "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", "engines": { - "node": ">= 12.13.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@angular-devkit/build-angular/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/@angular-devkit/build-angular/node_modules/postcss": { + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >=14" } }, - "node_modules/@angular-devkit/build-angular/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/@angular-devkit/build-angular/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/@angular-devkit/build-angular/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1602.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1602.13.tgz", - "integrity": "sha512-H7CqnC0kvWR0Q45ZXsCO3M9lGd4dOajEmkCVmq7vVptU3nJRbCqJ0ZScj9bH5YSlcdO0jPbOdcTELWyEZ3BMFQ==", + "version": "0.1703.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1703.6.tgz", + "integrity": "sha512-pJu0et2SiF0kfXenHSTtAART0omzbWpLgBfeUo4hBh4uwX5IaT+mRpYpr8gCXMq+qsjoQp3HobSU3lPDeBn+bg==", "dependencies": { - "@angular-devkit/architect": "0.1602.13", + "@angular-devkit/architect": "0.1703.6", "rxjs": "7.8.1" }, "engines": { - "node": "^16.14.0 || >=18.10.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, @@ -674,19 +599,19 @@ } }, "node_modules/@angular-devkit/core": { - "version": "16.2.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.13.tgz", - "integrity": "sha512-6jTlYOIeYsOF/Vw/hBNusjoCmKJBByoyGS1Fu2Yav8ltxYK04aDtI73l9JJB/5Cpzhc4YELrMqBMH7in5Vowaw==", + "version": "17.3.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.6.tgz", + "integrity": "sha512-FVbkT9dEwHEvjnxr4mvMNSMg2bCFoGoP4X68xXU9dhLEUpC05opLvfbaR3Qh543eCJ5AstosBFVzB/krfIkOvA==", "dependencies": { "ajv": "8.12.0", "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "picomatch": "2.3.1", + "jsonc-parser": "3.2.1", + "picomatch": "4.0.1", "rxjs": "7.8.1", "source-map": "0.7.4" }, "engines": { - "node": "^16.14.0 || >=18.10.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, @@ -699,31 +624,42 @@ } } }, + "node_modules/@angular-devkit/core/node_modules/picomatch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", + "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@angular-devkit/schematics": { - "version": "16.2.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.2.13.tgz", - "integrity": "sha512-uhhJZpppaeuT/2V6RiCheJKzS4bAZADL+Gw59VJaojqS8ssdG1UzvqRJokIzFzP7+MhHWylZBWUvWLQxuUvtsA==", + "version": "17.3.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.6.tgz", + "integrity": "sha512-2G1YuPInd8znG7uUgKOS7z72Aku50lTzB/2csWkWPJLAFkh7vKC8QZ40x8S1nC9npVYPhI5CRLX/HVpBh9CyxA==", "dependencies": { - "@angular-devkit/core": "16.2.13", - "jsonc-parser": "3.2.0", - "magic-string": "0.30.1", + "@angular-devkit/core": "17.3.6", + "jsonc-parser": "3.2.1", + "magic-string": "0.30.8", "ora": "5.4.1", "rxjs": "7.8.1" }, "engines": { - "node": "^16.14.0 || >=18.10.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@angular-eslint/builder": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-16.3.1.tgz", - "integrity": "sha512-PmIOnRwqdOW1bvZtpTGBTDcOq/Czm3D+IPC/k90yIMs1VsAtcxqUmUtELje+ylJeb2LPeEZavekSnEpcatM4HQ==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-17.4.0.tgz", + "integrity": "sha512-+3ujbi+ar/iqAAwnJ2bTdWzQpHh9iVEPgjHUOeQhrEM8gcaOLnZXMlUyZL7D+NlXg7aDoEIxETb73dgbIBm55A==", "dev": true, "dependencies": { - "@nx/devkit": "16.5.1", - "nx": "16.5.1" + "@nx/devkit": "^17.2.8 || ^18.0.0", + "nx": "^17.2.8 || ^18.0.0" }, "peerDependencies": { "eslint": "^7.20.0 || ^8.0.0", @@ -731,19 +667,20 @@ } }, "node_modules/@angular-eslint/bundled-angular-compiler": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-16.1.0.tgz", - "integrity": "sha512-5EFAWXuFJADr3imo/ZYshY8s0K7U7wyysnE2LXnpT9PAi5rmkzt70UNZNRuamCbXr4tdIiu+fXWOj7tUuJKnnw==", + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-17.3.0.tgz", + "integrity": "sha512-ejfNzRuBeHUV8m2fkgs+M809rj5STuCuQo4fdfc6ccQpzXDI6Ha7BKpTznWfg5g529q/wrkoGSGgFxU9Yc2/dQ==", "dev": true }, "node_modules/@angular-eslint/eslint-plugin": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-16.3.1.tgz", - "integrity": "sha512-kSc8ESfoy8TUSthbq0Lpq9e17I+3Smy4rHoNpKCFEGuJgPs0+OssZMxB6a5EawGbv2EKTPEtrxzFm1WsLR0U9Q==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-17.4.0.tgz", + "integrity": "sha512-E+/O83PXttQUACurGEskLDU+wboBqMMVqvo4T8C/iMcpLx+01M5UBzqpCmfz6ri609G96Au7uDbUEedU1hwqmQ==", "dev": true, "dependencies": { - "@angular-eslint/utils": "16.3.1", - "@typescript-eslint/utils": "5.62.0" + "@angular-eslint/bundled-angular-compiler": "17.4.0", + "@angular-eslint/utils": "17.4.0", + "@typescript-eslint/utils": "7.8.0" }, "peerDependencies": { "eslint": "^7.20.0 || ^8.0.0", @@ -751,15 +688,15 @@ } }, "node_modules/@angular-eslint/eslint-plugin-template": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-16.3.1.tgz", - "integrity": "sha512-+RcFEWqNiRt3+5jXvmlIDlXtP9+vjdmgmVL6tt8yDbqdjBOewtyMu4pE4YaR4sFboyxgME9PbO2WrOyPXh6xjg==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-17.4.0.tgz", + "integrity": "sha512-o1Vb7rt3TpPChVzaxswOKBDWRboMcpC4qUUyoHfeSYa7sDuQHMeIQlCS5QXuykR/RYnIQJSKd89FOd28nGmmRw==", "dev": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "16.3.1", - "@angular-eslint/utils": "16.3.1", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@angular-eslint/bundled-angular-compiler": "17.4.0", + "@angular-eslint/utils": "17.4.0", + "@typescript-eslint/type-utils": "7.8.0", + "@typescript-eslint/utils": "7.8.0", "aria-query": "5.3.0", "axobject-query": "4.0.0" }, @@ -769,80 +706,121 @@ } }, "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@angular-eslint/bundled-angular-compiler": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-16.3.1.tgz", - "integrity": "sha512-m4WP1xwS9XLcC/3n6lIcG5HZoai/5eb5W3xm48GVcv//0qE2p7S96RSgKPgGHvif5pF8O9xAqEWs3gDEG45+7A==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-17.4.0.tgz", + "integrity": "sha512-cYEJs4PO+QLDt1wfgWh9q8OjOphnoe1OTTFtMqm9lHl0AkBynPnFA6ghiiG5NaT03l7HXi2TQ23rLFlXl3JOBg==", "dev": true }, "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@angular-eslint/utils": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-16.3.1.tgz", - "integrity": "sha512-tEBcce0rG+DmcPO8jhRffUFDioGw3G4cUAE15XlRctY1J3QzOBH9HdUOTDt0mMjBgpWCzh0YVT1Moh2bPXU9Xg==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-17.4.0.tgz", + "integrity": "sha512-lHgRXyT878fauDITygraICDM6RHLb51QAJ3gWNZLr7SXcywsZg5d3rxRPCjrCnjgdxNPU0fJ+VJZ5AMt5Ibn7w==", "dev": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "16.3.1", - "@typescript-eslint/utils": "5.62.0" + "@angular-eslint/bundled-angular-compiler": "17.4.0", + "@typescript-eslint/utils": "7.8.0" }, "peerDependencies": { "eslint": "^7.20.0 || ^8.0.0", "typescript": "*" } }, - "node_modules/@angular-eslint/eslint-plugin-template/node_modules/axobject-query": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", - "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", + "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/utils": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", + "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", "dev": true, "dependencies": { - "dequal": "^2.0.3" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "semver": "^7.6.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" } }, "node_modules/@angular-eslint/eslint-plugin/node_modules/@angular-eslint/bundled-angular-compiler": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-16.3.1.tgz", - "integrity": "sha512-m4WP1xwS9XLcC/3n6lIcG5HZoai/5eb5W3xm48GVcv//0qE2p7S96RSgKPgGHvif5pF8O9xAqEWs3gDEG45+7A==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-17.4.0.tgz", + "integrity": "sha512-cYEJs4PO+QLDt1wfgWh9q8OjOphnoe1OTTFtMqm9lHl0AkBynPnFA6ghiiG5NaT03l7HXi2TQ23rLFlXl3JOBg==", "dev": true }, "node_modules/@angular-eslint/eslint-plugin/node_modules/@angular-eslint/utils": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-16.3.1.tgz", - "integrity": "sha512-tEBcce0rG+DmcPO8jhRffUFDioGw3G4cUAE15XlRctY1J3QzOBH9HdUOTDt0mMjBgpWCzh0YVT1Moh2bPXU9Xg==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-17.4.0.tgz", + "integrity": "sha512-lHgRXyT878fauDITygraICDM6RHLb51QAJ3gWNZLr7SXcywsZg5d3rxRPCjrCnjgdxNPU0fJ+VJZ5AMt5Ibn7w==", "dev": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "16.3.1", - "@typescript-eslint/utils": "5.62.0" + "@angular-eslint/bundled-angular-compiler": "17.4.0", + "@typescript-eslint/utils": "7.8.0" }, "peerDependencies": { "eslint": "^7.20.0 || ^8.0.0", "typescript": "*" } }, + "node_modules/@angular-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", + "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "semver": "^7.6.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, "node_modules/@angular-eslint/schematics": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-16.1.0.tgz", - "integrity": "sha512-L1tmP3R2krHyveaRXAvn/SeDoBFNpS1VtPPrzZm1NYr1qPcAxf3NtG2nnoyVFu6WZGt59ZGHNQ/dZxnXvm0UGg==", + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-17.3.0.tgz", + "integrity": "sha512-5yssd5EOomxlKt9vN/OXXCTCuI3Pmfj16pkjBDoW0wzC8/M2l5zlXIEfoKumHYv2wtF553LhaMXVYVU35e0lTw==", "dev": true, "dependencies": { - "@angular-eslint/eslint-plugin": "16.1.0", - "@angular-eslint/eslint-plugin-template": "16.1.0", - "@nx/devkit": "16.5.1", - "ignore": "5.2.4", - "nx": "16.5.1", + "@angular-eslint/eslint-plugin": "17.3.0", + "@angular-eslint/eslint-plugin-template": "17.3.0", + "@nx/devkit": "^17.2.8 || ^18.0.0", + "ignore": "5.3.1", + "nx": "^17.2.8 || ^18.0.0", "strip-json-comments": "3.1.1", - "tmp": "0.2.1" + "tmp": "0.2.3" }, "peerDependencies": { - "@angular/cli": ">= 16.0.0 < 17.0.0" + "@angular/cli": ">= 17.0.0 < 18.0.0" } }, "node_modules/@angular-eslint/schematics/node_modules/@angular-eslint/eslint-plugin": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-16.1.0.tgz", - "integrity": "sha512-BFzzJJlgQgWc8avdSBkaDWAzNSUqcwWy0L1iZSBdXGoIOxj72kLbwe99emb8M+rUfCveljQkeM2pcYu8XLbJIA==", + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-17.3.0.tgz", + "integrity": "sha512-81cQbOEPoQupFX8WmpqZn+y8VA7JdVRGBtt+uJNKBXcJknTpPWdLBZRFlgVakmC24iEZ0Fint/N3NBBQI3mz2A==", "dev": true, "dependencies": { - "@angular-eslint/utils": "16.1.0", - "@typescript-eslint/utils": "5.62.0" + "@angular-eslint/utils": "17.3.0", + "@typescript-eslint/utils": "7.2.0" }, "peerDependencies": { "eslint": "^7.20.0 || ^8.0.0", @@ -850,31 +828,140 @@ } }, "node_modules/@angular-eslint/schematics/node_modules/@angular-eslint/eslint-plugin-template": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-16.1.0.tgz", - "integrity": "sha512-wQHWR5vqWGgO7mqoG5ixXeplIlz/OmxBJE9QMLPTZE8GdaTx8+F/5J37OWh84zCpD3mOa/FHYZxBDm2MfUmA1Q==", + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-17.3.0.tgz", + "integrity": "sha512-9l/aRfpE9MCRVDWRb+rSB9Zei0paep1vqV6M/87VUnzBnzqeMRnVuPvQowilh2zweVSGKBF25Vp4HkwOL6ExDQ==", "dev": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "16.1.0", - "@angular-eslint/utils": "16.1.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@angular-eslint/bundled-angular-compiler": "17.3.0", + "@angular-eslint/utils": "17.3.0", + "@typescript-eslint/type-utils": "7.2.0", + "@typescript-eslint/utils": "7.2.0", "aria-query": "5.3.0", - "axobject-query": "3.1.1" + "axobject-query": "4.0.0" }, "peerDependencies": { "eslint": "^7.20.0 || ^8.0.0", "typescript": "*" } }, + "node_modules/@angular-eslint/schematics/node_modules/@typescript-eslint/type-utils": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz", + "integrity": "sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/utils": "7.2.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@angular-eslint/schematics/node_modules/@typescript-eslint/types": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", + "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@angular-eslint/schematics/node_modules/@typescript-eslint/typescript-estree": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", + "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@angular-eslint/schematics/node_modules/@typescript-eslint/visitor-keys": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", + "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@angular-eslint/schematics/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@angular-eslint/schematics/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@angular-eslint/template-parser": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-16.3.1.tgz", - "integrity": "sha512-9+SxUtxB2iOnm0ldS2ow0stMxe02rB/TxeMIe8fxsLFHZdw8RQvs/p3HLvVHXzv6gUblMHebIb/ubUmwEVb2SA==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-17.4.0.tgz", + "integrity": "sha512-vT/Tg8dl6Uy++MS9lPS0l37SynH3EaMcggDiTJqn15pIb4ePO65fafOIIKKYG+BN6R6iFe/g9mH/9nb8ohlzdQ==", "dev": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "16.3.1", - "eslint-scope": "^7.0.0" + "@angular-eslint/bundled-angular-compiler": "17.4.0", + "eslint-scope": "^8.0.0" }, "peerDependencies": { "eslint": "^7.20.0 || ^8.0.0", @@ -882,19 +969,19 @@ } }, "node_modules/@angular-eslint/template-parser/node_modules/@angular-eslint/bundled-angular-compiler": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-16.3.1.tgz", - "integrity": "sha512-m4WP1xwS9XLcC/3n6lIcG5HZoai/5eb5W3xm48GVcv//0qE2p7S96RSgKPgGHvif5pF8O9xAqEWs3gDEG45+7A==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-17.4.0.tgz", + "integrity": "sha512-cYEJs4PO+QLDt1wfgWh9q8OjOphnoe1OTTFtMqm9lHl0AkBynPnFA6ghiiG5NaT03l7HXi2TQ23rLFlXl3JOBg==", "dev": true }, "node_modules/@angular-eslint/utils": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-16.1.0.tgz", - "integrity": "sha512-u5XscYUq1F/7RuwyVIV2a280QL27lyQz434VYR+Np/oO21NGj5jxoRKb55xhXT9EFVs5Sy4JYeEUp6S75J/cUw==", + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-17.3.0.tgz", + "integrity": "sha512-PJT9pxWqpvI9OXO+7L5SIVhvMW+RFjeafC7PYjtvSbNFpz+kF644BiAcfMJ0YqBnkrw3JXt+RAX25CT4mXIoXw==", "dev": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "16.1.0", - "@typescript-eslint/utils": "5.62.0" + "@angular-eslint/bundled-angular-compiler": "17.3.0", + "@typescript-eslint/utils": "7.2.0" }, "peerDependencies": { "eslint": "^7.20.0 || ^8.0.0", @@ -902,23 +989,23 @@ } }, "node_modules/@angular/animations": { - "version": "16.2.12", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.2.12.tgz", - "integrity": "sha512-MD0ElviEfAJY8qMOd6/jjSSvtqER2RDAi0lxe6EtUacC1DHCYkaPrKW4vLqY+tmZBg1yf+6n+uS77pXcHHcA3w==", + "version": "17.3.7", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.3.7.tgz", + "integrity": "sha512-ahenGALPPweeHgqtl9BMkGIAV4fUNI5kOWUrLNbKBfwIJN+aOBOYV1Jz6NKUQq6eYn/1ZYtm0f3lIkHIdtLKEw==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/core": "16.2.12" + "@angular/core": "17.3.7" } }, "node_modules/@angular/cdk": { - "version": "16.2.14", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-16.2.14.tgz", - "integrity": "sha512-n6PrGdiVeSTEmM/HEiwIyg6YQUUymZrb5afaNLGFRM5YL0Y8OBqd+XhCjb0OfD/AfgCUtedVEPwNqrfW8KzgGw==", + "version": "17.3.7", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-17.3.7.tgz", + "integrity": "sha512-aFEh8tzKFOwini6aNEp57S54Ocp9T7YIJfBVMESptu2TCPdMTlJ1HJTg5XS8NcQO+vwi9cFPGVwGF1frOx4LXA==", "dependencies": { "tslib": "^2.3.0" }, @@ -926,32 +1013,32 @@ "parse5": "^7.1.2" }, "peerDependencies": { - "@angular/common": "^16.0.0 || ^17.0.0", - "@angular/core": "^16.0.0 || ^17.0.0", + "@angular/common": "^17.0.0 || ^18.0.0", + "@angular/core": "^17.0.0 || ^18.0.0", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/cli": { - "version": "16.2.13", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.2.13.tgz", - "integrity": "sha512-Zs/IHV0qeQBlRYp3XTJP96KKMFrOVd4gFWEXyt8xVbma9W7UCWr/0C6D8HRFjheiT40TSa2Suwpk6Hppm+9ESA==", - "dependencies": { - "@angular-devkit/architect": "0.1602.13", - "@angular-devkit/core": "16.2.13", - "@angular-devkit/schematics": "16.2.13", - "@schematics/angular": "16.2.13", + "version": "17.3.6", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.3.6.tgz", + "integrity": "sha512-poKaRPeI+hFqX+AxIaEriaIggFVcC3XqlT9E1/uBC2rfHirE1n5F9Z7xqEDtMHduKwLbNXhQIPoKIKya8+Hnew==", + "dependencies": { + "@angular-devkit/architect": "0.1703.6", + "@angular-devkit/core": "17.3.6", + "@angular-devkit/schematics": "17.3.6", + "@schematics/angular": "17.3.6", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.3", - "ini": "4.1.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "npm-package-arg": "10.1.0", - "npm-pick-manifest": "8.0.1", + "ini": "4.1.2", + "inquirer": "9.2.15", + "jsonc-parser": "3.2.1", + "npm-package-arg": "11.0.1", + "npm-pick-manifest": "9.0.0", "open": "8.4.2", "ora": "5.4.1", - "pacote": "15.2.0", - "resolve": "1.22.2", - "semver": "7.5.4", + "pacote": "17.0.6", + "resolve": "1.22.8", + "semver": "7.6.0", "symbol-observable": "4.0.0", "yargs": "17.7.2" }, @@ -959,68 +1046,38 @@ "ng": "bin/ng.js" }, "engines": { - "node": "^16.14.0 || >=18.10.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, - "node_modules/@angular/cli/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular/cli/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular/cli/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/@angular/common": { - "version": "16.2.12", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.2.12.tgz", - "integrity": "sha512-B+WY/cT2VgEaz9HfJitBmgdk4I333XG/ybC98CMC4Wz8E49T8yzivmmxXB3OD6qvjcOB6ftuicl6WBqLbZNg2w==", + "version": "17.3.7", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-17.3.7.tgz", + "integrity": "sha512-A7LRJu1vVCGGgrfZXjU+njz50SiU4weheKCar5PIUprcdIofS1IrHAJDqYh+kwXxkjXbZMOr/ijQY0+AESLEsw==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/core": "16.2.12", + "@angular/core": "17.3.7", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "16.2.12", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.2.12.tgz", - "integrity": "sha512-6SMXUgSVekGM7R6l1Z9rCtUGtlg58GFmgbpMCsGf+VXxP468Njw8rjT2YZkf5aEPxEuRpSHhDYjqz7n14cwCXQ==", + "version": "17.3.7", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.3.7.tgz", + "integrity": "sha512-AlKiqPoxnrpQ0hn13fIaQPSVodaVAIjBW4vpFyuKFqs2LBKg6iolwZ21s8rEI0KR2gXl+8ugj0/UZ6YADiVM5w==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/core": "16.2.12" + "@angular/core": "17.3.7" }, "peerDependenciesMeta": { "@angular/core": { @@ -1029,15 +1086,15 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "16.2.12", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.2.12.tgz", - "integrity": "sha512-pWSrr152562ujh6lsFZR8NfNc5Ljj+zSTQO44DsuB0tZjwEpnRcjJEgzuhGXr+CoiBf+jTSPZKemtSktDk5aaA==", + "version": "17.3.7", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.3.7.tgz", + "integrity": "sha512-vSg5IQZ9jGmvYjpbfH8KbH4Sl1IVeE+Mr1ogcxkGEsURSRvKo7EWc0K7LSEI9+gg0VLamMiP9EyCJdPxiJeLJQ==", "dependencies": { - "@babel/core": "7.23.2", + "@babel/core": "7.23.9", "@jridgewell/sourcemap-codec": "^1.4.14", "chokidar": "^3.0.0", "convert-source-map": "^1.5.1", - "reflect-metadata": "^0.1.2", + "reflect-metadata": "^0.2.0", "semver": "^7.0.0", "tslib": "^2.3.0", "yargs": "^17.2.1" @@ -1048,28 +1105,28 @@ "ngcc": "bundles/ngcc/index.js" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/compiler": "16.2.12", - "typescript": ">=4.9.3 <5.2" + "@angular/compiler": "17.3.7", + "typescript": ">=5.2 <5.5" } }, "node_modules/@angular/compiler-cli/node_modules/@babel/core": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", - "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", + "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helpers": "^7.23.2", - "@babel/parser": "^7.23.0", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.9", + "@babel/parser": "^7.23.9", + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -1097,103 +1154,81 @@ "semver": "bin/semver.js" } }, - "node_modules/@angular/compiler-cli/node_modules/@babel/generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", - "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", - "dependencies": { - "@babel/types": "^7.23.3", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@angular/compiler-cli/node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } + "node_modules/@angular/compiler-cli/node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" }, "node_modules/@angular/core": { - "version": "16.2.12", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.2.12.tgz", - "integrity": "sha512-GLLlDeke/NjroaLYOks0uyzFVo6HyLl7VOm0K1QpLXnYvW63W9Ql/T3yguRZa7tRkOAeFZ3jw+1wnBD4O8MoUA==", + "version": "17.3.7", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-17.3.7.tgz", + "integrity": "sha512-HWcrbxqnvIMSxFuQdN0KPt08bc87hqr0LKm89yuRTUwx/2sNJlNQUobk6aJj4trswGBttcRDT+GOS4DQP2Nr4g==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.13.0" + "zone.js": "~0.14.0" } }, "node_modules/@angular/elements": { - "version": "16.2.12", - "resolved": "https://registry.npmjs.org/@angular/elements/-/elements-16.2.12.tgz", - "integrity": "sha512-x5EPsoh6hikR52yWh4w9E+YEIIsHwPq88dlamTjDbqlShNfMFg9vRRTIGd0xzrSKc0yM/kkXNMzJUMcZAVdycQ==", + "version": "17.3.7", + "resolved": "https://registry.npmjs.org/@angular/elements/-/elements-17.3.7.tgz", + "integrity": "sha512-GHnTeHc4Eh6oqIAUJG25xN/h8f5Cz/yFeqLc+N04e01sLpd1oAl3xTOQ5qg+wizXbjPWIP2sCHXDm61TjKM0hA==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/core": "16.2.12", + "@angular/core": "17.3.7", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/forms": { - "version": "16.2.12", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.2.12.tgz", - "integrity": "sha512-1Eao89hlBgLR3v8tU91vccn21BBKL06WWxl7zLpQmG6Hun+2jrThgOE4Pf3os4fkkbH4Apj0tWL2fNIWe/blbw==", + "version": "17.3.7", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.3.7.tgz", + "integrity": "sha512-FEhXh/VmT++XCoO8i7bBtzxG7Am/cE1zrr9aF+fWW+4jpWvJvVN1IaSiJxgBB+iPsOJ9lTBRwfRW3onlcDkhrw==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/common": "16.2.12", - "@angular/core": "16.2.12", - "@angular/platform-browser": "16.2.12", + "@angular/common": "17.3.7", + "@angular/core": "17.3.7", + "@angular/platform-browser": "17.3.7", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/language-service": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-16.2.0.tgz", - "integrity": "sha512-ZeNdiQAR9anP4X1PaveGKsf57s6Ty9n1Py1YYzCvqC7x0RrP2rrvnF9iuj9E8+2TAd1xyS0AOrG5L8c1h6OnTg==", + "version": "17.3.4", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-17.3.4.tgz", + "integrity": "sha512-CgLg/7P0+NEeGU+vqvoG0rh2ns5iyfi/UO4JTxN1iMjuFBAUhGHxjiItPy8cN2XK/dWgOhXAFe4oqxA4dMBp/Q==", "dev": true, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^18.13.0 || >=20.9.0" } }, "node_modules/@angular/platform-browser": { - "version": "16.2.12", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.2.12.tgz", - "integrity": "sha512-NnH7ju1iirmVEsUq432DTm0nZBGQsBrU40M3ZeVHMQ2subnGiyUs3QyzDz8+VWLL/T5xTxWLt9BkDn65vgzlIQ==", + "version": "17.3.7", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.3.7.tgz", + "integrity": "sha512-Nn8ZMaftAvO9dEwribWdNv+QBHhYIBrRkv85G6et80AXfXoYAr/xcfnQECRFtZgPmANqHC5auv/xrmExQG+Yeg==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/animations": "16.2.12", - "@angular/common": "16.2.12", - "@angular/core": "16.2.12" + "@angular/animations": "17.3.7", + "@angular/common": "17.3.7", + "@angular/core": "17.3.7" }, "peerDependenciesMeta": { "@angular/animations": { @@ -1202,75 +1237,64 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "16.2.12", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.2.12.tgz", - "integrity": "sha512-ya54jerNgreCVAR278wZavwjrUWImMr2F8yM5n9HBvsMBbFaAQ83anwbOEiHEF2BlR+gJiEBLfpuPRMw20pHqw==", + "version": "17.3.7", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.3.7.tgz", + "integrity": "sha512-9c2I4u0L1p2v1/lW8qy+WaNHisUWbyy6wqsv2v9FfCaSM49Lxymgo9LPFPC4qEG5ei5nE+eIQ2ocRiXXsf5QkQ==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/common": "16.2.12", - "@angular/compiler": "16.2.12", - "@angular/core": "16.2.12", - "@angular/platform-browser": "16.2.12" + "@angular/common": "17.3.7", + "@angular/compiler": "17.3.7", + "@angular/core": "17.3.7", + "@angular/platform-browser": "17.3.7" } }, "node_modules/@angular/router": { - "version": "16.2.12", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.2.12.tgz", - "integrity": "sha512-aU6QnYSza005V9P3W6PpkieL56O0IHps96DjqI1RS8yOJUl3THmokqYN4Fm5+HXy4f390FN9i6ftadYQDKeWmA==", + "version": "17.3.7", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-17.3.7.tgz", + "integrity": "sha512-lMkuRrc1ZjP5JPDxNHqoAhB0uAnfPQ/q6mJrw1s8IZoVV6VyM+FxR5r13ajNcXWC38xy/YhBjpXPF1vBdxuLXg==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/common": "16.2.12", - "@angular/core": "16.2.12", - "@angular/platform-browser": "16.2.12", + "@angular/common": "17.3.7", + "@angular/core": "17.3.7", + "@angular/platform-browser": "17.3.7", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@appsignal/core": { - "version": "1.1.20", - "resolved": "https://registry.npmjs.org/@appsignal/core/-/core-1.1.20.tgz", - "integrity": "sha512-Y1N/n5f5rruKxQVSNT4aqctqomZZEwL5g+CXocA8LIdufoI5wyQVCxX8XWeLEQj8H+weIPckaq5jtQE8siQsnA==", + "version": "1.1.22", + "resolved": "https://registry.npmjs.org/@appsignal/core/-/core-1.1.22.tgz", + "integrity": "sha512-vTBsZSf+81429JlILQtFUFsh1j7vl0viZNGKT7qFeVDotjAtD4OeFBWOx4Rd1yLeD+aT2zGLCAKo1KmpvxRlqA==", "dependencies": { "@appsignal/types": "=3.0.1", - "isomorphic-unfetch": "^3.1.0", "tslib": "^2.3.0" } }, - "node_modules/@appsignal/core/node_modules/@appsignal/types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@appsignal/types/-/types-3.0.1.tgz", - "integrity": "sha512-vCAKUohJkhN9jk3v2hTOdUDV5FYPr63dBOnmFdPINVUye8HnkpYZD5wrLaRNNKO5UlyhIt8jTkoKkmjkIlkiuQ==" - }, "node_modules/@appsignal/javascript": { - "version": "1.3.28", - "resolved": "https://registry.npmjs.org/@appsignal/javascript/-/javascript-1.3.28.tgz", - "integrity": "sha512-XsMITXEMnSYX8Hk+T60WtRz438gKKUzS6v18a7jUBDtD0M0cU3tFLCPOfaCPcK3vXnpd/t2wskw1LbITR/QuUg==", + "version": "1.3.30", + "resolved": "https://registry.npmjs.org/@appsignal/javascript/-/javascript-1.3.30.tgz", + "integrity": "sha512-x559TLt0UUze92/DqpoI67uYvjoRqEN1BQXgCSWPTVVeZ9AqL2aT6hnUPPnn/9DVDDPSbkA9g32UbgMkI2A1oQ==", "dependencies": { - "@appsignal/core": "=1.1.20", + "@appsignal/core": "=1.1.22", "@appsignal/types": "=3.0.1", "tslib": "^2.3.0" } }, - "node_modules/@appsignal/javascript/node_modules/@appsignal/types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@appsignal/types/-/types-3.0.1.tgz", - "integrity": "sha512-vCAKUohJkhN9jk3v2hTOdUDV5FYPr63dBOnmFdPINVUye8HnkpYZD5wrLaRNNKO5UlyhIt8jTkoKkmjkIlkiuQ==" - }, "node_modules/@appsignal/plugin-breadcrumbs-console": { - "version": "1.1.29", - "resolved": "https://registry.npmjs.org/@appsignal/plugin-breadcrumbs-console/-/plugin-breadcrumbs-console-1.1.29.tgz", - "integrity": "sha512-U3HsyHgrtfryN4TXE61zgEejgIYZVcoXV0KjsOZxbScgttkgwjvol0B0aMlc38h/zD2Qq4NLqXk9l9p9RHuukg==", + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/@appsignal/plugin-breadcrumbs-console/-/plugin-breadcrumbs-console-1.1.31.tgz", + "integrity": "sha512-No/0IdiN5rTaRrdn9xw0ckUAzzNDMfSCoiHZxmKLEyFPpZKRdStNU+vgu2TA6GShaG0JTRWZ/7P/SNGTF6NxsQ==", "dependencies": { - "@appsignal/javascript": "=1.3.28" + "@appsignal/javascript": "=1.3.30" } }, "node_modules/@appsignal/plugin-breadcrumbs-network": { @@ -1281,32 +1305,27 @@ "@appsignal/types": "=3.0.1" } }, - "node_modules/@appsignal/plugin-breadcrumbs-network/node_modules/@appsignal/types": { + "node_modules/@appsignal/types": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@appsignal/types/-/types-3.0.1.tgz", "integrity": "sha512-vCAKUohJkhN9jk3v2hTOdUDV5FYPr63dBOnmFdPINVUye8HnkpYZD5wrLaRNNKO5UlyhIt8jTkoKkmjkIlkiuQ==" }, - "node_modules/@assemblyscript/loader": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", - "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==" - }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", - "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", + "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", "engines": { "node": ">=6.9.0" } @@ -1340,33 +1359,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/@babel/generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", - "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", - "dependencies": { - "@babel/types": "^7.23.3", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core/node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/core/node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -1381,11 +1373,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", "dependencies": { - "@babel/types": "^7.22.5", + "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -1406,24 +1398,24 @@ } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz", - "integrity": "sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", "dependencies": { - "@babel/types": "^7.22.10" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -1440,16 +1432,16 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", - "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz", + "integrity": "sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-replace-supers": "^7.24.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "semver": "^6.3.1" @@ -1470,9 +1462,9 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", - "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "regexpu-core": "^5.3.1", @@ -1494,9 +1486,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz", - "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz", + "integrity": "sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -1528,19 +1520,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-function-name/node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-hoist-variables": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", @@ -1604,9 +1583,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", "engines": { "node": ">=6.9.0" } @@ -1628,12 +1607,12 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", + "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { @@ -1677,9 +1656,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "engines": { "node": ">=6.9.0" } @@ -1693,9 +1672,9 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", "engines": { "node": ">=6.9.0" } @@ -1713,62 +1692,37 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-wrap-function/node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helpers": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", - "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers/node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz", + "integrity": "sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", - "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", - "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", + "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1777,11 +1731,11 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", - "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", + "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1791,13 +1745,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", - "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", + "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.15" + "@babel/plugin-transform-optional-chaining": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1806,21 +1760,19 @@ "@babel/core": "^7.13.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", + "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { @@ -1834,21 +1786,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", @@ -1908,11 +1845,11 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", + "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1922,11 +1859,11 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", + "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2067,11 +2004,11 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", + "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2081,9 +2018,9 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz", - "integrity": "sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", + "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-plugin-utils": "^7.22.5", @@ -2098,13 +2035,13 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", + "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", "dependencies": { - "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" + "@babel/helper-remap-async-to-generator": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -2114,11 +2051,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", + "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2128,11 +2065,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz", - "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz", + "integrity": "sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2142,12 +2079,12 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", + "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2157,12 +2094,12 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", - "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz", + "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.4", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -2173,17 +2110,16 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", - "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz", + "integrity": "sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, @@ -2195,12 +2131,12 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", + "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/template": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2210,11 +2146,11 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz", - "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz", + "integrity": "sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2224,12 +2160,12 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", + "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2239,11 +2175,11 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", + "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2253,11 +2189,11 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", - "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", + "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -2268,12 +2204,12 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", + "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2283,11 +2219,11 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", - "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", + "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -2298,11 +2234,12 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", - "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", + "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -2312,13 +2249,13 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", + "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2328,11 +2265,11 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", - "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", + "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -2343,11 +2280,11 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", + "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2357,11 +2294,11 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", - "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", + "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -2372,11 +2309,11 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", + "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2386,12 +2323,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz", - "integrity": "sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", + "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", "dependencies": { - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2401,12 +2338,12 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz", - "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", + "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", "dependencies": { - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-simple-access": "^7.22.5" }, "engines": { @@ -2417,13 +2354,13 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz", - "integrity": "sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", + "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { @@ -2434,12 +2371,12 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", + "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2464,11 +2401,11 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", + "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2478,11 +2415,11 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", - "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", + "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -2493,11 +2430,11 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", - "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", + "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -2508,15 +2445,14 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", - "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz", + "integrity": "sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==", "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.15" + "@babel/plugin-transform-parameters": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -2526,12 +2462,12 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", + "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -2541,11 +2477,11 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", - "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", + "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -2556,11 +2492,11 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz", - "integrity": "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz", + "integrity": "sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, @@ -2572,11 +2508,11 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", - "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz", + "integrity": "sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2586,12 +2522,12 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", + "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2601,13 +2537,13 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", - "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz", + "integrity": "sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -2618,11 +2554,11 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", + "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2632,11 +2568,11 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", - "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", + "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "regenerator-transform": "^0.15.2" }, "engines": { @@ -2647,11 +2583,11 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", + "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2661,15 +2597,15 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.9.tgz", - "integrity": "sha512-9KjBH61AGJetCPYp/IEyLEp47SyybZb0nDRpBvmtEkm+rUIwxdlKpyNHI1TmsGkeuLclJdleQHRZ8XLBnnh8CQ==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.0.tgz", + "integrity": "sha512-zc0GA5IitLKJrSfXlXmp8KDqLrnGECK7YRfQBmEKg1NmBOQ7e+KuclBEKJgzifQeUYLdNiAw4B4bjyvzWVLiSA==", "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.4", - "babel-plugin-polyfill-corejs3": "^0.8.2", - "babel-plugin-polyfill-regenerator": "^0.5.1", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0", + "babel-plugin-polyfill-corejs2": "^0.4.8", + "babel-plugin-polyfill-corejs3": "^0.9.0", + "babel-plugin-polyfill-regenerator": "^0.5.5", "semver": "^6.3.1" }, "engines": { @@ -2688,11 +2624,11 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", + "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2702,11 +2638,11 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", + "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { @@ -2717,11 +2653,11 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", + "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2731,11 +2667,11 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", + "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2745,11 +2681,11 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz", + "integrity": "sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2759,11 +2695,11 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", - "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", + "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2773,12 +2709,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", + "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2788,12 +2724,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", + "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2803,12 +2739,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", + "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2818,24 +2754,25 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.9.tgz", - "integrity": "sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==", - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.0.tgz", + "integrity": "sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA==", + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-assertions": "^7.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -2847,59 +2784,58 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.7", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.6", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-arrow-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.9", + "@babel/plugin-transform-async-to-generator": "^7.23.3", + "@babel/plugin-transform-block-scoped-functions": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.4", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.4", + "@babel/plugin-transform-classes": "^7.23.8", + "@babel/plugin-transform-computed-properties": "^7.23.3", + "@babel/plugin-transform-destructuring": "^7.23.3", + "@babel/plugin-transform-dotall-regex": "^7.23.3", + "@babel/plugin-transform-duplicate-keys": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.4", + "@babel/plugin-transform-exponentiation-operator": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.4", + "@babel/plugin-transform-for-of": "^7.23.6", + "@babel/plugin-transform-function-name": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.4", + "@babel/plugin-transform-literals": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", + "@babel/plugin-transform-member-expression-literals": "^7.23.3", + "@babel/plugin-transform-modules-amd": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.9", + "@babel/plugin-transform-modules-umd": "^7.23.3", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.6", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.4", - "babel-plugin-polyfill-corejs3": "^0.8.2", - "babel-plugin-polyfill-regenerator": "^0.5.1", + "@babel/plugin-transform-new-target": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", + "@babel/plugin-transform-numeric-separator": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.24.0", + "@babel/plugin-transform-object-super": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.4", + "@babel/plugin-transform-optional-chaining": "^7.23.4", + "@babel/plugin-transform-parameters": "^7.23.3", + "@babel/plugin-transform-private-methods": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.4", + "@babel/plugin-transform-property-literals": "^7.23.3", + "@babel/plugin-transform-regenerator": "^7.23.3", + "@babel/plugin-transform-reserved-words": "^7.23.3", + "@babel/plugin-transform-shorthand-properties": "^7.23.3", + "@babel/plugin-transform-spread": "^7.23.3", + "@babel/plugin-transform-sticky-regex": "^7.23.3", + "@babel/plugin-transform-template-literals": "^7.23.3", + "@babel/plugin-transform-typeof-symbol": "^7.23.3", + "@babel/plugin-transform-unicode-escapes": "^7.23.3", + "@babel/plugin-transform-unicode-property-regex": "^7.23.3", + "@babel/plugin-transform-unicode-regex": "^7.23.3", + "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.8", + "babel-plugin-polyfill-corejs3": "^0.9.0", + "babel-plugin-polyfill-regenerator": "^0.5.5", "core-js-compat": "^3.31.0", "semver": "^6.3.1" }, @@ -2919,13 +2855,11 @@ } }, "node_modules/@babel/preset-modules": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", - "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, @@ -2939,43 +2873,43 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz", + "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==", "dependencies": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", - "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.3", + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.3", - "@babel/types": "^7.23.3", - "debug": "^4.1.0", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -2983,13 +2917,13 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", - "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", + "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", "dependencies": { - "@babel/types": "^7.23.3", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -2997,11 +2931,11 @@ } }, "node_modules/@babel/types": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", - "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, @@ -3071,10 +3005,25 @@ "node": ">=10.0.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz", + "integrity": "sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/android-arm": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.17.tgz", - "integrity": "sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.1.tgz", + "integrity": "sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw==", "cpu": [ "arm" ], @@ -3087,9 +3036,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.17.tgz", - "integrity": "sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz", + "integrity": "sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A==", "cpu": [ "arm64" ], @@ -3102,9 +3051,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.17.tgz", - "integrity": "sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.1.tgz", + "integrity": "sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA==", "cpu": [ "x64" ], @@ -3117,9 +3066,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.17.tgz", - "integrity": "sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz", + "integrity": "sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA==", "cpu": [ "arm64" ], @@ -3132,9 +3081,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.17.tgz", - "integrity": "sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz", + "integrity": "sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA==", "cpu": [ "x64" ], @@ -3147,9 +3096,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.17.tgz", - "integrity": "sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz", + "integrity": "sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw==", "cpu": [ "arm64" ], @@ -3162,9 +3111,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.17.tgz", - "integrity": "sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz", + "integrity": "sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg==", "cpu": [ "x64" ], @@ -3177,9 +3126,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.17.tgz", - "integrity": "sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz", + "integrity": "sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw==", "cpu": [ "arm" ], @@ -3192,9 +3141,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.17.tgz", - "integrity": "sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz", + "integrity": "sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w==", "cpu": [ "arm64" ], @@ -3207,9 +3156,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.17.tgz", - "integrity": "sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz", + "integrity": "sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw==", "cpu": [ "ia32" ], @@ -3222,9 +3171,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.17.tgz", - "integrity": "sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz", + "integrity": "sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA==", "cpu": [ "loong64" ], @@ -3237,9 +3186,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.17.tgz", - "integrity": "sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz", + "integrity": "sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA==", "cpu": [ "mips64el" ], @@ -3252,9 +3201,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.17.tgz", - "integrity": "sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz", + "integrity": "sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw==", "cpu": [ "ppc64" ], @@ -3267,9 +3216,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.17.tgz", - "integrity": "sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz", + "integrity": "sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg==", "cpu": [ "riscv64" ], @@ -3282,9 +3231,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.17.tgz", - "integrity": "sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz", + "integrity": "sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ==", "cpu": [ "s390x" ], @@ -3297,9 +3246,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.17.tgz", - "integrity": "sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz", + "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==", "cpu": [ "x64" ], @@ -3312,9 +3261,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.17.tgz", - "integrity": "sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz", + "integrity": "sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg==", "cpu": [ "x64" ], @@ -3327,9 +3276,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.17.tgz", - "integrity": "sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz", + "integrity": "sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw==", "cpu": [ "x64" ], @@ -3342,9 +3291,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.17.tgz", - "integrity": "sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz", + "integrity": "sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q==", "cpu": [ "x64" ], @@ -3357,9 +3306,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.17.tgz", - "integrity": "sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz", + "integrity": "sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A==", "cpu": [ "arm64" ], @@ -3372,9 +3321,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.17.tgz", - "integrity": "sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz", + "integrity": "sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw==", "cpu": [ "ia32" ], @@ -3387,9 +3336,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.17.tgz", - "integrity": "sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz", + "integrity": "sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA==", "cpu": [ "x64" ], @@ -3417,9 +3366,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", - "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -3471,9 +3420,9 @@ "dev": true }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -3521,9 +3470,9 @@ } }, "node_modules/@floating-ui/dom": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz", - "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==", + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz", + "integrity": "sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==", "dependencies": { "@floating-ui/core": "^1.0.0", "@floating-ui/utils": "^0.2.0" @@ -3748,19 +3697,19 @@ "integrity": "sha512-eGeIqNOQpXoPAIP7tC1+1Yc1yl1xnwYqg+3mzqxyrbE5pg5YFBZcA6YoTiByJB6DKAEsiWtl6tjTJS4IYtbB7A==" }, "node_modules/@hotwired/turbo": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@hotwired/turbo/-/turbo-7.3.0.tgz", - "integrity": "sha512-Dcu+NaSvHLT7EjrDrkEmH4qET2ZJZ5IcCWmNXxNQTBwlnE5tBZfN6WxZ842n5cHV52DH/AKNirbPBtcEXDLW4g==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@hotwired/turbo/-/turbo-8.0.4.tgz", + "integrity": "sha512-mlZEFUZrJnpfj+g/XeCWWuokvQyN68WvM78JM+0jfSFc98wegm259vCbC1zSllcspRwbgXK31ibehCy5PA78/Q==", "engines": { "node": ">= 14" } }, "node_modules/@hotwired/turbo-rails": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@hotwired/turbo-rails/-/turbo-rails-7.3.0.tgz", - "integrity": "sha512-fvhO64vp/a2UVQ3jue9WTc2JisMv9XilIC7ViZmXAREVwiQ2S4UC7Go8f9A1j4Xu7DBI6SbFdqILk5ImqVoqyA==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@hotwired/turbo-rails/-/turbo-rails-8.0.4.tgz", + "integrity": "sha512-GHCv5+B2VzYZZvMFpg/g9JLx/8pl/8chcubSB7T+Xn1zYOMqAKB6cT80vvWUzxdwfm/2KfaRysfDz+BmvtjFaw==", "dependencies": { - "@hotwired/turbo": "^7.3.0", + "@hotwired/turbo": "^8.0.4", "@rails/actioncable": "^7.0" } }, @@ -3813,9 +3762,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, "node_modules/@isaacs/cliui": { @@ -3973,14 +3922,26 @@ "node": ">=8" } }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -3995,20 +3956,20 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -4017,9 +3978,9 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -4075,6 +4036,17 @@ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, + "node_modules/@ljharb/through": { + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", + "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/@loaders.gl/core": { "version": "3.4.15", "resolved": "https://registry.npmjs.org/@loaders.gl/core/-/core-3.4.15.tgz", @@ -4184,21 +4156,21 @@ "integrity": "sha512-3uWLVXHY3jQxsXCr/UCNPSc2BG0hNUljhmOBt9l+lNFDp7zHgm0cK2Tw4kj2XfkJy4TgwZTBGwRDQgWEbLbdTA==" }, "node_modules/@ng-select/ng-option-highlight": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/@ng-select/ng-option-highlight/-/ng-option-highlight-0.0.7.tgz", - "integrity": "sha512-5G6PLOQuuGbnxYSGHo+hup/Rwu7xhNNpuAE1h69OcRRrr9ltpihUIvEa4kfq22yPQz4/4Y5UGtIGLZtWCJ1tJg==", + "version": "12.0.6", + "resolved": "https://registry.npmjs.org/@ng-select/ng-option-highlight/-/ng-option-highlight-12.0.6.tgz", + "integrity": "sha512-c1ZoQZZSlxfo8M55hWPuifkUPdGn3iobXtkzC9YzXooOWpfW0OxVlowqbb+qYupGqfdlF+FH3TlihxWD9HragA==", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/common": ">=13.0.0 <14.0.0", - "@angular/core": ">=13.0.0 <14.0.0" + "@angular/common": "^17.0.0-rc.0", + "@angular/core": "^17.0.0-rc.0" } }, "node_modules/@ng-select/ng-select": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-11.2.0.tgz", - "integrity": "sha512-lTyw93kFdKGecp9eKmOP0PQSCaAJS8DCt4D60ns055+ixvRSp2fuXAuJUvn1e3gAsvpZor37osmYlOJ4LYwYIA==", + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-12.0.7.tgz", + "integrity": "sha512-Eht1zlLP0DJxiXcKnq3aY/EJ8odomgU0hM0BJoPY6oX3XFHndtFtdPxlZfhVtQn+FwyDEh7306rRx6digxVssA==", "dependencies": { "tslib": "^2.3.1" }, @@ -4207,9 +4179,9 @@ "npm": ">= 8" }, "peerDependencies": { - "@angular/common": "^16.0.0", - "@angular/core": "^16.0.0", - "@angular/forms": "^16.0.0" + "@angular/common": "^17.0.0-rc.0", + "@angular/core": "^17.0.0-rc.0", + "@angular/forms": "^17.0.0-rc.0" } }, "node_modules/@ngneat/content-loader": { @@ -4224,17 +4196,17 @@ } }, "node_modules/@ngtools/webpack": { - "version": "16.2.13", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.13.tgz", - "integrity": "sha512-P5OiVp9MeMwVxihtC9NB4mx1Zlbup2DLMAWYAl8/kcFdRrRW+1YDQn93tlFToQDHGpPxkqW7cnFUPnA+QwQMYA==", + "version": "17.3.6", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.3.6.tgz", + "integrity": "sha512-equxbgh2DKzZtiFMoVf1KD4yJcH1q8lpqQ/GSPPQUvONcmHrr+yqdRUdaJ7oZCyCYmXF/nByBxtMKtJr6nKZVg==", "engines": { - "node": "^16.14.0 || >=18.10.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "peerDependencies": { - "@angular/compiler-cli": "^16.0.0", - "typescript": ">=4.9.3 <5.2", + "@angular/compiler-cli": "^17.0.0", + "typescript": ">=5.2 <5.5", "webpack": "^5.54.0" } }, @@ -4282,6 +4254,77 @@ "node": ">= 8" } }, + "node_modules/@npmcli/agent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", + "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/agent/node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@npmcli/agent/node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@npmcli/agent/node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/@npmcli/agent/node_modules/socks-proxy-agent": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz", + "integrity": "sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==", + "dependencies": { + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.7.1" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/@npmcli/fs": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", @@ -4294,43 +4337,59 @@ } }, "node_modules/@npmcli/git": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", - "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", - "dependencies": { - "@npmcli/promise-spawn": "^6.0.0", - "lru-cache": "^7.4.4", - "npm-pick-manifest": "^8.0.0", - "proc-log": "^3.0.0", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.6.tgz", + "integrity": "sha512-4x/182sKXmQkf0EtXxT26GEsaOATpD7WVtza5hrYivWZeo6QefC6xq9KAXrnjtFKBZ4rZwR7aX/zClYYXgtwLw==", + "dependencies": { + "@npmcli/promise-spawn": "^7.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", + "proc-log": "^4.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", - "which": "^3.0.0" + "which": "^4.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "engines": { + "node": ">=16" } }, "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", "engines": { - "node": ">=12" + "node": "14 || >=16.14" + } + }, + "node_modules/@npmcli/git/node_modules/proc-log": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.1.0.tgz", + "integrity": "sha512-dmQ2iPw2nJMi9/4dpaG1wd0m1GE+K5kW7RGbjy5hoEEGnhPIzsm+klBO5RGGdcoYbWsNtU2KSNAdEldts+icLg==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/git/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dependencies": { - "isexe": "^2.0.0" + "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/installed-package-contents": { @@ -4356,102 +4415,363 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/promise-spawn": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", - "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "node_modules/@npmcli/package-json": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.0.3.tgz", + "integrity": "sha512-cgsjCvld2wMqkUqvY+SZI+1ZJ7umGBYc9IAKfqJRKJCcs7hCQYxScUgdsyrRINk3VmdCYf9TXiLBHQ6ECTxhtg==", "dependencies": { - "which": "^3.0.0" + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^4.0.0", + "semver": "^7.5.3" }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/package-json/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/package-json/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@npmcli/package-json/node_modules/proc-log": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.1.0.tgz", + "integrity": "sha512-dmQ2iPw2nJMi9/4dpaG1wd0m1GE+K5kW7RGbjy5hoEEGnhPIzsm+klBO5RGGdcoYbWsNtU2KSNAdEldts+icLg==", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/@npmcli/promise-spawn": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.1.tgz", + "integrity": "sha512-P4KkF9jX3y+7yFUxgcUdDtLy+t4OlDGuEBLNs57AZsfSfg+uV6MLndqGpnl4831ggaEdXwR50XFoZP4VFtHolg==", + "dependencies": { + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "engines": { + "node": ">=16" + } + }, "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dependencies": { - "isexe": "^2.0.0" + "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-1.1.0.tgz", + "integrity": "sha512-PfnWuOkQgu7gCbnSsAisaX7hKOdZ4wSAhAzH3/ph5dSGau52kCRrMMGbiSQLwyTZpgldkZ49b0brkOr1AzGBHQ==", + "engines": { + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/@npmcli/run-script": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", - "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.4.tgz", + "integrity": "sha512-9ApYM/3+rBt9V80aYg6tZfzj3UWdiYyCt7gJUD1VJKvWF5nwKDSICXbYIQbspFTq6TOpbsEtIC0LArB8d9PFmg==", "dependencies": { "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^6.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^3.0.0", - "which": "^3.0.0" + "@npmcli/package-json": "^5.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "node-gyp": "^10.0.0", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/cacache": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", + "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/run-script/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/@npmcli/run-script/node_modules/make-fetch-happen": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", + "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/run-script/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@npmcli/run-script/node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@npmcli/run-script/node_modules/node-gyp": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.1.0.tgz", + "integrity": "sha512-B4J5M1cABxPc5PwfjhbV5hoy2DP9p8lFXASnEN6hugXOa61416tnTZ29x9sSwAd0o99XNIcpvDDy1swAExsVKA==", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^4.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/nopt": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", + "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/run-script/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dependencies": { - "isexe": "^2.0.0" + "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.13.0 || >=18.0.0" } }, "node_modules/@nrwl/devkit": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-16.5.1.tgz", - "integrity": "sha512-NB+DE/+AFJ7lKH/WBFyatJEhcZGj25F24ncDkwjZ6MzEiSOGOJS0LaV/R+VUsmS5EHTPXYOpn3zHWWAcJhyOmA==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-18.2.4.tgz", + "integrity": "sha512-dLK8MMb3eEFWlhtI1kNDNbWIT1Xbrgg3eAQ+Ix/N5JDbxJkJhE28WsIJgQb1NTwe/N87O5JtOpxz4/TsSLJCsQ==", "dev": true, "dependencies": { - "@nx/devkit": "16.5.1" + "@nx/devkit": "18.2.4" } }, "node_modules/@nrwl/tao": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-16.5.1.tgz", - "integrity": "sha512-x+gi/fKdM6uQNIti9exFlm3V5LBP3Y8vOEziO42HdOigyrXa0S0HD2WMpccmp6PclYKhwEDUjKJ39xh5sdh4Ig==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-18.2.4.tgz", + "integrity": "sha512-kgJwZ26F+AzvFXaW5eh1g4HLntPcJ6+EE7JyEvrdRzpw7KxTqWy6Ql7dYys6zGlpP4c3PbsXwdc7tGM3Df2PNg==", "dev": true, "dependencies": { - "nx": "16.5.1" + "nx": "18.2.4", + "tslib": "^2.3.0" }, "bin": { "tao": "index.js" } }, "node_modules/@nx/devkit": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-16.5.1.tgz", - "integrity": "sha512-T1acZrVVmJw/sJ4PIGidCBYBiBqlg/jT9e8nIGXLSDS20xcLvfo4zBQf8UZLrmHglnwwpDpOWuVJCp2rYA5aDg==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-18.2.4.tgz", + "integrity": "sha512-Ws3BcA/aeXuwsCQ5e7PYy2H7DswareTOEfgs7izxNyGugpydktVH9DZZTOFNDsc06yzgvyTucDbDQ+JsrJ9PcQ==", "dev": true, "dependencies": { - "@nrwl/devkit": "16.5.1", + "@nrwl/devkit": "18.2.4", "ejs": "^3.1.7", + "enquirer": "~2.3.6", "ignore": "^5.0.4", - "semver": "7.5.3", + "semver": "^7.5.3", "tmp": "~0.2.1", - "tslib": "^2.3.0" + "tslib": "^2.3.0", + "yargs-parser": "21.1.1" }, "peerDependencies": { - "nx": ">= 15 <= 17" + "nx": ">= 16 <= 18" } }, "node_modules/@nx/nx-darwin-arm64": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.5.1.tgz", - "integrity": "sha512-q98TFI4B/9N9PmKUr1jcbtD4yAFs1HfYd9jUXXTQOlfO9SbDjnrYJgZ4Fp9rMNfrBhgIQ4x1qx0AukZccKmH9Q==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-18.2.4.tgz", + "integrity": "sha512-RYhMImghdyHmwnbNoR2CkLz4Opj9EmuHY3lMfsorg+T4wIOql/iXACrqjnreN7Hy9myJDo1EIbYZ4x8VSxFWtA==", "cpu": [ "arm64" ], @@ -4465,9 +4785,9 @@ } }, "node_modules/@nx/nx-darwin-x64": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-16.5.1.tgz", - "integrity": "sha512-j9HmL1l8k7EVJ3eOM5y8COF93gqrydpxCDoz23ZEtsY+JHY77VAiRQsmqBgEx9GGA2dXi9VEdS67B0+1vKariw==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-18.2.4.tgz", + "integrity": "sha512-2mXMslSRD/ZoI/oaX+0Mh9J/hucXtNgdwC4YFbp1u8UKquAaQ6hf4uo0s4i+AfLX0F7roMtkFPaG/+MQUJE1Rw==", "cpu": [ "x64" ], @@ -4481,9 +4801,9 @@ } }, "node_modules/@nx/nx-freebsd-x64": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.5.1.tgz", - "integrity": "sha512-CXSPT01aVS869tvCCF2tZ7LnCa8l41wJ3mTVtWBkjmRde68E5Up093hklRMyXb3kfiDYlfIKWGwrV4r0eH6x1A==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-18.2.4.tgz", + "integrity": "sha512-QUiYLvyUT0PS7D8erf49xa1Jyw4Gfev5gtYfME34Twmn/JPx/99ZkBG4wHbzLqRGwlO5K6m6P4qs30Pzfwtw7A==", "cpu": [ "x64" ], @@ -4497,9 +4817,9 @@ } }, "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.5.1.tgz", - "integrity": "sha512-BhrumqJSZCWFfLFUKl4CAUwR0Y0G2H5EfFVGKivVecEQbb+INAek1aa6c89evg2/OvetQYsJ+51QknskwqvLsA==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-18.2.4.tgz", + "integrity": "sha512-+fjFciSUhvDV8dPa97Brwb83k3Xa4gHPI2Un8wlpp28Cv4horeGruRZrrifR1VmD2wp2UBIMl5n7YsDP8KvYhQ==", "cpu": [ "arm" ], @@ -4513,9 +4833,9 @@ } }, "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.5.1.tgz", - "integrity": "sha512-x7MsSG0W+X43WVv7JhiSq2eKvH2suNKdlUHEG09Yt0vm3z0bhtym1UCMUg3IUAK7jy9hhLeDaFVFkC6zo+H/XQ==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-18.2.4.tgz", + "integrity": "sha512-lfaTc+AvV56Uv5mXROiRwh2REiI/7IsqeRDfL+prcuuvJ5Oxi2wYVgnmqcHL+ryQnk0Qn7/d+j/BmYHX5Ve5jQ==", "cpu": [ "arm64" ], @@ -4529,9 +4849,9 @@ } }, "node_modules/@nx/nx-linux-arm64-musl": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.5.1.tgz", - "integrity": "sha512-J+/v/mFjOm74I0PNtH5Ka+fDd+/dWbKhpcZ2R1/6b9agzZk+Ff/SrwJcSYFXXWKbPX+uQ4RcJoytT06Zs3s0ow==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-18.2.4.tgz", + "integrity": "sha512-U6eoLTQmbxUWU9kZxx6hsYN4zmmOrsDDeW+i3aj5aeahfYlmyz6TsT0V3FSB70WGJC5aMVgEi4RkntQMKkm5vQ==", "cpu": [ "arm64" ], @@ -4545,9 +4865,9 @@ } }, "node_modules/@nx/nx-linux-x64-gnu": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.5.1.tgz", - "integrity": "sha512-igooWJ5YxQ94Zft7IqgL+Lw0qHaY15Btw4gfK756g/YTYLZEt4tTvR1y6RnK/wdpE3sa68bFTLVBNCGTyiTiDQ==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-18.2.4.tgz", + "integrity": "sha512-q8WcJhmcRNORkKjax6WcUwMJe/1mQs+RYlUkGqmi7tD7lfcLSqdLPJVjqVmQAwmy1Wh/MHPsbqRwSerUnCxB1A==", "cpu": [ "x64" ], @@ -4561,9 +4881,9 @@ } }, "node_modules/@nx/nx-linux-x64-musl": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.5.1.tgz", - "integrity": "sha512-zF/exnPqFYbrLAduGhTmZ7zNEyADid2bzNQiIjJkh8Y6NpDwrQIwVIyvIxqynsjMrIs51kBH+8TUjKjj2Jgf5A==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-18.2.4.tgz", + "integrity": "sha512-0MDuoPgHa6kkBrjg7hwZ2qQivhJbh3lk7r3q4osDrqZcGxq5XVJqeAmYFyChQy4dbQfUm4hhYkEfzpU8M2lnvQ==", "cpu": [ "x64" ], @@ -4577,9 +4897,9 @@ } }, "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.5.1.tgz", - "integrity": "sha512-qtqiLS9Y9TYyAbbpq58kRoOroko4ZXg5oWVqIWFHoxc5bGPweQSJCROEqd1AOl2ZDC6BxfuVHfhDDop1kK05WA==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-18.2.4.tgz", + "integrity": "sha512-uLhSRtfnXzN000Qf27GOjEPXzd4/jBWqv2x419IMh+AEtKHuCEpQNBUAyLvBbQ79SMr+FmCXHB8AeeJ7bEUiRw==", "cpu": [ "arm64" ], @@ -4593,9 +4913,9 @@ } }, "node_modules/@nx/nx-win32-x64-msvc": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.5.1.tgz", - "integrity": "sha512-kUJBLakK7iyA9WfsGGQBVennA4jwf5XIgm0lu35oMOphtZIluvzItMt0EYBmylEROpmpEIhHq0P6J9FA+WH0Rg==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-18.2.4.tgz", + "integrity": "sha512-Y52Afz02Ub1kRZXd6NUTwPMjKQqBKZ35e5dUEpl14na2fWvdgdMz4bYOBPUcmQrovlxBGhmFXtFzxkdW3zyRbQ==", "cpu": [ "x64" ], @@ -4614,9 +4934,9 @@ "integrity": "sha512-jrqoTI8lk5UziDsDPJ2Y+nmXYCcRhmr6uMARr3v/W6AMxRgsnRLWJyWKYr6FjaGMgbyxXG+OkCUPQY4Xl3toGg==" }, "node_modules/@openproject/octicons-angular": { - "version": "19.10.0", - "resolved": "https://registry.npmjs.org/@openproject/octicons-angular/-/octicons-angular-19.10.0.tgz", - "integrity": "sha512-z9eF2zYU/fsEcVFOkNagjoPv2F5wRnMXxrIovT7R5g6yIO9V6OhFoVN/5iK/6X/9IEwuvwZaTb6CCnsLbu7cwQ==", + "version": "19.11.0", + "resolved": "https://registry.npmjs.org/@openproject/octicons-angular/-/octicons-angular-19.11.0.tgz", + "integrity": "sha512-0CYXudEE5xww+J0J1PbztloV0B+GqlM0MxmBcZqI49t0FuYfpS9ac6uuAwAF6tlgTpd2A6phSho3IueIjxJTMg==", "dependencies": { "tslib": "^2.3.0" }, @@ -4628,9 +4948,9 @@ } }, "node_modules/@openproject/primer-view-components": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@openproject/primer-view-components/-/primer-view-components-0.28.1.tgz", - "integrity": "sha512-vnVvCHK24uyu8278DTEG+NBK9uwZzimPgAAcN6290MQl0IVKN1PlEkKmqomP69gfXzpZkVIS1rxy0nejKnuXpw==", + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/@openproject/primer-view-components/-/primer-view-components-0.29.1.tgz", + "integrity": "sha512-Mov5rPpDAhkZRod0cQ1O5m1sjAwyEaMH+aOjsFS21K3gmUfw6smFWXk83vLOL+LCmq6ze92JMA3QZHtCAraj/Q==", "dependencies": { "@github/auto-check-element": "^5.2.0", "@github/auto-complete-element": "^3.6.2", @@ -4656,24 +4976,6 @@ "rxjs": "^7.8.0" } }, - "node_modules/@parcel/watcher": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", - "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^3.2.1", - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -4695,12 +4997,12 @@ "integrity": "sha512-HWwz+6MrfK5NTWcg9GdKFpMBW/yrAV937oXiw2eDtsd88P3SRwoCt6ZO6QmKp9RP3nDU9cbqmuGZ0xBh0eIFeg==" }, "node_modules/@primer/css": { - "version": "21.2.2", - "resolved": "https://registry.npmjs.org/@primer/css/-/css-21.2.2.tgz", - "integrity": "sha512-Mcpt9CyajnPW8TJmZYIUhnctdLk7rfsoyvh8w4qDydu2C7HHOHa0wKQjf0zofQ+AyJOIW1Gfa9xvBfwAeNkgoQ==", + "version": "21.3.1", + "resolved": "https://registry.npmjs.org/@primer/css/-/css-21.3.1.tgz", + "integrity": "sha512-vQoTeu7yfL/1Njg372lN6xqIsiPl0QgoIrkDjJ+TpDkeIznXFc+jLdu+5VUVi+bzyKHwv/gd42hhlLA2K5oD6w==", "dependencies": { "@primer/primitives": "^7.15.12", - "@primer/view-components": "^0.19.0" + "@primer/view-components": "^0.22.0" }, "engines": { "node": ">=16.0.0" @@ -4713,9 +5015,9 @@ }, "node_modules/@primer/view-components": { "name": "@openproject/primer-view-components", - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@openproject/primer-view-components/-/primer-view-components-0.28.1.tgz", - "integrity": "sha512-vnVvCHK24uyu8278DTEG+NBK9uwZzimPgAAcN6290MQl0IVKN1PlEkKmqomP69gfXzpZkVIS1rxy0nejKnuXpw==", + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/@openproject/primer-view-components/-/primer-view-components-0.29.1.tgz", + "integrity": "sha512-Mov5rPpDAhkZRod0cQ1O5m1sjAwyEaMH+aOjsFS21K3gmUfw6smFWXk83vLOL+LCmq6ze92JMA3QZHtCAraj/Q==", "dependencies": { "@github/auto-check-element": "^5.2.0", "@github/auto-complete-element": "^3.6.2", @@ -4760,52 +5062,398 @@ "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-7.0.6.tgz", "integrity": "sha512-ybBsUrIsu5geM8BtqnpM7ZA9D8uzSz+e1B4JR57NaCmasHKWap6AX5DT7NHIbp21opVet1qqoVSdsoLDqXeB2A==" }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.3.tgz", + "integrity": "sha512-X9alQ3XM6I9IlSlmC8ddAvMSyG1WuHk5oUnXGw+yUBs3BFoTizmG1La/Gr8fVJvDWAq+zlYTZ9DBgrlKRVY06g==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.3.tgz", + "integrity": "sha512-eQK5JIi+POhFpzk+LnjKIy4Ks+pwJ+NXmPxOCSvOKSNRPONzKuUvWE+P9JxGZVxrtzm6BAYMaL50FFuPe0oWMQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.3.tgz", + "integrity": "sha512-Od4vE6f6CTT53yM1jgcLqNfItTsLt5zE46fdPaEmeFHvPs5SjZYlLpHrSiHEKR1+HdRfxuzXHjDOIxQyC3ptBA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.3.tgz", + "integrity": "sha512-0IMAO21axJeNIrvS9lSe/PGthc8ZUS+zC53O0VhF5gMxfmcKAP4ESkKOCwEi6u2asUrt4mQv2rjY8QseIEb1aw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.3.tgz", + "integrity": "sha512-ge2DC7tHRHa3caVEoSbPRJpq7azhG+xYsd6u2MEnJ6XzPSzQsTKyXvh6iWjXRf7Rt9ykIUWHtl0Uz3T6yXPpKw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.14.3.tgz", + "integrity": "sha512-ljcuiDI4V3ySuc7eSk4lQ9wU8J8r8KrOUvB2U+TtK0TiW6OFDmJ+DdIjjwZHIw9CNxzbmXY39wwpzYuFDwNXuw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.3.tgz", + "integrity": "sha512-Eci2us9VTHm1eSyn5/eEpaC7eP/mp5n46gTRB3Aar3BgSvDQGJZuicyq6TsH4HngNBgVqC5sDYxOzTExSU+NjA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.3.tgz", + "integrity": "sha512-UrBoMLCq4E92/LCqlh+blpqMz5h1tJttPIniwUgOFJyjWI1qrtrDhhpHPuFxULlUmjFHfloWdixtDhSxJt5iKw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.3.tgz", + "integrity": "sha512-5aRjvsS8q1nWN8AoRfrq5+9IflC3P1leMoy4r2WjXyFqf3qcqsxRCfxtZIV58tCxd+Yv7WELPcO9mY9aeQyAmw==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.3.tgz", + "integrity": "sha512-sk/Qh1j2/RJSX7FhEpJn8n0ndxy/uf0kI/9Zc4b1ELhqULVdTfN6HL31CDaTChiBAOgLcsJ1sgVZjWv8XNEsAQ==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.3.tgz", + "integrity": "sha512-jOO/PEaDitOmY9TgkxF/TQIjXySQe5KVYB57H/8LRP/ux0ZoO8cSHCX17asMSv3ruwslXW/TLBcxyaUzGRHcqg==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.3.tgz", + "integrity": "sha512-8ybV4Xjy59xLMyWo3GCfEGqtKV5M5gCSrZlxkPGvEPCGDLNla7v48S662HSGwRd6/2cSneMQWiv+QzcttLrrOA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.3.tgz", + "integrity": "sha512-s+xf1I46trOY10OqAtZ5Rm6lzHre/UiLA1J2uOhCFXWkbZrJRkYBPO6FhvGfHmdtQ3Bx793MNa7LvoWFAm93bg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.3.tgz", + "integrity": "sha512-+4h2WrGOYsOumDQ5S2sYNyhVfrue+9tc9XcLWLh+Kw3UOxAvrfOrSMFon60KspcDdytkNDh7K2Vs6eMaYImAZg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.3.tgz", + "integrity": "sha512-T1l7y/bCeL/kUwh9OD4PQT4aM7Bq43vX05htPJJ46RTI4r5KNt6qJRzAfNfM+OYMNEVBWQzR2Gyk+FXLZfogGw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.3.tgz", + "integrity": "sha512-/BypzV0H1y1HzgYpxqRaXGBRqfodgoBBCcsrujT6QRcakDQdfU+Lq9PENPh5jB4I44YWq+0C2eHsHya+nZY1sA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@schematics/angular": { - "version": "16.2.13", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.13.tgz", - "integrity": "sha512-SFE9e7X/CEtzwGEqHUqXriAm4J4uTjcfoRXslc7BuqOKABM8RXPphGQsVG4xOt3n25kXXGkFO2dvDRHuLTP1fQ==", + "version": "17.3.6", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.6.tgz", + "integrity": "sha512-jCNZdjHSVrI8TrrCnCoXC8GYvQRj7zh+SDdmm91Ve8dbikYNmBOKYLuPaCTsmojWx7ytv962yLlgKzpaa2bbfw==", "dependencies": { - "@angular-devkit/core": "16.2.13", - "@angular-devkit/schematics": "16.2.13", - "jsonc-parser": "3.2.0" + "@angular-devkit/core": "17.3.6", + "@angular-devkit/schematics": "17.3.6", + "jsonc-parser": "3.2.1" }, "engines": { - "node": "^16.14.0 || >=18.10.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@sigstore/bundle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.0.0.tgz", - "integrity": "sha512-yLvrWDOh6uMOUlFCTJIZEnwOT9Xte7NPXUqVexEKGSF5XtBAuSg5du0kn3dRR0p47a4ah10Y0mNt8+uyeQXrBQ==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.1.tgz", + "integrity": "sha512-eqV17lO3EIFqCWK3969Rz+J8MYrRZKw9IBHpSo6DEcEX2c+uzDFOgHE9f2MnyDpfs48LFO4hXmk9KhQ74JzU1g==", "dependencies": { - "@sigstore/protobuf-specs": "^0.2.0" + "@sigstore/protobuf-specs": "^0.3.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", + "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", + "engines": { + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/@sigstore/protobuf-specs": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.0.tgz", - "integrity": "sha512-8ZhZKAVfXjIspDWwm3D3Kvj0ddbJ0HqDZ/pOs5cx88HpT8mVsotFrg7H1UMnXOuDHz6Zykwxn4mxG3QLuN+RUg==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.1.tgz", + "integrity": "sha512-aIL8Z9NsMr3C64jyQzE0XlkEyBLpgEJJFDHLVVStkFV5Q3Il/r/YtY6NJWKQ4cy4AE7spP1IX5Jq7VCAxHHMfQ==", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.0.tgz", + "integrity": "sha512-tsAyV6FC3R3pHmKS880IXcDJuiFJiKITO1jxR1qbplcsBkZLBmjrEw5GbC7ikD6f5RU1hr7WnmxB/2kKc1qUWQ==", + "dependencies": { + "@sigstore/bundle": "^2.3.0", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.1", + "make-fetch-happen": "^13.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/cacache": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", + "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@sigstore/sign/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/@sigstore/sign/node_modules/make-fetch-happen": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", + "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@sigstore/sign/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@sigstore/sign/node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" } }, "node_modules/@sigstore/tuf": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", - "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.2.tgz", + "integrity": "sha512-mwbY1VrEGU4CO55t+Kl6I7WZzIl+ysSzEYdA1Nv/FTrl2bkeaPXo5PnWZAVfcY2zSdhOpsUTJW67/M2zHXGn5w==", "dependencies": { - "@sigstore/protobuf-specs": "^0.2.0", - "tuf-js": "^1.1.7" + "@sigstore/protobuf-specs": "^0.3.0", + "tuf-js": "^2.2.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/@sigstore/verify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.0.tgz", + "integrity": "sha512-hQF60nc9yab+Csi4AyoAmilGNfpXT+EXdBgFkP9OgPwIBPwyqVf7JAWPtmqrrrneTmAT6ojv7OlH1f6Ix5BG4Q==", + "dependencies": { + "@sigstore/bundle": "^2.3.1", + "@sigstore/core": "^1.1.0", + "@sigstore/protobuf-specs": "^0.3.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, "node_modules/@socket.io/component-emitter": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", @@ -4821,9 +5469,9 @@ } }, "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", @@ -4841,23 +5489,23 @@ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" }, "node_modules/@tufjs/canonical-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", - "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/@tufjs/models": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", - "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.0.tgz", + "integrity": "sha512-c8nj8BaOExmZKO2DXhDfegyhSGcG9E/mPN3U13L+/PsoWm1uaGiHHjxqSHQiasDBQwDA3aHuw9+9spYAP1qvvg==", "dependencies": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.3" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/@tufjs/models/node_modules/brace-expansion": { @@ -4869,9 +5517,9 @@ } }, "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -4941,33 +5589,33 @@ } }, "node_modules/@types/dragula": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/dragula/-/dragula-3.7.4.tgz", - "integrity": "sha512-cjg5MNq8CnXyJTScWM2t9fc0FC77rrBxYBs6/R3FiwW9NOTdHPB2nJq52I0tfxiBnhFb451S2j5ok4wW7sKmvA==", + "version": "3.7.5", + "resolved": "https://registry.npmjs.org/@types/dragula/-/dragula-3.7.5.tgz", + "integrity": "sha512-jojr2JVJB8DawAKXApGnollMvVOMyiMKpchH8gLeoExx35Eq0BQ4WgAiAHoBoEn7h/9eDrIl0yz//cM6ALIJbg==", "dev": true }, "node_modules/@types/eslint": { - "version": "8.44.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", - "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", + "version": "8.56.9", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.9.tgz", + "integrity": "sha512-W4W3KcqzjJ0sHg2vAq9vfml6OhsJ53TcUjUqfzzZf/EChUtwspszj/S0pzMxnfRcO55/iGq47dscXw71Fxc4Zg==", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" }, "node_modules/@types/express": { "version": "4.17.17", @@ -5007,6 +5655,11 @@ "integrity": "sha512-qkcUlZmX6c4J8q45taBKTL3p+LbITgyx7qhlPYOdOHZB7B31K0mXbP5YA7i7SgDeEGuI9MnumiKPEMrxg8j3KQ==", "dev": true }, + "node_modules/@types/hotwired__turbo": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@types/hotwired__turbo/-/hotwired__turbo-8.0.1.tgz", + "integrity": "sha512-EloDlDDxlicl22+gFc77f7j16b8nCUvy6iyCtpICTlofAJfMCfnXNC8nYXCnVApes3BtWklAc2f3RKQgpaaFRQ==" + }, "node_modules/@types/http-errors": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", @@ -5027,9 +5680,9 @@ "dev": true }, "node_modules/@types/jquery": { - "version": "3.5.29", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.29.tgz", - "integrity": "sha512-oXQQC9X9MOPRrMhPHHOsXqeQDnWeCDT3PelUIg/Oy8FAbzSZtFHRjc7IpbfFVmpLtJ+UOoywpRsuO5Jxjybyeg==", + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.30.tgz", + "integrity": "sha512-nbWKkkyb919DOUxjmRVk8vwtDb0/k8FKncmUKFi+NY+QXqWltooxTrswvz4LspQwxvLdvzBN1TImr6cw3aQx2A==", "dev": true, "dependencies": { "@types/sizzle": "*" @@ -5045,9 +5698,9 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==" + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "node_modules/@types/json5": { "version": "0.0.29", @@ -5056,9 +5709,9 @@ "dev": true }, "node_modules/@types/lodash": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", - "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.1.tgz", + "integrity": "sha512-X+2qazGS3jxLAIz5JDXDzglAF3KpijdhFxlf/V1+hEsOUc+HnWi81L/uv/EvGuV90WY+7mPGFCUDGfQC3Gj95Q==", "dev": true }, "node_modules/@types/mime": { @@ -5105,9 +5758,9 @@ "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, "node_modules/@types/send": { @@ -5183,9 +5836,9 @@ "dev": true }, "node_modules/@types/webpack-env": { - "version": "1.18.4", - "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.4.tgz", - "integrity": "sha512-I6e+9+HtWADAWeeJWDFQtdk4EVSAbj6Rtz4q8fJ7mSr1M0jzlFcs8/HZ+Xb5SHzVm1dxH7aUiI+A8kA8Gcrm0A==", + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.5.tgz", + "integrity": "sha512-wz7kjjRRj8/Lty4B+Kr0LN6Ypc/3SymeCCGSbaXp2leH0ZVg/PriNiOwNj4bD4uphI7A8NXS4b6Gl373sfO5mA==", "dev": true }, "node_modules/@types/ws": { @@ -5198,58 +5851,33 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.0.tgz", - "integrity": "sha512-SVLafp0NXpoJY7ut6VFVUU9I+YeFsDzeQwtK0WZ+xbRN3mtxJ08je+6Oi2N89qDn087COdO0u3blKZNv9VetRQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.48.0", - "@typescript-eslint/type-utils": "5.48.0", - "@typescript-eslint/utils": "5.48.0", - "debug": "^4.3.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.48.0.tgz", - "integrity": "sha512-vbtPO5sJyFjtHkGlGK4Sthmta0Bbls4Onv0bEqOGm7hP9h8UpRsHJwsrCiWtCUndTRNQO/qe6Ijz9rnT/DB+7g==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.8.0.tgz", + "integrity": "sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.48.0", - "@typescript-eslint/utils": "5.48.0", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/type-utils": "7.8.0", + "@typescript-eslint/utils": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -5258,73 +5886,51 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.48.0.tgz", - "integrity": "sha512-x2jrMcPaMfsHRRIkL+x96++xdzvrdBCnYRd5QiW5Wgo1OB4kDYPbC1XjWP/TNqlfK93K/lUL92erq5zPLgFScQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", + "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.48.0", - "@typescript-eslint/types": "5.48.0", - "@typescript-eslint/typescript-estree": "5.48.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "semver": "^7.6.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" + "eslint": "^8.56.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.48.0.tgz", - "integrity": "sha512-1mxNA8qfgxX8kBvRDIHEzrRGrKHQfQlbW6iHyfHYS0Q4X1af+S6mkLNtgCOsGVl8+/LUPrqdHMssAemkrQ01qg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.48.0", - "@typescript-eslint/types": "5.48.0", - "@typescript-eslint/typescript-estree": "5.48.0", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", "debug": "^4.3.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -5333,16 +5939,16 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.48.0.tgz", - "integrity": "sha512-0AA4LviDtVtZqlyUQnZMVHydDATpD9SAX/RC5qh6cBd3xmyWvmXYF+WT1oOmxkeMnWDlUVTwdODeucUnjz3gow==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", + "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.48.0", - "@typescript-eslint/visitor-keys": "5.48.0" + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -5350,25 +5956,25 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.8.0.tgz", + "integrity": "sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "@typescript-eslint/utils": "7.8.0", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -5376,70 +5982,38 @@ } } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", + "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "semver": "^7.6.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "eslint": "^8.56.0" } }, "node_modules/@typescript-eslint/types": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.0.tgz", - "integrity": "sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", + "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -5447,21 +6021,22 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.0.tgz", - "integrity": "sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", + "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.48.0", - "@typescript-eslint/visitor-keys": "5.48.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -5473,43 +6048,66 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.2.0.tgz", + "integrity": "sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "semver": "^7.5.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", + "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -5517,12 +6115,12 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", + "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -5530,21 +6128,22 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", + "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -5557,55 +6156,57 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", + "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "7.2.0", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/@typescript-eslint/utils/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" + "balanced-match": "^1.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/@typescript-eslint/utils/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=4.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.0.tgz", - "integrity": "sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", + "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.48.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "7.8.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -5613,9 +6214,9 @@ } }, "node_modules/@uirouter/angular": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@uirouter/angular/-/angular-12.0.0.tgz", - "integrity": "sha512-UTJ2lyiZowD0xLAWbfEMA7jZpgFZQYFml/53mqY8vNPc7D7/5dHBaUu+Kx+Xmm3fmy+K1c9HSKA2eZQS4AqmDA==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@uirouter/angular/-/angular-13.0.0.tgz", + "integrity": "sha512-T2aizSXzW+7eiXUmc0LiLH+I8ZBJvDr7OQmm/5WCcxVL2NfuIse7B1kpvfdh9PmBAqw8AY7S0NhrJgABfFJUnw==", "dependencies": { "tslib": "^2.3.0" }, @@ -5623,8 +6224,8 @@ "node": ">=6.0.0" }, "peerDependencies": { - "@angular/common": "^16.0.0", - "@angular/core": "^16.0.0", + "@angular/common": "^17.0.0", + "@angular/core": "^17.0.0", "@uirouter/core": "^6.0.8", "@uirouter/rx": "^1.0.0" } @@ -5653,14 +6254,14 @@ "dev": true }, "node_modules/@vitejs/plugin-basic-ssl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz", - "integrity": "sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", + "integrity": "sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==", "engines": { "node": ">=14.6.0" }, "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0" + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" } }, "node_modules/@vusion/webfonts-generator": { @@ -5823,9 +6424,9 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6" @@ -5842,9 +6443,9 @@ "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.6", @@ -5862,14 +6463,14 @@ "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/wasm-gen": "1.12.1" } }, "node_modules/@webassemblyjs/ieee754": { @@ -5894,26 +6495,26 @@ "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", @@ -5921,22 +6522,22 @@ } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", @@ -5945,84 +6546,14 @@ } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, - "node_modules/@wessberg/ts-evaluator": { - "version": "0.0.27", - "resolved": "https://registry.npmjs.org/@wessberg/ts-evaluator/-/ts-evaluator-0.0.27.tgz", - "integrity": "sha512-7gOpVm3yYojUp/Yn7F4ZybJRxyqfMNf0LXK5KJiawbPfL0XTsJV+0mgrEDjOIR6Bi0OYk2Cyg4tjFu1r8MCZaA==", - "deprecated": "this package has been renamed to ts-evaluator. Please install ts-evaluator instead", - "dependencies": { - "chalk": "^4.1.0", - "jsdom": "^16.4.0", - "object-path": "^0.11.5", - "tslib": "^2.0.3" - }, - "engines": { - "node": ">=10.1.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/wessberg/ts-evaluator?sponsor=1" - }, - "peerDependencies": { - "typescript": ">=3.2.x || >= 4.x" - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@xeokit/xeokit-bim-viewer": { "version": "2.5.1-beta-28", "resolved": "https://registry.npmjs.org/@xeokit/xeokit-bim-viewer/-/xeokit-bim-viewer-2.5.1-beta-28.tgz", @@ -6097,11 +6628,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" - }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -6120,29 +6646,9 @@ } }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "bin": { "acorn": "bin/acorn" }, @@ -6168,9 +6674,9 @@ } }, "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "engines": { "node": ">=0.4.0" } @@ -7026,7 +7532,8 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true }, "node_modules/atoa": { "version": "1.0.0", @@ -7115,37 +7622,68 @@ } }, "node_modules/axios": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", - "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", "dev": true, "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, - "node_modules/axios/node_modules/form-data": { + "node_modules/axobject-query": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", + "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", "dev": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "dequal": "^2.0.3" + } + }, + "node_modules/babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" }, "engines": { - "node": ">= 6" + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" } }, - "node_modules/axobject-query": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", - "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", - "dev": true, + "node_modules/babel-loader/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dependencies": { - "deep-equal": "^2.0.5" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/babel-plugin-istanbul": { @@ -7187,12 +7725,12 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz", - "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==", + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz", + "integrity": "sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==", "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.3", + "@babel/helper-define-polyfill-provider": "^0.6.1", "semver": "^6.3.1" }, "peerDependencies": { @@ -7208,23 +7746,53 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.5.tgz", - "integrity": "sha512-Q6CdATeAvbScWPNLB8lzSO7fgUVBkQt6zLgNlfyeCr/EQaEQR+bWiBYYPYAFyE528BMjRhL+1QBMOI4jc/c5TA==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", + "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.5.0", + "core-js-compat": "^3.34.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.3", - "core-js-compat": "^3.32.2" + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz", - "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", + "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.3" + "@babel/helper-define-polyfill-provider": "^0.5.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -7443,11 +8011,6 @@ "node": ">=8" } }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" - }, "node_modules/browserslist": { "version": "4.23.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", @@ -7529,9 +8092,9 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", + "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", "dependencies": { "semver": "^7.0.0" } @@ -7857,11 +8420,11 @@ } }, "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", "engines": { - "node": ">= 10" + "node": ">= 12" } }, "node_modules/cliui": { @@ -7956,6 +8519,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -8007,6 +8571,11 @@ "node": ">=8" } }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, "node_modules/common-path-prefix": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", @@ -8320,9 +8889,9 @@ } }, "node_modules/core-js": { - "version": "3.36.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.36.1.tgz", - "integrity": "sha512-BTvUrwxVBezj5SZ3f10ImnX2oRByMxql3EimVqMysepbC9EeMUOpLwdy6Eoili2x6E4kf+ZUB5k/+Jv55alPfA==", + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.0.tgz", + "integrity": "sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -8330,11 +8899,11 @@ } }, "node_modules/core-js-compat": { - "version": "3.33.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.1.tgz", - "integrity": "sha512-6pYKNOgD/j/bkC5xS5IIg6bncid3rfrI42oBH1SQJbsmYPKF7rhzcFzYCcxYMmNQQ0rCEB8WqpW7QHndOggaeQ==", + "version": "3.36.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz", + "integrity": "sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==", "dependencies": { - "browserslist": "^4.22.1" + "browserslist": "^4.23.0" }, "funding": { "type": "opencollective", @@ -8374,14 +8943,14 @@ } }, "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dependencies": { + "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" }, "engines": { "node": ">=14" @@ -8468,9 +9037,9 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, "node_modules/critters": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.20.tgz", - "integrity": "sha512-CImNRorKOl5d8TWcnAz5n5izQ6HFsvz29k327/ELy6UFcmbiZNOsinaKvzv16WZR0P6etfSWYzE47C4/56B3Uw==", + "version": "0.0.22", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.22.tgz", + "integrity": "sha512-NU7DEcQZM2Dy8XTKFHxtdnIM/drE312j2T4PCVaSUcS0oBeyT/NImpRw/Ap0zOr/1SE7SgPK9tGPg1WK/sVakw==", "dependencies": { "chalk": "^4.1.0", "css-select": "^5.1.0", @@ -8478,7 +9047,7 @@ "domhandler": "^5.0.2", "htmlparser2": "^8.0.2", "postcss": "^8.4.23", - "pretty-bytes": "^5.3.0" + "postcss-media-query-parser": "^0.2.3" } }, "node_modules/critters/node_modules/ansi-styles": { @@ -8559,18 +9128,18 @@ } }, "node_modules/css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.10.0.tgz", + "integrity": "sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==", "dependencies": { "icss-utils": "^5.1.0", - "postcss": "^8.4.21", + "postcss": "^8.4.33", "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.4", + "postcss-modules-scope": "^3.1.1", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" + "semver": "^7.5.4" }, "engines": { "node": ">= 12.13.0" @@ -8580,7 +9149,43 @@ "url": "https://opencollective.com/webpack" }, "peerDependencies": { + "@rspack/core": "0.x || 1.x", "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-loader/node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" } }, "node_modules/css-select": { @@ -8620,27 +9225,6 @@ "node": ">=4" } }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" - }, "node_modules/cubic2quad": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/cubic2quad/-/cubic2quad-1.2.1.tgz", @@ -8665,51 +9249,6 @@ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/data-urls/node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/data-urls/node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "engines": { - "node": ">=10.4" - } - }, - "node_modules/data-urls/node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/data.either": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/data.either/-/data.either-1.5.1.tgz", @@ -8772,11 +9311,6 @@ } } }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" - }, "node_modules/decode-uri-component": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", @@ -8786,35 +9320,6 @@ "node": ">=0.10" } }, - "node_modules/deep-equal": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", - "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.1", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -8941,6 +9446,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, "engines": { "node": ">=0.4.0" } @@ -8995,6 +9501,15 @@ "node": ">=0.3.1" } }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -9106,25 +9621,6 @@ } ] }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "engines": { - "node": ">=8" - } - }, "node_modules/domhandler": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", @@ -9152,6 +9648,27 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/dotenv": { + "version": "16.3.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.2.tgz", + "integrity": "sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/draco3d": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/draco3d/-/draco3d-1.5.5.tgz", @@ -9183,9 +9700,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, "dependencies": { "jake": "^10.8.5" @@ -9314,9 +9831,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -9470,26 +9987,6 @@ "node": ">= 0.4" } }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/es-html-parser": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/es-html-parser/-/es-html-parser-0.0.8.tgz", @@ -9523,9 +10020,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz", + "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==" }, "node_modules/es-set-tostringtag": { "version": "2.0.3", @@ -9675,10 +10172,11 @@ } }, "node_modules/esbuild": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.17.tgz", - "integrity": "sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.1.tgz", + "integrity": "sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA==", "hasInstallScript": true, + "optional": true, "bin": { "esbuild": "bin/esbuild" }, @@ -9686,34 +10184,35 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.18.17", - "@esbuild/android-arm64": "0.18.17", - "@esbuild/android-x64": "0.18.17", - "@esbuild/darwin-arm64": "0.18.17", - "@esbuild/darwin-x64": "0.18.17", - "@esbuild/freebsd-arm64": "0.18.17", - "@esbuild/freebsd-x64": "0.18.17", - "@esbuild/linux-arm": "0.18.17", - "@esbuild/linux-arm64": "0.18.17", - "@esbuild/linux-ia32": "0.18.17", - "@esbuild/linux-loong64": "0.18.17", - "@esbuild/linux-mips64el": "0.18.17", - "@esbuild/linux-ppc64": "0.18.17", - "@esbuild/linux-riscv64": "0.18.17", - "@esbuild/linux-s390x": "0.18.17", - "@esbuild/linux-x64": "0.18.17", - "@esbuild/netbsd-x64": "0.18.17", - "@esbuild/openbsd-x64": "0.18.17", - "@esbuild/sunos-x64": "0.18.17", - "@esbuild/win32-arm64": "0.18.17", - "@esbuild/win32-ia32": "0.18.17", - "@esbuild/win32-x64": "0.18.17" + "@esbuild/aix-ppc64": "0.20.1", + "@esbuild/android-arm": "0.20.1", + "@esbuild/android-arm64": "0.20.1", + "@esbuild/android-x64": "0.20.1", + "@esbuild/darwin-arm64": "0.20.1", + "@esbuild/darwin-x64": "0.20.1", + "@esbuild/freebsd-arm64": "0.20.1", + "@esbuild/freebsd-x64": "0.20.1", + "@esbuild/linux-arm": "0.20.1", + "@esbuild/linux-arm64": "0.20.1", + "@esbuild/linux-ia32": "0.20.1", + "@esbuild/linux-loong64": "0.20.1", + "@esbuild/linux-mips64el": "0.20.1", + "@esbuild/linux-ppc64": "0.20.1", + "@esbuild/linux-riscv64": "0.20.1", + "@esbuild/linux-s390x": "0.20.1", + "@esbuild/linux-x64": "0.20.1", + "@esbuild/netbsd-x64": "0.20.1", + "@esbuild/openbsd-x64": "0.20.1", + "@esbuild/sunos-x64": "0.20.1", + "@esbuild/win32-arm64": "0.20.1", + "@esbuild/win32-ia32": "0.20.1", + "@esbuild/win32-x64": "0.20.1" } }, "node_modules/esbuild-wasm": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.18.17.tgz", - "integrity": "sha512-9OHGcuRzy+I8ziF9FzjfKLWAPbvi0e/metACVg9k6bK+SI4FFxeV6PcZsz8RIVaMD4YNehw+qj6UMR3+qj/EuQ==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.20.1.tgz", + "integrity": "sha512-6v/WJubRsjxBbQdz6izgvx7LsVFvVaGmSdwrFHmEzoVgfXL89hkKPoQHsnVI2ngOkcBUQT9kmAM1hVL1k/Av4A==", "bin": { "esbuild": "bin/esbuild" }, @@ -9826,18 +10325,17 @@ } }, "node_modules/eslint-config-airbnb-typescript": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.1.0.tgz", - "integrity": "sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-18.0.0.tgz", + "integrity": "sha512-oc+Lxzgzsu8FQyFVa4QFaVKiitTYiiW3frB9KYW5OWdPrqFc7FzxgB20hP4cHMlr+MBzGcLl3jnCOVOydL9mIg==", "dev": true, "dependencies": { "eslint-config-airbnb-base": "^15.0.0" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.13.0 || ^6.0.0", - "@typescript-eslint/parser": "^5.0.0 || ^6.0.0", - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.3" + "@typescript-eslint/eslint-plugin": "^7.0.0", + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" } }, "node_modules/eslint-import-resolver-node": { @@ -9860,23 +10358,6 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-import-resolver-node/node_modules/resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/eslint-module-utils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", @@ -10034,18 +10515,6 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/@babel/runtime": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", - "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/eslint-plugin-jsx-a11y/node_modules/axobject-query": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", @@ -10055,12 +10524,6 @@ "dequal": "^2.0.3" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", - "dev": true - }, "node_modules/eslint-plugin-react": { "version": "7.34.1", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", @@ -10094,9 +10557,9 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true, "engines": { "node": ">=10" @@ -10144,48 +10607,21 @@ } }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.1.tgz", + "integrity": "sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", @@ -10263,6 +10699,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -10276,9 +10728,9 @@ } }, "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -10479,11 +10931,6 @@ "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" }, - "node_modules/eventemitter-asyncresource": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", - "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==" - }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -10987,6 +11434,21 @@ "node": ">= 0.6" } }, + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/find-replace": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", @@ -11018,18 +11480,18 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, "bin": { "flat": "cli.js" } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { @@ -11047,9 +11509,9 @@ "integrity": "sha512-97PMG/aywoYpB4IvbvUJi0RQi8vearvU0oov1WW3k0WZPBMrTQVqekSX5CjSG/M4Q3i6A/0FKXC7RyAoAUUSPw==" }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "node_modules/follow-redirects": { @@ -11128,9 +11590,10 @@ } }, "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -11196,9 +11659,9 @@ } }, "node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -11278,14 +11741,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fuse.js": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-3.6.1.tgz", - "integrity": "sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw==", - "engines": { - "node": ">=6" - } - }, "node_modules/gauge": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", @@ -11545,17 +12000,6 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "node_modules/guess-parser": { - "version": "0.4.22", - "resolved": "https://registry.npmjs.org/guess-parser/-/guess-parser-0.4.22.tgz", - "integrity": "sha512-KcUWZ5ACGaBM69SbqwVIuWGoSAgD+9iJnchR9j/IarVI1jHVeXv+bUXBIMeqVMSKt3zrn0Dgf9UpcOEpPBLbSg==", - "dependencies": { - "@wessberg/ts-evaluator": "0.0.27" - }, - "peerDependencies": { - "typescript": ">=3.7.5" - } - }, "node_modules/gulp-header": { "version": "1.8.12", "resolved": "https://registry.npmjs.org/gulp-header/-/gulp-header-1.8.12.tgz", @@ -12004,26 +12448,6 @@ "node": ">= 0.4" } }, - "node_modules/hdr-histogram-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", - "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", - "dependencies": { - "@assemblyscript/loader": "^0.10.1", - "base64-js": "^1.2.0", - "pako": "^1.0.3" - } - }, - "node_modules/hdr-histogram-js/node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "node_modules/hdr-histogram-percentiles-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", - "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==" - }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -12087,22 +12511,22 @@ } }, "node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", "dependencies": { - "lru-cache": "^7.5.1" + "lru-cache": "^10.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", "engines": { - "node": ">=12" + "node": "14 || >=16.14" } }, "node_modules/hpack.js": { @@ -12143,17 +12567,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/html-entities": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", @@ -12477,17 +12890,17 @@ ] }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "engines": { "node": ">= 4" } }, "node_modules/ignore-walk": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", - "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.4.tgz", + "integrity": "sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw==", "dependencies": { "minimatch": "^9.0.0" }, @@ -12504,9 +12917,9 @@ } }, "node_modules/ignore-walk/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -12530,9 +12943,9 @@ } }, "node_modules/immutable": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.2.tgz", - "integrity": "sha512-oGXzbEDem9OOpDWZu88jGiYCvIsLHMvGw+8OXlpsvTFvIQplQbjg1B1cvKg8f7Hoch6+NGjpPsH1Fr+Mc2D1aA==" + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", + "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==" }, "node_modules/immutable-ext": { "version": "1.1.2", @@ -12609,36 +13022,36 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", + "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/inquirer": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", - "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", + "version": "9.2.15", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.15.tgz", + "integrity": "sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==", "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", + "@ljharb/through": "^2.3.12", + "ansi-escapes": "^4.3.2", + "chalk": "^5.3.0", "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", + "cli-width": "^4.1.0", + "external-editor": "^3.1.0", + "figures": "^3.2.0", "lodash": "^4.17.21", - "mute-stream": "0.0.8", + "mute-stream": "1.0.0", "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" + "run-async": "^3.0.0", + "rxjs": "^7.8.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=18" } }, "node_modules/inquirer/node_modules/ansi-styles": { @@ -12656,34 +13069,24 @@ } }, "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "engines": { - "node": ">=10" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/inquirer/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/inquirer/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dependencies": { - "has-flag": "^4.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { "node": ">=8" @@ -12728,22 +13131,6 @@ "node": ">= 0.10" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-array": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-array/-/is-array-1.0.1.tgz", @@ -13096,11 +13483,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" - }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -13315,15 +13697,6 @@ "node": ">=0.10.0" } }, - "node_modules/isomorphic-unfetch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", - "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", - "dependencies": { - "node-fetch": "^2.6.1", - "unfetch": "^4.2.0" - } - }, "node_modules/isomorphic-ws": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", @@ -13599,12 +13972,6 @@ "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", "dev": true }, - "node_modules/jayson/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, "node_modules/jayson/node_modules/ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", @@ -13626,6 +13993,82 @@ } } }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -13662,9 +14105,9 @@ } }, "node_modules/jiti": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.1.tgz", - "integrity": "sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", "bin": { "jiti": "bin/jiti.js" } @@ -13712,180 +14155,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/jsdom/node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/jsdom/node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jsdom/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/jsdom/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jsdom/node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsdom/node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jsdom/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/jsdom/node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "engines": { - "node": ">=10.4" - } - }, - "node_modules/jsdom/node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jsdom/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -13905,10 +14174,19 @@ "node": ">=0.8" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/json-schema-traverse": { "version": "1.0.0", @@ -13939,9 +14217,9 @@ } }, "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==" }, "node_modules/jsonfile": { "version": "6.1.0", @@ -14111,19 +14389,6 @@ "node": ">=6" } }, - "node_modules/karma-coverage-istanbul-reporter/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/karma-coverage-istanbul-reporter/node_modules/rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -14136,15 +14401,6 @@ "rimraf": "bin.js" } }, - "node_modules/karma-coverage-istanbul-reporter/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, "node_modules/karma-coverage-istanbul-reporter/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -14236,6 +14492,15 @@ "node": ">=10" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -14297,9 +14562,9 @@ } }, "node_modules/less": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", - "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", + "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", "dependencies": { "copy-anything": "^2.0.1", "parse-node-version": "^1.0.1", @@ -14340,19 +14605,6 @@ "webpack": "^5.0.0" } }, - "node_modules/less/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "optional": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/less/node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -14365,15 +14617,6 @@ "node": ">=4" } }, - "node_modules/less/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, "node_modules/less/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -14413,9 +14656,9 @@ } }, "node_modules/lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", + "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", "dev": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -14693,9 +14936,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.1", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.1.tgz", - "integrity": "sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==", + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" }, @@ -14703,6 +14946,28 @@ "node": ">=12" } }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "devOptional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "devOptional": true, + "bin": { + "semver": "bin/semver" + } + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -14930,11 +15195,12 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", - "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.1.tgz", + "integrity": "sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA==", "dependencies": { - "schema-utils": "^4.0.0" + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" }, "engines": { "node": ">= 12.13.0" @@ -15249,6 +15515,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true, "engines": { "node": ">=10" } @@ -15271,9 +15538,12 @@ } }, "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/nan": { "version": "2.17.0", @@ -15281,9 +15551,9 @@ "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "funding": [ { "type": "github", @@ -15363,12 +15633,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "node_modules/neatequal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/neatequal/-/neatequal-1.0.0.tgz", @@ -15378,12 +15642,11 @@ } }, "node_modules/needle": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", - "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", "optional": true, "dependencies": { - "debug": "^3.2.6", "iconv-lite": "^0.6.3", "sax": "^1.2.4" }, @@ -15394,15 +15657,6 @@ "node": ">= 4.4.x" } }, - "node_modules/needle/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "optional": true, - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/needle/node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -15463,16 +15717,16 @@ } }, "node_modules/ng2-dragula": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ng2-dragula/-/ng2-dragula-3.2.0.tgz", - "integrity": "sha512-+By83ZGcumnKdAk5fEv8w92S85z3VpParJt/PDDuAOpkErdIq/DjUy4j5/5SymJ30SWADbd+Onie0UKgyxiiOA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ng2-dragula/-/ng2-dragula-5.1.0.tgz", + "integrity": "sha512-5P185NWZXIAA/lmZ8Bb6alMxfxYcMRu4Mw+JGJVj4ACplsUUq77Odfhpwk1a5R1pyI+3CC4sOwYrJg+nTi0e6Q==", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/animations": "^14.0.0", - "@angular/common": "^14.0.0", - "@angular/core": "^14.0.0", + "@angular/animations": ">=16.0.0 <18.0.0", + "@angular/common": ">=16.0.0 <18.0.0", + "@angular/core": ">=16.0.0 <18.0.0", "@types/dragula": "^2.1.34", "dragula": "^3.7.2", "rxjs": ">=6.0.0" @@ -15508,26 +15762,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "devOptional": true - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } + "optional": true }, "node_modules/node-forge": { "version": "1.3.1", @@ -15565,7 +15800,7 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "devOptional": true, + "optional": true, "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -15578,6 +15813,12 @@ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true }, + "node_modules/node-machine-id": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", + "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", + "dev": true + }, "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", @@ -15598,17 +15839,17 @@ } }, "node_modules/normalize-package-data": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", + "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", "dependencies": { - "hosted-git-info": "^6.0.0", + "hosted-git-info": "^7.0.0", "is-core-module": "^2.8.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/normalize-path": { @@ -15639,9 +15880,9 @@ } }, "node_modules/npm-install-checks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", - "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", "dependencies": { "semver": "^7.1.1" }, @@ -15658,57 +15899,179 @@ } }, "node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", + "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", "dependencies": { - "hosted-git-info": "^6.0.0", + "hosted-git-info": "^7.0.0", "proc-log": "^3.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^5.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm-packlist": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", - "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", + "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", "dependencies": { - "ignore-walk": "^6.0.0" + "ignore-walk": "^6.0.4" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-pick-manifest": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", - "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz", + "integrity": "sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg==", "dependencies": { "npm-install-checks": "^6.0.0", "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", + "npm-package-arg": "^11.0.0", "semver": "^7.3.5" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm-registry-fetch": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", - "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-16.2.1.tgz", + "integrity": "sha512-8l+7jxhim55S85fjiDGJ1rZXBWGtRLi1OSb4Z3BPLObPuIaeKRlPRiYMSHU4/81ck3t71Z+UwDDl47gcpmfQQA==", "dependencies": { - "make-fetch-happen": "^11.0.0", - "minipass": "^5.0.0", + "@npmcli/redact": "^1.1.0", + "make-fetch-happen": "^13.0.0", + "minipass": "^7.0.2", "minipass-fetch": "^3.0.0", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", - "npm-package-arg": "^10.0.0", - "proc-log": "^3.0.0" + "npm-package-arg": "^11.0.0", + "proc-log": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/cacache": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", + "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm-registry-fetch/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", + "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dependencies": { + "minipass": "^7.0.3" }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm-registry-fetch/node_modules/proc-log": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.1.0.tgz", + "integrity": "sha512-dmQ2iPw2nJMi9/4dpaG1wd0m1GE+K5kW7RGbjy5hoEEGnhPIzsm+klBO5RGGdcoYbWsNtU2KSNAdEldts+icLg==", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -15749,71 +16112,67 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" - }, "node_modules/nx": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/nx/-/nx-16.5.1.tgz", - "integrity": "sha512-I3hJRE4hG7JWAtncWwDEO3GVeGPpN0TtM8xH5ArZXyDuVeTth/i3TtJzdDzqXO1HHtIoAQN0xeq4n9cLuMil5g==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/nx/-/nx-18.2.4.tgz", + "integrity": "sha512-GxqJcDOhfLa9jsPmip0jG73CZKA96wCryss2DhixCiCU66I3GLYF4+585ObO8Tx7Z1GqhT92RaNGjCxjMIwaPg==", "dev": true, "hasInstallScript": true, "dependencies": { - "@nrwl/tao": "16.5.1", - "@parcel/watcher": "2.0.4", + "@nrwl/tao": "18.2.4", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "3.0.0-rc.46", "@zkochan/js-yaml": "0.0.6", - "axios": "^1.0.0", + "axios": "^1.6.0", "chalk": "^4.1.0", "cli-cursor": "3.1.0", "cli-spinners": "2.6.1", - "cliui": "^7.0.2", - "dotenv": "~10.0.0", + "cliui": "^8.0.1", + "dotenv": "~16.3.1", + "dotenv-expand": "~10.0.0", "enquirer": "~2.3.6", - "fast-glob": "3.2.7", "figures": "3.2.0", "flat": "^5.0.2", "fs-extra": "^11.1.0", - "glob": "7.1.4", "ignore": "^5.0.4", + "jest-diff": "^29.4.1", "js-yaml": "4.1.0", "jsonc-parser": "3.2.0", "lines-and-columns": "~2.0.3", - "minimatch": "3.0.5", + "minimatch": "9.0.3", + "node-machine-id": "1.1.12", "npm-run-path": "^4.0.1", "open": "^8.4.0", - "semver": "7.5.3", + "ora": "5.3.0", + "semver": "^7.5.3", "string-width": "^4.2.3", "strong-log-transformer": "^2.1.0", "tar-stream": "~2.2.0", "tmp": "~0.2.1", "tsconfig-paths": "^4.1.2", "tslib": "^2.3.0", - "v8-compile-cache": "2.3.0", "yargs": "^17.6.2", "yargs-parser": "21.1.1" }, "bin": { - "nx": "bin/nx.js" + "nx": "bin/nx.js", + "nx-cloud": "bin/nx-cloud.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "16.5.1", - "@nx/nx-darwin-x64": "16.5.1", - "@nx/nx-freebsd-x64": "16.5.1", - "@nx/nx-linux-arm-gnueabihf": "16.5.1", - "@nx/nx-linux-arm64-gnu": "16.5.1", - "@nx/nx-linux-arm64-musl": "16.5.1", - "@nx/nx-linux-x64-gnu": "16.5.1", - "@nx/nx-linux-x64-musl": "16.5.1", - "@nx/nx-win32-arm64-msvc": "16.5.1", - "@nx/nx-win32-x64-msvc": "16.5.1" + "@nx/nx-darwin-arm64": "18.2.4", + "@nx/nx-darwin-x64": "18.2.4", + "@nx/nx-freebsd-x64": "18.2.4", + "@nx/nx-linux-arm-gnueabihf": "18.2.4", + "@nx/nx-linux-arm64-gnu": "18.2.4", + "@nx/nx-linux-arm64-musl": "18.2.4", + "@nx/nx-linux-x64-gnu": "18.2.4", + "@nx/nx-linux-x64-musl": "18.2.4", + "@nx/nx-win32-arm64-msvc": "18.2.4", + "@nx/nx-win32-x64-msvc": "18.2.4" }, "peerDependencies": { - "@swc-node/register": "^1.4.2", - "@swc/core": "^1.2.173" + "@swc-node/register": "^1.8.0", + "@swc/core": "^1.3.85" }, "peerDependenciesMeta": { "@swc-node/register": { @@ -15845,6 +16204,15 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/nx/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/nx/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -15861,46 +16229,18 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/nx/node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/nx/node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nx/node_modules/glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "node_modules/nx/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": "*" + "node": ">=12" } }, "node_modules/nx/node_modules/has-flag": { @@ -15924,16 +16264,47 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/nx/node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, "node_modules/nx/node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/nx/node_modules/ora": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", + "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/nx/node_modules/supports-color": { @@ -16022,22 +16393,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -16047,14 +16402,6 @@ "node": ">= 0.4" } }, - "node_modules/object-path": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.8.tgz", - "integrity": "sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==", - "engines": { - "node": ">= 10.12.0" - } - }, "node_modules/object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -16432,26 +16779,26 @@ } }, "node_modules/pacote": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", - "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.6.tgz", + "integrity": "sha512-cJKrW21VRE8vVTRskJo78c/RCvwJCn1f4qgfxL4w77SOWrTCRcmfkYHlHtS0gqpgjv3zhXflRtgsrUCX5xwNnQ==", "dependencies": { - "@npmcli/git": "^4.0.0", + "@npmcli/git": "^5.0.0", "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/run-script": "^6.0.0", - "cacache": "^17.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "@npmcli/run-script": "^7.0.0", + "cacache": "^18.0.0", "fs-minipass": "^3.0.0", - "minipass": "^5.0.0", - "npm-package-arg": "^10.0.0", - "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^8.0.0", - "npm-registry-fetch": "^14.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^11.0.0", + "npm-packlist": "^8.0.0", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^16.0.0", "proc-log": "^3.0.0", "promise-retry": "^2.0.1", - "read-package-json": "^6.0.0", + "read-package-json": "^7.0.0", "read-package-json-fast": "^3.0.0", - "sigstore": "^1.3.0", + "sigstore": "^2.2.0", "ssri": "^10.0.0", "tar": "^6.1.11" }, @@ -16459,7 +16806,99 @@ "pacote": "lib/bin.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/pacote/node_modules/cacache": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", + "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pacote/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/pacote/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pacote/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/pacote/node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" } }, "node_modules/pad-left": { @@ -16506,6 +16945,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse-json/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, "node_modules/parse-json/node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -16601,11 +17045,11 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { @@ -16616,9 +17060,9 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", - "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", "engines": { "node": "14 || >=16.14" } @@ -16662,16 +17106,101 @@ } }, "node_modules/piscina": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.4.0.tgz", + "integrity": "sha512-+AQduEJefrOApE4bV7KRmp3N2JnnyErlVqq4P/jmko4FPz9Z877BCccl/iB3FdrWSUkvbGV9Kan/KllJgat3Vg==", + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.0.0.tgz", - "integrity": "sha512-641nAmJS4k4iqpNUqfggqUBUMmlw0ZoM5VZKdQkV2e970Inn3Tk9kroCc1wpsYLD07vCwpys5iY0d3xI/9WkTg==", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dependencies": { - "eventemitter-asyncresource": "^1.0.0", - "hdr-histogram-js": "^2.0.1", - "hdr-histogram-percentiles-obj": "^3.0.0" + "yocto-queue": "^1.0.0" }, - "optionalDependencies": { - "nice-napi": "^1.0.2" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/pkg-dir/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/portfinder": { @@ -16749,30 +17278,44 @@ } }, "node_modules/postcss-loader": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.3.tgz", - "integrity": "sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", + "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", "dependencies": { - "cosmiconfig": "^8.2.0", - "jiti": "^1.18.2", - "semver": "^7.3.8" + "cosmiconfig": "^9.0.0", + "jiti": "^1.20.0", + "semver": "^7.5.4" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { + "@rspack/core": "0.x || 1.x", "postcss": "^7.0.0 || ^8.0.1", "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==" + }, "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -16781,9 +17324,9 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", @@ -16797,9 +17340,9 @@ } }, "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", "dependencies": { "postcss-selector-parser": "^6.0.4" }, @@ -16825,9 +17368,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -16859,15 +17402,30 @@ "node": ">= 0.8.0" } }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/proc-log": { @@ -16941,11 +17499,6 @@ "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "optional": true }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -17001,11 +17554,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -17064,9 +17612,9 @@ } }, "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dev": true, "dependencies": { "loose-envify": "^1.1.0" @@ -17076,30 +17624,36 @@ } }, "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "dev": true, "dependencies": { "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" + "scheduler": "^0.23.2" }, "peerDependencies": { - "react": "^18.2.0" + "react": "^18.3.1" } }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/read-package-json": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", - "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-7.0.0.tgz", + "integrity": "sha512-uL4Z10OKV4p6vbdvIXB+OzhInYtIozl/VxUBPgNkBuUi2DeRonnuspmaVAMcrkmfjKGNmRndyQAbE7/AmzGwFg==", "dependencies": { "glob": "^10.2.2", "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", + "normalize-package-data": "^6.0.0", "npm-normalize-package-bin": "^3.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/read-package-json-fast": { @@ -17114,14 +17668,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/read-package-json/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -17131,18 +17677,18 @@ } }, "node_modules/read-package-json/node_modules/glob": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", - "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" }, "bin": { - "glob": "dist/cjs/src/bin.js" + "glob": "dist/esm/bin.mjs" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -17151,18 +17697,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/read-package-json/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -17173,6 +17711,14 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/read-package-json/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -17236,9 +17782,9 @@ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", "dependencies": { "regenerate": "^1.4.2" }, @@ -17247,9 +17793,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/regenerator-transform": { "version": "0.15.2", @@ -17320,18 +17866,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/regexpu-core": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", @@ -17452,11 +17986,11 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dependencies": { - "is-core-module": "^2.11.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -17577,17 +18111,36 @@ } }, "node_modules/rollup": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.14.3.tgz", + "integrity": "sha512-ag5tTQKYsj1bhrFC9+OEWqb5O6VYgtQDO9hPDBMmIbePwhfSr+ExlcU741t8Dhw5DkPCQf6noz0jb36D6W9/hw==", + "dependencies": { + "@types/estree": "1.0.5" + }, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=14.18.0", + "node": ">=18.0.0", "npm": ">=8.0.0" }, "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.14.3", + "@rollup/rollup-android-arm64": "4.14.3", + "@rollup/rollup-darwin-arm64": "4.14.3", + "@rollup/rollup-darwin-x64": "4.14.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.14.3", + "@rollup/rollup-linux-arm-musleabihf": "4.14.3", + "@rollup/rollup-linux-arm64-gnu": "4.14.3", + "@rollup/rollup-linux-arm64-musl": "4.14.3", + "@rollup/rollup-linux-powerpc64le-gnu": "4.14.3", + "@rollup/rollup-linux-riscv64-gnu": "4.14.3", + "@rollup/rollup-linux-s390x-gnu": "4.14.3", + "@rollup/rollup-linux-x64-gnu": "4.14.3", + "@rollup/rollup-linux-x64-musl": "4.14.3", + "@rollup/rollup-win32-arm64-msvc": "4.14.3", + "@rollup/rollup-win32-ia32-msvc": "4.14.3", + "@rollup/rollup-win32-x64-msvc": "4.14.3", "fsevents": "~2.3.2" } }, @@ -17601,9 +18154,9 @@ } }, "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", "engines": { "node": ">=0.12.0" } @@ -17762,29 +18315,45 @@ "node": ">=8.12.0" } }, + "node_modules/sass": { + "version": "1.71.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", + "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/sass-loader": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.2.tgz", - "integrity": "sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.1.1.tgz", + "integrity": "sha512-QX8AasDg75monlybel38BZ49JP5Z+uSKfKwF2rO7S74BywaRmGQMUBw9dtkS+ekyM/QnP+NOrRYq8ABMZ9G8jw==", "dependencies": { "neo-async": "^2.6.2" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "fibers": ">= 3.1.0", + "@rspack/core": "0.x || 1.x", "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", "sass": "^1.3.0", "sass-embedded": "*", "webpack": "^5.0.0" }, "peerDependenciesMeta": { - "fibers": { + "@rspack/core": { "optional": true }, "node-sass": { @@ -17795,6 +18364,9 @@ }, "sass-embedded": { "optional": true + }, + "webpack": { + "optional": true } } }, @@ -17803,21 +18375,10 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dev": true, "dependencies": { "loose-envify": "^1.1.0" @@ -17902,9 +18463,9 @@ } }, "node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -18199,20 +18760,19 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/sigstore": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.8.0.tgz", - "integrity": "sha512-ogU8qtQ3VFBawRJ8wjsBEX/vIFeHuGs1fm4jZtjWQwjo8pfAt7T/rh+udlAN4+QUe0IzA8qRSc/YZ7dHP6kh+w==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.0.tgz", + "integrity": "sha512-q+o8L2ebiWD1AxD17eglf1pFrl9jtW7FHa0ygqY6EKvibK8JHyq9Z26v9MZXeDiw+RbfOJ9j2v70M10Hd6E06A==", "dependencies": { - "@sigstore/bundle": "^1.0.0", - "@sigstore/protobuf-specs": "^0.2.0", - "@sigstore/tuf": "^1.0.3", - "make-fetch-happen": "^11.0.1" - }, - "bin": { - "sigstore": "bin/sigstore.js" + "@sigstore/bundle": "^2.3.1", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.1", + "@sigstore/sign": "^2.3.0", + "@sigstore/tuf": "^2.3.1", + "@sigstore/verify": "^1.2.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/sirv": { @@ -18612,24 +19172,23 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz", - "integrity": "sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", + "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", "dependencies": { - "abab": "^2.0.6", "iconv-lite": "^0.6.3", "source-map-js": "^1.0.2" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", @@ -18698,9 +19257,9 @@ } }, "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", @@ -18712,9 +19271,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==" + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==" }, "node_modules/spdy": { "version": "4.0.2", @@ -18852,18 +19411,6 @@ "hotkeys-js": ">= 3" } }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dev": true, - "dependencies": { - "internal-slot": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/streamroller": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", @@ -19160,11 +19707,6 @@ "node": ">=0.10" } }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" - }, "node_modules/table-layout": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", @@ -19282,9 +19824,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/terser": { - "version": "5.19.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", - "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", + "version": "5.29.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.1.tgz", + "integrity": "sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ==", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -19299,15 +19841,15 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", + "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" + "terser": "^5.26.0" }, "engines": { "node": ">= 10.13.0" @@ -19368,11 +19910,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -19402,7 +19939,8 @@ "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true }, "node_modules/texture-compressor": { "version": "1.0.2", @@ -19560,7 +20098,8 @@ "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true }, "node_modules/through2": { "version": "2.0.5", @@ -19640,15 +20179,12 @@ } }, "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, "engines": { - "node": ">=8.17.0" + "node": ">=14.14" } }, "node_modules/tmpl": { @@ -19793,11 +20329,6 @@ "node": ">=6" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -19820,6 +20351,18 @@ "ts-action": "^11.0.0 || ^10.0.0 || ^9.0.0" } }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/ts-node": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.3.0.tgz", @@ -19860,38 +20403,130 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==" }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, + "node_modules/tuf-js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.0.tgz", + "integrity": "sha512-ZSDngmP1z6zw+FIkIBjvOp/II/mIub/O7Pp12j1WNsiCpg5R5wAc//i555bBQsE44O94btLt0xM/Zr2LQjwdCg==", "dependencies": { - "tslib": "^1.8.1" + "@tufjs/models": "2.0.0", + "debug": "^4.3.4", + "make-fetch-happen": "^13.0.0" }, "engines": { - "node": ">= 6" + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/tuf-js/node_modules/cacache": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", + "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "engines": { + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "node_modules/tuf-js/node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "node_modules/tuf-js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", - "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "node_modules/tuf-js/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/tuf-js/node_modules/make-fetch-happen": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", + "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", "dependencies": { - "@tufjs/models": "1.0.4", - "debug": "^4.3.4", - "make-fetch-happen": "^11.1.1" + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tuf-js/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/tuf-js/node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" } }, "node_modules/type": { @@ -20057,16 +20692,16 @@ } }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/typical": { @@ -20128,10 +20763,13 @@ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" }, - "node_modules/unfetch": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", - "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==" + "node_modules/undici": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.11.1.tgz", + "integrity": "sha512-KyhzaLJnV1qa3BSHdj4AZ2ndqI0QWPxYzaIOio0WzcEJB9gvuysprJSLtpvc2D9mhR9jPDUk7xlJlZbH2KR5iw==", + "engines": { + "node": ">=18.0" + } }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", @@ -20218,9 +20856,9 @@ } }, "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "engines": { "node": ">= 10.0.0" @@ -20342,15 +20980,6 @@ "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", "integrity": "sha512-c2H1fIgpUdwFRIru9HFno5DT73Ok8hg5oOb5AT3ayIgvCRfxgs2jyt5Slw8kEB7j3QUr6yJmMPDT/odjk7jXow==" }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -20389,12 +21018,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", @@ -20465,28 +21088,28 @@ } }, "node_modules/vite": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", - "integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.7.tgz", + "integrity": "sha512-sgnEEFTZYMui/sTlH1/XEnVNHMujOahPLGMxn1+5sIT45Xjng1Ec1K78jRP15dSmVgg5WBin9yO81j3o9OxofA==", "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" + "esbuild": "^0.19.3", + "postcss": "^8.4.35", + "rollup": "^4.2.0" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" }, "optionalDependencies": { - "fsevents": "~2.3.2" + "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": ">= 14", + "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", @@ -20518,33 +21141,422 @@ } } }, - "node_modules/void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", - "dev": true, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dependencies": { - "browser-process-hrtime": "^1.0.0" + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/vite/node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "xml-name-validator": "^3.0.0" + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/walker": { @@ -20593,24 +21605,19 @@ "defaults": "^1.0.3" } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, "node_modules/webpack": { - "version": "5.88.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", - "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", + "version": "5.90.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", + "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", "dependencies": { "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", + "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.11.5", "@webassemblyjs/wasm-edit": "^1.11.5", "@webassemblyjs/wasm-parser": "^1.11.5", "acorn": "^8.7.1", "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", + "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.15.0", "es-module-lexer": "^1.2.1", @@ -20624,7 +21631,7 @@ "neo-async": "^2.6.2", "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", + "terser-webpack-plugin": "^5.3.10", "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, @@ -20645,9 +21652,9 @@ } }, "node_modules/webpack-bundle-analyzer": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.1.tgz", - "integrity": "sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", + "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", "dev": true, "dependencies": { "@discoveryjs/json-ext": "0.5.7", @@ -20658,7 +21665,6 @@ "escape-string-regexp": "^4.0.0", "gzip-size": "^6.0.0", "html-escaper": "^2.0.2", - "is-plain-object": "^5.0.0", "opener": "^1.5.2", "picocolors": "^1.0.0", "sirv": "^2.0.3", @@ -20671,15 +21677,6 @@ "node": ">= 10.13.0" } }, - "node_modules/webpack-bundle-analyzer/node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/webpack-bundle-analyzer/node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", @@ -20701,15 +21698,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/webpack-bundle-analyzer/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/webpack-bundle-analyzer/node_modules/ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", @@ -20913,11 +21901,12 @@ } }, "node_modules/webpack-merge": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "dependencies": { "clone-deep": "^4.0.1", + "flat": "^5.0.2", "wildcard": "^2.0.0" }, "engines": { @@ -20987,6 +21976,11 @@ "node": ">=4.0" } }, + "node_modules/webpack/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, "node_modules/webpack/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -21030,28 +22024,6 @@ "node": ">=0.8.0" } }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -21272,16 +22244,6 @@ "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", "dev": true }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -21372,9 +22334,9 @@ } }, "node_modules/zone.js": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz", - "integrity": "sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA==", + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.5.tgz", + "integrity": "sha512-9XYWZzY6PhHOSdkYryNcMm7L8EK7a4q+GbTvxbIA2a9lMdRUpGuyaYvLDcg8D6bdn+JomSsbPcilVKg6SmUx6w==", "dependencies": { "tslib": "^2.3.0" } @@ -21396,29 +22358,20 @@ "@jridgewell/trace-mapping": "^0.3.9" } }, - "@angular-builders/custom-webpack": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/@angular-builders/custom-webpack/-/custom-webpack-16.0.1.tgz", - "integrity": "sha512-C6INC8UOYDcp8LJwNhE0m66yp+nZX50JdgGI8oRn7fqw3gO58qhDgXrR/8BCrSeC8eOx8WxSuvBJ6u+9dozhyw==", + "@angular-builders/common": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@angular-builders/common/-/common-1.0.2.tgz", + "integrity": "sha512-lUusRq6jN1It5LcUTLS6Q+AYAYGTo/EEN8hV0M6Ek9qXzweAouJaSEnwv7p04/pD7yJTl0YOCbN79u+wGm3x4g==", "requires": { - "@angular-devkit/architect": ">=0.1600.0 < 0.1700.0", - "@angular-devkit/build-angular": "^16.0.0", - "@angular-devkit/core": "^16.0.0", - "lodash": "^4.17.15", + "@angular-devkit/core": "^17.1.0", "ts-node": "^10.0.0", - "tsconfig-paths": "^4.1.0", - "webpack-merge": "^5.7.3" + "tsconfig-paths": "^4.1.0" }, "dependencies": { - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" - }, "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "requires": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -21437,106 +22390,127 @@ } } }, + "@angular-builders/custom-webpack": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@angular-builders/custom-webpack/-/custom-webpack-17.0.2.tgz", + "integrity": "sha512-K0jqdW5UdVIeKiZXO4nLiiiVt0g6PKJELdxgjsBGMtyRk+RLEY+pIp1061oy/Yf09nGYseZ7Mdx3XASYHQjNwA==", + "requires": { + "@angular-builders/common": "1.0.2", + "@angular-devkit/architect": ">=0.1700.0 < 0.1800.0", + "@angular-devkit/build-angular": "^17.0.0", + "@angular-devkit/core": "^17.0.0", + "lodash": "^4.17.15", + "webpack-merge": "^5.7.3" + } + }, "@angular-devkit/architect": { - "version": "0.1602.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.13.tgz", - "integrity": "sha512-ejrOYoXgbhDYjdaW4B2SyWeb6AqR8vqqzMyvCq2JX7fo08IhLnVu1fcl0fwr161l37TuzgPNWrHSciOzzmZDkw==", + "version": "0.1703.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1703.6.tgz", + "integrity": "sha512-Ck501FD/QuOjeKVFs7hU92w8+Ffetv0d5Sq09XY2/uygo5c/thMzp9nkevaIWBxUSeU5RqYZizDrhFVgYzbbOw==", "requires": { - "@angular-devkit/core": "16.2.13", + "@angular-devkit/core": "17.3.6", "rxjs": "7.8.1" } }, "@angular-devkit/build-angular": { - "version": "16.2.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.2.13.tgz", - "integrity": "sha512-2G8gnBpBKcu+/jJH5DJZyMgn2RwDFPgiNSkcLKFg5DdqVFVT3CCoZAobfpAEMndrysfMmoUPGuAmsgCfdczQjg==", - "requires": { - "@ampproject/remapping": "2.2.1", - "@angular-devkit/architect": "0.1602.13", - "@angular-devkit/build-webpack": "0.1602.13", - "@angular-devkit/core": "16.2.13", - "@babel/core": "7.22.9", - "@babel/generator": "7.22.9", + "version": "17.3.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.3.6.tgz", + "integrity": "sha512-K4CEZvhQZUUOpmXPVoI1YBM8BARbIlqE6FZRxakmnr+YOtVTYE5s+Dr1wgja8hZIohNz6L7j167G9Aut7oPU/w==", + "requires": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.1703.6", + "@angular-devkit/build-webpack": "0.1703.6", + "@angular-devkit/core": "17.3.6", + "@babel/core": "7.24.0", + "@babel/generator": "7.23.6", "@babel/helper-annotate-as-pure": "7.22.5", "@babel/helper-split-export-declaration": "7.22.6", - "@babel/plugin-proposal-async-generator-functions": "7.20.7", - "@babel/plugin-transform-async-to-generator": "7.22.5", - "@babel/plugin-transform-runtime": "7.22.9", - "@babel/preset-env": "7.22.9", - "@babel/runtime": "7.22.6", - "@babel/template": "7.22.5", + "@babel/plugin-transform-async-generator-functions": "7.23.9", + "@babel/plugin-transform-async-to-generator": "7.23.3", + "@babel/plugin-transform-runtime": "7.24.0", + "@babel/preset-env": "7.24.0", + "@babel/runtime": "7.24.0", "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "16.2.13", - "@vitejs/plugin-basic-ssl": "1.0.1", + "@ngtools/webpack": "17.3.6", + "@vitejs/plugin-basic-ssl": "1.1.0", "ansi-colors": "4.1.3", - "autoprefixer": "10.4.14", + "autoprefixer": "10.4.18", "babel-loader": "9.1.3", "babel-plugin-istanbul": "6.1.1", "browserslist": "^4.21.5", - "chokidar": "3.5.3", "copy-webpack-plugin": "11.0.0", - "critters": "0.0.20", - "css-loader": "6.8.1", - "esbuild": "0.18.17", - "esbuild-wasm": "0.18.17", - "fast-glob": "3.3.1", - "guess-parser": "0.4.22", - "https-proxy-agent": "5.0.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", + "critters": "0.0.22", + "css-loader": "6.10.0", + "esbuild": "0.20.1", + "esbuild-wasm": "0.20.1", + "fast-glob": "3.3.2", + "http-proxy-middleware": "2.0.6", + "https-proxy-agent": "7.0.4", + "inquirer": "9.2.15", + "jsonc-parser": "3.2.1", "karma-source-map-support": "1.4.0", - "less": "4.1.3", + "less": "4.2.0", "less-loader": "11.1.0", "license-webpack-plugin": "4.0.2", "loader-utils": "3.2.1", - "magic-string": "0.30.1", - "mini-css-extract-plugin": "2.7.6", - "mrmime": "1.0.1", + "magic-string": "0.30.8", + "mini-css-extract-plugin": "2.8.1", + "mrmime": "2.0.0", "open": "8.4.2", "ora": "5.4.1", "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "2.3.1", - "piscina": "4.0.0", - "postcss": "8.4.31", - "postcss-loader": "7.3.3", + "picomatch": "4.0.1", + "piscina": "4.4.0", + "postcss": "8.4.35", + "postcss-loader": "8.1.1", "resolve-url-loader": "5.0.0", "rxjs": "7.8.1", - "sass": "1.64.1", - "sass-loader": "13.3.2", - "semver": "7.5.4", - "source-map-loader": "4.0.1", + "sass": "1.71.1", + "sass-loader": "14.1.1", + "semver": "7.6.0", + "source-map-loader": "5.0.0", "source-map-support": "0.5.21", - "terser": "5.19.2", - "text-table": "0.2.0", + "terser": "5.29.1", "tree-kill": "1.2.2", - "tslib": "2.6.1", - "vite": "4.5.2", - "webpack": "5.88.2", + "tslib": "2.6.2", + "undici": "6.11.1", + "vite": "5.1.7", + "watchpack": "2.4.0", + "webpack": "5.90.3", "webpack-dev-middleware": "6.1.2", "webpack-dev-server": "4.15.1", - "webpack-merge": "5.9.0", + "webpack-merge": "5.10.0", "webpack-subresource-integrity": "5.1.0" }, "dependencies": { + "@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, "@babel/core": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", - "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", + "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", "requires": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.0", + "@babel/parser": "^7.24.0", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.0", + "@babel/types": "^7.24.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", + "json5": "^2.2.3", "semver": "^6.3.1" }, "dependencies": { @@ -21547,439 +22521,447 @@ } } }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "requires": { - "fast-deep-equal": "^3.1.3" + "debug": "^4.3.4" } }, "autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "version": "10.4.18", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.18.tgz", + "integrity": "sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==", "requires": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001591", + "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" } }, - "babel-loader": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", - "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", - "requires": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - } - }, - "find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "requires": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - } - }, - "find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "requires": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - } - }, - "locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "requires": { - "p-locate": "^6.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "requires": { - "yocto-queue": "^1.0.0" - } + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, - "p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "requires": { - "p-limit": "^4.0.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" } }, - "path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==" - }, - "pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "requires": { - "find-up": "^6.3.0" + "agent-base": "^7.0.2", + "debug": "4" } }, - "sass": { - "version": "1.64.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.64.1.tgz", - "integrity": "sha512-16rRACSOFEE8VN7SCgBu1MpYCyN7urj9At898tyzdXFhC+a+yOX5dXwAR7L8/IdPJ1NB8OYoXmD55DM30B2kEQ==", - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } + "mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==" }, - "schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - } + "picomatch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", + "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==" }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "postcss": { + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", "requires": { - "lru-cache": "^6.0.0" + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==" + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" } } }, "@angular-devkit/build-webpack": { - "version": "0.1602.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1602.13.tgz", - "integrity": "sha512-H7CqnC0kvWR0Q45ZXsCO3M9lGd4dOajEmkCVmq7vVptU3nJRbCqJ0ZScj9bH5YSlcdO0jPbOdcTELWyEZ3BMFQ==", + "version": "0.1703.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1703.6.tgz", + "integrity": "sha512-pJu0et2SiF0kfXenHSTtAART0omzbWpLgBfeUo4hBh4uwX5IaT+mRpYpr8gCXMq+qsjoQp3HobSU3lPDeBn+bg==", "requires": { - "@angular-devkit/architect": "0.1602.13", + "@angular-devkit/architect": "0.1703.6", "rxjs": "7.8.1" } }, "@angular-devkit/core": { - "version": "16.2.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.13.tgz", - "integrity": "sha512-6jTlYOIeYsOF/Vw/hBNusjoCmKJBByoyGS1Fu2Yav8ltxYK04aDtI73l9JJB/5Cpzhc4YELrMqBMH7in5Vowaw==", + "version": "17.3.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.6.tgz", + "integrity": "sha512-FVbkT9dEwHEvjnxr4mvMNSMg2bCFoGoP4X68xXU9dhLEUpC05opLvfbaR3Qh543eCJ5AstosBFVzB/krfIkOvA==", "requires": { "ajv": "8.12.0", "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "picomatch": "2.3.1", + "jsonc-parser": "3.2.1", + "picomatch": "4.0.1", "rxjs": "7.8.1", "source-map": "0.7.4" + }, + "dependencies": { + "picomatch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", + "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==" + } } }, "@angular-devkit/schematics": { - "version": "16.2.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.2.13.tgz", - "integrity": "sha512-uhhJZpppaeuT/2V6RiCheJKzS4bAZADL+Gw59VJaojqS8ssdG1UzvqRJokIzFzP7+MhHWylZBWUvWLQxuUvtsA==", + "version": "17.3.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.6.tgz", + "integrity": "sha512-2G1YuPInd8znG7uUgKOS7z72Aku50lTzB/2csWkWPJLAFkh7vKC8QZ40x8S1nC9npVYPhI5CRLX/HVpBh9CyxA==", "requires": { - "@angular-devkit/core": "16.2.13", - "jsonc-parser": "3.2.0", - "magic-string": "0.30.1", + "@angular-devkit/core": "17.3.6", + "jsonc-parser": "3.2.1", + "magic-string": "0.30.8", "ora": "5.4.1", "rxjs": "7.8.1" } }, "@angular-eslint/builder": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-16.3.1.tgz", - "integrity": "sha512-PmIOnRwqdOW1bvZtpTGBTDcOq/Czm3D+IPC/k90yIMs1VsAtcxqUmUtELje+ylJeb2LPeEZavekSnEpcatM4HQ==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-17.4.0.tgz", + "integrity": "sha512-+3ujbi+ar/iqAAwnJ2bTdWzQpHh9iVEPgjHUOeQhrEM8gcaOLnZXMlUyZL7D+NlXg7aDoEIxETb73dgbIBm55A==", "dev": true, "requires": { - "@nx/devkit": "16.5.1", - "nx": "16.5.1" + "@nx/devkit": "^17.2.8 || ^18.0.0", + "nx": "^17.2.8 || ^18.0.0" } }, "@angular-eslint/bundled-angular-compiler": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-16.1.0.tgz", - "integrity": "sha512-5EFAWXuFJADr3imo/ZYshY8s0K7U7wyysnE2LXnpT9PAi5rmkzt70UNZNRuamCbXr4tdIiu+fXWOj7tUuJKnnw==", + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-17.3.0.tgz", + "integrity": "sha512-ejfNzRuBeHUV8m2fkgs+M809rj5STuCuQo4fdfc6ccQpzXDI6Ha7BKpTznWfg5g529q/wrkoGSGgFxU9Yc2/dQ==", "dev": true }, "@angular-eslint/eslint-plugin": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-16.3.1.tgz", - "integrity": "sha512-kSc8ESfoy8TUSthbq0Lpq9e17I+3Smy4rHoNpKCFEGuJgPs0+OssZMxB6a5EawGbv2EKTPEtrxzFm1WsLR0U9Q==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-17.4.0.tgz", + "integrity": "sha512-E+/O83PXttQUACurGEskLDU+wboBqMMVqvo4T8C/iMcpLx+01M5UBzqpCmfz6ri609G96Au7uDbUEedU1hwqmQ==", "dev": true, "requires": { - "@angular-eslint/utils": "16.3.1", - "@typescript-eslint/utils": "5.62.0" + "@angular-eslint/bundled-angular-compiler": "17.4.0", + "@angular-eslint/utils": "17.4.0", + "@typescript-eslint/utils": "7.8.0" }, "dependencies": { "@angular-eslint/bundled-angular-compiler": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-16.3.1.tgz", - "integrity": "sha512-m4WP1xwS9XLcC/3n6lIcG5HZoai/5eb5W3xm48GVcv//0qE2p7S96RSgKPgGHvif5pF8O9xAqEWs3gDEG45+7A==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-17.4.0.tgz", + "integrity": "sha512-cYEJs4PO+QLDt1wfgWh9q8OjOphnoe1OTTFtMqm9lHl0AkBynPnFA6ghiiG5NaT03l7HXi2TQ23rLFlXl3JOBg==", "dev": true }, "@angular-eslint/utils": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-16.3.1.tgz", - "integrity": "sha512-tEBcce0rG+DmcPO8jhRffUFDioGw3G4cUAE15XlRctY1J3QzOBH9HdUOTDt0mMjBgpWCzh0YVT1Moh2bPXU9Xg==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-17.4.0.tgz", + "integrity": "sha512-lHgRXyT878fauDITygraICDM6RHLb51QAJ3gWNZLr7SXcywsZg5d3rxRPCjrCnjgdxNPU0fJ+VJZ5AMt5Ibn7w==", "dev": true, "requires": { - "@angular-eslint/bundled-angular-compiler": "16.3.1", - "@typescript-eslint/utils": "5.62.0" + "@angular-eslint/bundled-angular-compiler": "17.4.0", + "@typescript-eslint/utils": "7.8.0" + } + }, + "@typescript-eslint/utils": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", + "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "semver": "^7.6.0" } } } }, "@angular-eslint/eslint-plugin-template": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-16.3.1.tgz", - "integrity": "sha512-+RcFEWqNiRt3+5jXvmlIDlXtP9+vjdmgmVL6tt8yDbqdjBOewtyMu4pE4YaR4sFboyxgME9PbO2WrOyPXh6xjg==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-17.4.0.tgz", + "integrity": "sha512-o1Vb7rt3TpPChVzaxswOKBDWRboMcpC4qUUyoHfeSYa7sDuQHMeIQlCS5QXuykR/RYnIQJSKd89FOd28nGmmRw==", "dev": true, "requires": { - "@angular-eslint/bundled-angular-compiler": "16.3.1", - "@angular-eslint/utils": "16.3.1", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@angular-eslint/bundled-angular-compiler": "17.4.0", + "@angular-eslint/utils": "17.4.0", + "@typescript-eslint/type-utils": "7.8.0", + "@typescript-eslint/utils": "7.8.0", "aria-query": "5.3.0", "axobject-query": "4.0.0" }, "dependencies": { "@angular-eslint/bundled-angular-compiler": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-16.3.1.tgz", - "integrity": "sha512-m4WP1xwS9XLcC/3n6lIcG5HZoai/5eb5W3xm48GVcv//0qE2p7S96RSgKPgGHvif5pF8O9xAqEWs3gDEG45+7A==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-17.4.0.tgz", + "integrity": "sha512-cYEJs4PO+QLDt1wfgWh9q8OjOphnoe1OTTFtMqm9lHl0AkBynPnFA6ghiiG5NaT03l7HXi2TQ23rLFlXl3JOBg==", "dev": true }, "@angular-eslint/utils": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-16.3.1.tgz", - "integrity": "sha512-tEBcce0rG+DmcPO8jhRffUFDioGw3G4cUAE15XlRctY1J3QzOBH9HdUOTDt0mMjBgpWCzh0YVT1Moh2bPXU9Xg==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-17.4.0.tgz", + "integrity": "sha512-lHgRXyT878fauDITygraICDM6RHLb51QAJ3gWNZLr7SXcywsZg5d3rxRPCjrCnjgdxNPU0fJ+VJZ5AMt5Ibn7w==", "dev": true, "requires": { - "@angular-eslint/bundled-angular-compiler": "16.3.1", - "@typescript-eslint/utils": "5.62.0" + "@angular-eslint/bundled-angular-compiler": "17.4.0", + "@typescript-eslint/utils": "7.8.0" } }, - "axobject-query": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", - "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", + "@typescript-eslint/utils": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", + "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", "dev": true, "requires": { - "dequal": "^2.0.3" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "semver": "^7.6.0" } } } }, "@angular-eslint/schematics": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-16.1.0.tgz", - "integrity": "sha512-L1tmP3R2krHyveaRXAvn/SeDoBFNpS1VtPPrzZm1NYr1qPcAxf3NtG2nnoyVFu6WZGt59ZGHNQ/dZxnXvm0UGg==", + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-17.3.0.tgz", + "integrity": "sha512-5yssd5EOomxlKt9vN/OXXCTCuI3Pmfj16pkjBDoW0wzC8/M2l5zlXIEfoKumHYv2wtF553LhaMXVYVU35e0lTw==", "dev": true, "requires": { - "@angular-eslint/eslint-plugin": "16.1.0", - "@angular-eslint/eslint-plugin-template": "16.1.0", - "@nx/devkit": "16.5.1", - "ignore": "5.2.4", - "nx": "16.5.1", + "@angular-eslint/eslint-plugin": "17.3.0", + "@angular-eslint/eslint-plugin-template": "17.3.0", + "@nx/devkit": "^17.2.8 || ^18.0.0", + "ignore": "5.3.1", + "nx": "^17.2.8 || ^18.0.0", "strip-json-comments": "3.1.1", - "tmp": "0.2.1" + "tmp": "0.2.3" }, "dependencies": { "@angular-eslint/eslint-plugin": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-16.1.0.tgz", - "integrity": "sha512-BFzzJJlgQgWc8avdSBkaDWAzNSUqcwWy0L1iZSBdXGoIOxj72kLbwe99emb8M+rUfCveljQkeM2pcYu8XLbJIA==", + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-17.3.0.tgz", + "integrity": "sha512-81cQbOEPoQupFX8WmpqZn+y8VA7JdVRGBtt+uJNKBXcJknTpPWdLBZRFlgVakmC24iEZ0Fint/N3NBBQI3mz2A==", "dev": true, "requires": { - "@angular-eslint/utils": "16.1.0", - "@typescript-eslint/utils": "5.62.0" + "@angular-eslint/utils": "17.3.0", + "@typescript-eslint/utils": "7.2.0" } }, "@angular-eslint/eslint-plugin-template": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-16.1.0.tgz", - "integrity": "sha512-wQHWR5vqWGgO7mqoG5ixXeplIlz/OmxBJE9QMLPTZE8GdaTx8+F/5J37OWh84zCpD3mOa/FHYZxBDm2MfUmA1Q==", + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-17.3.0.tgz", + "integrity": "sha512-9l/aRfpE9MCRVDWRb+rSB9Zei0paep1vqV6M/87VUnzBnzqeMRnVuPvQowilh2zweVSGKBF25Vp4HkwOL6ExDQ==", "dev": true, "requires": { - "@angular-eslint/bundled-angular-compiler": "16.1.0", - "@angular-eslint/utils": "16.1.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@angular-eslint/bundled-angular-compiler": "17.3.0", + "@angular-eslint/utils": "17.3.0", + "@typescript-eslint/type-utils": "7.2.0", + "@typescript-eslint/utils": "7.2.0", "aria-query": "5.3.0", - "axobject-query": "3.1.1" + "axobject-query": "4.0.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz", + "integrity": "sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/utils": "7.2.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + } + }, + "@typescript-eslint/types": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", + "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", + "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", + "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.2.0", + "eslint-visitor-keys": "^3.4.1" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" } } } }, "@angular-eslint/template-parser": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-16.3.1.tgz", - "integrity": "sha512-9+SxUtxB2iOnm0ldS2ow0stMxe02rB/TxeMIe8fxsLFHZdw8RQvs/p3HLvVHXzv6gUblMHebIb/ubUmwEVb2SA==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-17.4.0.tgz", + "integrity": "sha512-vT/Tg8dl6Uy++MS9lPS0l37SynH3EaMcggDiTJqn15pIb4ePO65fafOIIKKYG+BN6R6iFe/g9mH/9nb8ohlzdQ==", "dev": true, "requires": { - "@angular-eslint/bundled-angular-compiler": "16.3.1", - "eslint-scope": "^7.0.0" + "@angular-eslint/bundled-angular-compiler": "17.4.0", + "eslint-scope": "^8.0.0" }, "dependencies": { "@angular-eslint/bundled-angular-compiler": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-16.3.1.tgz", - "integrity": "sha512-m4WP1xwS9XLcC/3n6lIcG5HZoai/5eb5W3xm48GVcv//0qE2p7S96RSgKPgGHvif5pF8O9xAqEWs3gDEG45+7A==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-17.4.0.tgz", + "integrity": "sha512-cYEJs4PO+QLDt1wfgWh9q8OjOphnoe1OTTFtMqm9lHl0AkBynPnFA6ghiiG5NaT03l7HXi2TQ23rLFlXl3JOBg==", "dev": true } } }, "@angular-eslint/utils": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-16.1.0.tgz", - "integrity": "sha512-u5XscYUq1F/7RuwyVIV2a280QL27lyQz434VYR+Np/oO21NGj5jxoRKb55xhXT9EFVs5Sy4JYeEUp6S75J/cUw==", + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-17.3.0.tgz", + "integrity": "sha512-PJT9pxWqpvI9OXO+7L5SIVhvMW+RFjeafC7PYjtvSbNFpz+kF644BiAcfMJ0YqBnkrw3JXt+RAX25CT4mXIoXw==", "dev": true, "requires": { - "@angular-eslint/bundled-angular-compiler": "16.1.0", - "@typescript-eslint/utils": "5.62.0" + "@angular-eslint/bundled-angular-compiler": "17.3.0", + "@typescript-eslint/utils": "7.2.0" } }, "@angular/animations": { - "version": "16.2.12", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.2.12.tgz", - "integrity": "sha512-MD0ElviEfAJY8qMOd6/jjSSvtqER2RDAi0lxe6EtUacC1DHCYkaPrKW4vLqY+tmZBg1yf+6n+uS77pXcHHcA3w==", + "version": "17.3.7", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.3.7.tgz", + "integrity": "sha512-ahenGALPPweeHgqtl9BMkGIAV4fUNI5kOWUrLNbKBfwIJN+aOBOYV1Jz6NKUQq6eYn/1ZYtm0f3lIkHIdtLKEw==", "requires": { "tslib": "^2.3.0" } }, "@angular/cdk": { - "version": "16.2.14", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-16.2.14.tgz", - "integrity": "sha512-n6PrGdiVeSTEmM/HEiwIyg6YQUUymZrb5afaNLGFRM5YL0Y8OBqd+XhCjb0OfD/AfgCUtedVEPwNqrfW8KzgGw==", + "version": "17.3.7", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-17.3.7.tgz", + "integrity": "sha512-aFEh8tzKFOwini6aNEp57S54Ocp9T7YIJfBVMESptu2TCPdMTlJ1HJTg5XS8NcQO+vwi9cFPGVwGF1frOx4LXA==", "requires": { "parse5": "^7.1.2", "tslib": "^2.3.0" } }, "@angular/cli": { - "version": "16.2.13", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.2.13.tgz", - "integrity": "sha512-Zs/IHV0qeQBlRYp3XTJP96KKMFrOVd4gFWEXyt8xVbma9W7UCWr/0C6D8HRFjheiT40TSa2Suwpk6Hppm+9ESA==", - "requires": { - "@angular-devkit/architect": "0.1602.13", - "@angular-devkit/core": "16.2.13", - "@angular-devkit/schematics": "16.2.13", - "@schematics/angular": "16.2.13", + "version": "17.3.6", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.3.6.tgz", + "integrity": "sha512-poKaRPeI+hFqX+AxIaEriaIggFVcC3XqlT9E1/uBC2rfHirE1n5F9Z7xqEDtMHduKwLbNXhQIPoKIKya8+Hnew==", + "requires": { + "@angular-devkit/architect": "0.1703.6", + "@angular-devkit/core": "17.3.6", + "@angular-devkit/schematics": "17.3.6", + "@schematics/angular": "17.3.6", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.3", - "ini": "4.1.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "npm-package-arg": "10.1.0", - "npm-pick-manifest": "8.0.1", + "ini": "4.1.2", + "inquirer": "9.2.15", + "jsonc-parser": "3.2.1", + "npm-package-arg": "11.0.1", + "npm-pick-manifest": "9.0.0", "open": "8.4.2", "ora": "5.4.1", - "pacote": "15.2.0", - "resolve": "1.22.2", - "semver": "7.5.4", + "pacote": "17.0.6", + "resolve": "1.22.8", + "semver": "7.6.0", "symbol-observable": "4.0.0", "yargs": "17.7.2" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } } }, "@angular/common": { - "version": "16.2.12", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.2.12.tgz", - "integrity": "sha512-B+WY/cT2VgEaz9HfJitBmgdk4I333XG/ybC98CMC4Wz8E49T8yzivmmxXB3OD6qvjcOB6ftuicl6WBqLbZNg2w==", + "version": "17.3.7", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-17.3.7.tgz", + "integrity": "sha512-A7LRJu1vVCGGgrfZXjU+njz50SiU4weheKCar5PIUprcdIofS1IrHAJDqYh+kwXxkjXbZMOr/ijQY0+AESLEsw==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler": { - "version": "16.2.12", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.2.12.tgz", - "integrity": "sha512-6SMXUgSVekGM7R6l1Z9rCtUGtlg58GFmgbpMCsGf+VXxP468Njw8rjT2YZkf5aEPxEuRpSHhDYjqz7n14cwCXQ==", + "version": "17.3.7", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.3.7.tgz", + "integrity": "sha512-AlKiqPoxnrpQ0hn13fIaQPSVodaVAIjBW4vpFyuKFqs2LBKg6iolwZ21s8rEI0KR2gXl+8ugj0/UZ6YADiVM5w==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler-cli": { - "version": "16.2.12", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.2.12.tgz", - "integrity": "sha512-pWSrr152562ujh6lsFZR8NfNc5Ljj+zSTQO44DsuB0tZjwEpnRcjJEgzuhGXr+CoiBf+jTSPZKemtSktDk5aaA==", + "version": "17.3.7", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.3.7.tgz", + "integrity": "sha512-vSg5IQZ9jGmvYjpbfH8KbH4Sl1IVeE+Mr1ogcxkGEsURSRvKo7EWc0K7LSEI9+gg0VLamMiP9EyCJdPxiJeLJQ==", "requires": { - "@babel/core": "7.23.2", + "@babel/core": "7.23.9", "@jridgewell/sourcemap-codec": "^1.4.14", "chokidar": "^3.0.0", "convert-source-map": "^1.5.1", - "reflect-metadata": "^0.1.2", + "reflect-metadata": "^0.2.0", "semver": "^7.0.0", "tslib": "^2.3.0", "yargs": "^17.2.1" }, "dependencies": { "@babel/core": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", - "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", + "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", "requires": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helpers": "^7.23.2", - "@babel/parser": "^7.23.0", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.9", + "@babel/parser": "^7.23.9", + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -21999,123 +22981,92 @@ } } }, - "@babel/generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", - "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", - "requires": { - "@babel/types": "^7.23.3", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - } + "reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" } } }, "@angular/core": { - "version": "16.2.12", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.2.12.tgz", - "integrity": "sha512-GLLlDeke/NjroaLYOks0uyzFVo6HyLl7VOm0K1QpLXnYvW63W9Ql/T3yguRZa7tRkOAeFZ3jw+1wnBD4O8MoUA==", + "version": "17.3.7", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-17.3.7.tgz", + "integrity": "sha512-HWcrbxqnvIMSxFuQdN0KPt08bc87hqr0LKm89yuRTUwx/2sNJlNQUobk6aJj4trswGBttcRDT+GOS4DQP2Nr4g==", "requires": { "tslib": "^2.3.0" } }, "@angular/elements": { - "version": "16.2.12", - "resolved": "https://registry.npmjs.org/@angular/elements/-/elements-16.2.12.tgz", - "integrity": "sha512-x5EPsoh6hikR52yWh4w9E+YEIIsHwPq88dlamTjDbqlShNfMFg9vRRTIGd0xzrSKc0yM/kkXNMzJUMcZAVdycQ==", + "version": "17.3.7", + "resolved": "https://registry.npmjs.org/@angular/elements/-/elements-17.3.7.tgz", + "integrity": "sha512-GHnTeHc4Eh6oqIAUJG25xN/h8f5Cz/yFeqLc+N04e01sLpd1oAl3xTOQ5qg+wizXbjPWIP2sCHXDm61TjKM0hA==", "requires": { "tslib": "^2.3.0" } }, "@angular/forms": { - "version": "16.2.12", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.2.12.tgz", - "integrity": "sha512-1Eao89hlBgLR3v8tU91vccn21BBKL06WWxl7zLpQmG6Hun+2jrThgOE4Pf3os4fkkbH4Apj0tWL2fNIWe/blbw==", + "version": "17.3.7", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.3.7.tgz", + "integrity": "sha512-FEhXh/VmT++XCoO8i7bBtzxG7Am/cE1zrr9aF+fWW+4jpWvJvVN1IaSiJxgBB+iPsOJ9lTBRwfRW3onlcDkhrw==", "requires": { "tslib": "^2.3.0" } }, "@angular/language-service": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-16.2.0.tgz", - "integrity": "sha512-ZeNdiQAR9anP4X1PaveGKsf57s6Ty9n1Py1YYzCvqC7x0RrP2rrvnF9iuj9E8+2TAd1xyS0AOrG5L8c1h6OnTg==", + "version": "17.3.4", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-17.3.4.tgz", + "integrity": "sha512-CgLg/7P0+NEeGU+vqvoG0rh2ns5iyfi/UO4JTxN1iMjuFBAUhGHxjiItPy8cN2XK/dWgOhXAFe4oqxA4dMBp/Q==", "dev": true }, "@angular/platform-browser": { - "version": "16.2.12", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.2.12.tgz", - "integrity": "sha512-NnH7ju1iirmVEsUq432DTm0nZBGQsBrU40M3ZeVHMQ2subnGiyUs3QyzDz8+VWLL/T5xTxWLt9BkDn65vgzlIQ==", + "version": "17.3.7", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.3.7.tgz", + "integrity": "sha512-Nn8ZMaftAvO9dEwribWdNv+QBHhYIBrRkv85G6et80AXfXoYAr/xcfnQECRFtZgPmANqHC5auv/xrmExQG+Yeg==", "requires": { "tslib": "^2.3.0" } }, "@angular/platform-browser-dynamic": { - "version": "16.2.12", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.2.12.tgz", - "integrity": "sha512-ya54jerNgreCVAR278wZavwjrUWImMr2F8yM5n9HBvsMBbFaAQ83anwbOEiHEF2BlR+gJiEBLfpuPRMw20pHqw==", + "version": "17.3.7", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.3.7.tgz", + "integrity": "sha512-9c2I4u0L1p2v1/lW8qy+WaNHisUWbyy6wqsv2v9FfCaSM49Lxymgo9LPFPC4qEG5ei5nE+eIQ2ocRiXXsf5QkQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/router": { - "version": "16.2.12", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.2.12.tgz", - "integrity": "sha512-aU6QnYSza005V9P3W6PpkieL56O0IHps96DjqI1RS8yOJUl3THmokqYN4Fm5+HXy4f390FN9i6ftadYQDKeWmA==", + "version": "17.3.7", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-17.3.7.tgz", + "integrity": "sha512-lMkuRrc1ZjP5JPDxNHqoAhB0uAnfPQ/q6mJrw1s8IZoVV6VyM+FxR5r13ajNcXWC38xy/YhBjpXPF1vBdxuLXg==", "requires": { "tslib": "^2.3.0" } }, "@appsignal/core": { - "version": "1.1.20", - "resolved": "https://registry.npmjs.org/@appsignal/core/-/core-1.1.20.tgz", - "integrity": "sha512-Y1N/n5f5rruKxQVSNT4aqctqomZZEwL5g+CXocA8LIdufoI5wyQVCxX8XWeLEQj8H+weIPckaq5jtQE8siQsnA==", + "version": "1.1.22", + "resolved": "https://registry.npmjs.org/@appsignal/core/-/core-1.1.22.tgz", + "integrity": "sha512-vTBsZSf+81429JlILQtFUFsh1j7vl0viZNGKT7qFeVDotjAtD4OeFBWOx4Rd1yLeD+aT2zGLCAKo1KmpvxRlqA==", "requires": { "@appsignal/types": "=3.0.1", - "isomorphic-unfetch": "^3.1.0", "tslib": "^2.3.0" - }, - "dependencies": { - "@appsignal/types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@appsignal/types/-/types-3.0.1.tgz", - "integrity": "sha512-vCAKUohJkhN9jk3v2hTOdUDV5FYPr63dBOnmFdPINVUye8HnkpYZD5wrLaRNNKO5UlyhIt8jTkoKkmjkIlkiuQ==" - } } }, "@appsignal/javascript": { - "version": "1.3.28", - "resolved": "https://registry.npmjs.org/@appsignal/javascript/-/javascript-1.3.28.tgz", - "integrity": "sha512-XsMITXEMnSYX8Hk+T60WtRz438gKKUzS6v18a7jUBDtD0M0cU3tFLCPOfaCPcK3vXnpd/t2wskw1LbITR/QuUg==", + "version": "1.3.30", + "resolved": "https://registry.npmjs.org/@appsignal/javascript/-/javascript-1.3.30.tgz", + "integrity": "sha512-x559TLt0UUze92/DqpoI67uYvjoRqEN1BQXgCSWPTVVeZ9AqL2aT6hnUPPnn/9DVDDPSbkA9g32UbgMkI2A1oQ==", "requires": { - "@appsignal/core": "=1.1.20", + "@appsignal/core": "=1.1.22", "@appsignal/types": "=3.0.1", "tslib": "^2.3.0" - }, - "dependencies": { - "@appsignal/types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@appsignal/types/-/types-3.0.1.tgz", - "integrity": "sha512-vCAKUohJkhN9jk3v2hTOdUDV5FYPr63dBOnmFdPINVUye8HnkpYZD5wrLaRNNKO5UlyhIt8jTkoKkmjkIlkiuQ==" - } } }, "@appsignal/plugin-breadcrumbs-console": { - "version": "1.1.29", - "resolved": "https://registry.npmjs.org/@appsignal/plugin-breadcrumbs-console/-/plugin-breadcrumbs-console-1.1.29.tgz", - "integrity": "sha512-U3HsyHgrtfryN4TXE61zgEejgIYZVcoXV0KjsOZxbScgttkgwjvol0B0aMlc38h/zD2Qq4NLqXk9l9p9RHuukg==", + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/@appsignal/plugin-breadcrumbs-console/-/plugin-breadcrumbs-console-1.1.31.tgz", + "integrity": "sha512-No/0IdiN5rTaRrdn9xw0ckUAzzNDMfSCoiHZxmKLEyFPpZKRdStNU+vgu2TA6GShaG0JTRWZ/7P/SNGTF6NxsQ==", "requires": { - "@appsignal/javascript": "=1.3.28" + "@appsignal/javascript": "=1.3.30" } }, "@appsignal/plugin-breadcrumbs-network": { @@ -22124,33 +23075,26 @@ "integrity": "sha512-5eCSluhMbe9qQAhDE55wG5nrRbWUJZFqqrCnrrpRarPOTLMZkF0/o08G7m7AAVTOScybQa7hV8xr+mj2FhQb+g==", "requires": { "@appsignal/types": "=3.0.1" - }, - "dependencies": { - "@appsignal/types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@appsignal/types/-/types-3.0.1.tgz", - "integrity": "sha512-vCAKUohJkhN9jk3v2hTOdUDV5FYPr63dBOnmFdPINVUye8HnkpYZD5wrLaRNNKO5UlyhIt8jTkoKkmjkIlkiuQ==" - } } }, - "@assemblyscript/loader": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", - "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==" + "@appsignal/types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@appsignal/types/-/types-3.0.1.tgz", + "integrity": "sha512-vCAKUohJkhN9jk3v2hTOdUDV5FYPr63dBOnmFdPINVUye8HnkpYZD5wrLaRNNKO5UlyhIt8jTkoKkmjkIlkiuQ==" }, "@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "requires": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" } }, "@babel/compat-data": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", - "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==" + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", + "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==" }, "@babel/core": { "version": "7.23.3", @@ -22174,27 +23118,6 @@ "semver": "^6.3.1" }, "dependencies": { - "@babel/generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", - "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", - "requires": { - "@babel/types": "^7.23.3", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - } - }, "convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -22208,11 +23131,11 @@ } }, "@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", "requires": { - "@babel/types": "^7.22.5", + "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -22227,21 +23150,21 @@ } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz", - "integrity": "sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", "requires": { - "@babel/types": "^7.22.10" + "@babel/types": "^7.22.15" } }, "@babel/helper-compilation-targets": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -22254,16 +23177,16 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", - "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz", + "integrity": "sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==", "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-replace-supers": "^7.24.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "semver": "^6.3.1" @@ -22277,9 +23200,9 @@ } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", - "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", "regexpu-core": "^5.3.1", @@ -22294,9 +23217,9 @@ } }, "@babel/helper-define-polyfill-provider": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz", - "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz", + "integrity": "sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==", "requires": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -22317,18 +23240,6 @@ "requires": { "@babel/template": "^7.22.15", "@babel/types": "^7.23.0" - }, - "dependencies": { - "@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - } - } } }, "@babel/helper-hoist-variables": { @@ -22376,9 +23287,9 @@ } }, "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==" + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==" }, "@babel/helper-remap-async-to-generator": { "version": "7.22.20", @@ -22391,12 +23302,12 @@ } }, "@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", + "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5" } }, @@ -22425,9 +23336,9 @@ } }, "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==" }, "@babel/helper-validator-identifier": { "version": "7.22.20", @@ -22435,9 +23346,9 @@ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" }, "@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==" + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==" }, "@babel/helper-wrap-function": { "version": "7.22.20", @@ -22447,84 +23358,59 @@ "@babel/helper-function-name": "^7.22.5", "@babel/template": "^7.22.15", "@babel/types": "^7.22.19" - }, - "dependencies": { - "@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - } - } } }, "@babel/helpers": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", - "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz", + "integrity": "sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==", "requires": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0" - }, - "dependencies": { - "@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - } - } + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" } }, "@babel/highlight": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", - "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", "requires": { - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" } }, "@babel/parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", - "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==" + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", + "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", - "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", + "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", - "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", + "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.15" + "@babel/plugin-transform-optional-chaining": "^7.24.1" } }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", + "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-proposal-private-property-in-object": { @@ -22532,15 +23418,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==" }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", @@ -22582,19 +23459,19 @@ } }, "@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", + "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", + "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-syntax-import-meta": { @@ -22687,17 +23564,17 @@ } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", + "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-async-generator-functions": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz", - "integrity": "sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", + "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", "requires": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-plugin-utils": "^7.22.5", @@ -22706,216 +23583,216 @@ } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", + "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", "requires": { - "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" + "@babel/helper-remap-async-to-generator": "^7.22.20" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", + "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz", - "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz", + "integrity": "sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", + "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-class-static-block": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", - "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz", + "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.4", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, "@babel/plugin-transform-classes": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", - "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz", + "integrity": "sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==", "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", + "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/template": "^7.24.0" } }, "@babel/plugin-transform-destructuring": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz", - "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz", + "integrity": "sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", + "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", + "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-dynamic-import": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", - "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", + "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", + "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-export-namespace-from": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", - "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", + "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-transform-for-of": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", - "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", + "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" } }, "@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", + "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", "requires": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-json-strings": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", - "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", + "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", + "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", - "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", + "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", + "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz", - "integrity": "sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", + "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", "requires": { - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz", - "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", + "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", "requires": { - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-simple-access": "^7.22.5" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz", - "integrity": "sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", + "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", "requires": { "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-validator-identifier": "^7.22.20" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", + "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-named-capturing-groups-regex": { @@ -22928,134 +23805,133 @@ } }, "@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", + "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", - "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", + "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-transform-numeric-separator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", - "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", + "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-transform-object-rest-spread": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", - "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz", + "integrity": "sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==", "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.15" + "@babel/plugin-transform-parameters": "^7.24.1" } }, "@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", + "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1" } }, "@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", - "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", + "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-transform-optional-chaining": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz", - "integrity": "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz", + "integrity": "sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-transform-parameters": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", - "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz", + "integrity": "sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", + "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-private-property-in-object": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", - "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz", + "integrity": "sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==", "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, "@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", + "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-regenerator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", - "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", + "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "regenerator-transform": "^0.15.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", + "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-runtime": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.9.tgz", - "integrity": "sha512-9KjBH61AGJetCPYp/IEyLEp47SyybZb0nDRpBvmtEkm+rUIwxdlKpyNHI1TmsGkeuLclJdleQHRZ8XLBnnh8CQ==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.0.tgz", + "integrity": "sha512-zc0GA5IitLKJrSfXlXmp8KDqLrnGECK7YRfQBmEKg1NmBOQ7e+KuclBEKJgzifQeUYLdNiAw4B4bjyvzWVLiSA==", "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.4", - "babel-plugin-polyfill-corejs3": "^0.8.2", - "babel-plugin-polyfill-regenerator": "^0.5.1", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0", + "babel-plugin-polyfill-corejs2": "^0.4.8", + "babel-plugin-polyfill-corejs3": "^0.9.0", + "babel-plugin-polyfill-regenerator": "^0.5.5", "semver": "^6.3.1" }, "dependencies": { @@ -23067,100 +23943,101 @@ } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", + "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", + "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", + "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", + "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz", + "integrity": "sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", - "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", + "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", + "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", + "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", + "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" } }, "@babel/preset-env": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.9.tgz", - "integrity": "sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==", - "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.0.tgz", + "integrity": "sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA==", + "requires": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-assertions": "^7.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -23172,59 +24049,58 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.7", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.6", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-arrow-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.9", + "@babel/plugin-transform-async-to-generator": "^7.23.3", + "@babel/plugin-transform-block-scoped-functions": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.4", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.4", + "@babel/plugin-transform-classes": "^7.23.8", + "@babel/plugin-transform-computed-properties": "^7.23.3", + "@babel/plugin-transform-destructuring": "^7.23.3", + "@babel/plugin-transform-dotall-regex": "^7.23.3", + "@babel/plugin-transform-duplicate-keys": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.4", + "@babel/plugin-transform-exponentiation-operator": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.4", + "@babel/plugin-transform-for-of": "^7.23.6", + "@babel/plugin-transform-function-name": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.4", + "@babel/plugin-transform-literals": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", + "@babel/plugin-transform-member-expression-literals": "^7.23.3", + "@babel/plugin-transform-modules-amd": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.9", + "@babel/plugin-transform-modules-umd": "^7.23.3", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.6", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.4", - "babel-plugin-polyfill-corejs3": "^0.8.2", - "babel-plugin-polyfill-regenerator": "^0.5.1", + "@babel/plugin-transform-new-target": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", + "@babel/plugin-transform-numeric-separator": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.24.0", + "@babel/plugin-transform-object-super": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.4", + "@babel/plugin-transform-optional-chaining": "^7.23.4", + "@babel/plugin-transform-parameters": "^7.23.3", + "@babel/plugin-transform-private-methods": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.4", + "@babel/plugin-transform-property-literals": "^7.23.3", + "@babel/plugin-transform-regenerator": "^7.23.3", + "@babel/plugin-transform-reserved-words": "^7.23.3", + "@babel/plugin-transform-shorthand-properties": "^7.23.3", + "@babel/plugin-transform-spread": "^7.23.3", + "@babel/plugin-transform-sticky-regex": "^7.23.3", + "@babel/plugin-transform-template-literals": "^7.23.3", + "@babel/plugin-transform-typeof-symbol": "^7.23.3", + "@babel/plugin-transform-unicode-escapes": "^7.23.3", + "@babel/plugin-transform-unicode-property-regex": "^7.23.3", + "@babel/plugin-transform-unicode-regex": "^7.23.3", + "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.8", + "babel-plugin-polyfill-corejs3": "^0.9.0", + "babel-plugin-polyfill-regenerator": "^0.5.5", "core-js-compat": "^3.31.0", "semver": "^6.3.1" }, @@ -23237,13 +24113,11 @@ } }, "@babel/preset-modules": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", - "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" } @@ -23254,59 +24128,59 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz", + "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==", "requires": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" } }, "@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" } }, "@babel/traverse": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", - "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.3", + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.3", - "@babel/types": "^7.23.3", - "debug": "^4.1.0", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", "globals": "^11.1.0" }, "dependencies": { "@babel/generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", - "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", + "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", "requires": { - "@babel/types": "^7.23.3", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" } } } }, "@babel/types": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", - "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", "requires": { - "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } @@ -23356,136 +24230,142 @@ "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==" }, + "@esbuild/aix-ppc64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz", + "integrity": "sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA==", + "optional": true + }, "@esbuild/android-arm": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.17.tgz", - "integrity": "sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.1.tgz", + "integrity": "sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw==", "optional": true }, "@esbuild/android-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.17.tgz", - "integrity": "sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz", + "integrity": "sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A==", "optional": true }, "@esbuild/android-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.17.tgz", - "integrity": "sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.1.tgz", + "integrity": "sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA==", "optional": true }, "@esbuild/darwin-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.17.tgz", - "integrity": "sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz", + "integrity": "sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA==", "optional": true }, "@esbuild/darwin-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.17.tgz", - "integrity": "sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz", + "integrity": "sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA==", "optional": true }, "@esbuild/freebsd-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.17.tgz", - "integrity": "sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz", + "integrity": "sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw==", "optional": true }, "@esbuild/freebsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.17.tgz", - "integrity": "sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz", + "integrity": "sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg==", "optional": true }, "@esbuild/linux-arm": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.17.tgz", - "integrity": "sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz", + "integrity": "sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw==", "optional": true }, "@esbuild/linux-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.17.tgz", - "integrity": "sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz", + "integrity": "sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w==", "optional": true }, "@esbuild/linux-ia32": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.17.tgz", - "integrity": "sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz", + "integrity": "sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw==", "optional": true }, "@esbuild/linux-loong64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.17.tgz", - "integrity": "sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz", + "integrity": "sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA==", "optional": true }, "@esbuild/linux-mips64el": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.17.tgz", - "integrity": "sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz", + "integrity": "sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA==", "optional": true }, "@esbuild/linux-ppc64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.17.tgz", - "integrity": "sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz", + "integrity": "sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw==", "optional": true }, "@esbuild/linux-riscv64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.17.tgz", - "integrity": "sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz", + "integrity": "sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg==", "optional": true }, "@esbuild/linux-s390x": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.17.tgz", - "integrity": "sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz", + "integrity": "sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ==", "optional": true }, "@esbuild/linux-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.17.tgz", - "integrity": "sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz", + "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==", "optional": true }, "@esbuild/netbsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.17.tgz", - "integrity": "sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz", + "integrity": "sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg==", "optional": true }, "@esbuild/openbsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.17.tgz", - "integrity": "sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz", + "integrity": "sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw==", "optional": true }, "@esbuild/sunos-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.17.tgz", - "integrity": "sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz", + "integrity": "sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q==", "optional": true }, "@esbuild/win32-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.17.tgz", - "integrity": "sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz", + "integrity": "sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A==", "optional": true }, "@esbuild/win32-ia32": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.17.tgz", - "integrity": "sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz", + "integrity": "sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw==", "optional": true }, "@esbuild/win32-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.17.tgz", - "integrity": "sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz", + "integrity": "sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA==", "optional": true }, "@eslint-community/eslint-utils": { @@ -23498,9 +24378,9 @@ } }, "@eslint-community/regexpp": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", - "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true }, "@eslint/eslintrc": { @@ -23539,9 +24419,9 @@ "dev": true }, "globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -23579,9 +24459,9 @@ } }, "@floating-ui/dom": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz", - "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==", + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz", + "integrity": "sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==", "requires": { "@floating-ui/core": "^1.0.0", "@floating-ui/utils": "^0.2.0" @@ -23772,16 +24652,16 @@ "integrity": "sha512-eGeIqNOQpXoPAIP7tC1+1Yc1yl1xnwYqg+3mzqxyrbE5pg5YFBZcA6YoTiByJB6DKAEsiWtl6tjTJS4IYtbB7A==" }, "@hotwired/turbo": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@hotwired/turbo/-/turbo-7.3.0.tgz", - "integrity": "sha512-Dcu+NaSvHLT7EjrDrkEmH4qET2ZJZ5IcCWmNXxNQTBwlnE5tBZfN6WxZ842n5cHV52DH/AKNirbPBtcEXDLW4g==" + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@hotwired/turbo/-/turbo-8.0.4.tgz", + "integrity": "sha512-mlZEFUZrJnpfj+g/XeCWWuokvQyN68WvM78JM+0jfSFc98wegm259vCbC1zSllcspRwbgXK31ibehCy5PA78/Q==" }, "@hotwired/turbo-rails": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@hotwired/turbo-rails/-/turbo-rails-7.3.0.tgz", - "integrity": "sha512-fvhO64vp/a2UVQ3jue9WTc2JisMv9XilIC7ViZmXAREVwiQ2S4UC7Go8f9A1j4Xu7DBI6SbFdqILk5ImqVoqyA==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@hotwired/turbo-rails/-/turbo-rails-8.0.4.tgz", + "integrity": "sha512-GHCv5+B2VzYZZvMFpg/g9JLx/8pl/8chcubSB7T+Xn1zYOMqAKB6cT80vvWUzxdwfm/2KfaRysfDz+BmvtjFaw==", "requires": { - "@hotwired/turbo": "^7.3.0", + "@hotwired/turbo": "^8.0.4", "@rails/actioncable": "^7.0" } }, @@ -23818,9 +24698,9 @@ "dev": true }, "@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, "@isaacs/cliui": { @@ -23928,14 +24808,23 @@ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" }, + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "requires": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" } }, "@jridgewell/resolve-uri": { @@ -23944,17 +24833,17 @@ "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==" }, "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==" }, "@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "@jridgewell/sourcemap-codec": { @@ -23963,9 +24852,9 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "requires": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -24015,6 +24904,14 @@ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, + "@ljharb/through": { + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", + "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", + "requires": { + "call-bind": "^1.0.7" + } + }, "@loaders.gl/core": { "version": "3.4.15", "resolved": "https://registry.npmjs.org/@loaders.gl/core/-/core-3.4.15.tgz", @@ -24124,17 +25021,17 @@ "integrity": "sha512-3uWLVXHY3jQxsXCr/UCNPSc2BG0hNUljhmOBt9l+lNFDp7zHgm0cK2Tw4kj2XfkJy4TgwZTBGwRDQgWEbLbdTA==" }, "@ng-select/ng-option-highlight": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/@ng-select/ng-option-highlight/-/ng-option-highlight-0.0.7.tgz", - "integrity": "sha512-5G6PLOQuuGbnxYSGHo+hup/Rwu7xhNNpuAE1h69OcRRrr9ltpihUIvEa4kfq22yPQz4/4Y5UGtIGLZtWCJ1tJg==", + "version": "12.0.6", + "resolved": "https://registry.npmjs.org/@ng-select/ng-option-highlight/-/ng-option-highlight-12.0.6.tgz", + "integrity": "sha512-c1ZoQZZSlxfo8M55hWPuifkUPdGn3iobXtkzC9YzXooOWpfW0OxVlowqbb+qYupGqfdlF+FH3TlihxWD9HragA==", "requires": { "tslib": "^2.3.0" } }, "@ng-select/ng-select": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-11.2.0.tgz", - "integrity": "sha512-lTyw93kFdKGecp9eKmOP0PQSCaAJS8DCt4D60ns055+ixvRSp2fuXAuJUvn1e3gAsvpZor37osmYlOJ4LYwYIA==", + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-12.0.7.tgz", + "integrity": "sha512-Eht1zlLP0DJxiXcKnq3aY/EJ8odomgU0hM0BJoPY6oX3XFHndtFtdPxlZfhVtQn+FwyDEh7306rRx6digxVssA==", "requires": { "tslib": "^2.3.1" } @@ -24148,9 +25045,9 @@ } }, "@ngtools/webpack": { - "version": "16.2.13", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.13.tgz", - "integrity": "sha512-P5OiVp9MeMwVxihtC9NB4mx1Zlbup2DLMAWYAl8/kcFdRrRW+1YDQn93tlFToQDHGpPxkqW7cnFUPnA+QwQMYA==" + "version": "17.3.6", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.3.6.tgz", + "integrity": "sha512-equxbgh2DKzZtiFMoVf1KD4yJcH1q8lpqQ/GSPPQUvONcmHrr+yqdRUdaJ7oZCyCYmXF/nByBxtMKtJr6nKZVg==" }, "@ngx-formly/core": { "version": "6.3.0", @@ -24183,6 +25080,61 @@ "fastq": "^1.6.0" } }, + "@npmcli/agent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", + "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", + "requires": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "dependencies": { + "agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "requires": { + "debug": "^4.3.4" + } + }, + "http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "requires": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + } + }, + "https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "requires": { + "agent-base": "^7.0.2", + "debug": "4" + } + }, + "lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==" + }, + "socks-proxy-agent": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz", + "integrity": "sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==", + "requires": { + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.7.1" + } + } + } + }, "@npmcli/fs": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", @@ -24192,31 +25144,41 @@ } }, "@npmcli/git": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", - "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", - "requires": { - "@npmcli/promise-spawn": "^6.0.0", - "lru-cache": "^7.4.4", - "npm-pick-manifest": "^8.0.0", - "proc-log": "^3.0.0", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.6.tgz", + "integrity": "sha512-4x/182sKXmQkf0EtXxT26GEsaOATpD7WVtza5hrYivWZeo6QefC6xq9KAXrnjtFKBZ4rZwR7aX/zClYYXgtwLw==", + "requires": { + "@npmcli/promise-spawn": "^7.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", + "proc-log": "^4.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", - "which": "^3.0.0" + "which": "^4.0.0" }, "dependencies": { + "isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==" + }, "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==" + }, + "proc-log": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.1.0.tgz", + "integrity": "sha512-dmQ2iPw2nJMi9/4dpaG1wd0m1GE+K5kW7RGbjy5hoEEGnhPIzsm+klBO5RGGdcoYbWsNtU2KSNAdEldts+icLg==" }, "which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "requires": { - "isexe": "^2.0.0" + "isexe": "^3.1.1" } } } @@ -24235,145 +25197,330 @@ "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==" }, + "@npmcli/package-json": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.0.3.tgz", + "integrity": "sha512-cgsjCvld2wMqkUqvY+SZI+1ZJ7umGBYc9IAKfqJRKJCcs7hCQYxScUgdsyrRINk3VmdCYf9TXiLBHQ6ECTxhtg==", + "requires": { + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^4.0.0", + "semver": "^7.5.3" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + } + }, + "minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + }, + "proc-log": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.1.0.tgz", + "integrity": "sha512-dmQ2iPw2nJMi9/4dpaG1wd0m1GE+K5kW7RGbjy5hoEEGnhPIzsm+klBO5RGGdcoYbWsNtU2KSNAdEldts+icLg==" + } + } + }, "@npmcli/promise-spawn": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", - "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.1.tgz", + "integrity": "sha512-P4KkF9jX3y+7yFUxgcUdDtLy+t4OlDGuEBLNs57AZsfSfg+uV6MLndqGpnl4831ggaEdXwR50XFoZP4VFtHolg==", "requires": { - "which": "^3.0.0" + "which": "^4.0.0" }, "dependencies": { + "isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==" + }, "which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "requires": { - "isexe": "^2.0.0" + "isexe": "^3.1.1" } } } }, + "@npmcli/redact": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-1.1.0.tgz", + "integrity": "sha512-PfnWuOkQgu7gCbnSsAisaX7hKOdZ4wSAhAzH3/ph5dSGau52kCRrMMGbiSQLwyTZpgldkZ49b0brkOr1AzGBHQ==" + }, "@npmcli/run-script": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", - "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.4.tgz", + "integrity": "sha512-9ApYM/3+rBt9V80aYg6tZfzj3UWdiYyCt7gJUD1VJKvWF5nwKDSICXbYIQbspFTq6TOpbsEtIC0LArB8d9PFmg==", "requires": { "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^6.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^3.0.0", - "which": "^3.0.0" + "@npmcli/package-json": "^5.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "node-gyp": "^10.0.0", + "which": "^4.0.0" }, "dependencies": { + "abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==" + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "cacache": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", + "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", + "requires": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + } + }, + "glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + } + }, + "isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==" + }, + "lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==" + }, + "make-fetch-happen": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", + "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", + "requires": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + } + }, + "minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + }, + "minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "requires": { + "minipass": "^7.0.3" + } + }, + "node-gyp": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.1.0.tgz", + "integrity": "sha512-B4J5M1cABxPc5PwfjhbV5hoy2DP9p8lFXASnEN6hugXOa61416tnTZ29x9sSwAd0o99XNIcpvDDy1swAExsVKA==", + "requires": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^4.0.0" + } + }, + "nopt": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", + "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", + "requires": { + "abbrev": "^2.0.0" + } + }, "which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "requires": { - "isexe": "^2.0.0" + "isexe": "^3.1.1" } } } }, "@nrwl/devkit": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-16.5.1.tgz", - "integrity": "sha512-NB+DE/+AFJ7lKH/WBFyatJEhcZGj25F24ncDkwjZ6MzEiSOGOJS0LaV/R+VUsmS5EHTPXYOpn3zHWWAcJhyOmA==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-18.2.4.tgz", + "integrity": "sha512-dLK8MMb3eEFWlhtI1kNDNbWIT1Xbrgg3eAQ+Ix/N5JDbxJkJhE28WsIJgQb1NTwe/N87O5JtOpxz4/TsSLJCsQ==", "dev": true, "requires": { - "@nx/devkit": "16.5.1" + "@nx/devkit": "18.2.4" } }, "@nrwl/tao": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-16.5.1.tgz", - "integrity": "sha512-x+gi/fKdM6uQNIti9exFlm3V5LBP3Y8vOEziO42HdOigyrXa0S0HD2WMpccmp6PclYKhwEDUjKJ39xh5sdh4Ig==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-18.2.4.tgz", + "integrity": "sha512-kgJwZ26F+AzvFXaW5eh1g4HLntPcJ6+EE7JyEvrdRzpw7KxTqWy6Ql7dYys6zGlpP4c3PbsXwdc7tGM3Df2PNg==", "dev": true, "requires": { - "nx": "16.5.1" + "nx": "18.2.4", + "tslib": "^2.3.0" } }, "@nx/devkit": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-16.5.1.tgz", - "integrity": "sha512-T1acZrVVmJw/sJ4PIGidCBYBiBqlg/jT9e8nIGXLSDS20xcLvfo4zBQf8UZLrmHglnwwpDpOWuVJCp2rYA5aDg==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-18.2.4.tgz", + "integrity": "sha512-Ws3BcA/aeXuwsCQ5e7PYy2H7DswareTOEfgs7izxNyGugpydktVH9DZZTOFNDsc06yzgvyTucDbDQ+JsrJ9PcQ==", "dev": true, "requires": { - "@nrwl/devkit": "16.5.1", + "@nrwl/devkit": "18.2.4", "ejs": "^3.1.7", + "enquirer": "~2.3.6", "ignore": "^5.0.4", - "semver": "7.5.3", + "semver": "^7.5.3", "tmp": "~0.2.1", - "tslib": "^2.3.0" + "tslib": "^2.3.0", + "yargs-parser": "21.1.1" } }, "@nx/nx-darwin-arm64": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.5.1.tgz", - "integrity": "sha512-q98TFI4B/9N9PmKUr1jcbtD4yAFs1HfYd9jUXXTQOlfO9SbDjnrYJgZ4Fp9rMNfrBhgIQ4x1qx0AukZccKmH9Q==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-18.2.4.tgz", + "integrity": "sha512-RYhMImghdyHmwnbNoR2CkLz4Opj9EmuHY3lMfsorg+T4wIOql/iXACrqjnreN7Hy9myJDo1EIbYZ4x8VSxFWtA==", "dev": true, "optional": true }, "@nx/nx-darwin-x64": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-16.5.1.tgz", - "integrity": "sha512-j9HmL1l8k7EVJ3eOM5y8COF93gqrydpxCDoz23ZEtsY+JHY77VAiRQsmqBgEx9GGA2dXi9VEdS67B0+1vKariw==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-18.2.4.tgz", + "integrity": "sha512-2mXMslSRD/ZoI/oaX+0Mh9J/hucXtNgdwC4YFbp1u8UKquAaQ6hf4uo0s4i+AfLX0F7roMtkFPaG/+MQUJE1Rw==", "dev": true, "optional": true }, "@nx/nx-freebsd-x64": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.5.1.tgz", - "integrity": "sha512-CXSPT01aVS869tvCCF2tZ7LnCa8l41wJ3mTVtWBkjmRde68E5Up093hklRMyXb3kfiDYlfIKWGwrV4r0eH6x1A==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-18.2.4.tgz", + "integrity": "sha512-QUiYLvyUT0PS7D8erf49xa1Jyw4Gfev5gtYfME34Twmn/JPx/99ZkBG4wHbzLqRGwlO5K6m6P4qs30Pzfwtw7A==", "dev": true, "optional": true }, "@nx/nx-linux-arm-gnueabihf": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.5.1.tgz", - "integrity": "sha512-BhrumqJSZCWFfLFUKl4CAUwR0Y0G2H5EfFVGKivVecEQbb+INAek1aa6c89evg2/OvetQYsJ+51QknskwqvLsA==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-18.2.4.tgz", + "integrity": "sha512-+fjFciSUhvDV8dPa97Brwb83k3Xa4gHPI2Un8wlpp28Cv4horeGruRZrrifR1VmD2wp2UBIMl5n7YsDP8KvYhQ==", "dev": true, "optional": true }, "@nx/nx-linux-arm64-gnu": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.5.1.tgz", - "integrity": "sha512-x7MsSG0W+X43WVv7JhiSq2eKvH2suNKdlUHEG09Yt0vm3z0bhtym1UCMUg3IUAK7jy9hhLeDaFVFkC6zo+H/XQ==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-18.2.4.tgz", + "integrity": "sha512-lfaTc+AvV56Uv5mXROiRwh2REiI/7IsqeRDfL+prcuuvJ5Oxi2wYVgnmqcHL+ryQnk0Qn7/d+j/BmYHX5Ve5jQ==", "dev": true, "optional": true }, "@nx/nx-linux-arm64-musl": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.5.1.tgz", - "integrity": "sha512-J+/v/mFjOm74I0PNtH5Ka+fDd+/dWbKhpcZ2R1/6b9agzZk+Ff/SrwJcSYFXXWKbPX+uQ4RcJoytT06Zs3s0ow==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-18.2.4.tgz", + "integrity": "sha512-U6eoLTQmbxUWU9kZxx6hsYN4zmmOrsDDeW+i3aj5aeahfYlmyz6TsT0V3FSB70WGJC5aMVgEi4RkntQMKkm5vQ==", "dev": true, "optional": true }, "@nx/nx-linux-x64-gnu": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.5.1.tgz", - "integrity": "sha512-igooWJ5YxQ94Zft7IqgL+Lw0qHaY15Btw4gfK756g/YTYLZEt4tTvR1y6RnK/wdpE3sa68bFTLVBNCGTyiTiDQ==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-18.2.4.tgz", + "integrity": "sha512-q8WcJhmcRNORkKjax6WcUwMJe/1mQs+RYlUkGqmi7tD7lfcLSqdLPJVjqVmQAwmy1Wh/MHPsbqRwSerUnCxB1A==", "dev": true, "optional": true }, "@nx/nx-linux-x64-musl": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.5.1.tgz", - "integrity": "sha512-zF/exnPqFYbrLAduGhTmZ7zNEyADid2bzNQiIjJkh8Y6NpDwrQIwVIyvIxqynsjMrIs51kBH+8TUjKjj2Jgf5A==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-18.2.4.tgz", + "integrity": "sha512-0MDuoPgHa6kkBrjg7hwZ2qQivhJbh3lk7r3q4osDrqZcGxq5XVJqeAmYFyChQy4dbQfUm4hhYkEfzpU8M2lnvQ==", "dev": true, "optional": true }, "@nx/nx-win32-arm64-msvc": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.5.1.tgz", - "integrity": "sha512-qtqiLS9Y9TYyAbbpq58kRoOroko4ZXg5oWVqIWFHoxc5bGPweQSJCROEqd1AOl2ZDC6BxfuVHfhDDop1kK05WA==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-18.2.4.tgz", + "integrity": "sha512-uLhSRtfnXzN000Qf27GOjEPXzd4/jBWqv2x419IMh+AEtKHuCEpQNBUAyLvBbQ79SMr+FmCXHB8AeeJ7bEUiRw==", "dev": true, "optional": true }, "@nx/nx-win32-x64-msvc": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.5.1.tgz", - "integrity": "sha512-kUJBLakK7iyA9WfsGGQBVennA4jwf5XIgm0lu35oMOphtZIluvzItMt0EYBmylEROpmpEIhHq0P6J9FA+WH0Rg==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-18.2.4.tgz", + "integrity": "sha512-Y52Afz02Ub1kRZXd6NUTwPMjKQqBKZ35e5dUEpl14na2fWvdgdMz4bYOBPUcmQrovlxBGhmFXtFzxkdW3zyRbQ==", "dev": true, "optional": true }, @@ -24383,17 +25530,17 @@ "integrity": "sha512-jrqoTI8lk5UziDsDPJ2Y+nmXYCcRhmr6uMARr3v/W6AMxRgsnRLWJyWKYr6FjaGMgbyxXG+OkCUPQY4Xl3toGg==" }, "@openproject/octicons-angular": { - "version": "19.10.0", - "resolved": "https://registry.npmjs.org/@openproject/octicons-angular/-/octicons-angular-19.10.0.tgz", - "integrity": "sha512-z9eF2zYU/fsEcVFOkNagjoPv2F5wRnMXxrIovT7R5g6yIO9V6OhFoVN/5iK/6X/9IEwuvwZaTb6CCnsLbu7cwQ==", + "version": "19.11.0", + "resolved": "https://registry.npmjs.org/@openproject/octicons-angular/-/octicons-angular-19.11.0.tgz", + "integrity": "sha512-0CYXudEE5xww+J0J1PbztloV0B+GqlM0MxmBcZqI49t0FuYfpS9ac6uuAwAF6tlgTpd2A6phSho3IueIjxJTMg==", "requires": { "tslib": "^2.3.0" } }, "@openproject/primer-view-components": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@openproject/primer-view-components/-/primer-view-components-0.28.1.tgz", - "integrity": "sha512-vnVvCHK24uyu8278DTEG+NBK9uwZzimPgAAcN6290MQl0IVKN1PlEkKmqomP69gfXzpZkVIS1rxy0nejKnuXpw==", + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/@openproject/primer-view-components/-/primer-view-components-0.29.1.tgz", + "integrity": "sha512-Mov5rPpDAhkZRod0cQ1O5m1sjAwyEaMH+aOjsFS21K3gmUfw6smFWXk83vLOL+LCmq6ze92JMA3QZHtCAraj/Q==", "requires": { "@github/auto-check-element": "^5.2.0", "@github/auto-complete-element": "^3.6.2", @@ -24416,16 +25563,6 @@ "rxjs": "^7.8.0" } }, - "@parcel/watcher": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", - "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", - "dev": true, - "requires": { - "node-addon-api": "^3.2.1", - "node-gyp-build": "^4.3.0" - } - }, "@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -24444,12 +25581,12 @@ "integrity": "sha512-HWwz+6MrfK5NTWcg9GdKFpMBW/yrAV937oXiw2eDtsd88P3SRwoCt6ZO6QmKp9RP3nDU9cbqmuGZ0xBh0eIFeg==" }, "@primer/css": { - "version": "21.2.2", - "resolved": "https://registry.npmjs.org/@primer/css/-/css-21.2.2.tgz", - "integrity": "sha512-Mcpt9CyajnPW8TJmZYIUhnctdLk7rfsoyvh8w4qDydu2C7HHOHa0wKQjf0zofQ+AyJOIW1Gfa9xvBfwAeNkgoQ==", + "version": "21.3.1", + "resolved": "https://registry.npmjs.org/@primer/css/-/css-21.3.1.tgz", + "integrity": "sha512-vQoTeu7yfL/1Njg372lN6xqIsiPl0QgoIrkDjJ+TpDkeIznXFc+jLdu+5VUVi+bzyKHwv/gd42hhlLA2K5oD6w==", "requires": { "@primer/primitives": "^7.15.12", - "@primer/view-components": "npm:@openproject/primer-view-components@^0.28.1" + "@primer/view-components": "npm:@openproject/primer-view-components@^0.29.1" } }, "@primer/primitives": { @@ -24458,9 +25595,9 @@ "integrity": "sha512-ujAsbRB5Xw6rrxizbTgv1bxpraZ091stPMsO6pqGxzc+zIyhrojpGVBuCKJ+RYkpbKK7T4bZzgOT/KyWBAFwwg==" }, "@primer/view-components": { - "version": "npm:@openproject/primer-view-components@0.28.1", - "resolved": "https://registry.npmjs.org/@openproject/primer-view-components/-/primer-view-components-0.28.1.tgz", - "integrity": "sha512-vnVvCHK24uyu8278DTEG+NBK9uwZzimPgAAcN6290MQl0IVKN1PlEkKmqomP69gfXzpZkVIS1rxy0nejKnuXpw==", + "version": "npm:@openproject/primer-view-components@0.29.1", + "resolved": "https://registry.npmjs.org/@openproject/primer-view-components/-/primer-view-components-0.29.1.tgz", + "integrity": "sha512-Mov5rPpDAhkZRod0cQ1O5m1sjAwyEaMH+aOjsFS21K3gmUfw6smFWXk83vLOL+LCmq6ze92JMA3QZHtCAraj/Q==", "requires": { "@github/auto-check-element": "^5.2.0", "@github/auto-complete-element": "^3.6.2", @@ -24505,38 +25642,251 @@ "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-7.0.6.tgz", "integrity": "sha512-ybBsUrIsu5geM8BtqnpM7ZA9D8uzSz+e1B4JR57NaCmasHKWap6AX5DT7NHIbp21opVet1qqoVSdsoLDqXeB2A==" }, + "@rollup/rollup-android-arm-eabi": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.3.tgz", + "integrity": "sha512-X9alQ3XM6I9IlSlmC8ddAvMSyG1WuHk5oUnXGw+yUBs3BFoTizmG1La/Gr8fVJvDWAq+zlYTZ9DBgrlKRVY06g==", + "optional": true + }, + "@rollup/rollup-android-arm64": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.3.tgz", + "integrity": "sha512-eQK5JIi+POhFpzk+LnjKIy4Ks+pwJ+NXmPxOCSvOKSNRPONzKuUvWE+P9JxGZVxrtzm6BAYMaL50FFuPe0oWMQ==", + "optional": true + }, + "@rollup/rollup-darwin-arm64": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.3.tgz", + "integrity": "sha512-Od4vE6f6CTT53yM1jgcLqNfItTsLt5zE46fdPaEmeFHvPs5SjZYlLpHrSiHEKR1+HdRfxuzXHjDOIxQyC3ptBA==", + "optional": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.3.tgz", + "integrity": "sha512-0IMAO21axJeNIrvS9lSe/PGthc8ZUS+zC53O0VhF5gMxfmcKAP4ESkKOCwEi6u2asUrt4mQv2rjY8QseIEb1aw==", + "optional": true + }, + "@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.3.tgz", + "integrity": "sha512-ge2DC7tHRHa3caVEoSbPRJpq7azhG+xYsd6u2MEnJ6XzPSzQsTKyXvh6iWjXRf7Rt9ykIUWHtl0Uz3T6yXPpKw==", + "optional": true + }, + "@rollup/rollup-linux-arm-musleabihf": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.14.3.tgz", + "integrity": "sha512-ljcuiDI4V3ySuc7eSk4lQ9wU8J8r8KrOUvB2U+TtK0TiW6OFDmJ+DdIjjwZHIw9CNxzbmXY39wwpzYuFDwNXuw==", + "optional": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.3.tgz", + "integrity": "sha512-Eci2us9VTHm1eSyn5/eEpaC7eP/mp5n46gTRB3Aar3BgSvDQGJZuicyq6TsH4HngNBgVqC5sDYxOzTExSU+NjA==", + "optional": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.3.tgz", + "integrity": "sha512-UrBoMLCq4E92/LCqlh+blpqMz5h1tJttPIniwUgOFJyjWI1qrtrDhhpHPuFxULlUmjFHfloWdixtDhSxJt5iKw==", + "optional": true + }, + "@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.3.tgz", + "integrity": "sha512-5aRjvsS8q1nWN8AoRfrq5+9IflC3P1leMoy4r2WjXyFqf3qcqsxRCfxtZIV58tCxd+Yv7WELPcO9mY9aeQyAmw==", + "optional": true + }, + "@rollup/rollup-linux-riscv64-gnu": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.3.tgz", + "integrity": "sha512-sk/Qh1j2/RJSX7FhEpJn8n0ndxy/uf0kI/9Zc4b1ELhqULVdTfN6HL31CDaTChiBAOgLcsJ1sgVZjWv8XNEsAQ==", + "optional": true + }, + "@rollup/rollup-linux-s390x-gnu": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.3.tgz", + "integrity": "sha512-jOO/PEaDitOmY9TgkxF/TQIjXySQe5KVYB57H/8LRP/ux0ZoO8cSHCX17asMSv3ruwslXW/TLBcxyaUzGRHcqg==", + "optional": true + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.3.tgz", + "integrity": "sha512-8ybV4Xjy59xLMyWo3GCfEGqtKV5M5gCSrZlxkPGvEPCGDLNla7v48S662HSGwRd6/2cSneMQWiv+QzcttLrrOA==", + "optional": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.3.tgz", + "integrity": "sha512-s+xf1I46trOY10OqAtZ5Rm6lzHre/UiLA1J2uOhCFXWkbZrJRkYBPO6FhvGfHmdtQ3Bx793MNa7LvoWFAm93bg==", + "optional": true + }, + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.3.tgz", + "integrity": "sha512-+4h2WrGOYsOumDQ5S2sYNyhVfrue+9tc9XcLWLh+Kw3UOxAvrfOrSMFon60KspcDdytkNDh7K2Vs6eMaYImAZg==", + "optional": true + }, + "@rollup/rollup-win32-ia32-msvc": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.3.tgz", + "integrity": "sha512-T1l7y/bCeL/kUwh9OD4PQT4aM7Bq43vX05htPJJ46RTI4r5KNt6qJRzAfNfM+OYMNEVBWQzR2Gyk+FXLZfogGw==", + "optional": true + }, + "@rollup/rollup-win32-x64-msvc": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.3.tgz", + "integrity": "sha512-/BypzV0H1y1HzgYpxqRaXGBRqfodgoBBCcsrujT6QRcakDQdfU+Lq9PENPh5jB4I44YWq+0C2eHsHya+nZY1sA==", + "optional": true + }, "@schematics/angular": { - "version": "16.2.13", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.13.tgz", - "integrity": "sha512-SFE9e7X/CEtzwGEqHUqXriAm4J4uTjcfoRXslc7BuqOKABM8RXPphGQsVG4xOt3n25kXXGkFO2dvDRHuLTP1fQ==", + "version": "17.3.6", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.6.tgz", + "integrity": "sha512-jCNZdjHSVrI8TrrCnCoXC8GYvQRj7zh+SDdmm91Ve8dbikYNmBOKYLuPaCTsmojWx7ytv962yLlgKzpaa2bbfw==", "requires": { - "@angular-devkit/core": "16.2.13", - "@angular-devkit/schematics": "16.2.13", - "jsonc-parser": "3.2.0" + "@angular-devkit/core": "17.3.6", + "@angular-devkit/schematics": "17.3.6", + "jsonc-parser": "3.2.1" } }, "@sigstore/bundle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.0.0.tgz", - "integrity": "sha512-yLvrWDOh6uMOUlFCTJIZEnwOT9Xte7NPXUqVexEKGSF5XtBAuSg5du0kn3dRR0p47a4ah10Y0mNt8+uyeQXrBQ==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.1.tgz", + "integrity": "sha512-eqV17lO3EIFqCWK3969Rz+J8MYrRZKw9IBHpSo6DEcEX2c+uzDFOgHE9f2MnyDpfs48LFO4hXmk9KhQ74JzU1g==", "requires": { - "@sigstore/protobuf-specs": "^0.2.0" + "@sigstore/protobuf-specs": "^0.3.1" } }, + "@sigstore/core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", + "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==" + }, "@sigstore/protobuf-specs": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.0.tgz", - "integrity": "sha512-8ZhZKAVfXjIspDWwm3D3Kvj0ddbJ0HqDZ/pOs5cx88HpT8mVsotFrg7H1UMnXOuDHz6Zykwxn4mxG3QLuN+RUg==" + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.1.tgz", + "integrity": "sha512-aIL8Z9NsMr3C64jyQzE0XlkEyBLpgEJJFDHLVVStkFV5Q3Il/r/YtY6NJWKQ4cy4AE7spP1IX5Jq7VCAxHHMfQ==" + }, + "@sigstore/sign": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.0.tgz", + "integrity": "sha512-tsAyV6FC3R3pHmKS880IXcDJuiFJiKITO1jxR1qbplcsBkZLBmjrEw5GbC7ikD6f5RU1hr7WnmxB/2kKc1qUWQ==", + "requires": { + "@sigstore/bundle": "^2.3.0", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.1", + "make-fetch-happen": "^13.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "cacache": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", + "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", + "requires": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + } + }, + "glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + } + }, + "lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==" + }, + "make-fetch-happen": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", + "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", + "requires": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + } + }, + "minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + }, + "minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "requires": { + "minipass": "^7.0.3" + } + } + } }, "@sigstore/tuf": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", - "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.2.tgz", + "integrity": "sha512-mwbY1VrEGU4CO55t+Kl6I7WZzIl+ysSzEYdA1Nv/FTrl2bkeaPXo5PnWZAVfcY2zSdhOpsUTJW67/M2zHXGn5w==", "requires": { - "@sigstore/protobuf-specs": "^0.2.0", - "tuf-js": "^1.1.7" + "@sigstore/protobuf-specs": "^0.3.0", + "tuf-js": "^2.2.0" } }, + "@sigstore/verify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.0.tgz", + "integrity": "sha512-hQF60nc9yab+Csi4AyoAmilGNfpXT+EXdBgFkP9OgPwIBPwyqVf7JAWPtmqrrrneTmAT6ojv7OlH1f6Ix5BG4Q==", + "requires": { + "@sigstore/bundle": "^2.3.1", + "@sigstore/core": "^1.1.0", + "@sigstore/protobuf-specs": "^0.3.1" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, "@socket.io/component-emitter": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", @@ -24549,9 +25899,9 @@ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" }, "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==" }, "@tsconfig/node12": { "version": "1.0.11", @@ -24569,17 +25919,17 @@ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" }, "@tufjs/canonical-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", - "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==" }, "@tufjs/models": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", - "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.0.tgz", + "integrity": "sha512-c8nj8BaOExmZKO2DXhDfegyhSGcG9E/mPN3U13L+/PsoWm1uaGiHHjxqSHQiasDBQwDA3aHuw9+9spYAP1qvvg==", "requires": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.3" }, "dependencies": { "brace-expansion": { @@ -24591,9 +25941,9 @@ } }, "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "requires": { "brace-expansion": "^2.0.1" } @@ -24659,33 +26009,33 @@ } }, "@types/dragula": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/dragula/-/dragula-3.7.4.tgz", - "integrity": "sha512-cjg5MNq8CnXyJTScWM2t9fc0FC77rrBxYBs6/R3FiwW9NOTdHPB2nJq52I0tfxiBnhFb451S2j5ok4wW7sKmvA==", + "version": "3.7.5", + "resolved": "https://registry.npmjs.org/@types/dragula/-/dragula-3.7.5.tgz", + "integrity": "sha512-jojr2JVJB8DawAKXApGnollMvVOMyiMKpchH8gLeoExx35Eq0BQ4WgAiAHoBoEn7h/9eDrIl0yz//cM6ALIJbg==", "dev": true }, "@types/eslint": { - "version": "8.44.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", - "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", + "version": "8.56.9", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.9.tgz", + "integrity": "sha512-W4W3KcqzjJ0sHg2vAq9vfml6OhsJ53TcUjUqfzzZf/EChUtwspszj/S0pzMxnfRcO55/iGq47dscXw71Fxc4Zg==", "requires": { "@types/estree": "*", "@types/json-schema": "*" } }, "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "requires": { "@types/eslint": "*", "@types/estree": "*" } }, "@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" }, "@types/express": { "version": "4.17.17", @@ -24725,6 +26075,11 @@ "integrity": "sha512-qkcUlZmX6c4J8q45taBKTL3p+LbITgyx7qhlPYOdOHZB7B31K0mXbP5YA7i7SgDeEGuI9MnumiKPEMrxg8j3KQ==", "dev": true }, + "@types/hotwired__turbo": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@types/hotwired__turbo/-/hotwired__turbo-8.0.1.tgz", + "integrity": "sha512-EloDlDDxlicl22+gFc77f7j16b8nCUvy6iyCtpICTlofAJfMCfnXNC8nYXCnVApes3BtWklAc2f3RKQgpaaFRQ==" + }, "@types/http-errors": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", @@ -24745,9 +26100,9 @@ "dev": true }, "@types/jquery": { - "version": "3.5.29", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.29.tgz", - "integrity": "sha512-oXQQC9X9MOPRrMhPHHOsXqeQDnWeCDT3PelUIg/Oy8FAbzSZtFHRjc7IpbfFVmpLtJ+UOoywpRsuO5Jxjybyeg==", + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.30.tgz", + "integrity": "sha512-nbWKkkyb919DOUxjmRVk8vwtDb0/k8FKncmUKFi+NY+QXqWltooxTrswvz4LspQwxvLdvzBN1TImr6cw3aQx2A==", "dev": true, "requires": { "@types/sizzle": "*" @@ -24763,9 +26118,9 @@ } }, "@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==" + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "@types/json5": { "version": "0.0.29", @@ -24774,9 +26129,9 @@ "dev": true }, "@types/lodash": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", - "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.1.tgz", + "integrity": "sha512-X+2qazGS3jxLAIz5JDXDzglAF3KpijdhFxlf/V1+hEsOUc+HnWi81L/uv/EvGuV90WY+7mPGFCUDGfQC3Gj95Q==", "dev": true }, "@types/mime": { @@ -24823,9 +26178,9 @@ "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, "@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, "@types/send": { @@ -24903,9 +26258,9 @@ "dev": true }, "@types/webpack-env": { - "version": "1.18.4", - "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.4.tgz", - "integrity": "sha512-I6e+9+HtWADAWeeJWDFQtdk4EVSAbj6Rtz4q8fJ7mSr1M0jzlFcs8/HZ+Xb5SHzVm1dxH7aUiI+A8kA8Gcrm0A==", + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.5.tgz", + "integrity": "sha512-wz7kjjRRj8/Lty4B+Kr0LN6Ypc/3SymeCCGSbaXp2leH0ZVg/PriNiOwNj4bD4uphI7A8NXS4b6Gl373sfO5mA==", "dev": true }, "@types/ws": { @@ -24918,245 +26273,226 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.0.tgz", - "integrity": "sha512-SVLafp0NXpoJY7ut6VFVUU9I+YeFsDzeQwtK0WZ+xbRN3mtxJ08je+6Oi2N89qDn087COdO0u3blKZNv9VetRQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.8.0.tgz", + "integrity": "sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.48.0", - "@typescript-eslint/type-utils": "5.48.0", - "@typescript-eslint/utils": "5.48.0", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/type-utils": "7.8.0", + "@typescript-eslint/utils": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", "debug": "^4.3.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "dependencies": { - "@typescript-eslint/type-utils": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.48.0.tgz", - "integrity": "sha512-vbtPO5sJyFjtHkGlGK4Sthmta0Bbls4Onv0bEqOGm7hP9h8UpRsHJwsrCiWtCUndTRNQO/qe6Ijz9rnT/DB+7g==", - "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "5.48.0", - "@typescript-eslint/utils": "5.48.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, "@typescript-eslint/utils": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.48.0.tgz", - "integrity": "sha512-x2jrMcPaMfsHRRIkL+x96++xdzvrdBCnYRd5QiW5Wgo1OB4kDYPbC1XjWP/TNqlfK93K/lUL92erq5zPLgFScQ==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.48.0", - "@typescript-eslint/types": "5.48.0", - "@typescript-eslint/typescript-estree": "5.48.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", - "semver": "^7.3.7" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", + "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", "dev": true, "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "semver": "^7.6.0" } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true } } }, "@typescript-eslint/parser": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.48.0.tgz", - "integrity": "sha512-1mxNA8qfgxX8kBvRDIHEzrRGrKHQfQlbW6iHyfHYS0Q4X1af+S6mkLNtgCOsGVl8+/LUPrqdHMssAemkrQ01qg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.48.0", - "@typescript-eslint/types": "5.48.0", - "@typescript-eslint/typescript-estree": "5.48.0", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.48.0.tgz", - "integrity": "sha512-0AA4LviDtVtZqlyUQnZMVHydDATpD9SAX/RC5qh6cBd3xmyWvmXYF+WT1oOmxkeMnWDlUVTwdODeucUnjz3gow==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", + "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", "dev": true, "requires": { - "@typescript-eslint/types": "5.48.0", - "@typescript-eslint/visitor-keys": "5.48.0" + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0" } }, "@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.8.0.tgz", + "integrity": "sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "@typescript-eslint/utils": "7.8.0", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "ts-api-utils": "^1.3.0" }, "dependencies": { - "@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "@typescript-eslint/utils": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", + "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "semver": "^7.6.0" } } } }, "@typescript-eslint/types": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.0.tgz", - "integrity": "sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", + "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.0.tgz", - "integrity": "sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", + "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.48.0", - "@typescript-eslint/visitor-keys": "5.48.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.2.0.tgz", + "integrity": "sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==", "dev": true, "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "semver": "^7.5.4" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", + "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0" } }, "@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", + "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", + "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" } }, "@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", + "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", "dev": true, "requires": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "7.2.0", + "eslint-visitor-keys": "^3.4.1" } }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "balanced-match": "^1.0.0" } }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } } } }, "@typescript-eslint/visitor-keys": { - "version": "5.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.0.tgz", - "integrity": "sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", + "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.48.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "7.8.0", + "eslint-visitor-keys": "^3.4.3" } }, "@uirouter/angular": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@uirouter/angular/-/angular-12.0.0.tgz", - "integrity": "sha512-UTJ2lyiZowD0xLAWbfEMA7jZpgFZQYFml/53mqY8vNPc7D7/5dHBaUu+Kx+Xmm3fmy+K1c9HSKA2eZQS4AqmDA==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@uirouter/angular/-/angular-13.0.0.tgz", + "integrity": "sha512-T2aizSXzW+7eiXUmc0LiLH+I8ZBJvDr7OQmm/5WCcxVL2NfuIse7B1kpvfdh9PmBAqw8AY7S0NhrJgABfFJUnw==", "requires": { "tslib": "^2.3.0" } @@ -25178,9 +26514,9 @@ "dev": true }, "@vitejs/plugin-basic-ssl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz", - "integrity": "sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", + "integrity": "sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==" }, "@vusion/webfonts-generator": { "version": "0.8.0", @@ -25303,9 +26639,9 @@ } }, "@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "requires": { "@webassemblyjs/helper-numbers": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6" @@ -25322,9 +26658,9 @@ "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" }, "@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" }, "@webassemblyjs/helper-numbers": { "version": "1.11.6", @@ -25342,14 +26678,14 @@ "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" }, "@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/wasm-gen": "1.12.1" } }, "@webassemblyjs/ieee754": { @@ -25374,26 +26710,26 @@ "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" }, "@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "requires": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", @@ -25401,22 +26737,22 @@ } }, "@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "requires": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", @@ -25425,57 +26761,14 @@ } }, "@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "requires": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, - "@wessberg/ts-evaluator": { - "version": "0.0.27", - "resolved": "https://registry.npmjs.org/@wessberg/ts-evaluator/-/ts-evaluator-0.0.27.tgz", - "integrity": "sha512-7gOpVm3yYojUp/Yn7F4ZybJRxyqfMNf0LXK5KJiawbPfL0XTsJV+0mgrEDjOIR6Bi0OYk2Cyg4tjFu1r8MCZaA==", - "requires": { - "chalk": "^4.1.0", - "jsdom": "^16.4.0", - "object-path": "^0.11.5", - "tslib": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "@xeokit/xeokit-bim-viewer": { "version": "2.5.1-beta-28", "resolved": "https://registry.npmjs.org/@xeokit/xeokit-bim-viewer/-/xeokit-bim-viewer-2.5.1-beta-28.tgz", @@ -25543,11 +26836,6 @@ } } }, - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" - }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -25563,25 +26851,9 @@ } }, "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==" - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" - } - } + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==" }, "acorn-import-assertions": { "version": "1.9.0", @@ -25595,9 +26867,9 @@ "dev": true }, "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==" }, "adjust-sourcemap-loader": { "version": "4.0.0", @@ -26244,7 +27516,8 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true }, "atoa": { "version": "1.0.0", @@ -26295,36 +27568,53 @@ "dev": true }, "axios": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", - "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", "dev": true, "requires": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" - }, - "dependencies": { - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } } }, "axobject-query": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", - "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", + "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", "dev": true, "requires": { - "deep-equal": "^2.0.5" + "dequal": "^2.0.3" + } + }, + "babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "requires": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + } } }, "babel-plugin-istanbul": { @@ -26359,12 +27649,12 @@ } }, "babel-plugin-polyfill-corejs2": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz", - "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==", + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz", + "integrity": "sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==", "requires": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.3", + "@babel/helper-define-polyfill-provider": "^0.6.1", "semver": "^6.3.1" }, "dependencies": { @@ -26376,20 +27666,48 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.5.tgz", - "integrity": "sha512-Q6CdATeAvbScWPNLB8lzSO7fgUVBkQt6zLgNlfyeCr/EQaEQR+bWiBYYPYAFyE528BMjRhL+1QBMOI4jc/c5TA==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", + "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.3", - "core-js-compat": "^3.32.2" + "@babel/helper-define-polyfill-provider": "^0.5.0", + "core-js-compat": "^3.34.0" + }, + "dependencies": { + "@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "requires": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + } + } } }, "babel-plugin-polyfill-regenerator": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz", - "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", + "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.3" + "@babel/helper-define-polyfill-provider": "^0.5.0" + }, + "dependencies": { + "@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "requires": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + } + } } }, "balanced-match": { @@ -26558,11 +27876,6 @@ "fill-range": "^7.0.1" } }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" - }, "browserslist": { "version": "4.23.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", @@ -26604,9 +27917,9 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", + "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", "requires": { "semver": "^7.0.0" } @@ -26833,9 +28146,9 @@ "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" }, "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==" }, "cliui": { "version": "7.0.4", @@ -26911,6 +28224,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -26949,6 +28263,11 @@ } } }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, "common-path-prefix": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", @@ -27187,16 +28506,16 @@ } }, "core-js": { - "version": "3.36.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.36.1.tgz", - "integrity": "sha512-BTvUrwxVBezj5SZ3f10ImnX2oRByMxql3EimVqMysepbC9EeMUOpLwdy6Eoili2x6E4kf+ZUB5k/+Jv55alPfA==" + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.0.tgz", + "integrity": "sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==" }, "core-js-compat": { - "version": "3.33.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.1.tgz", - "integrity": "sha512-6pYKNOgD/j/bkC5xS5IIg6bncid3rfrI42oBH1SQJbsmYPKF7rhzcFzYCcxYMmNQQ0rCEB8WqpW7QHndOggaeQ==", + "version": "3.36.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz", + "integrity": "sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==", "requires": { - "browserslist": "^4.22.1" + "browserslist": "^4.23.0" } }, "core-util-is": { @@ -27226,14 +28545,14 @@ "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==" }, "cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "requires": { + "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" }, "dependencies": { "argparse": { @@ -27298,9 +28617,9 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, "critters": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.20.tgz", - "integrity": "sha512-CImNRorKOl5d8TWcnAz5n5izQ6HFsvz29k327/ELy6UFcmbiZNOsinaKvzv16WZR0P6etfSWYzE47C4/56B3Uw==", + "version": "0.0.22", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.22.tgz", + "integrity": "sha512-NU7DEcQZM2Dy8XTKFHxtdnIM/drE312j2T4PCVaSUcS0oBeyT/NImpRw/Ap0zOr/1SE7SgPK9tGPg1WK/sVakw==", "requires": { "chalk": "^4.1.0", "css-select": "^5.1.0", @@ -27308,7 +28627,7 @@ "domhandler": "^5.0.2", "htmlparser2": "^8.0.2", "postcss": "^8.4.23", - "pretty-bytes": "^5.3.0" + "postcss-media-query-parser": "^0.2.3" }, "dependencies": { "ansi-styles": { @@ -27370,18 +28689,30 @@ } }, "css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.10.0.tgz", + "integrity": "sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==", "requires": { "icss-utils": "^5.1.0", - "postcss": "^8.4.21", + "postcss": "^8.4.33", "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.4", + "postcss-modules-scope": "^3.1.1", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" + "semver": "^7.5.4" + }, + "dependencies": { + "postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "requires": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + } + } } }, "css-select": { @@ -27406,26 +28737,6 @@ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" - } - } - }, "cubic2quad": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/cubic2quad/-/cubic2quad-1.2.1.tgz", @@ -27450,41 +28761,6 @@ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "dependencies": { - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "requires": { - "punycode": "^2.1.1" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - } - } - }, "data.either": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/data.either/-/data.either-1.5.1.tgz", @@ -27537,43 +28813,12 @@ "ms": "2.1.2" } }, - "decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" - }, "decode-uri-component": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "dev": true }, - "deep-equal": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", - "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.1", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - } - }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -27662,7 +28907,8 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true }, "delegates": { "version": "1.0.0", @@ -27701,6 +28947,12 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" }, + "diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true + }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -27794,21 +29046,6 @@ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" - } - } - }, "domhandler": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", @@ -27827,6 +29064,18 @@ "domhandler": "^5.0.3" } }, + "dotenv": { + "version": "16.3.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.2.tgz", + "integrity": "sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ==", + "dev": true + }, + "dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "dev": true + }, "draco3d": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/draco3d/-/draco3d-1.5.5.tgz", @@ -27858,9 +29107,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, "requires": { "jake": "^10.8.5" @@ -27954,9 +29203,9 @@ "dev": true }, "enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -28077,23 +29326,6 @@ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" }, - "es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - } - }, "es-html-parser": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/es-html-parser/-/es-html-parser-0.0.8.tgz", @@ -28124,9 +29356,9 @@ } }, "es-module-lexer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz", + "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==" }, "es-set-tostringtag": { "version": "2.0.3", @@ -28269,38 +29501,40 @@ } }, "esbuild": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.17.tgz", - "integrity": "sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==", - "requires": { - "@esbuild/android-arm": "0.18.17", - "@esbuild/android-arm64": "0.18.17", - "@esbuild/android-x64": "0.18.17", - "@esbuild/darwin-arm64": "0.18.17", - "@esbuild/darwin-x64": "0.18.17", - "@esbuild/freebsd-arm64": "0.18.17", - "@esbuild/freebsd-x64": "0.18.17", - "@esbuild/linux-arm": "0.18.17", - "@esbuild/linux-arm64": "0.18.17", - "@esbuild/linux-ia32": "0.18.17", - "@esbuild/linux-loong64": "0.18.17", - "@esbuild/linux-mips64el": "0.18.17", - "@esbuild/linux-ppc64": "0.18.17", - "@esbuild/linux-riscv64": "0.18.17", - "@esbuild/linux-s390x": "0.18.17", - "@esbuild/linux-x64": "0.18.17", - "@esbuild/netbsd-x64": "0.18.17", - "@esbuild/openbsd-x64": "0.18.17", - "@esbuild/sunos-x64": "0.18.17", - "@esbuild/win32-arm64": "0.18.17", - "@esbuild/win32-ia32": "0.18.17", - "@esbuild/win32-x64": "0.18.17" + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.1.tgz", + "integrity": "sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA==", + "optional": true, + "requires": { + "@esbuild/aix-ppc64": "0.20.1", + "@esbuild/android-arm": "0.20.1", + "@esbuild/android-arm64": "0.20.1", + "@esbuild/android-x64": "0.20.1", + "@esbuild/darwin-arm64": "0.20.1", + "@esbuild/darwin-x64": "0.20.1", + "@esbuild/freebsd-arm64": "0.20.1", + "@esbuild/freebsd-x64": "0.20.1", + "@esbuild/linux-arm": "0.20.1", + "@esbuild/linux-arm64": "0.20.1", + "@esbuild/linux-ia32": "0.20.1", + "@esbuild/linux-loong64": "0.20.1", + "@esbuild/linux-mips64el": "0.20.1", + "@esbuild/linux-ppc64": "0.20.1", + "@esbuild/linux-riscv64": "0.20.1", + "@esbuild/linux-s390x": "0.20.1", + "@esbuild/linux-x64": "0.20.1", + "@esbuild/netbsd-x64": "0.20.1", + "@esbuild/openbsd-x64": "0.20.1", + "@esbuild/sunos-x64": "0.20.1", + "@esbuild/win32-arm64": "0.20.1", + "@esbuild/win32-ia32": "0.20.1", + "@esbuild/win32-x64": "0.20.1" } }, "esbuild-wasm": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.18.17.tgz", - "integrity": "sha512-9OHGcuRzy+I8ziF9FzjfKLWAPbvi0e/metACVg9k6bK+SI4FFxeV6PcZsz8RIVaMD4YNehw+qj6UMR3+qj/EuQ==" + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.20.1.tgz", + "integrity": "sha512-6v/WJubRsjxBbQdz6izgvx7LsVFvVaGmSdwrFHmEzoVgfXL89hkKPoQHsnVI2ngOkcBUQT9kmAM1hVL1k/Av4A==" }, "escalade": { "version": "3.1.1", @@ -28406,6 +29640,16 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, + "eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, "glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -28416,9 +29660,9 @@ } }, "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -28477,9 +29721,9 @@ } }, "eslint-config-airbnb-typescript": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.1.0.tgz", - "integrity": "sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-18.0.0.tgz", + "integrity": "sha512-oc+Lxzgzsu8FQyFVa4QFaVKiitTYiiW3frB9KYW5OWdPrqFc7FzxgB20hP4cHMlr+MBzGcLl3jnCOVOydL9mIg==", "dev": true, "requires": { "eslint-config-airbnb-base": "^15.0.0" @@ -28504,17 +29748,6 @@ "requires": { "ms": "^2.1.1" } - }, - "resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", - "dev": true, - "requires": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } } } }, @@ -28646,15 +29879,6 @@ "object.fromentries": "^2.0.7" }, "dependencies": { - "@babel/runtime": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", - "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.14.0" - } - }, "axobject-query": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", @@ -28663,12 +29887,6 @@ "requires": { "dequal": "^2.0.3" } - }, - "regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", - "dev": true } } }, @@ -28727,38 +29945,21 @@ } }, "eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true }, "eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.1.tgz", + "integrity": "sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==", "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, "eslint-visitor-keys": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", @@ -28881,11 +30082,6 @@ } } }, - "eventemitter-asyncresource": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", - "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==" - }, "eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -29300,6 +30496,15 @@ } } }, + "find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "requires": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + } + }, "find-replace": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", @@ -29321,16 +30526,16 @@ "flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" }, "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "requires": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" } }, @@ -29345,9 +30550,9 @@ "integrity": "sha512-97PMG/aywoYpB4IvbvUJi0RQi8vearvU0oov1WW3k0WZPBMrTQVqekSX5CjSG/M4Q3i6A/0FKXC7RyAoAUUSPw==" }, "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "follow-redirects": { @@ -29396,9 +30601,10 @@ } }, "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -29442,9 +30648,9 @@ "dev": true }, "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -29499,11 +30705,6 @@ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, - "fuse.js": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-3.6.1.tgz", - "integrity": "sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw==" - }, "gauge": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", @@ -29693,14 +30894,6 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "guess-parser": { - "version": "0.4.22", - "resolved": "https://registry.npmjs.org/guess-parser/-/guess-parser-0.4.22.tgz", - "integrity": "sha512-KcUWZ5ACGaBM69SbqwVIuWGoSAgD+9iJnchR9j/IarVI1jHVeXv+bUXBIMeqVMSKt3zrn0Dgf9UpcOEpPBLbSg==", - "requires": { - "@wessberg/ts-evaluator": "0.0.27" - } - }, "gulp-header": { "version": "1.8.12", "resolved": "https://registry.npmjs.org/gulp-header/-/gulp-header-1.8.12.tgz", @@ -30055,28 +31248,6 @@ "function-bind": "^1.1.2" } }, - "hdr-histogram-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", - "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", - "requires": { - "@assemblyscript/loader": "^0.10.1", - "base64-js": "^1.2.0", - "pako": "^1.0.3" - }, - "dependencies": { - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - } - } - }, - "hdr-histogram-percentiles-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", - "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==" - }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -30123,17 +31294,17 @@ "dev": true }, "hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", "requires": { - "lru-cache": "^7.5.1" + "lru-cache": "^10.0.1" }, "dependencies": { "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==" } } }, @@ -30177,14 +31348,6 @@ } } }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, "html-entities": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", @@ -30404,14 +31567,14 @@ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==" }, "ignore-walk": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", - "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.4.tgz", + "integrity": "sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw==", "requires": { "minimatch": "^9.0.0" }, @@ -30425,9 +31588,9 @@ } }, "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "requires": { "brace-expansion": "^2.0.1" } @@ -30441,9 +31604,9 @@ "optional": true }, "immutable": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.2.tgz", - "integrity": "sha512-oGXzbEDem9OOpDWZu88jGiYCvIsLHMvGw+8OXlpsvTFvIQplQbjg1B1cvKg8f7Hoch6+NGjpPsH1Fr+Mc2D1aA==" + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", + "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==" }, "immutable-ext": { "version": "1.1.2", @@ -30498,30 +31661,30 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==" + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", + "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==" }, "inquirer": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", - "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", + "version": "9.2.15", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.15.tgz", + "integrity": "sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==", "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", + "@ljharb/through": "^2.3.12", + "ansi-escapes": "^4.3.2", + "chalk": "^5.3.0", "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", + "cli-width": "^4.1.0", + "external-editor": "^3.1.0", + "figures": "^3.2.0", "lodash": "^4.17.21", - "mute-stream": "0.0.8", + "mute-stream": "1.0.0", "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" + "run-async": "^3.0.0", + "rxjs": "^7.8.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" }, "dependencies": { "ansi-styles": { @@ -30533,25 +31696,18 @@ } }, "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "requires": { - "has-flag": "^4.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } } } @@ -30586,16 +31742,6 @@ "hasown": "^2.0.0" } }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, "is-array": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-array/-/is-array-1.0.1.tgz", @@ -30836,11 +31982,6 @@ "isobject": "^3.0.1" } }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" - }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -30983,15 +32124,6 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" }, - "isomorphic-unfetch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", - "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", - "requires": { - "node-fetch": "^2.6.1", - "unfetch": "^4.2.0" - } - }, "isomorphic-ws": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", @@ -31201,12 +32333,6 @@ "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", "dev": true }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, "ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", @@ -31215,6 +32341,60 @@ } } }, + "jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true + }, "jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -31241,9 +32421,9 @@ } }, "jiti": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.1.tgz", - "integrity": "sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==" + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==" }, "jquery": { "version": "3.7.1", @@ -31282,123 +32462,6 @@ "esprima": "^4.0.0" } }, - "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" - }, - "escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "source-map": "~0.6.1" - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true - }, - "tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - } - }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "requires": { - "punycode": "^2.1.1" - } - }, - "universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" - } - } - }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -31409,10 +32472,16 @@ "resolved": "https://registry.npmjs.org/json-bignum/-/json-bignum-0.0.3.tgz", "integrity": "sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==" }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==" }, "json-schema-traverse": { "version": "1.0.0", @@ -31437,9 +32506,9 @@ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" }, "jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==" }, "jsonfile": { "version": "6.1.0", @@ -31607,16 +32676,6 @@ } } }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -31626,12 +32685,6 @@ "glob": "^7.1.3" } }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -31672,6 +32725,15 @@ "colors": "^1.1.2" } }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -31721,9 +32783,9 @@ } }, "less": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", - "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", + "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", "requires": { "copy-anything": "^2.0.1", "errno": "^0.1.1", @@ -31737,28 +32799,12 @@ "tslib": "^2.3.0" }, "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "optional": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "optional": true }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "optional": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -31794,9 +32840,9 @@ } }, "lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", + "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", "dev": true }, "loader-runner": { @@ -32021,13 +33067,31 @@ } }, "magic-string": { - "version": "0.30.1", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.1.tgz", - "integrity": "sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==", + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", "requires": { "@jridgewell/sourcemap-codec": "^1.4.15" } }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "devOptional": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "devOptional": true + } + } + }, "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -32210,11 +33274,12 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "mini-css-extract-plugin": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", - "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.1.tgz", + "integrity": "sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA==", "requires": { - "schema-utils": "^4.0.0" + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" }, "dependencies": { "ajv-keywords": { @@ -32462,7 +33527,8 @@ "mrmime": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==" + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true }, "ms": { "version": "2.1.2", @@ -32479,9 +33545,9 @@ } }, "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==" }, "nan": { "version": "2.17.0", @@ -32489,9 +33555,9 @@ "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" }, "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" }, "nanomatch": { "version": "1.2.13", @@ -32549,12 +33615,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "neatequal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/neatequal/-/neatequal-1.0.0.tgz", @@ -32564,25 +33624,15 @@ } }, "needle": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", - "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", "optional": true, "requires": { - "debug": "^3.2.6", "iconv-lite": "^0.6.3", "sax": "^1.2.4" }, "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, "iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -32627,9 +33677,9 @@ } }, "ng2-dragula": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ng2-dragula/-/ng2-dragula-3.2.0.tgz", - "integrity": "sha512-+By83ZGcumnKdAk5fEv8w92S85z3VpParJt/PDDuAOpkErdIq/DjUy4j5/5SymJ30SWADbd+Onie0UKgyxiiOA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ng2-dragula/-/ng2-dragula-5.1.0.tgz", + "integrity": "sha512-5P185NWZXIAA/lmZ8Bb6alMxfxYcMRu4Mw+JGJVj4ACplsUUq77Odfhpwk1a5R1pyI+3CC4sOwYrJg+nTi0e6Q==", "requires": { "tslib": "^2.3.0" } @@ -32656,15 +33706,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "devOptional": true - }, - "node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "requires": { - "whatwg-url": "^5.0.0" - } + "optional": true }, "node-forge": { "version": "1.3.1", @@ -32693,7 +33735,7 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "devOptional": true + "optional": true }, "node-int64": { "version": "0.4.0", @@ -32701,6 +33743,12 @@ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true }, + "node-machine-id": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", + "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", + "dev": true + }, "node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", @@ -32715,11 +33763,11 @@ } }, "normalize-package-data": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", + "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", "requires": { - "hosted-git-info": "^6.0.0", + "hosted-git-info": "^7.0.0", "is-core-module": "^2.8.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" @@ -32744,9 +33792,9 @@ } }, "npm-install-checks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", - "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", "requires": { "semver": "^7.1.1" } @@ -32757,47 +33805,138 @@ "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==" }, "npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", + "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", "requires": { - "hosted-git-info": "^6.0.0", + "hosted-git-info": "^7.0.0", "proc-log": "^3.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^5.0.0" } }, "npm-packlist": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", - "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", + "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", "requires": { - "ignore-walk": "^6.0.0" + "ignore-walk": "^6.0.4" } }, "npm-pick-manifest": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", - "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz", + "integrity": "sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg==", "requires": { "npm-install-checks": "^6.0.0", "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", + "npm-package-arg": "^11.0.0", "semver": "^7.3.5" } }, "npm-registry-fetch": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", - "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-16.2.1.tgz", + "integrity": "sha512-8l+7jxhim55S85fjiDGJ1rZXBWGtRLi1OSb4Z3BPLObPuIaeKRlPRiYMSHU4/81ck3t71Z+UwDDl47gcpmfQQA==", "requires": { - "make-fetch-happen": "^11.0.0", - "minipass": "^5.0.0", + "@npmcli/redact": "^1.1.0", + "make-fetch-happen": "^13.0.0", + "minipass": "^7.0.2", "minipass-fetch": "^3.0.0", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", - "npm-package-arg": "^10.0.0", - "proc-log": "^3.0.0" + "npm-package-arg": "^11.0.0", + "proc-log": "^4.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "cacache": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", + "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", + "requires": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + } + }, + "glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + } + }, + "lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==" + }, + "make-fetch-happen": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", + "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", + "requires": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + } + }, + "minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + }, + "minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "requires": { + "minipass": "^7.0.3" + } + }, + "proc-log": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.1.0.tgz", + "integrity": "sha512-dmQ2iPw2nJMi9/4dpaG1wd0m1GE+K5kW7RGbjy5hoEEGnhPIzsm+klBO5RGGdcoYbWsNtU2KSNAdEldts+icLg==" + } } }, "npm-run-path": { @@ -32827,59 +33966,54 @@ "boolbase": "^1.0.0" } }, - "nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" - }, "nx": { - "version": "16.5.1", - "resolved": "https://registry.npmjs.org/nx/-/nx-16.5.1.tgz", - "integrity": "sha512-I3hJRE4hG7JWAtncWwDEO3GVeGPpN0TtM8xH5ArZXyDuVeTth/i3TtJzdDzqXO1HHtIoAQN0xeq4n9cLuMil5g==", - "dev": true, - "requires": { - "@nrwl/tao": "16.5.1", - "@nx/nx-darwin-arm64": "16.5.1", - "@nx/nx-darwin-x64": "16.5.1", - "@nx/nx-freebsd-x64": "16.5.1", - "@nx/nx-linux-arm-gnueabihf": "16.5.1", - "@nx/nx-linux-arm64-gnu": "16.5.1", - "@nx/nx-linux-arm64-musl": "16.5.1", - "@nx/nx-linux-x64-gnu": "16.5.1", - "@nx/nx-linux-x64-musl": "16.5.1", - "@nx/nx-win32-arm64-msvc": "16.5.1", - "@nx/nx-win32-x64-msvc": "16.5.1", - "@parcel/watcher": "2.0.4", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/nx/-/nx-18.2.4.tgz", + "integrity": "sha512-GxqJcDOhfLa9jsPmip0jG73CZKA96wCryss2DhixCiCU66I3GLYF4+585ObO8Tx7Z1GqhT92RaNGjCxjMIwaPg==", + "dev": true, + "requires": { + "@nrwl/tao": "18.2.4", + "@nx/nx-darwin-arm64": "18.2.4", + "@nx/nx-darwin-x64": "18.2.4", + "@nx/nx-freebsd-x64": "18.2.4", + "@nx/nx-linux-arm-gnueabihf": "18.2.4", + "@nx/nx-linux-arm64-gnu": "18.2.4", + "@nx/nx-linux-arm64-musl": "18.2.4", + "@nx/nx-linux-x64-gnu": "18.2.4", + "@nx/nx-linux-x64-musl": "18.2.4", + "@nx/nx-win32-arm64-msvc": "18.2.4", + "@nx/nx-win32-x64-msvc": "18.2.4", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "3.0.0-rc.46", "@zkochan/js-yaml": "0.0.6", - "axios": "^1.0.0", + "axios": "^1.6.0", "chalk": "^4.1.0", "cli-cursor": "3.1.0", "cli-spinners": "2.6.1", - "cliui": "^7.0.2", - "dotenv": "~10.0.0", + "cliui": "^8.0.1", + "dotenv": "~16.3.1", + "dotenv-expand": "~10.0.0", "enquirer": "~2.3.6", - "fast-glob": "3.2.7", "figures": "3.2.0", "flat": "^5.0.2", "fs-extra": "^11.1.0", - "glob": "7.1.4", "ignore": "^5.0.4", + "jest-diff": "^29.4.1", "js-yaml": "4.1.0", "jsonc-parser": "3.2.0", "lines-and-columns": "~2.0.3", - "minimatch": "3.0.5", + "minimatch": "9.0.3", + "node-machine-id": "1.1.12", "npm-run-path": "^4.0.1", "open": "^8.4.0", - "semver": "7.5.3", + "ora": "5.3.0", + "semver": "^7.5.3", "string-width": "^4.2.3", "strong-log-transformer": "^2.1.0", "tar-stream": "~2.2.0", "tmp": "~0.2.1", "tsconfig-paths": "^4.1.2", "tslib": "^2.3.0", - "v8-compile-cache": "2.3.0", "yargs": "^17.6.2", "yargs-parser": "21.1.1" }, @@ -32899,6 +34033,15 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -32909,37 +34052,15 @@ "supports-color": "^7.1.0" } }, - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" } }, "has-flag": { @@ -32957,13 +34078,35 @@ "argparse": "^2.0.1" } }, + "jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, "minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" + } + }, + "ora": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", + "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" } }, "supports-color": { @@ -33035,27 +34178,12 @@ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==" }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, - "object-path": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.8.tgz", - "integrity": "sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==" - }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -33329,28 +34457,95 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "pacote": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", - "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.6.tgz", + "integrity": "sha512-cJKrW21VRE8vVTRskJo78c/RCvwJCn1f4qgfxL4w77SOWrTCRcmfkYHlHtS0gqpgjv3zhXflRtgsrUCX5xwNnQ==", "requires": { - "@npmcli/git": "^4.0.0", + "@npmcli/git": "^5.0.0", "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/run-script": "^6.0.0", - "cacache": "^17.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "@npmcli/run-script": "^7.0.0", + "cacache": "^18.0.0", "fs-minipass": "^3.0.0", - "minipass": "^5.0.0", - "npm-package-arg": "^10.0.0", - "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^8.0.0", - "npm-registry-fetch": "^14.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^11.0.0", + "npm-packlist": "^8.0.0", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^16.0.0", "proc-log": "^3.0.0", "promise-retry": "^2.0.1", - "read-package-json": "^6.0.0", + "read-package-json": "^7.0.0", "read-package-json-fast": "^3.0.0", - "sigstore": "^1.3.0", + "sigstore": "^2.2.0", "ssri": "^10.0.0", "tar": "^6.1.11" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "cacache": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", + "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", + "requires": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + } + }, + "glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + } + }, + "lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==" + }, + "minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + }, + "minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "requires": { + "minipass": "^7.0.3" + } + } } }, "pad-left": { @@ -33385,6 +34580,11 @@ "lines-and-columns": "^1.1.6" }, "dependencies": { + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -33455,18 +34655,18 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", "requires": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "dependencies": { "lru-cache": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", - "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==" + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==" } } }, @@ -33497,16 +34697,66 @@ "devOptional": true }, "piscina": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.0.0.tgz", - "integrity": "sha512-641nAmJS4k4iqpNUqfggqUBUMmlw0ZoM5VZKdQkV2e970Inn3Tk9kroCc1wpsYLD07vCwpys5iY0d3xI/9WkTg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.4.0.tgz", + "integrity": "sha512-+AQduEJefrOApE4bV7KRmp3N2JnnyErlVqq4P/jmko4FPz9Z877BCccl/iB3FdrWSUkvbGV9Kan/KllJgat3Vg==", "requires": { - "eventemitter-asyncresource": "^1.0.0", - "hdr-histogram-js": "^2.0.1", - "hdr-histogram-percentiles-obj": "^3.0.0", "nice-napi": "^1.0.2" } }, + "pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "requires": { + "find-up": "^6.3.0" + }, + "dependencies": { + "find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "requires": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + } + }, + "locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "requires": { + "p-locate": "^6.0.0" + } + }, + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "requires": { + "yocto-queue": "^1.0.0" + } + }, + "p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "requires": { + "p-limit": "^4.0.0" + } + }, + "path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==" + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==" + } + } + }, "portfinder": { "version": "1.0.32", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", @@ -33558,24 +34808,29 @@ } }, "postcss-loader": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.3.tgz", - "integrity": "sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", + "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", "requires": { - "cosmiconfig": "^8.2.0", - "jiti": "^1.18.2", - "semver": "^7.3.8" + "cosmiconfig": "^9.0.0", + "jiti": "^1.20.0", + "semver": "^7.5.4" } }, + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==" + }, "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==" }, "postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", "requires": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", @@ -33583,9 +34838,9 @@ } }, "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", "requires": { "postcss-selector-parser": "^6.0.4" } @@ -33599,9 +34854,9 @@ } }, "postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", "requires": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -33623,10 +34878,24 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==" + "pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } }, "proc-log": { "version": "3.0.0", @@ -33692,11 +34961,6 @@ "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "optional": true }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -33736,11 +35000,6 @@ "side-channel": "^1.0.4" } }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -33778,32 +35037,38 @@ } }, "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dev": true, "requires": { "loose-envify": "^1.1.0" } }, "react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "dev": true, "requires": { "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" + "scheduler": "^0.23.2" } }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "read-package-json": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", - "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-7.0.0.tgz", + "integrity": "sha512-uL4Z10OKV4p6vbdvIXB+OzhInYtIozl/VxUBPgNkBuUi2DeRonnuspmaVAMcrkmfjKGNmRndyQAbE7/AmzGwFg==", "requires": { "glob": "^10.2.2", "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", + "normalize-package-data": "^6.0.0", "npm-normalize-package-bin": "^3.0.0" }, "dependencies": { @@ -33816,29 +35081,29 @@ } }, "glob": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", - "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", "requires": { "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" } }, - "json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==" - }, "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "requires": { "brace-expansion": "^2.0.1" } + }, + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" } } }, @@ -33849,13 +35114,6 @@ "requires": { "json-parse-even-better-errors": "^3.0.0", "npm-normalize-package-bin": "^3.0.0" - }, - "dependencies": { - "json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==" - } } }, "readable-stream": { @@ -33906,17 +35164,17 @@ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", "requires": { "regenerate": "^1.4.2" } }, "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "regenerator-transform": { "version": "0.15.2", @@ -33974,12 +35232,6 @@ "set-function-name": "^2.0.1" } }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, "regexpu-core": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", @@ -34071,11 +35323,11 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "requires": { - "is-core-module": "^2.11.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -34160,10 +35412,27 @@ } }, "rollup": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", - "requires": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.14.3.tgz", + "integrity": "sha512-ag5tTQKYsj1bhrFC9+OEWqb5O6VYgtQDO9hPDBMmIbePwhfSr+ExlcU741t8Dhw5DkPCQf6noz0jb36D6W9/hw==", + "requires": { + "@rollup/rollup-android-arm-eabi": "4.14.3", + "@rollup/rollup-android-arm64": "4.14.3", + "@rollup/rollup-darwin-arm64": "4.14.3", + "@rollup/rollup-darwin-x64": "4.14.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.14.3", + "@rollup/rollup-linux-arm-musleabihf": "4.14.3", + "@rollup/rollup-linux-arm64-gnu": "4.14.3", + "@rollup/rollup-linux-arm64-musl": "4.14.3", + "@rollup/rollup-linux-powerpc64le-gnu": "4.14.3", + "@rollup/rollup-linux-riscv64-gnu": "4.14.3", + "@rollup/rollup-linux-s390x-gnu": "4.14.3", + "@rollup/rollup-linux-x64-gnu": "4.14.3", + "@rollup/rollup-linux-x64-musl": "4.14.3", + "@rollup/rollup-win32-arm64-msvc": "4.14.3", + "@rollup/rollup-win32-ia32-msvc": "4.14.3", + "@rollup/rollup-win32-x64-msvc": "4.14.3", + "@types/estree": "1.0.5", "fsevents": "~2.3.2" } }, @@ -34174,9 +35443,9 @@ "dev": true }, "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==" }, "run-parallel": { "version": "1.2.0", @@ -34287,10 +35556,20 @@ } } }, + "sass": { + "version": "1.71.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", + "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, "sass-loader": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.2.tgz", - "integrity": "sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.1.1.tgz", + "integrity": "sha512-QX8AasDg75monlybel38BZ49JP5Z+uSKfKwF2rO7S74BywaRmGQMUBw9dtkS+ekyM/QnP+NOrRYq8ABMZ9G8jw==", "requires": { "neo-async": "^2.6.2" } @@ -34300,18 +35579,10 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "requires": { - "xmlchars": "^2.2.0" - } - }, "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dev": true, "requires": { "loose-envify": "^1.1.0" @@ -34378,9 +35649,9 @@ } }, "semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "requires": { "lru-cache": "^6.0.0" }, @@ -34623,14 +35894,16 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "sigstore": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.8.0.tgz", - "integrity": "sha512-ogU8qtQ3VFBawRJ8wjsBEX/vIFeHuGs1fm4jZtjWQwjo8pfAt7T/rh+udlAN4+QUe0IzA8qRSc/YZ7dHP6kh+w==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.0.tgz", + "integrity": "sha512-q+o8L2ebiWD1AxD17eglf1pFrl9jtW7FHa0ygqY6EKvibK8JHyq9Z26v9MZXeDiw+RbfOJ9j2v70M10Hd6E06A==", "requires": { - "@sigstore/bundle": "^1.0.0", - "@sigstore/protobuf-specs": "^0.2.0", - "@sigstore/tuf": "^1.0.3", - "make-fetch-happen": "^11.0.1" + "@sigstore/bundle": "^2.3.1", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.1", + "@sigstore/sign": "^2.3.0", + "@sigstore/tuf": "^2.3.1", + "@sigstore/verify": "^1.2.0" } }, "sirv": { @@ -34933,16 +36206,15 @@ } }, "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==" }, "source-map-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz", - "integrity": "sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", + "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", "requires": { - "abab": "^2.0.6", "iconv-lite": "^0.6.3", "source-map-js": "^1.0.2" }, @@ -35002,9 +36274,9 @@ } }, "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==" }, "spdx-expression-parse": { "version": "3.0.1", @@ -35016,9 +36288,9 @@ } }, "spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==" + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==" }, "spdy": { "version": "4.0.2", @@ -35129,15 +36401,6 @@ "resolved": "https://registry.npmjs.org/stimulus-use/-/stimulus-use-0.52.2.tgz", "integrity": "sha512-413+tIw9n6Jnb0OFiQE1i3aP01i0hhGgAnPp1P6cNuBbhhqG2IOp8t1O/4s5Tw2lTvSYrFeLNdaY8sYlDaULeg==" }, - "stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dev": true, - "requires": { - "internal-slot": "^1.0.4" - } - }, "streamroller": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", @@ -35354,11 +36617,6 @@ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==" }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" - }, "table-layout": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", @@ -35452,33 +36710,26 @@ } }, "terser": { - "version": "5.19.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", - "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", + "version": "5.29.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.1.tgz", + "integrity": "sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ==", "requires": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - } } }, "terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "requires": { - "@jridgewell/trace-mapping": "^0.3.17", + "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" + "terser": "^5.26.0" }, "dependencies": { "ajv": { @@ -35535,7 +36786,8 @@ "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true }, "texture-compressor": { "version": "1.0.2", @@ -35664,7 +36916,8 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true }, "through2": { "version": "2.0.5", @@ -35740,13 +36993,10 @@ "dev": true }, "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true }, "tmpl": { "version": "1.0.5", @@ -35860,11 +37110,6 @@ "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, "tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -35880,6 +37125,12 @@ "resolved": "https://registry.npmjs.org/ts-action-operators/-/ts-action-operators-9.1.2.tgz", "integrity": "sha512-DZ+sJvBdOluThwCBcCdDnz0NiVeQxEwveL+cmkJGLO1ps+x/D0xwSefmOIa1S7p2nXFHH52ZPr/8VEvxZHaNgg==" }, + "ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true + }, "ts-node": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.3.0.tgz", @@ -35908,33 +37159,101 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==" }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, + "tuf-js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.0.tgz", + "integrity": "sha512-ZSDngmP1z6zw+FIkIBjvOp/II/mIub/O7Pp12j1WNsiCpg5R5wAc//i555bBQsE44O94btLt0xM/Zr2LQjwdCg==", "requires": { - "tslib": "^1.8.1" + "@tufjs/models": "2.0.0", + "debug": "^4.3.4", + "make-fetch-happen": "^13.0.0" }, "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "cacache": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", + "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", + "requires": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + } + }, + "glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + } + }, + "lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==" + }, + "make-fetch-happen": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", + "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", + "requires": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + } + }, + "minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + }, + "minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "requires": { + "minipass": "^7.0.3" + } } } }, - "tuf-js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", - "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", - "requires": { - "@tufjs/models": "1.0.4", - "debug": "^4.3.4", - "make-fetch-happen": "^11.1.1" - } - }, "type": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", @@ -36061,9 +37380,9 @@ } }, "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true }, "typical": { @@ -36100,10 +37419,10 @@ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" }, - "unfetch": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", - "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==" + "undici": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.11.1.tgz", + "integrity": "sha512-KyhzaLJnV1qa3BSHdj4AZ2ndqI0QWPxYzaIOio0WzcEJB9gvuysprJSLtpvc2D9mhR9jPDUk7xlJlZbH2KR5iw==" }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", @@ -36166,9 +37485,9 @@ } }, "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true }, "unpipe": { @@ -36255,15 +37574,6 @@ "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", "integrity": "sha512-c2H1fIgpUdwFRIru9HFno5DT73Ok8hg5oOb5AT3ayIgvCRfxgs2jyt5Slw8kEB7j3QUr6yJmMPDT/odjk7jXow==" }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -36293,12 +37603,6 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", @@ -36358,14 +37662,194 @@ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, "vite": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", - "integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.7.tgz", + "integrity": "sha512-sgnEEFTZYMui/sTlH1/XEnVNHMujOahPLGMxn1+5sIT45Xjng1Ec1K78jRP15dSmVgg5WBin9yO81j3o9OxofA==", "requires": { - "esbuild": "^0.18.10", - "fsevents": "~2.3.2", - "postcss": "^8.4.27", - "rollup": "^3.27.1" + "esbuild": "^0.19.3", + "fsevents": "~2.3.3", + "postcss": "^8.4.35", + "rollup": "^4.2.0" + }, + "dependencies": { + "@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "optional": true + }, + "esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "requires": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "requires": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + } + } } }, "void-elements": { @@ -36374,22 +37858,6 @@ "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", "dev": true }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "requires": { - "xml-name-validator": "^3.0.0" - } - }, "walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -36430,24 +37898,19 @@ "defaults": "^1.0.3" } }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, "webpack": { - "version": "5.88.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", - "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", + "version": "5.90.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", + "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", "requires": { "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", + "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.11.5", "@webassemblyjs/wasm-edit": "^1.11.5", "@webassemblyjs/wasm-parser": "^1.11.5", "acorn": "^8.7.1", "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", + "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.15.0", "es-module-lexer": "^1.2.1", @@ -36461,7 +37924,7 @@ "neo-async": "^2.6.2", "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", + "terser-webpack-plugin": "^5.3.10", "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, @@ -36491,6 +37954,11 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -36509,9 +37977,9 @@ } }, "webpack-bundle-analyzer": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.1.tgz", - "integrity": "sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", + "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", "dev": true, "requires": { "@discoveryjs/json-ext": "0.5.7", @@ -36522,19 +37990,12 @@ "escape-string-regexp": "^4.0.0", "gzip-size": "^6.0.0", "html-escaper": "^2.0.2", - "is-plain-object": "^5.0.0", "opener": "^1.5.2", "picocolors": "^1.0.0", "sirv": "^2.0.3", "ws": "^7.3.1" }, "dependencies": { - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, "commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", @@ -36547,12 +38008,6 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - }, "ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", @@ -36678,11 +38133,12 @@ } }, "webpack-merge": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "requires": { "clone-deep": "^4.0.1", + "flat": "^5.0.2", "wildcard": "^2.0.0" } }, @@ -36714,28 +38170,6 @@ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -36892,16 +38326,6 @@ "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", "dev": true }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -36967,9 +38391,9 @@ "dev": true }, "zone.js": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz", - "integrity": "sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA==", + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.5.tgz", + "integrity": "sha512-9XYWZzY6PhHOSdkYryNcMm7L8EK7a4q+GbTvxbIA2a9lMdRUpGuyaYvLDcg8D6bdn+JomSsbPcilVKg6SmUx6w==", "requires": { "tslib": "^2.3.0" } diff --git a/frontend/package.json b/frontend/package.json index e0a5906fc5e0..499e129017e5 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -5,13 +5,13 @@ "version": "0.1.0", "private": true, "devDependencies": { - "@angular-devkit/build-angular": "^16.2.0", - "@angular-eslint/builder": "^16.1.0", - "@angular-eslint/eslint-plugin": "^16.1.0", - "@angular-eslint/eslint-plugin-template": "^16.1.0", - "@angular-eslint/schematics": "16.1.0", - "@angular-eslint/template-parser": "^16.1.0", - "@angular/language-service": "16.2.0", + "@angular-devkit/build-angular": "^17.3.4", + "@angular-eslint/builder": "^17.3.0", + "@angular-eslint/eslint-plugin": "^17.3.0", + "@angular-eslint/eslint-plugin-template": "^17.3.0", + "@angular-eslint/schematics": "17.3.0", + "@angular-eslint/template-parser": "^17.3.0", + "@angular/language-service": "17.3.4", "@html-eslint/eslint-plugin": "^0.15.0", "@html-eslint/parser": "^0.15.0", "@jsdevtools/coverage-istanbul-loader": "3.0.5", @@ -29,12 +29,12 @@ "@types/urijs": "^1.19.6", "@types/uuid": "^8.3.4", "@types/webpack-env": "^1.16.0", - "@typescript-eslint/eslint-plugin": "5.48.0", - "@typescript-eslint/parser": "5.48.0", - "browserslist": "^4.8.7", - "eslint": "^8.34.0", + "@typescript-eslint/eslint-plugin": "^7.7.1", + "@typescript-eslint/parser": "^7.7.1", + "browserslist": "^4.23.0", + "eslint": "^8.57.0", "eslint-config-airbnb-base": "^15.0.0", - "eslint-config-airbnb-typescript": "^17.0.0", + "eslint-config-airbnb-typescript": "^18.0.0", "eslint-plugin-change-detection-strategy": "^0.1.1", "eslint-plugin-import": "^2.26.0", "eslint-plugin-jasmine": "^4.1.3", @@ -56,58 +56,59 @@ "source-map-explorer": "^2.5.2", "theo": "^8.1.5", "ts-node": "~8.3.0", - "typescript": "4.9", + "typescript": "5.4.5", "webpack-bundle-analyzer": "^4.4.2" }, "dependencies": { - "@angular-builders/custom-webpack": "^16.0.0", - "@angular/animations": "^16.2.0", - "@angular/cdk": "^16.2.0", - "@angular/cli": "^16.2.0", - "@angular/common": "^16.2.0", - "@angular/compiler": "^16.2.0", - "@angular/compiler-cli": "^16.2.0", - "@angular/core": "^16.2.0", - "@angular/elements": "^16.2.0", - "@angular/forms": "^16.2.0", - "@angular/platform-browser": "^16.2.0", - "@angular/platform-browser-dynamic": "^16.2.0", - "@angular/router": "^16.2.0", - "@appsignal/javascript": "^1.3.26", - "@appsignal/plugin-breadcrumbs-console": "^1.1.27", - "@appsignal/plugin-breadcrumbs-network": "^1.1.21", + "@angular-builders/custom-webpack": "^17.0.2", + "@angular/animations": "^17.3.4", + "@angular/cdk": "^17.3.4", + "@angular/cli": "^17.3.4", + "@angular/common": "^17.3.4", + "@angular/compiler": "^17.3.4", + "@angular/compiler-cli": "^17.3.4", + "@angular/core": "^17.3.4", + "@angular/elements": "^17.3.4", + "@angular/forms": "^17.3.4", + "@angular/platform-browser": "^17.3.4", + "@angular/platform-browser-dynamic": "^17.3.4", + "@angular/router": "^17.3.4", + "@appsignal/javascript": "^1.3.28", + "@appsignal/plugin-breadcrumbs-console": "^1.1.29", + "@appsignal/plugin-breadcrumbs-network": "^1.1.22", "@datorama/akita": "^8.0.1", "@floating-ui/dom": "^1.2.1", - "@fullcalendar/angular": "^6.1.8", + "@fullcalendar/angular": "^6.1.10", "@fullcalendar/common": "^5.11.5", - "@fullcalendar/core": "^6.1.8", - "@fullcalendar/daygrid": "^6.1.8", - "@fullcalendar/interaction": "^6.1.8", - "@fullcalendar/list": "^6.1.8", - "@fullcalendar/resource": "^6.1.8", + "@fullcalendar/core": "^6.1.11", + "@fullcalendar/daygrid": "^6.1.11", + "@fullcalendar/interaction": "^6.1.11", + "@fullcalendar/list": "^6.1.11", + "@fullcalendar/resource": "^6.1.11", "@fullcalendar/resource-common": "^5.11.5", - "@fullcalendar/resource-timeline": "^6.1.8", - "@fullcalendar/timegrid": "^6.1.8", + "@fullcalendar/resource-timeline": "^6.1.11", + "@fullcalendar/timegrid": "^6.1.11", "@github/webauthn-json": "^2.1.1", - "@hotwired/stimulus": "^3.2.1", - "@hotwired/turbo": "^7.3.0", - "@hotwired/turbo-rails": "^7.3.0", + "@hotwired/stimulus": "^3.2.2", + "@hotwired/turbo": "^8.0.4", + "@hotwired/turbo-rails": "^8.0.4", "@kolkov/ngx-gallery": "^2.0.1", - "@ng-select/ng-option-highlight": "0.0.7", - "@ng-select/ng-select": "^11.0.0", + "@ng-select/ng-option-highlight": "12.0.6", + "@ng-select/ng-select": "^12.0.7", "@ngneat/content-loader": "^7.0.0", "@ngx-formly/core": "^6.1.4", - "@openproject/octicons-angular": "^19.10.0", - "@openproject/primer-view-components": "^0.28.1", + "@openproject/octicons-angular": "^19.11.0", + "@openproject/primer-view-components": "^0.29.1", "@openproject/reactivestates": "^3.0.1", - "@primer/css": "^21.1.1", - "@uirouter/angular": "^12.0.0", - "@uirouter/core": "^6.0.8", + "@primer/css": "^21.2.2", + "@types/hotwired__turbo": "^8.0.1", + "@uirouter/angular": "^13.0.0", + "@uirouter/core": "^6.1.0", "@uirouter/rx": "^1.0.0", "@vusion/webfonts-generator": "^0.8.0", "@w11k/ngx-componentdestroyed": "^5.0.2", "@xeokit/xeokit-bim-viewer": "2.5.1-beta-28", - "autoprefixer": "^10.4.16", + "autoprefixer": "^10.4.19", "byte-base64": "^1.1.0", "chart.js": "4.3.0", "chartjs-plugin-datalabels": "^2.2.0", @@ -117,10 +118,9 @@ "crossvent": "^1.5.4", "dom-autoscroller": "^2.2.8", "dom-plane": "^1.0.2", - "dragula": "^3.5.2", + "dragula": "^3.7.3", "expose-loader": "^0.7.5", "flatpickr": "^4.6.13", - "fuse.js": "^3.4.5", "glob": "^7.1.4", "hammerjs": "^2.0.8", "i18n-js": "^4.3.0", @@ -134,12 +134,12 @@ "mark.js": "^8.11.0", "mdx-embed": "^1.1.2", "mime": "^2.5.2", - "moment": "^2.29.4", - "moment-timezone": "^0.5.43", + "moment": "^2.30.1", + "moment-timezone": "^0.5.45", "mousetrap": "~1.6.3", "ng-dynamic-component": "^10.7.0", "ng2-charts": "^4.1.1", - "ng2-dragula": "^3.2.0", + "ng2-dragula": "^5.1.0", "ngx-cookie-service": "^14.0.0", "observable-array": "0.0.4", "pako": "^2.0.3", @@ -147,14 +147,14 @@ "reflect-metadata": "^0.1.13", "rxjs": "^7.8.0", "screenfull": "^4.2.1", - "stimulus-use": "^0.52.0", + "stimulus-use": "^0.52.2", "tablesorter": "^2.31.3", "ts-action": "^11.0.0", "ts-action-operators": "^9.1.2", "typedjson": "^1.5.1", "urijs": "^1.19.11", "uuid": "^8.3.2", - "zone.js": "~0.11.4" + "zone.js": "~0.14.4" }, "optionalDependencies": { "fsevents": "*" @@ -177,6 +177,6 @@ "generate-typings": "tsc -d -p src/tsconfig.app.json" }, "overrides": { - "@primer/view-components": "npm:@openproject/primer-view-components@^0.28.1" + "@primer/view-components": "npm:@openproject/primer-view-components@^0.29.1" } } diff --git a/frontend/src/app/core/apiv3/api-v3.service.ts b/frontend/src/app/core/apiv3/api-v3.service.ts index a7af71e789cd..c195ec36a0ad 100644 --- a/frontend/src/app/core/apiv3/api-v3.service.ts +++ b/frontend/src/app/core/apiv3/api-v3.service.ts @@ -26,14 +26,8 @@ // See COPYRIGHT and LICENSE files for more details. //++ -import { - Injectable, - Injector, -} from '@angular/core'; -import { - ApiV3GettableResource, - ApiV3ResourceCollection, -} from 'core-app/core/apiv3/paths/apiv3-resource'; +import { Injectable, Injector } from '@angular/core'; +import { ApiV3GettableResource, ApiV3ResourceCollection } from 'core-app/core/apiv3/paths/apiv3-resource'; import { Constructor } from '@angular/cdk/table'; import { PathHelperService } from 'core-app/core/path-helper/path-helper.service'; import { ApiV3GridsPaths } from 'core-app/core/apiv3/endpoints/grids/apiv3-grids-paths'; @@ -125,6 +119,9 @@ export class ApiV3Service { // /api/v3/capabilities public readonly capabilities = this.apiV3CustomEndpoint(ApiV3CapabilitiesPaths); + // /api/v3/meetings + public readonly meetings = this.apiV3CollectionEndpoint('meetings'); + // /api/v3/memberships public readonly memberships = this.apiV3CustomEndpoint(ApiV3MembershipsPaths); diff --git a/frontend/src/app/core/forms/forms.service.ts b/frontend/src/app/core/forms/forms.service.ts index 6a40a6d0f3ef..2f40fb032d6a 100644 --- a/frontend/src/app/core/forms/forms.service.ts +++ b/frontend/src/app/core/forms/forms.service.ts @@ -76,6 +76,7 @@ export class FormsService { const formattedResourcesModel = Object .keys(resourcesModel) .reduce((result, resourceKey) => { + // @ts-ignore const resourceModel = resourcesModel[resourceKey]; // Form.payload resources have a HalLinkSource interface while // API resource options have a IAllowedValue interface diff --git a/frontend/src/app/core/global_search/input/global-search-input-mobile.component.sass b/frontend/src/app/core/global_search/input/global-search-input-mobile.component.sass index cd405c37c527..70825c6fbc52 100644 --- a/frontend/src/app/core/global_search/input/global-search-input-mobile.component.sass +++ b/frontend/src/app/core/global_search/input/global-search-input-mobile.component.sass @@ -1,4 +1,4 @@ -@import "src/assets/sass/helpers" +@import "helpers" $search-input-height-mobile: 36px diff --git a/frontend/src/app/core/global_search/input/global-search-input.component.sass b/frontend/src/app/core/global_search/input/global-search-input.component.sass index 85c46526661e..ea50ffb098ab 100644 --- a/frontend/src/app/core/global_search/input/global-search-input.component.sass +++ b/frontend/src/app/core/global_search/input/global-search-input.component.sass @@ -118,7 +118,7 @@ $search-input-height: 30px height: auto .ng-option - border-bottom: 1px solid var(--color-border-muted) + border-bottom: 1px solid var(--borderColor-muted) white-space: normal padding: 5px 10px // We do not want the default highlighting of ng-select to take place as diff --git a/frontend/src/app/core/global_search/input/global-search.component.sass b/frontend/src/app/core/global_search/input/global-search.component.sass index 1f792759e1ed..56d53a00cc59 100644 --- a/frontend/src/app/core/global_search/input/global-search.component.sass +++ b/frontend/src/app/core/global_search/input/global-search.component.sass @@ -1,4 +1,4 @@ -@import "src/assets/sass/helpers" +@import "helpers" .global-search flex-grow: 1 @@ -32,7 +32,7 @@ &--project-scope flex-grow: 0 flex-shrink: 1 - border: 1px solid var(--button--border-color) + border: 1px solid var(--button-default-borderColor-rest) font-size: 13px background: var(--button--background-color) border-radius: 2px @@ -59,7 +59,7 @@ grid-area: idlink place-self: right font-style: italic - color: var(--color-fg-muted) + color: var(--fgColor-muted) font-size: 13px white-space: nowrap diff --git a/frontend/src/app/core/path-helper/path-helper.service.ts b/frontend/src/app/core/path-helper/path-helper.service.ts index d3974bc03368..7b9c0b7a2927 100644 --- a/frontend/src/app/core/path-helper/path-helper.service.ts +++ b/frontend/src/app/core/path-helper/path-helper.service.ts @@ -100,6 +100,10 @@ export class PathHelperService { return `${this.staticBase}/topics/${messageIdentifier}`; } + public meetingPath(id:string):string { + return `${this.staticBase}/meetings/${id}`; + } + public myPagePath() { return `${this.staticBase}/my/page`; } diff --git a/frontend/src/app/core/routing/openproject.routes.ts b/frontend/src/app/core/routing/openproject.routes.ts index b72d4b749bbf..c52b5783ce45 100644 --- a/frontend/src/app/core/routing/openproject.routes.ts +++ b/frontend/src/app/core/routing/openproject.routes.ts @@ -242,6 +242,29 @@ export function initializeUiRouterListeners(injector:Injector) { (transition) => redirectToMobileAlternative(transition), ); + // Fire an event when navigating to a different module. This event then can be detected in + // the non-angular parts of the application. A usecase for this can be found in the + // overview-header.controllers.ts + // See https://community.openproject.org/wp/55024 for details. + $transitions.onBefore( + {}, + (transition:Transition) => { + const fromState = transition.from(); + const toState = transition.to(); + if ( + !!fromState.name + && !!toState.name + && fromState.name?.split('.')[0] !== toState.name?.split('.')[0] + ) { + window.dispatchEvent(new CustomEvent('angular:router:module-changed', { + detail: toState.name?.split('.')[0], + })); + } + + return true; + }, + ); + // Apply classes from bodyClasses in each state definition // This was defined as onEnter, onExit functions in each state before // but since AOT doesn't allow anonymous functions, we can't re-use them now. diff --git a/frontend/src/app/core/setup/init-vendors.ts b/frontend/src/app/core/setup/init-vendors.ts index 2d00ece30848..c2e3d491ddee 100644 --- a/frontend/src/app/core/setup/init-vendors.ts +++ b/frontend/src/app/core/setup/init-vendors.ts @@ -58,8 +58,6 @@ require('moment/locale/en-gb'); require('jquery.caret'); // Text highlight for autocompleter require('mark.js/dist/jquery.mark.min'); -// Micro Text fuzzy search library -require('fuse.js'); require('moment-timezone/builds/moment-timezone-with-data.min'); // eslint-disable-next-line import/extensions,import/no-extraneous-dependencies diff --git a/frontend/src/app/features/backlogs/backlogs-page/styles/dialogues.sass b/frontend/src/app/features/backlogs/backlogs-page/styles/dialogues.sass index e4dc3839499c..4a3c0226c446 100644 --- a/frontend/src/app/features/backlogs/backlogs-page/styles/dialogues.sass +++ b/frontend/src/app/features/backlogs/backlogs-page/styles/dialogues.sass @@ -6,4 +6,4 @@ .ui-dialog background: #FFFFFF - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) diff --git a/frontend/src/app/features/backlogs/backlogs-page/styles/master_backlog.sass b/frontend/src/app/features/backlogs/backlogs-page/styles/master_backlog.sass index 89e241d52778..12ec34012330 100644 --- a/frontend/src/app/features/backlogs/backlogs-page/styles/master_backlog.sass +++ b/frontend/src/app/features/backlogs/backlogs-page/styles/master_backlog.sass @@ -52,7 +52,7 @@ top: 1px width: 100px #backlogs_container .backlog - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) display: block margin: 0 0 10px 0 width: 100% @@ -74,7 +74,7 @@ position: relative width: 100% .backlog .header .backlog-menu - border-right: 1px solid var(--color-border-muted) + border-right: 1px solid var(--borderColor-muted) cursor: pointer height: 30px overflow: visible @@ -95,7 +95,7 @@ .items display: none background-color: #EEEEEE - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) position: absolute top: 30px right: -2px diff --git a/frontend/src/app/features/backlogs/backlogs-page/styles/taskboard.sass b/frontend/src/app/features/backlogs/backlogs-page/styles/taskboard.sass index 08d9968e79a1..07d221ca13cf 100644 --- a/frontend/src/app/features/backlogs/backlogs-page/styles/taskboard.sass +++ b/frontend/src/app/features/backlogs/backlogs-page/styles/taskboard.sass @@ -69,7 +69,7 @@ /* Must be the same as min-width */ #board_header background-color: #EBEBEB - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) margin-bottom: 0 margin-right: 10px td @@ -88,7 +88,7 @@ .board background-color: #FCFCFC - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) border-top: none margin-right: 10px /* IE7 table fix */ diff --git a/frontend/src/app/features/bim/bcf/bcf-wp-attribute-group/bcf-wp-attribute-group.component.sass b/frontend/src/app/features/bim/bcf/bcf-wp-attribute-group/bcf-wp-attribute-group.component.sass index aca5c34ecc70..42b3b3c0b8f6 100644 --- a/frontend/src/app/features/bim/bcf/bcf-wp-attribute-group/bcf-wp-attribute-group.component.sass +++ b/frontend/src/app/features/bim/bcf/bcf-wp-attribute-group/bcf-wp-attribute-group.component.sass @@ -31,7 +31,7 @@ ngx-gallery ::ng-deep // Disable red border on active thumbnails .ngx-gallery-active, .ngx-gallery-thumbnail - border: 1px solid var(--color-border-muted) !important + border: 1px solid var(--borderColor-muted) !important .ngx-gallery-preview-img background-color: white diff --git a/frontend/src/app/features/bim/ifc_models/bcf/list/bcf-list.component.sass b/frontend/src/app/features/bim/ifc_models/bcf/list/bcf-list.component.sass index 1ef1768c2d4f..edb6730591b9 100644 --- a/frontend/src/app/features/bim/ifc_models/bcf/list/bcf-list.component.sass +++ b/frontend/src/app/features/bim/ifc_models/bcf/list/bcf-list.component.sass @@ -1,4 +1,4 @@ -@import "src/assets/sass/helpers" +@import "helpers" .op-bcf-list &--result-overlay diff --git a/frontend/src/app/features/bim/ifc_models/ifc-viewer/ifc-viewer.component.html b/frontend/src/app/features/bim/ifc_models/ifc-viewer/ifc-viewer.component.html index 09897b88bf27..6d3afe120e6b 100644 --- a/frontend/src/app/features/bim/ifc_models/ifc-viewer/ifc-viewer.component.html +++ b/frontend/src/app/features/bim/ifc_models/ifc-viewer/ifc-viewer.component.html @@ -23,19 +23,19 @@
    -
diff --git a/frontend/src/app/shared/components/grids/grid/page/grid-page.component.ts b/frontend/src/app/shared/components/grids/grid/page/grid-page.component.ts index a56368d46d95..0267279a9176 100644 --- a/frontend/src/app/shared/components/grids/grid/page/grid-page.component.ts +++ b/frontend/src/app/shared/components/grids/grid/page/grid-page.component.ts @@ -1,6 +1,4 @@ -import { - ChangeDetectorRef, Directive, OnDestroy, OnInit, Renderer2, -} from '@angular/core'; +import { ChangeDetectorRef, Directive, OnDestroy, OnInit, Renderer2 } from '@angular/core'; import { I18nService } from 'core-app/core/i18n/i18n.service'; import { Title } from '@angular/platform-browser'; import { GridInitializationService } from 'core-app/shared/components/grids/grid/initialization.service'; @@ -18,6 +16,8 @@ export abstract class GridPageComponent implements OnInit, OnDestroy { html_title: this.i18n.t(`js.${this.i18nNamespace()}.label`), }; + public showToolbar = true; + constructor( readonly gridInitialization:GridInitializationService, // not used in the base class but will be used throughout the subclasses diff --git a/frontend/src/app/shared/components/grids/openproject-grids.module.ts b/frontend/src/app/shared/components/grids/openproject-grids.module.ts index 00bdf4f58ed4..3f0e08c07f27 100644 --- a/frontend/src/app/shared/components/grids/openproject-grids.module.ts +++ b/frontend/src/app/shared/components/grids/openproject-grids.module.ts @@ -36,7 +36,9 @@ import { FormsModule } from '@angular/forms'; import { DragDropModule } from '@angular/cdk/drag-drop'; import { OpenprojectWorkPackagesModule } from 'core-app/features/work-packages/openproject-work-packages.module'; import { WidgetWpCalendarComponent } from 'core-app/shared/components/grids/widgets/wp-calendar/wp-calendar.component'; -import { WidgetTimeEntriesCurrentUserComponent } from 'core-app/shared/components/grids/widgets/time-entries/current-user/time-entries-current-user.component'; +import { + WidgetTimeEntriesCurrentUserComponent, +} from 'core-app/shared/components/grids/widgets/time-entries/current-user/time-entries-current-user.component'; import { GridWidgetsService } from 'core-app/shared/components/grids/widgets/widgets.service'; import { GridComponent } from 'core-app/shared/components/grids/grid/grid.component'; import { AddGridWidgetModalComponent } from 'core-app/shared/components/grids/widgets/add/add.modal'; @@ -48,25 +50,47 @@ import { WidgetWpTableMenuComponent } from 'core-app/shared/components/grids/wid import { GridInitializationService } from 'core-app/shared/components/grids/grid/initialization.service'; import { WidgetWpGraphComponent } from 'core-app/shared/components/grids/widgets/wp-graph/wp-graph.component'; import { WidgetWpGraphMenuComponent } from 'core-app/shared/components/grids/widgets/wp-graph/wp-graph-menu.component'; -import { WidgetWpTableQuerySpaceComponent } from 'core-app/shared/components/grids/widgets/wp-table/wp-table-qs.component'; -import { OpenprojectWorkPackageGraphsModule } from 'core-app/shared/components/work-package-graphs/openproject-work-package-graphs.module'; +import { + WidgetWpTableQuerySpaceComponent, +} from 'core-app/shared/components/grids/widgets/wp-table/wp-table-qs.component'; +import { + OpenprojectWorkPackageGraphsModule, +} from 'core-app/shared/components/work-package-graphs/openproject-work-package-graphs.module'; import { I18nService } from 'core-app/core/i18n/i18n.service'; -import { WidgetProjectDescriptionComponent } from 'core-app/shared/components/grids/widgets/project-description/project-description.component'; +import { + WidgetProjectDescriptionComponent, +} from 'core-app/shared/components/grids/widgets/project-description/project-description.component'; import { WidgetHeaderComponent } from 'core-app/shared/components/grids/widgets/header/header.component'; import { WidgetWpOverviewComponent } from 'core-app/shared/components/grids/widgets/wp-overview/wp-overview.component'; import { WidgetCustomTextComponent } from 'core-app/shared/components/grids/widgets/custom-text/custom-text.component'; import { OpenprojectFieldsModule } from 'core-app/shared/components/fields/openproject-fields.module'; -import { WidgetProjectDetailsComponent } from 'core-app/shared/components/grids/widgets/project-details/project-details.component'; -import { WidgetProjectDetailsMenuComponent } from 'core-app/shared/components/grids/widgets/project-details/project-details-menu.component'; -import { WidgetTimeEntriesProjectComponent } from 'core-app/shared/components/grids/widgets/time-entries/project/time-entries-project.component'; +import { + WidgetProjectDetailsComponent, +} from 'core-app/shared/components/grids/widgets/project-details/project-details.component'; +import { + WidgetProjectDetailsMenuComponent, +} from 'core-app/shared/components/grids/widgets/project-details/project-details-menu.component'; +import { + WidgetTimeEntriesProjectComponent, +} from 'core-app/shared/components/grids/widgets/time-entries/project/time-entries-project.component'; import { WidgetSubprojectsComponent } from 'core-app/shared/components/grids/widgets/subprojects/subprojects.component'; import { OpenprojectAttachmentsModule } from 'core-app/shared/components/attachments/openproject-attachments.module'; import { WidgetMembersComponent } from 'core-app/shared/components/grids/widgets/members/members.component'; -import { WidgetProjectStatusComponent } from 'core-app/shared/components/grids/widgets/project-status/project-status.component'; +import { + WidgetProjectStatusComponent, +} from 'core-app/shared/components/grids/widgets/project-status/project-status.component'; import { OpenprojectTimeEntriesModule } from 'core-app/shared/components/time_entries/openproject-time-entries.module'; -import { WidgetTimeEntriesCurrentUserMenuComponent } from 'core-app/shared/components/grids/widgets/time-entries/current-user/time-entries-current-user-menu.component'; +import { + WidgetTimeEntriesCurrentUserMenuComponent, +} from 'core-app/shared/components/grids/widgets/time-entries/current-user/time-entries-current-user-menu.component'; import { ApiV3FilterBuilder } from 'core-app/shared/helpers/api-v3/api-v3-filter-builder'; -import { TimeEntriesCurrentUserConfigurationModalComponent } from './widgets/time-entries/current-user/configuration-modal/configuration.modal'; +import { + TimeEntriesCurrentUserConfigurationModalComponent, +} from './widgets/time-entries/current-user/configuration-modal/configuration.modal'; +import { + WidgetProjectFavoritesComponent, +} from "core-app/shared/components/grids/widgets/project-favorites/widget-project-favorites.component"; +import { IconModule } from 'core-app/shared/components/icon/icon.module'; @NgModule({ imports: [ @@ -86,7 +110,7 @@ import { TimeEntriesCurrentUserConfigurationModalComponent } from './widgets/tim // Support for inline editig fields OpenprojectFieldsModule, - + IconModule, ], providers: [ GridWidgetsService, @@ -109,6 +133,7 @@ import { TimeEntriesCurrentUserConfigurationModalComponent } from './widgets/tim WidgetProjectDetailsComponent, WidgetProjectStatusComponent, WidgetSubprojectsComponent, + WidgetProjectFavoritesComponent, WidgetTimeEntriesCurrentUserComponent, WidgetTimeEntriesProjectComponent, @@ -330,6 +355,14 @@ export function registerWidgets(injector:Injector) { name: i18n.t('js.grid.widgets.subprojects.title'), }, }, + { + identifier: 'project_favorites', + component: WidgetProjectFavoritesComponent, + title: i18n.t('js.grid.widgets.project_favorites.title'), + properties: { + name: i18n.t('js.grid.widgets.project_favorites.title'), + }, + }, ]; }); } diff --git a/frontend/src/app/shared/components/grids/widgets/add/add.modal.ts b/frontend/src/app/shared/components/grids/widgets/add/add.modal.ts index 8c50dfd013f9..f5ff2a9ac071 100644 --- a/frontend/src/app/shared/components/grids/widgets/add/add.modal.ts +++ b/frontend/src/app/shared/components/grids/widgets/add/add.modal.ts @@ -1,19 +1,25 @@ import { - ChangeDetectorRef, Component, ElementRef, Inject, + ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Inject, OnInit, } from '@angular/core'; import { OpModalComponent } from 'core-app/shared/components/modal/modal.component'; import { OpModalLocalsToken } from 'core-app/shared/components/modal/modal.service'; import { OpModalLocalsMap } from 'core-app/shared/components/modal/modal.types'; import { WidgetRegistration } from 'core-app/shared/components/grids/grid/grid.component'; +import { SchemaResource } from 'core-app/features/hal/resources/schema-resource'; +import { GridWidgetResource } from 'core-app/features/hal/resources/grid-widget-resource'; import { GridWidgetsService } from 'core-app/shared/components/grids/widgets/widgets.service'; import { I18nService } from 'core-app/core/i18n/i18n.service'; import { BannersService } from 'core-app/core/enterprise/banners.service'; +import { LoadingIndicatorService } from 'core-app/core/loading-indicator/loading-indicator.service'; import { enterpriseDocsUrl } from 'core-app/core/setup/globals/constants.const'; +import { BehaviorSubject } from 'rxjs'; +import { filter, take } from 'rxjs/operators'; @Component({ templateUrl: './add.modal.html', + changeDetection: ChangeDetectionStrategy.OnPush, }) -export class AddGridWidgetModalComponent extends OpModalComponent { +export class AddGridWidgetModalComponent extends OpModalComponent implements OnInit { text = { title: this.i18n.t('js.grid.add_widget'), close_popup: this.i18n.t('js.button_close'), @@ -27,25 +33,31 @@ export class AddGridWidgetModalComponent extends OpModalComponent { public eeShowBanners = false; - constructor(readonly elementRef:ElementRef, + private schema:SchemaResource; + + constructor( + readonly elementRef:ElementRef, @Inject(OpModalLocalsToken) readonly locals:OpModalLocalsMap, readonly cdRef:ChangeDetectorRef, readonly widgetsService:GridWidgetsService, readonly i18n:I18nService, - readonly bannerService:BannersService) { + readonly bannerService:BannersService, + readonly loadingIndicator:LoadingIndicatorService, + ) { super(locals, cdRef, elementRef); } ngOnInit() { super.ngOnInit(); this.eeShowBanners = this.bannerService.eeShowBanners; + this.fetchSchema(); } public get selectable() { return this.eligibleWidgets.sort((a, b) => a.title.localeCompare(b.title)); } - public select($event:any, widget:WidgetRegistration) { + public select($event:MouseEvent, widget:WidgetRegistration) { this.chosenWidget = widget; this.closeMe($event); } @@ -54,9 +66,34 @@ export class AddGridWidgetModalComponent extends OpModalComponent { return widget.identifier; } + private fetchSchema():void { + const $schema = this.locals.$schema as BehaviorSubject; + this.schema = $schema.value; + + if (!this.schema) { + this.loadingIndicator.modal.start(); + + $schema + .pipe( + filter(Boolean), + take(1), + ) + .subscribe((schema:SchemaResource) => { + this.schema = schema; + this.loadingIndicator.modal.stop(); + this.cdRef.detectChanges(); + }); + } + } + private get eligibleWidgets() { - const schemaWidgetIdentifiers = this.locals.schema.widgets.allowedValues.map((widget:any) => widget.identifier); + if (this.schema) { + const widgets = this.schema.widgets as { allowedValues:GridWidgetResource[] }; + const schemaWidgetIdentifiers = widgets.allowedValues.map((widget) => widget.identifier); + + return this.widgetsService.registered.filter((widget) => schemaWidgetIdentifiers.includes(widget.identifier)); + } - return this.widgetsService.registered.filter((widget) => schemaWidgetIdentifiers.includes(widget.identifier)); + return []; } } diff --git a/frontend/src/app/shared/components/grids/widgets/project-favorites/widget-project-favorites.component.html b/frontend/src/app/shared/components/grids/widgets/project-favorites/widget-project-favorites.component.html new file mode 100644 index 000000000000..208891aab404 --- /dev/null +++ b/frontend/src/app/shared/components/grids/widgets/project-favorites/widget-project-favorites.component.html @@ -0,0 +1,40 @@ + + + + + + +
+
+ +

+ +
+ +

+
+ + + +
diff --git a/frontend/src/app/shared/components/grids/widgets/project-favorites/widget-project-favorites.component.sass b/frontend/src/app/shared/components/grids/widgets/project-favorites/widget-project-favorites.component.sass new file mode 100644 index 000000000000..a0e8b419fc3e --- /dev/null +++ b/frontend/src/app/shared/components/grids/widgets/project-favorites/widget-project-favorites.component.sass @@ -0,0 +1,6 @@ +.op-widget-project-favorites + &--list + list-style: none + + &--link + padding-left: 0.25rem diff --git a/frontend/src/app/shared/components/grids/widgets/project-favorites/widget-project-favorites.component.ts b/frontend/src/app/shared/components/grids/widgets/project-favorites/widget-project-favorites.component.ts new file mode 100644 index 000000000000..9dcbd03b664e --- /dev/null +++ b/frontend/src/app/shared/components/grids/widgets/project-favorites/widget-project-favorites.component.ts @@ -0,0 +1,65 @@ +import { AbstractWidgetComponent } from 'core-app/shared/components/grids/widgets/abstract-widget.component'; +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + HostBinding, + Injector, + OnInit, + ViewEncapsulation, +} from '@angular/core'; +import { I18nService } from 'core-app/core/i18n/i18n.service'; +import { HalResourceService } from 'core-app/features/hal/services/hal-resource.service'; +import { PathHelperService } from 'core-app/core/path-helper/path-helper.service'; +import { CurrentProjectService } from 'core-app/core/current-project/current-project.service'; +import { ProjectResource } from 'core-app/features/hal/resources/project-resource'; +import { ApiV3Service } from 'core-app/core/apiv3/api-v3.service'; +import { TimezoneService } from 'core-app/core/datetime/timezone.service'; +import { ApiV3FilterBuilder } from 'core-app/shared/helpers/api-v3/api-v3-filter-builder'; +import { Observable } from 'rxjs'; + +@Component({ + templateUrl: './widget-project-favorites.component.html', + styleUrls: ['./widget-project-favorites.component.sass'], + encapsulation: ViewEncapsulation.None, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class WidgetProjectFavoritesComponent extends AbstractWidgetComponent implements OnInit { + @HostBinding('class.op-widget-project-favorites') className = true; + + public text = { + no_favorites: this.i18n.t('js.favorite_projects.no_results'), + no_favorites_subtext: this.i18n.t('js.favorite_projects.no_results_subtext'), + }; + + public projects$:Observable; + + constructor( + readonly halResource:HalResourceService, + readonly pathHelper:PathHelperService, + readonly i18n:I18nService, + protected readonly injector:Injector, + readonly timezone:TimezoneService, + readonly apiV3Service:ApiV3Service, + readonly currentProject:CurrentProjectService, + readonly cdr:ChangeDetectorRef, + ) { + super(i18n, injector); + } + + ngOnInit() { + const filters = new ApiV3FilterBuilder(); + filters.add('favored', '=', true); + filters.add('active', '=', true); + + this.projects$ = this + .apiV3Service + .projects + .filtered(filters, { pageSize: '-1' }) + .getPaginatedResults(); + } + + projectPath(project:ProjectResource) { + return this.pathHelper.projectPath(project.identifier); + } +} diff --git a/frontend/src/app/shared/components/grids/widgets/wp-calendar/wp-calendar.component.html b/frontend/src/app/shared/components/grids/widgets/wp-calendar/wp-calendar.component.html index 61802814662b..fb2cb1c413b5 100644 --- a/frontend/src/app/shared/components/grids/widgets/wp-calendar/wp-calendar.component.html +++ b/frontend/src/app/shared/components/grids/widgets/wp-calendar/wp-calendar.component.html @@ -15,6 +15,7 @@ diff --git a/frontend/src/app/shared/components/header-project-select/header-project-select.component.html b/frontend/src/app/shared/components/header-project-select/header-project-select.component.html index b734598fc0fa..98601df70101 100644 --- a/frontend/src/app/shared/components/header-project-select/header-project-select.component.html +++ b/frontend/src/app/shared/components/header-project-select/header-project-select.component.html @@ -27,6 +27,11 @@ class="op-project-list-modal--title" [textContent]="text.project.plural" > + +
    - - {{text.no_results}} +
    + +

    + +
    + +

    +
    + + {{ text.no_results }}
    diff --git a/frontend/src/app/shared/components/header-project-select/header-project-select.component.sass b/frontend/src/app/shared/components/header-project-select/header-project-select.component.sass index c1f68ae82f0e..50f65ca99a9e 100644 --- a/frontend/src/app/shared/components/header-project-select/header-project-select.component.sass +++ b/frontend/src/app/shared/components/header-project-select/header-project-select.component.sass @@ -1,2 +1,16 @@ .op-header-project-select max-width: 100% + + &--no-favorites + display: flex + text-align: center + flex-direction: column + align-items: center + margin: 0 1.25rem + + &--no-favorites-icon + margin-bottom: 0.5rem + + &--no-favorites-subtext + font-size: 0.9rem + color: var(--fgColor-muted, var(--color-fg-subtle)) diff --git a/frontend/src/app/shared/components/header-project-select/header-project-select.component.ts b/frontend/src/app/shared/components/header-project-select/header-project-select.component.ts index 63d35e95b5a6..476f643bc792 100644 --- a/frontend/src/app/shared/components/header-project-select/header-project-select.component.ts +++ b/frontend/src/app/shared/components/header-project-select/header-project-select.component.ts @@ -28,29 +28,23 @@ import { PathHelperService } from 'core-app/core/path-helper/path-helper.service'; import { I18nService } from 'core-app/core/i18n/i18n.service'; -import { - ChangeDetectionStrategy, - Component, - HostBinding, - ViewEncapsulation, -} from '@angular/core'; +import { ChangeDetectionStrategy, Component, HostBinding, ViewEncapsulation } from '@angular/core'; import { CurrentProjectService } from 'core-app/core/current-project/current-project.service'; -import { combineLatest } from 'rxjs'; -import { - debounceTime, - filter, - map, - mergeMap, - shareReplay, - take, -} from 'rxjs/operators'; +import { combineLatest, Observable } from 'rxjs'; +import { debounceTime, defaultIfEmpty, filter, map, mergeMap, shareReplay, take } from 'rxjs/operators'; import { IProject } from 'core-app/core/state/projects/project.model'; import { insertInList } from 'core-app/shared/components/project-include/insert-in-list'; import { recursiveSort } from 'core-app/shared/components/project-include/recursive-sort'; -import { SearchableProjectListService } from 'core-app/shared/components/searchable-project-list/searchable-project-list.service'; +import { + SearchableProjectListService, +} from 'core-app/shared/components/searchable-project-list/searchable-project-list.service'; import { CurrentUserService } from 'core-app/core/current-user/current-user.service'; import { UntilDestroyedMixin } from 'core-app/shared/helpers/angular/until-destroyed.mixin'; import { IProjectData } from 'core-app/shared/components/searchable-project-list/project-data'; +import { ApiV3Service } from 'core-app/core/apiv3/api-v3.service'; +import { ApiV3Filter } from 'core-app/shared/helpers/api-v3/api-v3-filter-builder'; +import { IHALCollection } from 'core-app/core/apiv3/types/hal-collection.type'; +import { ConfigurationService } from 'core-app/core/config/configuration.service'; export const headerProjectSelectSelector = 'op-header-project-select'; @@ -111,7 +105,28 @@ export class OpHeaderProjectSelectComponent extends UntilDestroyedMixin { shareReplay(), ); + public favorites$:Observable = this + .apiV3Service + .projects + .signalled( + ApiV3Filter('favored', '=', true), + [ + 'elements/id', + ], + { pageSize: '-1' }, + ) + .pipe( + map((collection:IHALCollection<{ id:string|number }>) => collection._embedded.elements || []), + map((elements) => elements.map((item) => item.id.toString())), + defaultIfEmpty([]), + shareReplay(1), + ); + public text = { + all: this.I18n.t('js.label_all_uppercase'), + favored: this.I18n.t('js.label_favorites'), + no_favorites: this.I18n.t('js.favorite_projects.no_results'), + no_favorites_subtext: this.I18n.t('js.favorite_projects.no_results_subtext'), project: { singular: this.I18n.t('js.label_project'), plural: this.I18n.t('js.label_project_plural'), @@ -122,6 +137,13 @@ export class OpHeaderProjectSelectComponent extends UntilDestroyedMixin { no_results: this.I18n.t('js.include_projects.no_results'), }; + public displayMode:'all'|'favored' = 'all'; + + public displayModeOptions = [ + { value: 'all', title: this.text.all }, + { value: 'favored', title: this.text.favored }, + ]; + /* This seems like a way too convoluted loading check, but there's a good reason we need it. * The searchableProjectListService says fetching is "done" when the request returns. * However, this causes flickering on the initial load, since `projects$` still needs @@ -143,11 +165,13 @@ export class OpHeaderProjectSelectComponent extends UntilDestroyedMixin { private scrollToCurrent = false; constructor( - protected pathHelper:PathHelperService, - protected I18n:I18nService, - protected currentProject:CurrentProjectService, + readonly pathHelper:PathHelperService, + readonly configuration:ConfigurationService, + readonly I18n:I18nService, + readonly currentProject:CurrentProjectService, readonly searchableProjectListService:SearchableProjectListService, readonly currentUserService:CurrentUserService, + readonly apiV3Service:ApiV3Service, ) { super(); @@ -193,4 +217,12 @@ export class OpHeaderProjectSelectComponent extends UntilDestroyedMixin { const parentParam = this.currentProject.id ? `?parent_id=${this.currentProject.id}` : ''; return `${this.pathHelper.projectsNewPath()}${parentParam}`; } + + anyProjectsFound(projects:IProjectData[], favorites:string[]):boolean { + if (this.displayMode === 'all') { + return projects.length > 0; + } + + return projects.length > 0 && favorites.length > 0; + } } diff --git a/frontend/src/app/shared/components/header-project-select/list/header-project-select-list.component.html b/frontend/src/app/shared/components/header-project-select/list/header-project-select-list.component.html index 5338dd9fbfe7..9064f2baa2e1 100644 --- a/frontend/src/app/shared/components/header-project-select/list/header-project-select-list.component.html +++ b/frontend/src/app/shared/components/header-project-select/list/header-project-select-list.component.html @@ -1,6 +1,6 @@
  • @@ -19,8 +19,18 @@ {{ project.name }} + > + + + + diff --git a/frontend/src/app/shared/components/header-project-select/list/header-project-select-list.component.ts b/frontend/src/app/shared/components/header-project-select/list/header-project-select-list.component.ts index 2bd3e2a87378..a29f6f61d9e3 100644 --- a/frontend/src/app/shared/components/header-project-select/list/header-project-select-list.component.ts +++ b/frontend/src/app/shared/components/header-project-select/list/header-project-select-list.component.ts @@ -1,17 +1,23 @@ import { I18nService } from 'core-app/core/i18n/i18n.service'; import { ChangeDetectionStrategy, + ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, Input, + OnChanges, OnInit, Output, + SimpleChanges, } from '@angular/core'; -import { SearchableProjectListService } from 'core-app/shared/components/searchable-project-list/searchable-project-list.service'; +import { + SearchableProjectListService, +} from 'core-app/shared/components/searchable-project-list/searchable-project-list.service'; import { IProjectData } from 'core-app/shared/components/searchable-project-list/project-data'; import { PathHelperService } from 'core-app/core/path-helper/path-helper.service'; +import { ConfigurationService } from 'core-app/core/config/configuration.service'; @Component({ selector: '[op-header-project-select-list]', @@ -19,7 +25,7 @@ import { PathHelperService } from 'core-app/core/path-helper/path-helper.service templateUrl: './header-project-select-list.component.html', styleUrls: ['./header-project-select-list.component.sass'], }) -export class OpHeaderProjectSelectListComponent implements OnInit { +export class OpHeaderProjectSelectListComponent implements OnInit, OnChanges { @HostBinding('class.spot-list') classNameList = true; @HostBinding('class.op-header-project-select-list') className = true; @@ -30,8 +36,14 @@ export class OpHeaderProjectSelectListComponent implements OnInit { @Input() projects:IProjectData[] = []; + @Input() favored:string[] = []; + + @Input() displayMode:string; + @Input() searchText = ''; + public filteredProjects:IProjectData[]; + public text = { does_not_match_search: this.I18n.t('js.include_projects.tooltip.does_not_match_search'), include_all_selected: this.I18n.t('js.include_projects.tooltip.include_all_selected'), @@ -40,8 +52,10 @@ export class OpHeaderProjectSelectListComponent implements OnInit { constructor( readonly I18n:I18nService, readonly pathHelper:PathHelperService, + readonly configuration:ConfigurationService, readonly searchableProjectListService:SearchableProjectListService, readonly elementRef:ElementRef, + readonly cdRef:ChangeDetectorRef, ) { } ngOnInit():void { @@ -56,6 +70,36 @@ export class OpHeaderProjectSelectListComponent implements OnInit { }); }); } + + this.updateProjectFilter(); + } + + ngOnChanges(changes:SimpleChanges) { + if (changes.displayMode || changes.projects || changes.favored) { + this.updateProjectFilter(); + } + } + + updateProjectFilter() { + this.filteredProjects = this.projects.filter((project) => { + if (this.displayMode === 'all') { + return true; + } + + return this.showWhenFavored(project); + }); + } + + showWhenFavored(project:IProjectData):boolean { + if (this.isFavored(project)) { + return true; + } + + return project.children.length > 0 && project.children.some((child) => this.showWhenFavored(child)); + } + + isFavored(project:IProjectData):boolean { + return this.favored.includes(project.id.toString()); } extendedProjectUrl(projectId:string):string { diff --git a/frontend/src/app/shared/components/icon/icon.module.ts b/frontend/src/app/shared/components/icon/icon.module.ts index 79609270a01a..5558307695e8 100644 --- a/frontend/src/app/shared/components/icon/icon.module.ts +++ b/frontend/src/app/shared/components/icon/icon.module.ts @@ -8,13 +8,20 @@ import { OpCursorSelectIconComponent, OpEnterpriseAddonsIconComponent, OpEraseIconComponent, + OpFirstPersonViewIconComponent, OpGridMenuIconComponent, + OpOrthographicPerspectiveIconComponent, OpScissorsIconComponent, + OpThreedReturnDefaultIconComponent, + OpViewFitToIconComponent, OpViewModalIconComponent, + OpViewThreedIconComponent, PackageIconComponent, PersonIconComponent, ScreenFullIconComponent, ShareAndroidIconComponent, + StarFillIconComponent, + StarIconComponent, XIconComponent, } from '@openproject/octicons-angular'; @@ -28,13 +35,20 @@ import { OpCursorSelectIconComponent, OpEnterpriseAddonsIconComponent, OpEraseIconComponent, + OpFirstPersonViewIconComponent, OpGridMenuIconComponent, + OpOrthographicPerspectiveIconComponent, OpScissorsIconComponent, + OpThreedReturnDefaultIconComponent, + OpViewFitToIconComponent, OpViewModalIconComponent, + OpViewThreedIconComponent, PackageIconComponent, PersonIconComponent, ScreenFullIconComponent, ShareAndroidIconComponent, + StarFillIconComponent, + StarIconComponent, XIconComponent, ], declarations: [ @@ -50,13 +64,20 @@ import { OpCursorSelectIconComponent, OpEnterpriseAddonsIconComponent, OpEraseIconComponent, + OpFirstPersonViewIconComponent, OpGridMenuIconComponent, + OpOrthographicPerspectiveIconComponent, OpScissorsIconComponent, + OpThreedReturnDefaultIconComponent, + OpViewFitToIconComponent, OpViewModalIconComponent, + OpViewThreedIconComponent, PackageIconComponent, PersonIconComponent, ScreenFullIconComponent, ShareAndroidIconComponent, + StarFillIconComponent, + StarIconComponent, XIconComponent, ], }) diff --git a/frontend/src/app/shared/components/modals/export-modal/wp-table-export.modal.html b/frontend/src/app/shared/components/modals/export-modal/wp-table-export.modal.html index 799f56caaa79..8eed57bdddca 100644 --- a/frontend/src/app/shared/components/modals/export-modal/wp-table-export.modal.html +++ b/frontend/src/app/shared/components/modals/export-modal/wp-table-export.modal.html @@ -9,7 +9,7 @@
    -
      +
      • @@ -25,8 +25,50 @@
      +
      + +
      +

      {{text.ganttOptionSectionTitle}}

      +
      + +
      +
      + +
      +
      +
      +
      +
      + +
      + +
    + +
    + +
    +
    + +
    +
    + diff --git a/frontend/src/app/shared/components/modals/view-settings-modal/view-settings.modal.ts b/frontend/src/app/shared/components/modals/view-settings-modal/view-settings.modal.ts new file mode 100644 index 000000000000..9a73dc10c24a --- /dev/null +++ b/frontend/src/app/shared/components/modals/view-settings-modal/view-settings.modal.ts @@ -0,0 +1,120 @@ +// -- copyright +// OpenProject is an open source project management software. +// Copyright (C) 2012-2024 the OpenProject GmbH +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License version 3. +// +// OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +// Copyright (C) 2006-2013 Jean-Philippe Lang +// Copyright (C) 2010-2013 the ChiliProject Team +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// See COPYRIGHT and LICENSE files for more details. +//++ + +import { ChangeDetectorRef, Component, ElementRef, Inject, ViewChild } from '@angular/core'; +import { HalResourceNotificationService } from 'core-app/features/hal/services/hal-resource-notification.service'; +import { QueryResource } from 'core-app/features/hal/resources/query-resource'; +import { ToastService } from 'core-app/shared/components/toaster/toast.service'; +import { OpModalComponent } from 'core-app/shared/components/modal/modal.component'; +import { OpModalLocalsToken } from 'core-app/shared/components/modal/modal.service'; +import { OpModalLocalsMap } from 'core-app/shared/components/modal/modal.types'; +import { QuerySharingChange } from 'core-app/shared/components/modals/share-modal/query-sharing-form.component'; +import { I18nService } from 'core-app/core/i18n/i18n.service'; +import { IsolatedQuerySpace } from 'core-app/features/work-packages/directives/query-space/isolated-query-space'; +import { WorkPackagesListService } from 'core-app/features/work-packages/components/wp-list/wp-list.service'; +import { States } from 'core-app/core/states/states.service'; +import { WorkPackagesQueryViewService } from 'core-app/features/work-packages/components/wp-list/wp-query-view.service'; + +@Component({ + templateUrl: './view-settings.modal.html', +}) +export class ViewSettingsModalComponent extends OpModalComponent { + public queryName = ''; + + public isStarred = false; + + public isPublic = false; + + public isBusy = false; + + @ViewChild('queryNameField', { static: true }) queryNameField:ElementRef; + + public text = { + title: this.I18n.t('js.modals.form_submit.title'), + text: this.I18n.t('js.modals.form_submit.text'), + save_as: this.I18n.t('js.label_save_as'), + label_name: this.I18n.t('js.modals.label_name'), + label_visibility_settings: this.I18n.t('js.label_visibility_settings'), + button_save: this.I18n.t('js.modals.button_save'), + button_cancel: this.I18n.t('js.button_cancel'), + close_popup: this.I18n.t('js.close_popup_title'), + }; + + constructor( + readonly elementRef:ElementRef, + @Inject(OpModalLocalsToken) public locals:OpModalLocalsMap, + readonly I18n:I18nService, + readonly states:States, + readonly querySpace:IsolatedQuerySpace, + readonly wpListService:WorkPackagesListService, + readonly wpView:WorkPackagesQueryViewService, + readonly halNotification:HalResourceNotificationService, + readonly cdRef:ChangeDetectorRef, + readonly toastService:ToastService, + ) { + super(locals, cdRef, elementRef); + } + + public setValues(change:QuerySharingChange):void { + this.isStarred = change.isStarred; + this.isPublic = change.isPublic; + } + + public onOpen():void { + this.queryNameField.nativeElement.focus(); + } + + public get afterFocusOn():HTMLElement { + return document.getElementById('work-packages-settings-button') as HTMLElement; + } + + public saveQueryAs($event:Event):void { + $event.preventDefault(); + + if (this.isBusy || !this.queryName) { + return; + } + + this.isBusy = true; + const query = this.querySpace.query.value!; + query.public = this.isPublic; + + this.wpListService + .create(query, this.queryName) + .then((savedQuery:QueryResource):Promise => { + if (this.isStarred && !savedQuery.starred) { + return this.wpListService.toggleStarred(savedQuery).then(() => this.closeMe($event)); + } + + this.closeMe($event); + return Promise.resolve(true); + }) + .catch((error:any) => this.halNotification.handleRawError(error)) + .then(() => this.isBusy = false); // Same as .finally() + } +} diff --git a/frontend/src/app/shared/components/op-content-loader/op-wp-loading-skeleton/op-wp-loading-skeleton.component.sass b/frontend/src/app/shared/components/op-content-loader/op-wp-loading-skeleton/op-wp-loading-skeleton.component.sass index fc94375deb17..e9960a18392e 100644 --- a/frontend/src/app/shared/components/op-content-loader/op-wp-loading-skeleton/op-wp-loading-skeleton.component.sass +++ b/frontend/src/app/shared/components/op-content-loader/op-wp-loading-skeleton/op-wp-loading-skeleton.component.sass @@ -1,6 +1,6 @@ .op-wp-loading-skeleton width: calc(100% - 2px) - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) border-radius: 2px padding: 10px position: relative diff --git a/frontend/src/app/shared/components/op-context-menu/icon-triggered-context-menu/icon-triggered-context-menu.component.sass b/frontend/src/app/shared/components/op-context-menu/icon-triggered-context-menu/icon-triggered-context-menu.component.sass index 49a0a796f99e..f5fc267d67f5 100644 --- a/frontend/src/app/shared/components/op-context-menu/icon-triggered-context-menu/icon-triggered-context-menu.component.sass +++ b/frontend/src/app/shared/components/op-context-menu/icon-triggered-context-menu/icon-triggered-context-menu.component.sass @@ -1,3 +1,3 @@ a, a:hover - color: var(--color-fg-muted) + color: var(--fgColor-muted) text-decoration: none diff --git a/frontend/src/app/shared/components/principal/principal.component.sass b/frontend/src/app/shared/components/principal/principal.component.sass index 729f1d3e8a22..eddf505afb60 100644 --- a/frontend/src/app/shared/components/principal/principal.component.sass +++ b/frontend/src/app/shared/components/principal/principal.component.sass @@ -1,7 +1,7 @@ -@import "src/assets/sass/helpers" +@import "helpers" .op-principal--timer @include indicator-bubble position: absolute top: 10px right: 3px - background: darkred \ No newline at end of file + background: darkred diff --git a/frontend/src/app/shared/components/table-pagination/table-pagination.component.ts b/frontend/src/app/shared/components/table-pagination/table-pagination.component.ts index e3e11b5eb4ca..77a77cced60b 100644 --- a/frontend/src/app/shared/components/table-pagination/table-pagination.component.ts +++ b/frontend/src/app/shared/components/table-pagination/table-pagination.component.ts @@ -163,13 +163,23 @@ export class TablePaginationComponent extends UntilDestroyedMixin implements OnI } // This avoids a truncation when there are not enough elements to truncate for the first elements - const startingDiff = currentPage - 2 * truncSize; - if (startingDiff >= 0 && startingDiff <= 1) { - this.postPageNumbers = this.truncatePageNums(pageNumbers, pageNumbers.length >= maxVisible + (truncSize * 2), maxVisible + truncSize, pageNumbers.length, 0); - } else { - this.prePageNumbers = this.truncatePageNums(pageNumbers, currentPage >= maxVisible, 0, Math.min(currentPage - Math.ceil(maxVisible / 2), pageNumbers.length - maxVisible), truncSize); - this.postPageNumbers = this.truncatePageNums(pageNumbers, pageNumbers.length >= maxVisible + (truncSize * 2), maxVisible, pageNumbers.length, 0); - } + const preVisible = Math.min(currentPage - Math.ceil(maxVisible / 2), pageNumbers.length - maxVisible); + + this.prePageNumbers = this.truncatePageNums( + pageNumbers, + (currentPage >= maxVisible) && (pageNumbers.length >= maxVisible + (truncSize * 2)), + 0, + preVisible, + truncSize, + ); + + this.postPageNumbers = this.truncatePageNums( + pageNumbers, + pageNumbers.length >= maxVisible + (truncSize * 2), + maxVisible, + pageNumbers.length, + 0, + ); } this.pageNumbers = pageNumbers; @@ -181,7 +191,7 @@ export class TablePaginationComponent extends UntilDestroyedMixin implements OnI && this.pagination.total > this.perPageOptions[0]; } - private truncatePageNums(pageNumbers:any, perform:any, disectFrom:any, disectLength:any, truncateFrom:any) { + private truncatePageNums(pageNumbers:number[], perform:boolean, disectFrom:number, disectLength:number, truncateFrom:number):number[] { if (perform) { const truncationSize = this.paginationService.getOptionsTruncationSize(); const truncatedNums = pageNumbers.splice(disectFrom, disectLength); diff --git a/frontend/src/app/shared/components/table/table.sass b/frontend/src/app/shared/components/table/table.sass index 0f74d55af3f3..80c67f848aa4 100644 --- a/frontend/src/app/shared/components/table/table.sass +++ b/frontend/src/app/shared/components/table/table.sass @@ -4,7 +4,7 @@ &--cell padding: 12px 16px - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) text-align: center &_heading diff --git a/frontend/src/app/shared/components/tabs/tab-badges/tab-count.component.sass b/frontend/src/app/shared/components/tabs/tab-badges/tab-count.component.sass index 74adccd46319..9ccf843533c8 100644 --- a/frontend/src/app/shared/components/tabs/tab-badges/tab-count.component.sass +++ b/frontend/src/app/shared/components/tabs/tab-badges/tab-count.component.sass @@ -1,4 +1,4 @@ -@import "src/assets/sass/helpers" +@import "helpers" .op-tab-count @include indicator-bubble diff --git a/frontend/src/app/shared/components/time_entries/timer/timer-account-menu.component.sass b/frontend/src/app/shared/components/time_entries/timer/timer-account-menu.component.sass index a37f21882b9f..9ccf98e03e04 100644 --- a/frontend/src/app/shared/components/time_entries/timer/timer-account-menu.component.sass +++ b/frontend/src/app/shared/components/time_entries/timer/timer-account-menu.component.sass @@ -1,16 +1,16 @@ -@import "src/assets/sass/helpers" +@import "helpers" .op-timer-account-menu max-width: 270px display: block @include spot-body-small - + &--timer display: flex align-items: center padding: 0 10px @include spot-body-small (bold) line-height: $spot-spacing-2 - + &-icon margin-left: auto &--wp-details @@ -18,4 +18,3 @@ display: inline-block width: 270px @include text-shortener - \ No newline at end of file diff --git a/frontend/src/app/shared/helpers/api-v3/api-v3-filter-builder.ts b/frontend/src/app/shared/helpers/api-v3/api-v3-filter-builder.ts index a496dd18a91f..fc41ad424e67 100644 --- a/frontend/src/app/shared/helpers/api-v3/api-v3-filter-builder.ts +++ b/frontend/src/app/shared/helpers/api-v3/api-v3-filter-builder.ts @@ -160,6 +160,6 @@ export class ApiV3FilterBuilder { } } -export function ApiV3Filter(name:string, operator:FilterOperator, values:ApiV3FilterValueType[]):ApiV3FilterBuilder { +export function ApiV3Filter(name:string, operator:FilterOperator, values:boolean|ApiV3FilterValueType[]):ApiV3FilterBuilder { return new ApiV3FilterBuilder().add(name, operator, values); } diff --git a/frontend/src/app/spot/styles/sass/components/checkbox.sass b/frontend/src/app/spot/styles/sass/components/checkbox.sass index 57750092d601..2b2a582316cf 100644 --- a/frontend/src/app/spot/styles/sass/components/checkbox.sass +++ b/frontend/src/app/spot/styles/sass/components/checkbox.sass @@ -62,7 +62,7 @@ transform: translateX(1px) rotate(-45deg) &--input:disabled + &--fake - border-color: var(--color-fg-muted) + border-color: var(--fgColor-muted) cursor: default &--input:disabled:checked + &--fake @@ -70,4 +70,4 @@ &--input:disabled + &--fake::before, &--input:disabled + &--fake::after - background-color: var(--color-fg-muted) + background-color: var(--fgColor-muted) diff --git a/frontend/src/app/spot/styles/sass/components/drop-modal.sass b/frontend/src/app/spot/styles/sass/components/drop-modal.sass index 940621e47edd..03b33edaf763 100644 --- a/frontend/src/app/spot/styles/sass/components/drop-modal.sass +++ b/frontend/src/app/spot/styles/sass/components/drop-modal.sass @@ -74,6 +74,7 @@ &--header @extend .spot-modal--header font-size: var(--body-font-size) !important + line-height: 1 !important &--header-title @extend .spot-modal--header-title diff --git a/frontend/src/app/spot/styles/sass/components/filter-chip.sass b/frontend/src/app/spot/styles/sass/components/filter-chip.sass index 6dd41b0c0593..c32b74904c7a 100644 --- a/frontend/src/app/spot/styles/sass/components/filter-chip.sass +++ b/frontend/src/app/spot/styles/sass/components/filter-chip.sass @@ -25,5 +25,5 @@ padding: $spot-spacing-0_25 &_disabled - color: var(--color-fg-muted) + color: var(--fgColor-muted) background-color: $spot-color-basic-gray-5 diff --git a/frontend/src/app/spot/styles/sass/components/list.sass b/frontend/src/app/spot/styles/sass/components/list.sass index 523a6d5355c7..ca50b5aff481 100644 --- a/frontend/src/app/spot/styles/sass/components/list.sass +++ b/frontend/src/app/spot/styles/sass/components/list.sass @@ -42,7 +42,7 @@ color: $spot-color-basic-gray-1 &_active#{&}_disabled - color: var(--color-fg-muted) + color: var(--fgColor-muted) background-color: $spot-color-basic-gray-6 &_link:not(&_disabled) diff --git a/frontend/src/app/spot/styles/sass/components/modal.sass b/frontend/src/app/spot/styles/sass/components/modal.sass index 72d4a8579ef0..56f225d9fdde 100644 --- a/frontend/src/app/spot/styles/sass/components/modal.sass +++ b/frontend/src/app/spot/styles/sass/components/modal.sass @@ -49,7 +49,8 @@ &-close-button border-radius: 6px border-color: transparent - margin-right: -$spot-spacing-0-5 + margin: -$spot-spacing-0-5 + margin-left: 0 &:hover cursor: pointer diff --git a/frontend/src/app/spot/styles/sass/components/switch.sass b/frontend/src/app/spot/styles/sass/components/switch.sass index eac2967cd0f4..32ac2a3e6b13 100644 --- a/frontend/src/app/spot/styles/sass/components/switch.sass +++ b/frontend/src/app/spot/styles/sass/components/switch.sass @@ -27,7 +27,7 @@ height: $spot-spacing-1 + $spot-spacing-0_25 width: $spot-spacing-2 + $spot-spacing-0_25 border-radius: math.div($spot-spacing-1 + $spot-spacing-0_25, 2) - border: 1px solid var(--color-fg-muted) + border: 1px solid var(--fgColor-muted) background-color: $spot-color-basic-gray-5 cursor: pointer @@ -39,7 +39,7 @@ left: 1px height: $spot-spacing-1 width: $spot-spacing-1 - background-color: var(--color-fg-muted) + background-color: var(--fgColor-muted) border-radius: 50% transition-property: left, background-color transition-duration: 0.2s diff --git a/frontend/src/app/spot/styles/sass/components/text-field.sass b/frontend/src/app/spot/styles/sass/components/text-field.sass index f84d412e3384..f5c24ed0d5fb 100644 --- a/frontend/src/app/spot/styles/sass/components/text-field.sass +++ b/frontend/src/app/spot/styles/sass/components/text-field.sass @@ -1,7 +1,7 @@ .spot-text-field @include spot-body-small - border: 1px solid var(--color-fg-muted) + border: 1px solid var(--fgColor-muted) color: $spot-color-basic-black border-radius: 4px padding: $spot-spacing-0_5 @@ -11,7 +11,7 @@ align-items: center &::placeholder - color: var(--color-fg-muted) + color: var(--fgColor-muted) &:focus, &_focused @@ -20,7 +20,7 @@ &:disabled, &_disabled - color: var(--color-fg-muted) + color: var(--fgColor-muted) border-color: $spot-color-basic-gray-4 &:disabled, @@ -45,7 +45,7 @@ &:disabled, &:disabled:hover - color: var(--color-fg-subtle) + color: var(--fgColor-muted) background-color: $spot-color-basic-white &:focus, @@ -58,7 +58,7 @@ padding: 0 display: flex align-items: center - color: var(--color-fg-muted) + color: var(--fgColor-muted) &:focus @include spot-focus diff --git a/frontend/src/assets/images/14_0_features.svg b/frontend/src/assets/images/14_0_features.svg deleted file mode 100644 index 29e8318160c4..000000000000 --- a/frontend/src/assets/images/14_0_features.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/frontend/src/assets/images/14_1_features.svg b/frontend/src/assets/images/14_1_features.svg new file mode 100644 index 000000000000..f8e69c554cd1 --- /dev/null +++ b/frontend/src/assets/images/14_1_features.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/global_styles/common/input/input.sass b/frontend/src/global_styles/common/input/input.sass index e0f93f92bf3b..729ec6d0a847 100644 --- a/frontend/src/global_styles/common/input/input.sass +++ b/frontend/src/global_styles/common/input/input.sass @@ -1,6 +1,6 @@ .op-input background: white - border: 1px solid var(--color-border-default) + border: 1px solid var(--borderColor-default) border-radius: 2px min-height: 2rem display: flex diff --git a/frontend/src/global_styles/common/menu/menu.sass b/frontend/src/global_styles/common/menu/menu.sass index e77bccfb6034..c168b66a5ccb 100644 --- a/frontend/src/global_styles/common/menu/menu.sass +++ b/frontend/src/global_styles/common/menu/menu.sass @@ -48,10 +48,10 @@ &--headline font-size: 12px - color: var(--color-fg-muted) + color: var(--fgColor-muted) text-transform: uppercase &--separator - border-bottom: 1px solid var(--color-border-muted) + border-bottom: 1px solid var(--borderColor-muted) margin: 0 0 10px background: none diff --git a/frontend/src/global_styles/content/_accounts.sass b/frontend/src/global_styles/content/_accounts.sass index e25743fcc01b..4913f7c5b225 100644 --- a/frontend/src/global_styles/content/_accounts.sass +++ b/frontend/src/global_styles/content/_accounts.sass @@ -71,7 +71,7 @@ // from http://codepen.io/ericrasch/pen/Irlpm &:after - border-bottom: 2px solid var(--color-border-muted) + border-bottom: 2px solid var(--borderColor-muted) content: "" // this centers the line to the full width specified margin: 0 auto diff --git a/frontend/src/global_styles/content/_attributes_group.sass b/frontend/src/global_styles/content/_attributes_group.sass index 75b9bd3e4b24..c03aec609ccc 100644 --- a/frontend/src/global_styles/content/_attributes_group.sass +++ b/frontend/src/global_styles/content/_attributes_group.sass @@ -33,7 +33,7 @@ .attributes-group--header @include grid-block margin: 0 0 0.5rem 0 - border-bottom: 1px solid var(--color-border-muted) + border-bottom: 1px solid var(--borderColor-muted) align-items: flex-end diff --git a/frontend/src/global_styles/content/_autocomplete.sass b/frontend/src/global_styles/content/_autocomplete.sass index fb2b6d85715d..3dc8ee992762 100644 --- a/frontend/src/global_styles/content/_autocomplete.sass +++ b/frontend/src/global_styles/content/_autocomplete.sass @@ -45,9 +45,9 @@ div.autocomplete padding: 2px cursor: pointer font-size: 90% - border: 1px solid var(--color-border-muted) - border-left: 1px solid var(--color-border-muted) - border-right: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) + border-left: 1px solid var(--borderColor-muted) + border-right: 1px solid var(--borderColor-muted) background-color: white &.selected background-color: #ffb @@ -80,14 +80,14 @@ div.autocomplete z-index: auto !important height: 30px !important min-height: 30px !important - border-color: var(--color-border-default) !important + border-color: var(--borderColor-default) !important .ng-value-container overflow: visible !important .ng-placeholder top: 1px !important - color: var(--color-fg-subtle) + color: var(--fgColor-muted) @include text-shortener input @@ -101,13 +101,13 @@ div.autocomplete line-height: 22px .ng-select .ng-arrow-wrapper .ng-arrow - border-color: var(--color-fg-muted) transparent transparent + border-color: var(--fgColor-muted) transparent transparent .ng-select.ng-select-opened>.ng-select-container .ng-arrow - border-color: transparent transparent var(--color-fg-muted) + border-color: transparent transparent var(--fgColor-muted) .ng-select .ng-clear-wrapper - color: var(--color-fg-muted) + color: var(--fgColor-muted) .ng-select.ng-select-multiple .ng-select-container height: initial !important diff --git a/frontend/src/global_styles/content/_badges.sass b/frontend/src/global_styles/content/_badges.sass index 406b1161893e..83f0b98f4dba 100644 --- a/frontend/src/global_styles/content/_badges.sass +++ b/frontend/src/global_styles/content/_badges.sass @@ -61,7 +61,7 @@ $badge-color: var(--font-color-on-primary) @include badge-style($badge-secondary-background, auto) &.-border-only - border-color: var(--button--border-color) + border-color: var(--button-default-borderColor-rest) color: var(--body-font-color) background: transparent border-width: 1px diff --git a/frontend/src/global_styles/content/_boxes.sass b/frontend/src/global_styles/content/_boxes.sass index ef85507997ea..4b5823a2b141 100644 --- a/frontend/src/global_styles/content/_boxes.sass +++ b/frontend/src/global_styles/content/_boxes.sass @@ -30,7 +30,7 @@ padding: 6px margin-bottom: 10px line-height: 1.5em - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) .box p padding-top: 5px diff --git a/frontend/src/global_styles/content/_buttons.sass b/frontend/src/global_styles/content/_buttons.sass index 25976e5905ff..133c3a6c4e0f 100644 --- a/frontend/src/global_styles/content/_buttons.sass +++ b/frontend/src/global_styles/content/_buttons.sass @@ -48,7 +48,7 @@ $button--text-icon-spacing: 0.65em a.button @extend %button @include button-style(var(--button--background-color), var(--button--background-hover-color), var(--button--font-color)) - border: 1px solid var(--button--border-color) + border: 1px solid var(--button-default-borderColor-rest) position: relative transition-property: background, border @@ -189,4 +189,4 @@ html.-browser-windows.-browser-chrome &[disabled], &[disabled]:hover cursor: not-allowed background: none - color: var(--color-fg-muted) + color: var(--fgColor-muted) diff --git a/frontend/src/global_styles/content/_context_menu.sass b/frontend/src/global_styles/content/_context_menu.sass index e182a4d2396e..aabd96958d61 100644 --- a/frontend/src/global_styles/content/_context_menu.sass +++ b/frontend/src/global_styles/content/_context_menu.sass @@ -32,7 +32,7 @@ list-style-type: none margin: 0 min-width: 240px - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) padding: 3px 0 background: #ffffff @@ -112,4 +112,3 @@ html:not(.-browser-mobile) &:hover, &:focus .context-menu--icon opacity: 100 - diff --git a/frontend/src/global_styles/content/_datepicker.sass b/frontend/src/global_styles/content/_datepicker.sass index 216382cf17a5..887f6a3873e5 100644 --- a/frontend/src/global_styles/content/_datepicker.sass +++ b/frontend/src/global_styles/content/_datepicker.sass @@ -30,7 +30,7 @@ $datepicker--selected-border-radius: 5px @mixin disabled-day background: $spot-color-basic-white - color: var(--color-fg-muted) + color: var(--fgColor-muted) pointer-events: none cursor: not-allowed @@ -39,7 +39,7 @@ $datepicker--selected-border-radius: 5px @mixin non-working-day background: $spot-color-basic-gray-6 - color: var(--color-fg-muted) + color: var(--fgColor-muted) border-radius: 0 pointer-events: none @@ -141,7 +141,7 @@ $datepicker--selected-border-radius: 5px box-shadow: none !important &:hover - border-color: var(--color-fg-muted) + border-color: var(--fgColor-muted) &.flatpickr-non-working-day @include non-working-day @@ -156,7 +156,7 @@ $datepicker--selected-border-radius: 5px &:hover color: $spot-color-basic-gray-1 - border-color: var(--color-fg-muted) + border-color: var(--fgColor-muted) &.selected:not(.startRange, .endRange) border-radius: $datepicker--selected-border-radius @@ -200,31 +200,31 @@ $datepicker--selected-border-radius: 5px &.flatpickr-non-working-day background: $spot-color-basic-gray-6 - color: var(--color-fg-muted) + color: var(--fgColor-muted) &.flatpickr-non-working-day_enabled background: $spot-color-basic-gray-6 - color: var(--color-fg-muted) + color: var(--fgColor-muted) &.inRange - color: var(--color-fg-muted) + color: var(--fgColor-muted) background: $spot-color-basic-gray-6 border-color: $spot-color-basic-gray-6 &.selected, &.startRange, &.endRange - background: var(--color-fg-muted) - border-color: var(--color-fg-muted) + background: var(--fgColor-muted) + border-color: var(--fgColor-muted) color: $spot-color-basic-gray-5 &.inRange background: $spot-color-basic-gray-5 border-color: $spot-color-basic-gray-5 - color: var(--color-fg-muted) + color: var(--fgColor-muted) &.today - color: var(--color-fg-muted) + color: var(--fgColor-muted) background: $spot-color-indication-current-date border-color: $spot-color-indication-current-date @@ -239,7 +239,7 @@ $datepicker--selected-border-radius: 5px &.flatpickr-non-working-day:not(.today,.selected) background: $spot-color-basic-gray-6 !important - color: var(--color-fg-muted) !important + color: var(--fgColor-muted) !important &.flatpickr-non-working-day_enabled:not(.today,.selected) background: $spot-color-basic-gray-6 !important diff --git a/frontend/src/global_styles/content/_enterprise.sass b/frontend/src/global_styles/content/_enterprise.sass index 76bc9b1956db..86401ee93ac7 100644 --- a/frontend/src/global_styles/content/_enterprise.sass +++ b/frontend/src/global_styles/content/_enterprise.sass @@ -11,7 +11,7 @@ margin-bottom: 20px box-shadow: 4px 4px 10px rgb(0 0 0 / 15%) border-radius: 25px - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) .widget-box--teaser-image_default width: 30% diff --git a/frontend/src/global_styles/content/_forms.sass b/frontend/src/global_styles/content/_forms.sass index c1ad93008c6d..c70e3c96a70a 100644 --- a/frontend/src/global_styles/content/_forms.sass +++ b/frontend/src/global_styles/content/_forms.sass @@ -29,7 +29,7 @@ $form--field-types: (text-field, text-area, select, check-box, radio-button, range-field, search, file, date-picker) $base-line-height: 1.5 $form-label-color: var(--body-font-color) -$content-form-input-border: 1px solid var(--color-border-default) +$content-form-input-border: 1px solid var(--borderColor-default) %input-style border: $content-form-input-border @@ -78,7 +78,7 @@ form &.-bordered padding: 30px 20px background-color: var(--content-form-bg-color) - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) &.-compressed padding: 10px 20px 0 20px @@ -181,7 +181,7 @@ hr border: 0 &.form--separator - border-bottom: 1px solid var(--color-border-muted) + border-bottom: 1px solid var(--borderColor-muted) margin: 0 0 30px background: none @@ -231,7 +231,7 @@ hr font-weight: var(--base-text-weight-bold) line-height: 1.8 text-transform: uppercase - border-bottom: 1px solid var(--color-border-muted) + border-bottom: 1px solid var(--borderColor-muted) // HACK. TODO: Remove fieldset element rules in various places. .form--fieldset, @@ -616,7 +616,7 @@ select font-size: var(--body-font-size) &:focus, &:active - border-color: var(--color-accent-fg) + border-color: var(--fgColor-accent) .-hide-placeholder-on-focus &:focus::placeholder @@ -914,7 +914,7 @@ input[readonly].-clickable .form--field-inline-button margin-right: 0 - border: 1px solid var(--button--border-color) + border: 1px solid var(--button-default-borderColor-rest) border-left-width: 0px border-radius: 0px diff --git a/frontend/src/global_styles/content/_grid.sass b/frontend/src/global_styles/content/_grid.sass index 8e7bc644e737..112234567cdd 100644 --- a/frontend/src/global_styles/content/_grid.sass +++ b/frontend/src/global_styles/content/_grid.sass @@ -93,7 +93,7 @@ body.widget-grid-layout .grid--resizer position: absolute height: 20px - color: var(--color-fg-muted) + color: var(--fgColor-muted) cursor: nwse-resize opacity: 0 right: 0 @@ -116,7 +116,7 @@ body.widget-grid-layout &:before padding: 0 - color: var(--color-fg-muted) + color: var(--fgColor-muted) .grid--area.-widgeted:hover & opacity: 1 diff --git a/frontend/src/global_styles/content/_icon_control.sass b/frontend/src/global_styles/content/_icon_control.sass index 0bf7aed9da1c..f969844a5652 100644 --- a/frontend/src/global_styles/content/_icon_control.sass +++ b/frontend/src/global_styles/content/_icon_control.sass @@ -36,7 +36,7 @@ text-align: center cursor: pointer border-radius: 50% - color: var(--color-fg-muted) + color: var(--fgColor-muted) &:hover, &.-active text-decoration: none @@ -44,7 +44,7 @@ background: var(--button--primary-background-color) &.-active:hover - color: var(--color-fg-muted) + color: var(--fgColor-muted) background: white .icon-control--icon diff --git a/frontend/src/global_styles/content/_news.sass b/frontend/src/global_styles/content/_news.sass index 3080a8e93813..2f74b69df61e 100644 --- a/frontend/src/global_styles/content/_news.sass +++ b/frontend/src/global_styles/content/_news.sass @@ -38,7 +38,7 @@ .news-author font-size: 0.8rem - color: var(--color-fg-muted) + color: var(--fgColor-muted) display: block line-height: 1.25 diff --git a/frontend/src/global_styles/content/_pagination.sass b/frontend/src/global_styles/content/_pagination.sass index a536e8ed020b..574ad1764abf 100644 --- a/frontend/src/global_styles/content/_pagination.sass +++ b/frontend/src/global_styles/content/_pagination.sass @@ -81,7 +81,7 @@ $pagination--font-size: 0.8125rem padding: 3px 3px background: #f8f8f8 border-radius: 2px - border: 1px solid var(--button--border-color) + border: 1px solid var(--button-default-borderColor-rest) color: var(--body-font-color) font-weight: normal cursor: pointer diff --git a/frontend/src/global_styles/content/_project_list_modal.sass b/frontend/src/global_styles/content/_project_list_modal.sass index 9a2862e8dfec..9b36d34469fe 100644 --- a/frontend/src/global_styles/content/_project_list_modal.sass +++ b/frontend/src/global_styles/content/_project_list_modal.sass @@ -27,5 +27,5 @@ &--no-results @include spot-body-small(normal, italic) margin: $spot-spacing-1-5 $spot-spacing-1 - color: var(--color-fg-muted) + color: var(--fgColor-muted) flex-grow: 1 diff --git a/frontend/src/global_styles/content/_project_status.sass b/frontend/src/global_styles/content/_project_status.sass index 7b91f0d27c6c..e0fb09b29663 100644 --- a/frontend/src/global_styles/content/_project_status.sass +++ b/frontend/src/global_styles/content/_project_status.sass @@ -4,7 +4,7 @@ $project-status_off-track: var(--fgColor-danger, var(--color-danger-fg)) $project-status_at-risk: var(--fgColor-severe, var(--color-severe-fg)) $project-status_on-track: var(--fgColor-success, var(--color-success-fg)) $project-status_discontinued: var(--fgColor-attention, var(--color-attention-fg)) -$project-status_not-started: var(--fgColor-accent, var(--color-accent-fg)) +$project-status_not-started: var(--fgColor-accent, var(--fgColor-accent)) $project-status_finished: var(--fgColor-done, var(--color-done-fg)) $project-status-background-color: RGBA(var(--fgColor-subtle, var(--color-subtle-fg)), 0.3) diff --git a/frontend/src/global_styles/content/_projects_list.sass b/frontend/src/global_styles/content/_projects_list.sass index b2be6ddd19fe..1ae680bd9bf2 100644 --- a/frontend/src/global_styles/content/_projects_list.sass +++ b/frontend/src/global_styles/content/_projects_list.sass @@ -72,7 +72,7 @@ $content-padding: 10px display: inline .archived - color: var(--color-fg-muted) + color: var(--fgColor-muted) span.archived-label text-transform: uppercase diff --git a/frontend/src/global_styles/content/_scrollable_tabs.sass b/frontend/src/global_styles/content/_scrollable_tabs.sass index 844676b6a93e..f77b3428c9ed 100644 --- a/frontend/src/global_styles/content/_scrollable_tabs.sass +++ b/frontend/src/global_styles/content/_scrollable_tabs.sass @@ -1,6 +1,6 @@ .op-scrollable-tabs display: flex - border-bottom: 1px solid var(--color-border-muted) + border-bottom: 1px solid var(--borderColor-muted) margin-bottom: 1.5rem &--tab-container diff --git a/frontend/src/global_styles/content/_simple_filters.sass b/frontend/src/global_styles/content/_simple_filters.sass index e1d2cd02ba72..e6dba4216205 100644 --- a/frontend/src/global_styles/content/_simple_filters.sass +++ b/frontend/src/global_styles/content/_simple_filters.sass @@ -26,7 +26,7 @@ // See COPYRIGHT and LICENSE files for more details. //++ -$filters--border-color: var(--color-border-muted) !default +$filters--border-color: var(--borderColor-muted) !default %filters--container border: 1px solid $filters--border-color diff --git a/frontend/src/global_styles/content/_table.sass b/frontend/src/global_styles/content/_table.sass index e2331c1f4b2b..379bef1a6d85 100644 --- a/frontend/src/global_styles/content/_table.sass +++ b/frontend/src/global_styles/content/_table.sass @@ -330,7 +330,7 @@ thead.-sticky th .generic-table--no-results-container background: var(--gray-light) - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) border-radius: 4px padding: 14px 14px 14px 36px display: block diff --git a/frontend/src/global_styles/content/_tables.sass b/frontend/src/global_styles/content/_tables.sass index 83f94b3abc3d..0960b7fafae1 100644 --- a/frontend/src/global_styles/content/_tables.sass +++ b/frontend/src/global_styles/content/_tables.sass @@ -139,7 +139,7 @@ tr &.user &.locked, &.registered, &.locked a, &.registered a - color: var(--color-fg-subtle) + color: var(--fgColor-muted) td &.hours diff --git a/frontend/src/global_styles/content/_tabs.sass b/frontend/src/global_styles/content/_tabs.sass index 12a1fd59000e..57f6f5d0b1f2 100644 --- a/frontend/src/global_styles/content/_tabs.sass +++ b/frontend/src/global_styles/content/_tabs.sass @@ -52,4 +52,4 @@ cursor: default pointer-events: none border-bottom-width: 0 - color: var(--color-fg-muted) + color: var(--fgColor-muted) diff --git a/frontend/src/global_styles/content/_tiles.sass b/frontend/src/global_styles/content/_tiles.sass index 67a48ef6488f..c697161960fe 100644 --- a/frontend/src/global_styles/content/_tiles.sass +++ b/frontend/src/global_styles/content/_tiles.sass @@ -42,7 +42,7 @@ background: #f7fafc min-height: 150px padding: 1rem - border: 1px solid var(--button--border-color) + border: 1px solid var(--button-default-borderColor-rest) &:disabled background: #fafafa diff --git a/frontend/src/global_styles/content/_types_form_configuration.sass b/frontend/src/global_styles/content/_types_form_configuration.sass index 4fb445e6d112..86c35515102a 100644 --- a/frontend/src/global_styles/content/_types_form_configuration.sass +++ b/frontend/src/global_styles/content/_types_form_configuration.sass @@ -47,7 +47,7 @@ #type-form-conf-inactive-group - background: var(--color-fg-muted) + background: var(--fgColor-muted) .visibility-check, .delete-group, .delete-attribute diff --git a/frontend/src/global_styles/content/_user_mention.sass b/frontend/src/global_styles/content/_user_mention.sass index c786fbcf385f..b1c29473f032 100644 --- a/frontend/src/global_styles/content/_user_mention.sass +++ b/frontend/src/global_styles/content/_user_mention.sass @@ -34,7 +34,7 @@ &:before content: '@' - color: var(--color-fg-muted) + color: var(--fgColor-muted) span.user-mention // Remove text selection cursor for group diff --git a/frontend/src/global_styles/content/menus/_menu_blocks.sass b/frontend/src/global_styles/content/menus/_menu_blocks.sass index 5ececb005396..f7e85ce98b0f 100644 --- a/frontend/src/global_styles/content/menus/_menu_blocks.sass +++ b/frontend/src/global_styles/content/menus/_menu_blocks.sass @@ -14,7 +14,7 @@ justify-items: center text-align: center background: #cccccc30 - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) &:hover outline: 1px solid grey diff --git a/frontend/src/global_styles/content/modules/_bim.sass b/frontend/src/global_styles/content/modules/_bim.sass index 454a022ce65b..41c6e57cb6df 100644 --- a/frontend/src/global_styles/content/modules/_bim.sass +++ b/frontend/src/global_styles/content/modules/_bim.sass @@ -9,7 +9,7 @@ padding: 10px &.-failed - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) img width: 100% diff --git a/frontend/src/global_styles/content/modules/_team_planner.sass b/frontend/src/global_styles/content/modules/_team_planner.sass index 758c45bdf856..c56dea97c0ee 100644 --- a/frontend/src/global_styles/content/modules/_team_planner.sass +++ b/frontend/src/global_styles/content/modules/_team_planner.sass @@ -15,7 +15,7 @@ $view-select-dropdown-width: 8rem display: none !important .op-team-planner - --fc-border-color: var(--color-border-muted) + --fc-border-color: var(--borderColor-muted) &--calendar_empty .fc-scrollgrid-section-body, diff --git a/frontend/src/global_styles/content/user-content/_code-block.sass b/frontend/src/global_styles/content/user-content/_code-block.sass index 7a50b1d289ba..f5801b20dc41 100644 --- a/frontend/src/global_styles/content/user-content/_code-block.sass +++ b/frontend/src/global_styles/content/user-content/_code-block.sass @@ -6,7 +6,7 @@ overflow-x: auto overflow-y: hidden background-color: #fafafa - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) > * background-color: transparent @@ -27,6 +27,6 @@ font-weight: normal color: #333739 background-color: #fafafa - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) padding: 0.125em 0.3125em break-inside: avoid diff --git a/frontend/src/global_styles/content/user-content/_placeholder.sass b/frontend/src/global_styles/content/user-content/_placeholder.sass index 7a4b6437cd58..095d723f28d5 100644 --- a/frontend/src/global_styles/content/user-content/_placeholder.sass +++ b/frontend/src/global_styles/content/user-content/_placeholder.sass @@ -4,4 +4,4 @@ color: #6f6f6f padding: 1rem background-color: #fafafa - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) diff --git a/frontend/src/global_styles/content/user-content/_toc.sass b/frontend/src/global_styles/content/user-content/_toc.sass index 59ad91e95543..7f269f8c26a1 100644 --- a/frontend/src/global_styles/content/user-content/_toc.sass +++ b/frontend/src/global_styles/content/user-content/_toc.sass @@ -2,7 +2,7 @@ break-inside: avoid font-size: var(--wiki-default-font-size) background-color: #fafafa - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) float: right margin: 1rem 0rem 1rem 2rem padding: 1.5rem 1.5rem 1.5rem 0rem diff --git a/frontend/src/global_styles/content/user-content/_typography.sass b/frontend/src/global_styles/content/user-content/_typography.sass index cb993bf99070..ad033510ca67 100644 --- a/frontend/src/global_styles/content/user-content/_typography.sass +++ b/frontend/src/global_styles/content/user-content/_typography.sass @@ -23,7 +23,7 @@ .op-uc-h1 margin-bottom: 0.5rem - border-bottom: 1px solid var(--color-border-muted) + border-bottom: 1px solid var(--borderColor-muted) .op-uc-container_reduced-headings border-bottom: none diff --git a/frontend/src/global_styles/content/work_packages/_table_content.sass b/frontend/src/global_styles/content/work_packages/_table_content.sass index d0195c6a7f2b..a2beb11e063a 100644 --- a/frontend/src/global_styles/content/work_packages/_table_content.sass +++ b/frontend/src/global_styles/content/work_packages/_table_content.sass @@ -123,7 +123,7 @@ html:not(.-browser-mobile) color: var(--accent-color) padding: 0 0 0 0.25rem &.-disabled .icon:before - color: var(--color-fg-muted) + color: var(--fgColor-muted) &:hover text-decoration: none diff --git a/frontend/src/global_styles/content/work_packages/_table_hierarchy.sass b/frontend/src/global_styles/content/work_packages/_table_hierarchy.sass index 78fb54410cbf..e7fb9680e5e5 100644 --- a/frontend/src/global_styles/content/work_packages/_table_hierarchy.sass +++ b/frontend/src/global_styles/content/work_packages/_table_hierarchy.sass @@ -65,7 +65,7 @@ body .wp-table--hierarchy-aditional-row, .wp-table--hierarchy-aditional-row .wp-table--hierarchy-indicator-icon - color: var(--color-fg-subtle) + color: var(--fgColor-muted) .hierarchy-header--icon cursor: pointer diff --git a/frontend/src/global_styles/content/work_packages/shared/_file_list.sass b/frontend/src/global_styles/content/work_packages/shared/_file_list.sass index 2ba7c2e1b114..1d5669d926e5 100644 --- a/frontend/src/global_styles/content/work_packages/shared/_file_list.sass +++ b/frontend/src/global_styles/content/work_packages/shared/_file_list.sass @@ -54,7 +54,7 @@ @include spot-caption() line-height: 1.5rem - color: var(--color-fg-muted) + color: var(--fgColor-muted) flex-shrink: 0 &:not(:last-child) diff --git a/frontend/src/global_styles/content/work_packages/shared/_file_picker.sass b/frontend/src/global_styles/content/work_packages/shared/_file_picker.sass index eb3ede5cbfe3..1e3d449e1a62 100644 --- a/frontend/src/global_styles/content/work_packages/shared/_file_picker.sass +++ b/frontend/src/global_styles/content/work_packages/shared/_file_picker.sass @@ -49,7 +49,7 @@ justify-content: center height: 100% text-align: center - color: var(--color-fg-subtle) + color: var(--fgColor-muted) & &-icon width: 9.5rem diff --git a/frontend/src/global_styles/content/work_packages/shared/_file_section.sass b/frontend/src/global_styles/content/work_packages/shared/_file_section.sass index 92515080cb8a..61e9b85264ae 100644 --- a/frontend/src/global_styles/content/work_packages/shared/_file_section.sass +++ b/frontend/src/global_styles/content/work_packages/shared/_file_section.sass @@ -50,7 +50,7 @@ margin-top: $spot-spacing-0_25 padding: 20px cursor: pointer - color: var(--color-fg-muted) + color: var(--fgColor-muted) background: rgba($spot-color-basic-white, 0.9) &::after @@ -61,7 +61,7 @@ height: 100% left: 0 width: 100% - border: 2px dashed var(--color-border-default) + border: 2px dashed var(--borderColor-default) &_float display: none @@ -94,7 +94,7 @@ height: calc(100% - #{$spot-spacing-1}) left: $spot-spacing-0_5 width: calc(100% - #{$spot-spacing-1}) - border: 2px dashed var(--color-border-default) + border: 2px dashed var(--borderColor-default) &_dragging display: flex @@ -123,7 +123,7 @@ &-text cursor: pointer - color: var(--color-fg-muted) + color: var(--fgColor-muted) font-size: 0.9rem font-weight: var(--base-text-weight-bold) line-height: 1.4 @@ -140,4 +140,4 @@ @include spot-body-small($style: italic) margin-top: $spot-spacing-0_75 - color: var(--color-fg-muted) + color: var(--fgColor-muted) diff --git a/frontend/src/global_styles/content/work_packages/single_view/_single_view.sass b/frontend/src/global_styles/content/work_packages/single_view/_single_view.sass index 6666c244f0ae..23984cc971e3 100644 --- a/frontend/src/global_styles/content/work_packages/single_view/_single_view.sass +++ b/frontend/src/global_styles/content/work_packages/single_view/_single_view.sass @@ -26,7 +26,7 @@ // See COPYRIGHT and LICENSE files for more details. //++ -@import "src/app/spot/styles/tokens/dist/tokens" +@import "app/spot/styles/tokens/dist/tokens" @import "helpers" @mixin details-pane--form-field diff --git a/frontend/src/global_styles/content/work_packages/tabs/_files_tab.sass b/frontend/src/global_styles/content/work_packages/tabs/_files_tab.sass index d3d9caebe880..3d47203494cf 100644 --- a/frontend/src/global_styles/content/work_packages/tabs/_files_tab.sass +++ b/frontend/src/global_styles/content/work_packages/tabs/_files_tab.sass @@ -37,7 +37,7 @@ grid-template: "icon text" "button button" / auto 1fr .info-icon-box - color: var(--color-fg-muted) + color: var(--fgColor-muted) grid-area: icon font-size: 3.375rem margin-right: $spot-spacing-0_5 @@ -52,7 +52,7 @@ .text-box-content @include spot-body-small() - color: var(--color-fg-muted) + color: var(--fgColor-muted) .button-box grid-area: button diff --git a/frontend/src/global_styles/layout/_colors.sass b/frontend/src/global_styles/layout/_colors.sass index d3f7d826c2e8..e7a89e0e5a1b 100644 --- a/frontend/src/global_styles/layout/_colors.sass +++ b/frontend/src/global_styles/layout/_colors.sass @@ -65,7 +65,7 @@ // Square items flex: 0 0 150px height: 150px - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) margin: 10px diff --git a/frontend/src/global_styles/layout/_drop_down.sass b/frontend/src/global_styles/layout/_drop_down.sass index bfbace005daf..66afa11c03d8 100644 --- a/frontend/src/global_styles/layout/_drop_down.sass +++ b/frontend/src/global_styles/layout/_drop_down.sass @@ -99,7 +99,7 @@ margin-left: 19.09px //for whatever reasons it is the right dimension LI > .inactive - color: var(--color-fg-subtle) + color: var(--fgColor-muted) LI > .selected background: var(--drop-down-selected-bg-color) diff --git a/frontend/src/global_styles/layout/work_packages/_full_view.sass b/frontend/src/global_styles/layout/work_packages/_full_view.sass index f5f99a590f03..df620ed27713 100644 --- a/frontend/src/global_styles/layout/work_packages/_full_view.sass +++ b/frontend/src/global_styles/layout/work_packages/_full_view.sass @@ -39,14 +39,14 @@ &--split-container display: flex flex-shrink: 8 - border-top: 1px solid var(--color-border-muted) + border-top: 1px solid var(--borderColor-muted) overflow: visible height: 100% // Important for Firefox to let 'flex-shrink' work correctly. min-height: 0 &--split-left - border-right: 1px solid var(--color-border-muted) + border-right: 1px solid var(--borderColor-muted) overflow-y: auto overflow-x: hidden flex: 2 diff --git a/frontend/src/global_styles/openproject.sass b/frontend/src/global_styles/openproject.sass index e2bcd8896927..6048a0657f7b 100644 --- a/frontend/src/global_styles/openproject.sass +++ b/frontend/src/global_styles/openproject.sass @@ -6,6 +6,7 @@ @import "vendor/_index.sass" @import "layout/_index.sass" @import "content/_index.sass" +@import "primer/_index.sass" @import "./common/openproject-common.module" @import "../app/shared/directives/search-highlight.directive" diff --git a/frontend/src/global_styles/openproject/_forms.sass b/frontend/src/global_styles/openproject/_forms.sass index a77644557b86..2c29d7f9a230 100644 --- a/frontend/src/global_styles/openproject/_forms.sass +++ b/frontend/src/global_styles/openproject/_forms.sass @@ -47,7 +47,7 @@ $form-padding: 0.5rem !default // Text fields $input-color: #000 !default -$input-border: 1px solid var(--color-border-default) !default +$input-border: 1px solid var(--borderColor-default) !default $input-border-focus: 1px solid #999 !default // Labels diff --git a/frontend/src/global_styles/openproject/_generic.sass b/frontend/src/global_styles/openproject/_generic.sass index cb5e2b93f820..e9ede8321f45 100644 --- a/frontend/src/global_styles/openproject/_generic.sass +++ b/frontend/src/global_styles/openproject/_generic.sass @@ -79,7 +79,7 @@ .other-formats font-size: 0.9em - color: var(--color-fg-muted) + color: var(--fgColor-muted) span + span:before content: "| " diff --git a/frontend/src/global_styles/openproject/_homescreen.sass b/frontend/src/global_styles/openproject/_homescreen.sass index 540d224359bd..ac8b119b1f9d 100644 --- a/frontend/src/global_styles/openproject/_homescreen.sass +++ b/frontend/src/global_styles/openproject/_homescreen.sass @@ -31,7 +31,7 @@ .controller-homescreen #content-wrapper .widget-box box-shadow: none - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) &.upsale background: $spot-color-feedback-info-light diff --git a/frontend/src/global_styles/openproject/_index.sass b/frontend/src/global_styles/openproject/_index.sass index 6647b5351e45..857b3e217af7 100644 --- a/frontend/src/global_styles/openproject/_index.sass +++ b/frontend/src/global_styles/openproject/_index.sass @@ -13,4 +13,3 @@ @import working-days-admin-settings @import ndc-dynamic -@import primer-adjustments diff --git a/frontend/src/global_styles/openproject/_mixins.sass b/frontend/src/global_styles/openproject/_mixins.sass index af7395231b83..af56fe2f5f17 100644 --- a/frontend/src/global_styles/openproject/_mixins.sass +++ b/frontend/src/global_styles/openproject/_mixins.sass @@ -83,7 +83,7 @@ @mixin widget-box--style background: var(--body-background) margin: 10px - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) box-shadow: 0px 1px 5px 0px rgba(0,0,0,0.1) @mixin widget-box--hover-style @@ -287,7 +287,7 @@ $scrollbar-size: 10px &:hover cursor: default - border-color: var(--color-fg-muted) + border-color: var(--fgColor-muted) background: rgba(218,223,225,0.75) @mixin unset-button-styles diff --git a/frontend/src/global_styles/openproject/_scm.sass b/frontend/src/global_styles/openproject/_scm.sass index 2372afc02d2e..1a158ef29c8d 100644 --- a/frontend/src/global_styles/openproject/_scm.sass +++ b/frontend/src/global_styles/openproject/_scm.sass @@ -93,17 +93,17 @@ li.change &::before content: '▸' - color: var(--color-fg-muted) + color: var(--fgColor-muted) table.filecontent - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) border-collapse: collapse width: 98% background-color: #fafafa line-height: initial th - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) background-color: #eee &.filename background-color: #e4e4d4 diff --git a/frontend/src/global_styles/openproject/_variable_defaults.scss b/frontend/src/global_styles/openproject/_variable_defaults.scss index 69ee333dba65..a6e368dd65b4 100644 --- a/frontend/src/global_styles/openproject/_variable_defaults.scss +++ b/frontend/src/global_styles/openproject/_variable_defaults.scss @@ -29,8 +29,10 @@ // use CSS4 variables for easier theming :root { - --primary-button-color: var(--button-primary-bgColor-rest, var(--color-btn-primary-bg)); + --primary-button-color: #1F883D; --primary-button-color--major1: #197032; + --primary-button-color--minor1: #d2e7d8; + --primary-button-color--minor2: #a5cfb1; --control-checked-color: var(--accent-color); --control-checked-color--major1: var(--accent-color--major1); @@ -47,6 +49,7 @@ --app-height: 100vh; --body-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; + --body-font-size: var(--text-body-size-medium); --gray: #EAEAEA; --gray-light: #F8F8F8; @@ -91,7 +94,7 @@ --main-menu-selected-font-color: var(--main-menu-font-color); --main-menu-font-size: 14px; --main-menu-fieldset-header-color: #B0B2B3; - --main-menu-hover-border-color: var(--color-canvas-default-transparent); + --main-menu-hover-border-color: transparent; --toolbar-title-color: #5F5F5F; --toolbar-item--bg-color: #F8F8F8; --toolbar-item--bg-color-pressed: var(--gray-lighter); @@ -122,12 +125,13 @@ --button--font-color: #222222; --button--background-color: var(--gray-light); --button--background-hover-color: #ededed; - --button--border-color: #dddddd; --button--active-font-color: #666666; --button--active-background-color: #eeeeee; --button--active-border-color: #cacaca; --button--primary-background-color: var(--primary-button-color); --button--primary-background-hover-color: var(--primary-button-color--major1); + --button--primary-background-disabled-color: var(--primary-button-color--minor2); + --button--primary-border-disabled-color: var(--primary-button-color--minor2); --button--primary-font-color: var(--font-color-on-primary); --generic-table--header-font-size: 0.875rem; --generic-table--header-height: 45px; @@ -140,7 +144,7 @@ --warn:#C92A2A; --grid-background-color: #F3F6F8; --avatar-border-color: transparent; - --list-item-hover--border-color: var(--color-canvas-default-transparent); + --list-item-hover--border-color: transparent; --list-item-hover--color: var(--accent-color); --link-text-decoration: none; } diff --git a/frontend/src/global_styles/primer/_icons.sass b/frontend/src/global_styles/primer/_icons.sass new file mode 100644 index 000000000000..78048aee5425 --- /dev/null +++ b/frontend/src/global_styles/primer/_icons.sass @@ -0,0 +1,33 @@ +//-- copyright +// OpenProject is an open source project management software. +// Copyright (C) 2012-2024 the OpenProject GmbH +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License version 3. +// +// OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +// Copyright (C) 2006-2013 Jean-Philippe Lang +// Copyright (C) 2010-2013 the ChiliProject Team +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// See COPYRIGHT and LICENSE files for more details. +//++ + +// Adjustments for icons + +.op-primer--star-icon, +.Button--invisible.Button--iconOnly.op-primer--star-icon svg + color: var(--color-scale-yellow-2) !important diff --git a/frontend/src/global_styles/primer/_index.sass b/frontend/src/global_styles/primer/_index.sass new file mode 100644 index 000000000000..cd140c4f0365 --- /dev/null +++ b/frontend/src/global_styles/primer/_index.sass @@ -0,0 +1,2 @@ +@import icons +@import overrides diff --git a/frontend/src/global_styles/openproject/_primer-adjustments.sass b/frontend/src/global_styles/primer/_overrides.sass similarity index 100% rename from frontend/src/global_styles/openproject/_primer-adjustments.sass rename to frontend/src/global_styles/primer/_overrides.sass diff --git a/frontend/src/global_styles/vendor/_full_calendar.sass b/frontend/src/global_styles/vendor/_full_calendar.sass index 40d717b58001..9e0ee5f8e69a 100644 --- a/frontend/src/global_styles/vendor/_full_calendar.sass +++ b/frontend/src/global_styles/vendor/_full_calendar.sass @@ -128,7 +128,7 @@ height: 34px background: var(--button--background-color) color: var(--button--font-color) - border-color: var(--button--border-color) + border-color: var(--button-default-borderColor-rest) margin-bottom: 0 &:focus diff --git a/frontend/src/global_styles/vendor/_index.sass b/frontend/src/global_styles/vendor/_index.sass index 6dad6a8c32cb..f592c81eab52 100644 --- a/frontend/src/global_styles/vendor/_index.sass +++ b/frontend/src/global_styles/vendor/_index.sass @@ -3,3 +3,4 @@ @import dragula @import enjoyhint @import full_calendar +@import primer diff --git a/frontend/src/global_styles/vendor/_primer.sass b/frontend/src/global_styles/vendor/_primer.sass new file mode 100644 index 000000000000..1c548595d058 --- /dev/null +++ b/frontend/src/global_styles/vendor/_primer.sass @@ -0,0 +1,26 @@ +// Needed for the support of the basic mixins (e.g "breakpoint"), +// and styles which are still part of the CSS repo and not moved over yet (e.g. part of the Button style (e.g. "ellipsis-expander")) +@import "@primer/css/core/index" + +// Needed for accessing Primer variables inside our sass files +@import "@primer/primitives/dist/css/base/size/size.css" +@import "@primer/primitives/dist/css/base/typography/typography.css" +@import "@primer/primitives/dist/css/functional/size/border.css" +@import "@primer/primitives/dist/css/functional/size/breakpoints.css" +@import "@primer/primitives/dist/css/functional/size/size-coarse.css" +@import "@primer/primitives/dist/css/functional/size/size-fine.css" +@import "@primer/primitives/dist/css/functional/size/size.css" +@import "@primer/primitives/dist/css/functional/size/viewport.css" +@import "@primer/primitives/dist/css/functional/typography/typography.css" +@import "@primer/primitives/dist/css/functional/themes/dark-colorblind.css" +@import "@primer/primitives/dist/css/functional/themes/dark-dimmed.css" +@import "@primer/primitives/dist/css/functional/themes/dark-high-contrast.css" +@import "@primer/primitives/dist/css/functional/themes/dark-tritanopia.css" +@import "@primer/primitives/dist/css/functional/themes/dark.css" +@import "@primer/primitives/dist/css/functional/themes/light-colorblind.css" +@import "@primer/primitives/dist/css/functional/themes/light-high-contrast.css" +@import "@primer/primitives/dist/css/functional/themes/light-tritanopia.css" +@import "@primer/primitives/dist/css/functional/themes/light.css" + +// Style of the ViewComponents +@import "@openproject/primer-view-components/app/assets/styles/primer_view_components.css" diff --git a/frontend/src/spot.scss b/frontend/src/spot.scss index d20d5913082a..107954192851 100644 --- a/frontend/src/spot.scss +++ b/frontend/src/spot.scss @@ -1,8 +1,8 @@ // SPOT variables -@import "src/assets/sass/_helpers.sass"; +@import "_helpers.sass"; // Fonts -@import "src/global_styles/fonts/_index.sass"; +@import "../../global_styles/fonts/_index.sass"; // SPOT styles @import "app/spot/styles/sass/common"; diff --git a/frontend/src/stimulus/controllers/async-dialog.controller.ts b/frontend/src/stimulus/controllers/async-dialog.controller.ts new file mode 100644 index 000000000000..61e9fa59391b --- /dev/null +++ b/frontend/src/stimulus/controllers/async-dialog.controller.ts @@ -0,0 +1,96 @@ +/* + * -- copyright + * OpenProject is an open source project management software. + * Copyright (C) 2023 the OpenProject GmbH + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License version 3. + * + * OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: + * Copyright (C) 2006-2013 Jean-Philippe Lang + * Copyright (C) 2010-2013 the ChiliProject Team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * See COPYRIGHT and LICENSE files for more details. + * ++ + */ + +import { ApplicationController } from 'stimulus-use'; +import { renderStreamMessage } from '@hotwired/turbo'; + +export default class AsyncDialogController extends ApplicationController { + private loadingDialog:HTMLDialogElement|null; + + connect() { + this.element.addEventListener('click', (e) => { + e.preventDefault(); + this.triggerTurboStream(); + }); + } + + triggerTurboStream():void { + let loaded = false; + + setTimeout(() => { + if (!loaded) { + this.addLoading(); + } + }, 100); + + fetch(this.href, { + method: this.method, + headers: { + Accept: 'text/vnd.turbo-stream.html', + }, + }).then((r) => r.text()) + .then((html) => { + loaded = true; + renderStreamMessage(html); + }) + .finally(() => this.removeLoading()); + } + + removeLoading() { + this.loadingDialog?.remove(); + } + + addLoading() { + this.removeLoading(); + const dialog = document.createElement('dialog'); + dialog.classList.add('Overlay', 'Overlay--size-medium', 'Overlay--motion-scaleFade'); + dialog.style.height = '150px'; + dialog.style.display = 'grid'; + dialog.style.placeContent = 'center'; + dialog.id = 'loading'; + dialog.innerHTML = ` + + + + + `; + document.body.appendChild(dialog); + dialog.showModal(); + this.loadingDialog = dialog; + } + + get href() { + return (this.element as HTMLLinkElement).href; + } + + get method() { + return (this.element as HTMLLinkElement).dataset.turboMethod || 'GET'; + } +} diff --git a/frontend/src/stimulus/controllers/dynamic/admin/custom-fields.controller.ts b/frontend/src/stimulus/controllers/dynamic/admin/custom-fields.controller.ts index 9a72661058a5..c8dd3a307054 100644 --- a/frontend/src/stimulus/controllers/dynamic/admin/custom-fields.controller.ts +++ b/frontend/src/stimulus/controllers/dynamic/admin/custom-fields.controller.ts @@ -327,6 +327,11 @@ export default class CustomFieldsController extends Controller { this.activate(this.possibleValuesTargets, false); this.activate(this.textOrientationTargets); break; + case 'link': + this.hide(...this.lengthTargets); + this.show(...this.regexpTargets, ...this.searchableTargets); + this.activate(this.possibleValuesTargets, false); + break; default: this.show(...this.lengthTargets, ...this.regexpTargets, ...this.searchableTargets); this.activate(this.possibleValuesTargets, false); diff --git a/frontend/src/stimulus/controllers/dynamic/filters.controller.ts b/frontend/src/stimulus/controllers/dynamic/filters.controller.ts index 4f04f6038f09..50650a77a291 100644 --- a/frontend/src/stimulus/controllers/dynamic/filters.controller.ts +++ b/frontend/src/stimulus/controllers/dynamic/filters.controller.ts @@ -31,6 +31,12 @@ import { Controller } from '@hotwired/stimulus'; +interface InternalFilterValue { + name:string; + operator:string; + value:string[]; +} + export default class FiltersController extends Controller { static targets = [ 'filterFormToggle', @@ -60,9 +66,11 @@ export default class FiltersController extends Controller { static values = { displayFilters: { type: Boolean, default: false }, + outputFormat: { type: String, default: 'params' }, }; declare displayFiltersValue:boolean; + declare outputFormatValue:string; toggleDisplayFilters() { this.displayFiltersValue = !this.displayFiltersValue; @@ -191,7 +199,16 @@ export default class FiltersController extends Controller { const orderParam = this.getUrlParameter('sortBy'); const columnParam = this.getUrlParameter('columns'); const idParam = this.getUrlParameter('query_id'); - let queryString = `?filters=${encodeURIComponent(filters.join('&'))}`; + let filterParam; + + if (this.outputFormatValue === 'json') { + filterParam = JSON.stringify(filters.map((filter) => { return this.buildFilterJSON(filter); })); + } else { + filterParam = filters.map((filter) => { return this.buildFilterString(filter); }).join('&'); + } + + let queryString = `?filters=${encodeURIComponent(filterParam)}`; + if (orderParam) { queryString = `${queryString}&sortBy=${encodeURIComponent(orderParam)}`; } @@ -205,9 +222,9 @@ export default class FiltersController extends Controller { window.location.href = window.location.pathname + queryString; } - private parseFilters() { + private parseFilters():InternalFilterValue[] { const advancedFilters = this.filterTargets.filter((filter) => !filter.classList.contains('hidden')); - const filters:string[] = []; + const filters:InternalFilterValue[] = []; advancedFilters.forEach((filter) => { const filterName = filter.getAttribute('filter-name'); @@ -218,9 +235,7 @@ export default class FiltersController extends Controller { const parsedValue = this.parseFilterValue(filterName, filterType, parsedOperator) as string[]|null; if (parsedValue) { - const valuesString = parsedValue.length > 1 ? `[${parsedValue.map((v) => `"${this.replaceDoubleQuotes(v)}"`).join(',')}]` : `"${this.replaceDoubleQuotes(parsedValue[0])}"`; - - filters.push(`${filterName} ${parsedOperator} ${valuesString}`); + filters.push({ name: filterName, operator: parsedOperator, value: parsedValue }); } } }); @@ -228,6 +243,16 @@ export default class FiltersController extends Controller { return filters; } + private buildFilterString(filter:InternalFilterValue) { + const valuesString = filter.value.length > 1 ? `[${filter.value.map((v) => `"${this.replaceDoubleQuotes(v)}"`).join(',')}]` : `"${this.replaceDoubleQuotes(filter.value[0])}"`; + + return `${filter.name} ${filter.operator} ${valuesString}`; + } + + private buildFilterJSON(filter:InternalFilterValue) { + return { [filter.name]: { operator: filter.operator, values: filter.value } }; + } + private replaceDoubleQuotes(value:string) { return value && value.length > 0 ? value.replace(/"/g, '\\"') : ''; } @@ -241,11 +266,16 @@ export default class FiltersController extends Controller { if (valueContainer) { const checkbox = valueContainer.querySelector('input[type="checkbox"]') as HTMLInputElement; + const isAutocomplete = valueContainer.dataset.filterAutocomplete === 'true'; if (checkbox) { return [checkbox.checked ? 't' : 'f']; } + if (isAutocomplete) { + return (valueContainer.querySelector('input[name="value"]') as HTMLInputElement)?.value.split(','); + } + if (this.operatorsWithoutValues.includes(operator)) { return []; } diff --git a/frontend/src/stimulus/controllers/dynamic/meeting-agenda-item-drag-and-drop.controller.ts b/frontend/src/stimulus/controllers/dynamic/meeting-agenda-item-drag-and-drop.controller.ts index e3e1c0f1d32a..458894bf4386 100644 --- a/frontend/src/stimulus/controllers/dynamic/meeting-agenda-item-drag-and-drop.controller.ts +++ b/frontend/src/stimulus/controllers/dynamic/meeting-agenda-item-drag-and-drop.controller.ts @@ -36,6 +36,24 @@ import { debugLog } from 'core-app/shared/helpers/debug_output'; export default class extends Controller { drake:Drake|undefined; + autoScroll() { + // options copied from generic-drag-and-drop.controller for consistency + void window.OpenProject.getPluginContext().then((pluginContext) => { + // eslint-disable-next-line no-new + new pluginContext.classes.DomAutoscrollService( + [ + document.getElementById('content-wrapper') as HTMLElement, + ], + { + margin: 25, + maxSpeed: 10, + scrollWhenOutside: true, + autoScroll: () => this.drake?.dragging, + }, + ); + }); + } + connect() { this.drake = dragula( [this.containerTarget], @@ -43,6 +61,8 @@ export default class extends Controller { ) // eslint-disable-next-line @typescript-eslint/no-misused-promises .on('drop', this.drop.bind(this)); + + this.autoScroll(); } get containerTarget():HTMLElement { diff --git a/frontend/src/stimulus/controllers/dynamic/meeting-agenda-item-form.controller.ts b/frontend/src/stimulus/controllers/dynamic/meeting-agenda-item-form.controller.ts index dd20e439e3df..786c4b0a441f 100644 --- a/frontend/src/stimulus/controllers/dynamic/meeting-agenda-item-form.controller.ts +++ b/frontend/src/stimulus/controllers/dynamic/meeting-agenda-item-form.controller.ts @@ -45,19 +45,17 @@ export default class extends Controller { connect():void { this.focusInput(); + this.addNotes(); } focusInput():void { const titleInput = this.element.querySelector('input[name="meeting_agenda_item[title]"]'); - setTimeout(() => { - this.element.scrollIntoView({ block: 'center' }); - if (window.getComputedStyle(this.notesInputTarget).display !== 'none') { - this.focusCkEditor(); - } else if (titleInput) { - (titleInput as HTMLInputElement).focus(); - } - }, 100); + this.element.scrollIntoView({ block: 'center' }); + if (titleInput) { + (titleInput as HTMLInputElement).focus(); + this.setCursorAtEnd(titleInput as HTMLInputElement); + } } async cancel() { @@ -77,16 +75,12 @@ export default class extends Controller { addNotes() { this.notesInputTarget.classList.remove('d-none'); - this.notesAddButtonTarget.classList.add('d-none'); - this.focusCkEditor(); } - private focusCkEditor() { - setTimeout(() => { - const ckContent = this.element.querySelector('.ck-content'); - if (ckContent) { - ckContent.focus(); - } - }, 50); + setCursorAtEnd(inputElement:HTMLInputElement):void { + if (document.activeElement === inputElement) { + const valueLength = inputElement.value.length; + inputElement.setSelectionRange(valueLength, valueLength); + } } } diff --git a/frontend/src/stimulus/controllers/dynamic/meeting-section-form.controller.ts b/frontend/src/stimulus/controllers/dynamic/meeting-section-form.controller.ts new file mode 100644 index 000000000000..9906a1f3a78e --- /dev/null +++ b/frontend/src/stimulus/controllers/dynamic/meeting-section-form.controller.ts @@ -0,0 +1,74 @@ +/* + * -- copyright + * OpenProject is an open source project management software. + * Copyright (C) 2023 the OpenProject GmbH + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License version 3. + * + * OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: + * Copyright (C) 2006-2013 Jean-Philippe Lang + * Copyright (C) 2010-2013 the ChiliProject Team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * See COPYRIGHT and LICENSE files for more details. + * ++ + */ + +import * as Turbo from '@hotwired/turbo'; +import { Controller } from '@hotwired/stimulus'; + +export default class extends Controller { + static values = { + cancelUrl: String, + }; + + declare cancelUrlValue:string; + + connect():void { + this.focusInput(); + } + + focusInput():void { + const titleInput = this.element.querySelector('input[name="meeting_section[title]"]'); + + this.element.scrollIntoView({ block: 'center' }); + (titleInput as HTMLInputElement).focus(); + this.setCursorAtEnd(titleInput as HTMLInputElement); + } + + async cancel() { + const response = await fetch(this.cancelUrlValue, { + method: 'GET', + headers: { + 'X-CSRF-Token': (document.querySelector('meta[name="csrf-token"]') as HTMLMetaElement).content, + Accept: 'text/vnd.turbo-stream.html', + }, + }); + + if (response.ok) { + const text = await response.text(); + Turbo.renderStreamMessage(text); + } + } + + setCursorAtEnd(inputElement:HTMLInputElement):void { + if (document.activeElement === inputElement) { + const valueLength = inputElement.value.length; + inputElement.setSelectionRange(valueLength, valueLength); + } + } +} diff --git a/frontend/src/stimulus/controllers/dynamic/op-turbo-op-primer-async-dialog.controller.ts b/frontend/src/stimulus/controllers/dynamic/overview-header.controller.ts similarity index 70% rename from frontend/src/stimulus/controllers/dynamic/op-turbo-op-primer-async-dialog.controller.ts rename to frontend/src/stimulus/controllers/dynamic/overview-header.controller.ts index 59ca206674b7..bfe845600c12 100644 --- a/frontend/src/stimulus/controllers/dynamic/op-turbo-op-primer-async-dialog.controller.ts +++ b/frontend/src/stimulus/controllers/dynamic/overview-header.controller.ts @@ -29,20 +29,24 @@ */ import { Controller } from '@hotwired/stimulus'; -import { TurboElement } from '../../../typings/turbo'; -export default class extends Controller { - static targets = ['frameElement']; - declare readonly frameElementTarget:HTMLInputElement&TurboElement; - - private initialState:string; - - connect():void { - this.initialState = this.frameElementTarget.innerHTML; +export default class OverviewHeaderController extends Controller { + connect() { + window.addEventListener('angular:router:module-changed', this.toggleHeaderVisibility); } - reinitFrame():void { - this.frameElementTarget.innerHTML = this.initialState; - this.frameElementTarget.reload(); + disconnect() { + window.removeEventListener('angular:router:module-changed', this.toggleHeaderVisibility); } + + toggleHeaderVisibility = (event:CustomEvent) => { + const name = event.detail as string; + const element = this.element as HTMLElement; + + if (name === 'overview') { + element.classList.remove('d-none'); + } else { + element.classList.add('d-none'); + } + }; } diff --git a/frontend/src/stimulus/controllers/dynamic/sort-by-config.controller.ts b/frontend/src/stimulus/controllers/dynamic/sort-by-config.controller.ts new file mode 100644 index 000000000000..678195f3b62c --- /dev/null +++ b/frontend/src/stimulus/controllers/dynamic/sort-by-config.controller.ts @@ -0,0 +1,247 @@ +/* + * -- copyright + * OpenProject is an open source project management software. + * Copyright (C) 2023 the OpenProject GmbH + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License version 3. + * + * OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: + * Copyright (C) 2006-2013 Jean-Philippe Lang + * Copyright (C) 2010-2013 the ChiliProject Team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * See COPYRIGHT and LICENSE files for more details. + * ++ + */ + +import { Controller } from '@hotwired/stimulus'; +import { compact } from 'lodash'; + +export default class SortByConfigController extends Controller { + static targets = [ + 'sortByField', + 'inputRow', + 'inputRowContainer', + ]; + + // These fields can only be selected in isolation. When this field is selected, no other option is allowed to be selected + static onlySelectableInIsolation = ['lft']; + + // For some fields we must enforce a fixed direction, those can be listed here + static fixedDirections:Map = new Map([ + ['lft', 'asc'], + ]); + + declare readonly sortByFieldTarget:HTMLInputElement; + declare readonly inputRowTargets:HTMLElement[]; + declare readonly inputRowContainerTarget:HTMLElement; + + connect():void { + this.inputRowTargets.forEach((row) => { + this.manageRow(row); + }); + + this.displayNewFieldSelectorIfNeeded(); + this.disableSelectedFieldsForOtherSelects(); + } + + buildSortJson():string { + const filters = this.inputRowTargets.map((row) => { + const field = this.getSelectedField(row); + if (field) { return [field, this.getSelectedDirection(row)]; } + return null; + }); + + return JSON.stringify(compact(filters)); + } + + fieldChanged(event:Event):void { + const target = event.target as HTMLElement; + const row = target.closest('div[data-sort-by-config-target="inputRow"]') as HTMLElement; + + this.manageRow(row); + + this.displayNewFieldSelectorIfNeeded(); + this.disableSelectedFieldsForOtherSelects(); + + this.sortByFieldTarget.value = this.buildSortJson(); + } + + manageRow(row:HTMLElement):void { + const selectedField = this.getSelectedField(row); + const selectedDirection = this.getSelectedDirection(row); + + // we have deselected the field, so we need to unset the direction, remove the row and move it to the end of the list + if (!selectedField) { + this.moveRowToBottom(row); + this.unsetDirection(row); + + if (this.visibleFieldCount() > 1) { + this.hideRow(row); + } + } else { + // we have selected a field, let's check a few things on it + + // we have added a new field and no direction is set yet, we default to asc + if (!selectedDirection) { + this.setDirection(row, 'asc'); + } + + // we have selected a field that requires a fixed direction + if (selectedField && SortByConfigController.fixedDirections.has(selectedField)) { + this.setDirection(row, SortByConfigController.fixedDirections.get(selectedField) as string); + this.toggleDirectionEnabled(row, false); + } else { + this.toggleDirectionEnabled(row, true); + } + + // we have a field that can only be selected in isolation, we need to unset and remove all other fields + if (this.isIsolatedField(row)) { + this.inputRowTargets.forEach((otherRow) => { + if (otherRow !== row) { + this.hideRow(otherRow); + this.unsetField(otherRow); + this.unsetDirection(otherRow); + this.moveRowToBottom(otherRow); + } + }); + } + } + } + + displayNewFieldSelectorIfNeeded():void { + // If an isolated field is selected, we do not want to display a new field + if (this.anyIsolatedFieldSelected()) { return; } + + // If there is a visible field without a selected field, we do not want to display a new field + if (this.anyRowVisibleWithoutSelectedField()) { return; } + + // figure out if we need to display a new input field + const nextHiddenRow = this.firstHiddenRow(); + + // we have not reached the maximum number of visible fields, and there is no visible empty field, display a new one + if (nextHiddenRow) { + this.showRow(nextHiddenRow); + } + } + + anyIsolatedFieldSelected():boolean { + return this.inputRowTargets.some((row) => this.isIsolatedField(row)); + } + + isIsolatedField(row:HTMLElement):boolean { + const selectedField = this.getSelectedField(row); + if (!selectedField) { return false; } + + return SortByConfigController.onlySelectableInIsolation.includes(selectedField); + } + + visibleFieldCount():number { + return this.inputRowTargets.filter((row) => this.rowIsVisible(row)).length; + } + + firstHiddenRow():HTMLElement|null { + return this.inputRowTargets.find((row) => !this.rowIsVisible(row)) || null; + } + + anyRowVisibleWithoutSelectedField():boolean { + return this.inputRowTargets.some((row) => this.rowIsVisible(row) && !this.getSelectedField(row)); + } + + getSelectedField(row:HTMLElement):string|null { + const selectedField = row.querySelector('select[name="sort_field"]') as HTMLSelectElement; + return selectedField?.value || null; + } + + getSelectedDirection(row:HTMLElement):string|null { + const selectedSegment = row.querySelector('li.SegmentedControl-item--selected > button'); + return selectedSegment?.getAttribute('data-direction') || null; + } + + unsetField(row:HTMLElement):void { + const select = row.querySelector('select[name="sort_field"]') as HTMLSelectElement; + select.value = ''; + } + + unsetDirection(row:HTMLElement):void { + const segmentControls = row.querySelectorAll('li.SegmentedControl-item'); + segmentControls.forEach((control) => { + control.classList.remove('SegmentedControl-item--selected'); + control.querySelector('button')?.setAttribute('aria-current', 'false'); + }); + } + + setDirection(row:HTMLElement, direction:string):void { + const segmentControls = row.querySelectorAll('li.SegmentedControl-item'); + + segmentControls.forEach((control) => { + const button = control.querySelector('button') as HTMLButtonElement; + + if (button.getAttribute('data-direction') === direction) { + control.classList.add('SegmentedControl-item--selected'); + button.setAttribute('aria-current', 'true'); + } else { + control.classList.remove('SegmentedControl-item--selected'); + button.setAttribute('aria-current', 'false'); + } + }); + } + + toggleDirectionEnabled(row:HTMLElement, enabled:boolean):void { + const segmentControls = row.querySelectorAll('li.SegmentedControl-item'); + segmentControls.forEach((control) => { + const button = control.querySelector('button') as HTMLButtonElement; + button.disabled = !enabled; + }); + } + + rowIsVisible(row:HTMLElement):boolean { + return !row.classList.contains('d-none'); + } + + showRow(row:HTMLElement):void { + row.classList.remove('d-none'); + } + + hideRow(row:HTMLElement):void { + row.classList.add('d-none'); + } + + getAllSelectedFields(...excludedRows:HTMLElement[]):string[] { + return compact(this.inputRowTargets.map((row) => { + if (!excludedRows.includes(row)) { + return this.getSelectedField(row); + } + return null; + })); + } + + moveRowToBottom(row:HTMLElement):void { + row.remove(); + this.inputRowContainerTarget.append(row); + } + + disableSelectedFieldsForOtherSelects():void { + this.inputRowTargets.forEach((row) => { + const selectedFieldsInOtherRows = this.getAllSelectedFields(row); + const otherSelect = row.querySelector('select[name="sort_field"]') as HTMLSelectElement; + otherSelect.querySelectorAll('option').forEach((option) => { + option.disabled = selectedFieldsInOtherRows.includes(option.value); + }); + }); + } +} diff --git a/frontend/src/stimulus/setup.ts b/frontend/src/stimulus/setup.ts index bfca0612ba45..48382bd3b449 100644 --- a/frontend/src/stimulus/setup.ts +++ b/frontend/src/stimulus/setup.ts @@ -5,6 +5,7 @@ import MainMenuController from './controllers/dynamic/menus/main.controller'; import OpDisableWhenCheckedController from './controllers/disable-when-checked.controller'; import PrintController from './controllers/print.controller'; import RefreshOnFormChangesController from './controllers/refresh-on-form-changes.controller'; +import AsyncDialogController from './controllers/async-dialog.controller'; declare global { interface Window { @@ -26,3 +27,4 @@ instance.register('menus--main', MainMenuController); instance.register('disable-when-checked', OpDisableWhenCheckedController); instance.register('print', PrintController); instance.register('refresh-on-form-changes', RefreshOnFormChangesController); +instance.register('async-dialog', AsyncDialogController); diff --git a/frontend/src/styles.scss b/frontend/src/styles.scss index 8683229d6b26..6ab00cc487dc 100644 --- a/frontend/src/styles.scss +++ b/frontend/src/styles.scss @@ -1,8 +1,5 @@ // You can add global styles to this file, and also import other style files @import "~@ng-select/ng-select/themes/default.theme.css"; -@import "@primer/css/index.scss"; -@import "@primer/css/primitives/index.scss"; -@import "@openproject/primer-view-components/app/assets/styles/primer_view_components.css"; // Variables @import "global_styles/openproject/_variable_defaults.scss"; diff --git a/frontend/src/turbo/dialog-stream-action.ts b/frontend/src/turbo/dialog-stream-action.ts new file mode 100644 index 000000000000..fa26d05c3ac7 --- /dev/null +++ b/frontend/src/turbo/dialog-stream-action.ts @@ -0,0 +1,23 @@ +import { StreamActions, StreamElement } from '@hotwired/turbo'; + +export function registerDialogStreamAction() { + StreamActions.dialog = function dialogStreamAction(this:StreamElement) { + const content = this.templateElement.content; + const parent = content.firstElementChild as HTMLElement; + const dialog = content.querySelector('dialog') as HTMLDialogElement; + // Set a temporary width so the dialog reflows after opening + dialog.style.width = '0px'; + + document.body.append(content); + + // Auto-show the modal + dialog.showModal(); + + // Remove the element on close + dialog.addEventListener('close', () => parent.remove()); + + setTimeout(() => { + dialog.style.removeProperty('width'); + }, 10); + }; +} diff --git a/frontend/src/turbo/setup.ts b/frontend/src/turbo/setup.ts index 214cd9140944..0f10dd45405e 100644 --- a/frontend/src/turbo/setup.ts +++ b/frontend/src/turbo/setup.ts @@ -1,4 +1,7 @@ +import '../typings/shims.d.ts'; import * as Turbo from '@hotwired/turbo'; +import { registerDialogStreamAction } from './dialog-stream-action'; +import { addTurboEventListeners } from './turbo-event-listeners'; import { ModalDialogElement } from '@openproject/primer-view-components/app/components/primer/alpha/modal_dialog'; // Disable default turbo-drive for now as we don't need it for now AND it breaks angular routing @@ -6,6 +9,9 @@ Turbo.session.drive = false; // Start turbo Turbo.start(); +addTurboEventListeners(); +registerDialogStreamAction(); + // Error handling when "Content missing" returned document.addEventListener('turbo:frame-missing', (event:CustomEvent) => { const { detail: { response, visit } } = event as { detail:{ response:Response, visit:(url:string) => void } }; diff --git a/frontend/src/turbo/turbo-event-listeners.ts b/frontend/src/turbo/turbo-event-listeners.ts new file mode 100644 index 000000000000..23a76c58a1c1 --- /dev/null +++ b/frontend/src/turbo/turbo-event-listeners.ts @@ -0,0 +1,13 @@ +export function addTurboEventListeners() { + // Close the primer dialog when the form inside has been submitted with a success response + // It is necessary to close the primer dialog using the `close()` method, otherwise + // it will leave an overflow:hidden attribute on the body, which prevents scrolling on the page. + document.addEventListener('turbo:submit-end', (event:CustomEvent) => { + const { detail: { success }, target } = event as { detail:{ success:boolean }, target:EventTarget }; + + if (success && target instanceof HTMLFormElement) { + const dialog = target.closest('dialog') as HTMLDialogElement; + dialog && dialog.close(); + } + }); +} diff --git a/frontend/src/typings/shims.d.ts b/frontend/src/typings/shims.d.ts index 1f936f8bd881..46fea2f96dc5 100644 --- a/frontend/src/typings/shims.d.ts +++ b/frontend/src/typings/shims.d.ts @@ -18,16 +18,32 @@ import { Injector } from '@angular/core'; import { OpenProject } from 'core-app/core/setup/globals/openproject'; import * as TLodash from 'lodash'; -import { GlobalI18n } from 'core-app/core/i18n/i18n.service'; import { Dragula } from 'dragula'; import { Screenfull } from 'screenfull'; import { ErrorReporterBase } from 'core-app/core/errors/error-reporter-base'; import { I18n } from 'i18n-js'; +import '@hotwired/turbo'; declare module 'observable-array'; declare module 'dom-autoscroller'; declare module 'core-vendor/enjoyhint'; +declare module '@hotwired/turbo' { + export const session:{ + drive:boolean; + }; + + export const navigator:{ + submitForm:(form:HTMLFormElement, submitter?:HTMLElement) => void; + } + + export interface StreamElement { + templateElement:HTMLTemplateElement; + } + + export function start():void; +} + declare global { const _:typeof TLodash; const I18n:I18n; diff --git a/lib/api/v3/attachments/attachable_representer_mixin.rb b/lib/api/v3/attachments/attachable_representer_mixin.rb index 20fa5ba1be5f..c1989c274faa 100644 --- a/lib/api/v3/attachments/attachable_representer_mixin.rb +++ b/lib/api/v3/attachments/attachable_representer_mixin.rb @@ -36,6 +36,8 @@ module AttachableRepresenterMixin included do link :attachments do + next if hide_attachments? + { href: attachments_by_resource } @@ -48,7 +50,7 @@ module AttachableRepresenterMixin next if represented.new_record? { - href: attachments_by_resource + "/prepare", + href: "#{attachments_by_resource}/prepare", method: :post } end @@ -69,6 +71,10 @@ module AttachableRepresenterMixin if: ->(*) { embed_links }, uncacheable: true + def hide_attachments? + false + end + def attachments ::API::V3::Attachments::AttachmentCollectionRepresenter.new(attachment_set, self_link: attachments_by_resource, diff --git a/lib/api/v3/queries/schemas/filter_dependency_representer_factory.rb b/lib/api/v3/queries/schemas/filter_dependency_representer_factory.rb index bf1bcabe2310..c0a72621569a 100644 --- a/lib/api/v3/queries/schemas/filter_dependency_representer_factory.rb +++ b/lib/api/v3/queries/schemas/filter_dependency_representer_factory.rb @@ -98,7 +98,7 @@ def cf_representer_class(filter) "API::V3::Queries::Schemas::BooleanFilterDependencyRepresenter" when "user", "version", "float" "API::V3::Queries::Schemas::#{format.camelize}FilterDependencyRepresenter" - when "string" + when "string", "link" "API::V3::Queries::Schemas::TextFilterDependencyRepresenter" end end diff --git a/lib/api/v3/users/user_representer.rb b/lib/api/v3/users/user_representer.rb index b31daa7546b2..8c8f8a006509 100644 --- a/lib/api/v3/users/user_representer.rb +++ b/lib/api/v3/users/user_representer.rb @@ -184,7 +184,7 @@ class UserRepresenter < ::API::V3::Principals::PrincipalRepresenter ## # Used while parsing JSON to initialize `ldap_auth_source_id` through the given link. def initialize_embedded_links!(data) - ldap_auth_source_id = parse_auth_source_id data, "auth_source" + ldap_auth_source_id = parse_auth_source_id(data, "authSource") || parse_auth_source_id(data, "auth_source") if ldap_auth_source_id auth_source = LdapAuthSource.find_by_unique(ldap_auth_source_id) # rubocop:disable Rails/DynamicFindBy diff --git a/lib/api/v3/utilities/custom_field_injector.rb b/lib/api/v3/utilities/custom_field_injector.rb index 23a3330fd18f..229521e3b98a 100644 --- a/lib/api/v3/utilities/custom_field_injector.rb +++ b/lib/api/v3/utilities/custom_field_injector.rb @@ -34,6 +34,7 @@ class CustomFieldInjector "string" => "String", "empty" => "String", "text" => "Formattable", + "link" => "Link", "int" => "Integer", "float" => "Float", "date" => "Date", diff --git a/lib/api/v3/work_packages/schema/typed_work_package_schema.rb b/lib/api/v3/work_packages/schema/typed_work_package_schema.rb index ec8c2704fc98..9d7d0a5a2ea8 100644 --- a/lib/api/v3/work_packages/schema/typed_work_package_schema.rb +++ b/lib/api/v3/work_packages/schema/typed_work_package_schema.rb @@ -51,6 +51,10 @@ def no_caching? false end + def work_package + @work_package ||= WorkPackage.new(project:, type:) + end + private def contract @@ -58,12 +62,6 @@ def contract .new(work_package, User.current) end - - def work_package - @work_package ||= WorkPackage - .new(project:, - type:) - end end end end diff --git a/lib/api/v3/work_packages/schema/work_package_schema_representer.rb b/lib/api/v3/work_packages/schema/work_package_schema_representer.rb index 67f7202d26f3..2c396ac2d353 100644 --- a/lib/api/v3/work_packages/schema/work_package_schema_representer.rb +++ b/lib/api/v3/work_packages/schema/work_package_schema_representer.rb @@ -91,6 +91,11 @@ def initialize(schema, self_link:, **context) { href: @base_schema_link } if @base_schema_link end + link :attachments do + next if represented.work_package.hide_attachments? + { href: nil } + end + # Needs to not be cached as the queries in the attribute # groups might contain information (e.g. project names) whose # visibility needs to be checked per user @@ -181,9 +186,9 @@ def initialize(schema, self_link:, **context) type: "Duration", required: false, show_if: ->(*) { - current_user.allowed_in_project?(:view_time_entries, represented.project) || - current_user.allowed_in_any_work_package?(:view_own_time_entries, in_project: represented.project) - } + current_user.allowed_in_project?(:view_time_entries, represented.project) || + current_user.allowed_in_any_work_package?(:view_own_time_entries, in_project: represented.project) + } schema :percentage_done, type: "Integer", diff --git a/lib/api/v3/work_packages/work_package_collection_representer.rb b/lib/api/v3/work_packages/work_package_collection_representer.rb index efc82d215791..f00f423383a3 100644 --- a/lib/api/v3/work_packages/work_package_collection_representer.rb +++ b/lib/api/v3/work_packages/work_package_collection_representer.rb @@ -235,11 +235,12 @@ def representation_formats representation_format_pdf, representation_format_pdf_report_with_images, representation_format_pdf_report, + representation_format_pdf_gantt, representation_format_xls, representation_format_xls_descriptions, representation_format_xls_relations, representation_format_csv - ] + ].compact if Setting.feeds_enabled? formats << representation_format_atom @@ -287,6 +288,16 @@ def representation_format_pdf_report url_query_extras: "show_report=true" end + def representation_format_pdf_gantt + return unless EnterpriseToken.allows_to?(:gantt_pdf_export) + + representation_format "pdf", + format: "pdf", + i18n_key: "pdf_gantt", + mime_type: "application/pdf", + url_query_extras: "gantt=true" + end + def representation_format_xls representation_format "xls", mime_type: "application/vnd.ms-excel" diff --git a/lib/api/v3/work_packages/work_package_representer.rb b/lib/api/v3/work_packages/work_package_representer.rb index b265ac2761d8..b282a43722ce 100644 --- a/lib/api/v3/work_packages/work_package_representer.rb +++ b/lib/api/v3/work_packages/work_package_representer.rb @@ -580,6 +580,8 @@ def to_hash(*args) super end + delegate :hide_attachments?, to: :represented + # Permissions def current_user_watcher? @current_user_watcher ||= represented.watchers.any? { |w| w.user_id == current_user.id } @@ -698,6 +700,7 @@ def json_cache_key json_key_representer_parts, represented.cache_checksum, Setting.work_package_done_ratio, + Setting.show_work_package_attachments, Setting.feeds_enabled?] end diff --git a/lib/open_project.rb b/lib/open_project.rb index 4027bd1810a2..4f1119991dec 100644 --- a/lib/open_project.rb +++ b/lib/open_project.rb @@ -47,8 +47,20 @@ def self.logger end def self.httpx + # In tests it is not advisible to cache httpx session object, + # because, for example, stubs made for this object in one test case can + # easy interfere with other test cases using the same session object. + if Rails.env.test? + httpx_session + else + Thread.current[:httpx_session] ||= httpx_session + end + end + + private_class_method def self.httpx_session session = HTTPX .plugin(:oauth) + .plugin(:persistent) .plugin(:basic_auth) .plugin(:webdav) .with( diff --git a/lib/open_project/patches/carrierwave_sanitized_file.rb b/lib/open_project/patches/carrierwave_sanitized_file.rb index 9b6c4e237410..2c22c8a84548 100644 --- a/lib/open_project/patches/carrierwave_sanitized_file.rb +++ b/lib/open_project/patches/carrierwave_sanitized_file.rb @@ -37,6 +37,6 @@ def authenticated_url(options = {}) end end -OpenProject::Patches.patch_gem_version "carrierwave", "1.3.2" do +OpenProject::Patches.patch_gem_version "carrierwave", "1.3.4" do CarrierWave::Storage::Fog::File.include OpenProject::Patches::FogFile end diff --git a/lib/open_project/patches/fog_file.rb b/lib/open_project/patches/fog_file.rb index 5018c80551f7..29bd469c1557 100644 --- a/lib/open_project/patches/fog_file.rb +++ b/lib/open_project/patches/fog_file.rb @@ -14,6 +14,6 @@ def mkdir!(path, directory_permissions) end end -OpenProject::Patches.patch_gem_version "carrierwave", "1.3.2" do +OpenProject::Patches.patch_gem_version "carrierwave", "1.3.4" do CarrierWave::SanitizedFile.include OpenProject::Patches::CarrierwaveSanitizedFile end diff --git a/lib/open_project/patches/i18n_reject_empty_string.rb b/lib/open_project/patches/i18n_reject_empty_string.rb index 419f1c4528dc..814f1d836caf 100644 --- a/lib/open_project/patches/i18n_reject_empty_string.rb +++ b/lib/open_project/patches/i18n_reject_empty_string.rb @@ -60,6 +60,6 @@ def replace_empty_strings(hash) end end -OpenProject::Patches.patch_gem_version "i18n", "1.14.4" do +OpenProject::Patches.patch_gem_version "i18n", "1.14.5" do I18n.backend.singleton_class.prepend OpenProject::Patches::I18nRejectEmptyString end diff --git a/lib/open_project/patches/lookbook_tree_node_inflector.rb b/lib/open_project/patches/lookbook_tree_node_inflector.rb index c6652dfdb45e..fdabef5a1bb3 100644 --- a/lib/open_project/patches/lookbook_tree_node_inflector.rb +++ b/lib/open_project/patches/lookbook_tree_node_inflector.rb @@ -41,7 +41,7 @@ def label end if Rails.env.development? - OpenProject::Patches.patch_gem_version "lookbook", "2.2.2" do + OpenProject::Patches.patch_gem_version "lookbook", "2.3.0" do Lookbook::TreeNode.prepend OpenProject::Patches::LookbookTreeNodeInflector end end diff --git a/lib/open_project/version.rb b/lib/open_project/version.rb index ca7726f51a63..fbb0e231cc89 100644 --- a/lib/open_project/version.rb +++ b/lib/open_project/version.rb @@ -32,8 +32,8 @@ module OpenProject module VERSION # :nodoc: MAJOR = 14 - MINOR = 0 - PATCH = 1 + MINOR = 1 + PATCH = 0 class << self # Used by semver to define the special version (if any). diff --git a/lib/primer/open_project/forms/autocompleter.html.erb b/lib/primer/open_project/forms/autocompleter.html.erb index 9b3c555f437e..751846cec8bf 100644 --- a/lib/primer/open_project/forms/autocompleter.html.erb +++ b/lib/primer/open_project/forms/autocompleter.html.erb @@ -1,6 +1,7 @@ <%= render(FormControl.new(input: @input, data: @wrapper_data_attributes)) do %> <% if decorated_select? %> <%= render partial: '/augmented/autocomplete_select_decoration', + formats: %i[html], locals: { input_name: @autocomplete_options.fetch(:inputName) { builder.field_name(@input.name) }, input_id: @autocomplete_options.fetch(:inputId) { builder.field_id(@input.name) }, @@ -10,7 +11,7 @@ append_to: @autocomplete_options.fetch(:append_to, 'body') } %> <% else %> - <%= angular_component_tag @autocomplete_options.fetch(:component, 'opce-autocompleter'), + <%= angular_component_tag @autocomplete_options.fetch(:component), data: @autocomplete_options.delete(:data) { {} }, inputs: @autocomplete_options.merge( classes: "ng-select--primerized #{@input.invalid? ? '-error' : ''}", diff --git a/lib/primer/open_project/forms/dsl/autocompleter_input.rb b/lib/primer/open_project/forms/dsl/autocompleter_input.rb index ea4355547802..497658f27d91 100644 --- a/lib/primer/open_project/forms/dsl/autocompleter_input.rb +++ b/lib/primer/open_project/forms/dsl/autocompleter_input.rb @@ -28,7 +28,7 @@ def to_h def initialize(name:, label:, autocomplete_options:, wrapper_data_attributes: {}, **system_arguments) @name = name @label = label - @autocomplete_options = autocomplete_options + @autocomplete_options = derive_autocompleter_options(autocomplete_options) @wrapper_data_attributes = wrapper_data_attributes @select_options = [] @@ -37,6 +37,12 @@ def initialize(name:, label:, autocomplete_options:, wrapper_data_attributes: {} yield(self) if block_given? end + def derive_autocompleter_options(options) + options.reverse_merge( + component: "opce-autocompleter" + ) + end + def option(**args) @select_options << Option.new(**args) end diff --git a/lib/primer/open_project/forms/dsl/input_methods.rb b/lib/primer/open_project/forms/dsl/input_methods.rb index 28e31ef4eacd..5a4aa6148507 100644 --- a/lib/primer/open_project/forms/dsl/input_methods.rb +++ b/lib/primer/open_project/forms/dsl/input_methods.rb @@ -9,6 +9,14 @@ def autocompleter(**, &) add_input AutocompleterInput.new(builder: @builder, form: @form, **, &) end + def work_package_autocompleter(**, &) + add_input WorkPackageAutocompleterInput.new(builder: @builder, form: @form, **, &) + end + + def project_autocompleter(**, &) + add_input ProjectAutocompleterInput.new(builder: @builder, form: @form, **, &) + end + def rich_text_area(**) add_input RichTextAreaInput.new(builder: @builder, form: @form, **) end diff --git a/lib/primer/open_project/forms/dsl/project_autocompleter_input.rb b/lib/primer/open_project/forms/dsl/project_autocompleter_input.rb new file mode 100644 index 000000000000..5b58c0ba542f --- /dev/null +++ b/lib/primer/open_project/forms/dsl/project_autocompleter_input.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +module Primer + module OpenProject + module Forms + module Dsl + class ProjectAutocompleterInput < AutocompleterInput + def derive_autocompleter_options(options) + options.reverse_merge!( + component: "opce-project-autocompleter", + defaultData: false, + filters: [{ name: 'active', operator: '=', values: ['t'] }], + ) + + if options[:disabledProjects] + options[:disabledProjects].stringify_keys! + end + + options + end + end + end + end + end +end diff --git a/lib/primer/open_project/forms/dsl/work_package_autocompleter_input.rb b/lib/primer/open_project/forms/dsl/work_package_autocompleter_input.rb new file mode 100644 index 000000000000..8a96cee13973 --- /dev/null +++ b/lib/primer/open_project/forms/dsl/work_package_autocompleter_input.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module Primer + module OpenProject + module Forms + module Dsl + class WorkPackageAutocompleterInput < AutocompleterInput + def derive_autocompleter_options(options) + options.reverse_merge( + component: "opce-autocompleter", + resource: "work_packages", + searchKey: "subjectOrId", + ) + end + end + end + end + end +end diff --git a/lib/redmine/menu_manager/menu_helper.rb b/lib/redmine/menu_manager/menu_helper.rb index 5a94f02ad66b..8ad50794d7a3 100644 --- a/lib/redmine/menu_manager/menu_helper.rb +++ b/lib/redmine/menu_manager/menu_helper.rb @@ -152,7 +152,7 @@ def render_wrapped_menu_parent_node(node, project) html_id = node.html_options[:id] || node.name content_tag(:div, class: "main-item-wrapper", id: "#{html_id}-wrapper") do concat render_single_menu_node(node, project) - concat render_menu_toggler + concat render_menu_toggler(node.name) end end @@ -163,11 +163,14 @@ def render_wrapped_single_node(node, project) end end - def render_menu_toggler + def render_menu_toggler(node_name) content_tag(:button, class: "toggler main-menu-toggler", type: :button, - data: { action: "menus--main#descend" }) do + data: { + action: "menus--main#descend", + test_selector: "main-menu-toggler--#{node_name}" + }) do render(Primer::Beta::Octicon.new("arrow-right", size: :small)) end end diff --git a/lib_static/open_project/acts/favorable.rb b/lib_static/open_project/acts/favorable.rb new file mode 100644 index 000000000000..3fab37d32805 --- /dev/null +++ b/lib_static/open_project/acts/favorable.rb @@ -0,0 +1,91 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module OpenProject + module Acts + module Favorable + def self.included(base) + base.extend ClassMethods + end + + module ClassMethods + # Marks an ActiveRecord::Model as favorable + # A favorable model has association with users (watchers) that marked it as favorite. + # + # This also creates the routes necessary for favoring/unfavoring by + # adding the model's name to routes. This e.g leads to the following + # routes when marking issues as watchable: + # POST: projects/identifier/favorite + # DELETE: projects/identifier/favorite + # + # acts_as_favorable expects that the including module defines a +visible?(user)+ method, + # as it's used to identify whether a user can actually favorite the object. + def acts_as_favorable + return if included_modules.include?(::OpenProject::Acts::Favorable::InstanceMethods) + OpenProject::Acts::Favorable::Registry.add(self) + + class_eval do + has_many :favorites, as: :favored, dependent: :delete_all, validate: false + has_many :favoring_users, through: :favorites, source: :user, validate: false + + scope :favored_by, ->(user_id) { + includes(:favorites) + .where(favorites: { user_id: }) + } + end + + send :prepend, ::OpenProject::Acts::Favorable::InstanceMethods + end + end + + module InstanceMethods + def self.prepended(base) + base.extend ClassMethods + end + + def add_favoring_user(user) + return if favorites.exists?(user_id: user.id) + + favorites << Favorite.new(user:, favored: self) + end + + def remove_favoring_user(user) + favorites.where(user:).delete_all + end + + def set_favored(user, favored: true) + favored ? add_favoring_user(user) : remove_favoring_user(user) + end + + def favored_by?(user) + favorites.exists?(user:) + end + end + end + end +end diff --git a/lib_static/open_project/acts/favorable/registry.rb b/lib_static/open_project/acts/favorable/registry.rb new file mode 100644 index 000000000000..34cd454001be --- /dev/null +++ b/lib_static/open_project/acts/favorable/registry.rb @@ -0,0 +1,57 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module OpenProject + module Acts + module Favorable + module Registry + def self.models + @models ||= Set.new + end + + def self.exists?(model) + models.include?(model) + end + + def self.instance(model_name) + models.detect { |cls| cls.name == model_name.singularize.camelize } + end + + def self.add(*models) + models.each do |model| + unless model.ancestors.include?(::OpenProject::Acts::Watchable) + raise ArgumentError.new("Model #{model} does not include acts_as_watchable") + end + + self.models << model + end + end + end + end + end +end diff --git a/lib_static/open_project/acts/favorable/routes.rb b/lib_static/open_project/acts/favorable/routes.rb new file mode 100644 index 000000000000..afd526649cd4 --- /dev/null +++ b/lib_static/open_project/acts/favorable/routes.rb @@ -0,0 +1,42 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module OpenProject + module Acts + module Favorable + module Routes + def self.matches?(request) + params = request.path_parameters + + Registry.instance(params[:object_type]) && + /\d+/.match(params[:object_id]) + end + end + end + end +end diff --git a/lib_static/plugins/acts_as_watchable/lib/acts_as_watchable.rb b/lib_static/open_project/acts/watchable.rb similarity index 90% rename from lib_static/plugins/acts_as_watchable/lib/acts_as_watchable.rb rename to lib_static/open_project/acts/watchable.rb index efa6d55a8236..a6c963aa6f53 100644 --- a/lib_static/plugins/acts_as_watchable/lib/acts_as_watchable.rb +++ b/lib_static/open_project/acts/watchable.rb @@ -25,9 +25,10 @@ # # See COPYRIGHT and LICENSE files for more details. #++ +require_relative "watchable/registry" +require_relative "watchable/routes" -# ActsAsWatchable -module Redmine +module OpenProject module Acts module Watchable def self.included(base) @@ -53,7 +54,7 @@ module ClassMethods # is allowed to watch def acts_as_watchable(options = {}) - return if included_modules.include?(Redmine::Acts::Watchable::InstanceMethods) + return if included_modules.include?(::OpenProject::Acts::Watchable::InstanceMethods) acts_as_watchable_enforce_project_association @@ -69,9 +70,10 @@ def acts_as_watchable(options = {}) class_attribute :acts_as_watchable_options self.acts_as_watchable_options = options + ::OpenProject::Acts::Watchable::Registry.add(self) end - send :prepend, Redmine::Acts::Watchable::InstanceMethods + send :prepend, ::OpenProject::Acts::Watchable::InstanceMethods end def acts_as_watchable_enforce_project_association @@ -112,10 +114,10 @@ def possible_watcher_users active_scope = Principal.not_locked.user allowed_scope = if project.public? - User.allowed(self.class.acts_as_watchable_permission, project) - else - User.allowed_members_on_work_package(self.class.acts_as_watchable_permission, self) - end + User.allowed(self.class.acts_as_watchable_permission, project) + else + User.allowed_members_on_work_package(self.class.acts_as_watchable_permission, self) + end active_scope.where(id: allowed_scope) end @@ -158,7 +160,7 @@ def watcher_user_ids=(user_ids) def watched_by?(user) user.present? && ((watchers.loaded? && watchers.map(&:user_id).any? { |uid| uid == user.id }) || - watcher_user_ids.any? { |uid| uid == user.id }) + watcher_user_ids.any? { |uid| uid == user.id }) end module ClassMethods diff --git a/lib_static/open_project/acts/watchable/registry.rb b/lib_static/open_project/acts/watchable/registry.rb new file mode 100644 index 000000000000..c46e0327b558 --- /dev/null +++ b/lib_static/open_project/acts/watchable/registry.rb @@ -0,0 +1,57 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module OpenProject + module Acts + module Watchable + module Registry + def self.models + @models ||= Set.new + end + + def self.exists?(model) + models.include?(model) + end + + def self.instance(model_name) + models.detect { |cls| cls.name == model_name.singularize.camelize } + end + + def self.add(*models) + models.each do |model| + unless model.ancestors.include?(::OpenProject::Acts::Watchable) + raise ArgumentError.new("Model #{model} does not include acts_as_watchable") + end + + self.models << model + end + end + end + end + end +end diff --git a/lib_static/plugins/acts_as_watchable/lib/acts_as_watchable/routes.rb b/lib_static/open_project/acts/watchable/routes.rb similarity index 81% rename from lib_static/plugins/acts_as_watchable/lib/acts_as_watchable/routes.rb rename to lib_static/open_project/acts/watchable/routes.rb index 7874be8c495c..994e52c1d16d 100644 --- a/lib_static/plugins/acts_as_watchable/lib/acts_as_watchable/routes.rb +++ b/lib_static/open_project/acts/watchable/routes.rb @@ -25,7 +25,6 @@ # # See COPYRIGHT and LICENSE files for more details. #++ - module OpenProject module Acts module Watchable @@ -35,20 +34,9 @@ module Routes def self.matches?(request) params = request.path_parameters - watched?(params[:object_type]) && + Registry.instance(params[:object_type]) && /\d+/.match(params[:object_id]) end - - def self.watched?(object) - watchable_object? object - end - - def self.watchable_object?(object) - klass = object.to_s.classify.constantize - klass.included_modules.include? Redmine::Acts::Watchable - rescue StandardError - false - end end end end diff --git a/lib_static/plugins/acts_as_journalized/lib/acts/journalized/save_hooks.rb b/lib_static/plugins/acts_as_journalized/lib/acts/journalized/save_hooks.rb index 863115e2c16a..09a86fe394bf 100644 --- a/lib_static/plugins/acts_as_journalized/lib/acts/journalized/save_hooks.rb +++ b/lib_static/plugins/acts_as_journalized/lib/acts/journalized/save_hooks.rb @@ -73,7 +73,7 @@ def save_journals end end - def add_journal(user: User.current, notes: '', cause: {}) + def add_journal(user: User.current, notes: "", cause: CauseOfChange::NoCause.new) self.journal_user ||= user self.journal_notes ||= notes self.journal_cause ||= cause @@ -83,8 +83,8 @@ def add_journal(user: User.current, notes: '', cause: {}) def with_ensured_journal_attributes self.journal_user ||= User.current - self.journal_notes ||= '' - self.journal_cause ||= {} + self.journal_notes ||= "" + self.journal_cause ||= CauseOfChange::NoCause.new yield ensure diff --git a/lib_static/plugins/acts_as_journalized/lib/acts_as_journalized.rb b/lib_static/plugins/acts_as_journalized/lib/acts_as_journalized.rb index 045275ea70ad..0c5862d6362c 100644 --- a/lib_static/plugins/acts_as_journalized/lib/acts_as_journalized.rb +++ b/lib_static/plugins/acts_as_journalized/lib/acts_as_journalized.rb @@ -47,6 +47,7 @@ require 'journal_changes' require 'journal_formatter' +require 'cause_of_change' module Acts end diff --git a/lib_static/plugins/acts_as_journalized/lib/cause_of_change.rb b/lib_static/plugins/acts_as_journalized/lib/cause_of_change.rb new file mode 100644 index 000000000000..c7294d844ce5 --- /dev/null +++ b/lib_static/plugins/acts_as_journalized/lib/cause_of_change.rb @@ -0,0 +1,52 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2023 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +# This file is part of the acts_as_journalized plugin for the redMine +# project management software +# +# Copyright (C) 2010 Finn GmbH, http://finn.de +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either journal 2 +# of the License, or (at your option) any later journal. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +require_relative 'cause_of_change/base' +require_relative 'cause_of_change/no_cause' + +module CauseOfChange +end diff --git a/lib_static/plugins/acts_as_journalized/lib/cause_of_change/base.rb b/lib_static/plugins/acts_as_journalized/lib/cause_of_change/base.rb new file mode 100644 index 000000000000..3be75e65a887 --- /dev/null +++ b/lib_static/plugins/acts_as_journalized/lib/cause_of_change/base.rb @@ -0,0 +1,50 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2023 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module CauseOfChange + class Base + attr_reader :type, :additional_attributes + + def initialize(type, additional_attributes = {}) + @type = type + @additional_attributes = additional_attributes + end + + def to_hash + { "type" => type }.merge(additional_attributes).deep_stringify_keys + end + + def blank? + false + end + + def ==(other) + to_hash == other.to_hash + end + end +end diff --git a/lib_static/plugins/acts_as_journalized/lib/cause_of_change/no_cause.rb b/lib_static/plugins/acts_as_journalized/lib/cause_of_change/no_cause.rb new file mode 100644 index 000000000000..8e65d5d82c17 --- /dev/null +++ b/lib_static/plugins/acts_as_journalized/lib/cause_of_change/no_cause.rb @@ -0,0 +1,43 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2023 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module CauseOfChange + class NoCause < Base + def initialize + super(nil) + end + + def blank? + true + end + + def to_hash + {} + end + end +end diff --git a/lookbook/docs/patterns/03-autocompleters.md.erb b/lookbook/docs/patterns/03-autocompleters.md.erb index 5e1781bb2b7c..c383ef24a31a 100644 --- a/lookbook/docs/patterns/03-autocompleters.md.erb +++ b/lookbook/docs/patterns/03-autocompleters.md.erb @@ -69,6 +69,13 @@ Keep in mind that this component uses the live work packages API, so results wil <%= embed OpenProject::Common::AutocompletePreview, :work_package, panels: %i[source] %> +### Project autocompletion + +For project autocompletion, you can use the same field, but with a different configuration. +Keep in mind that this component uses the live projects API, so results will depend on whether you are logged in. + +<%= embed OpenProject::Common::AutocompletePreview, :project, panels: %i[source] %> + ### Outside primer If you're not in a primer form, you can render the autocomplete directly like so: diff --git a/lookbook/docs/patterns/05-dialogs.md.erb b/lookbook/docs/patterns/05-dialogs.md.erb index d0217e66e30f..66c135596eff 100644 --- a/lookbook/docs/patterns/05-dialogs.md.erb +++ b/lookbook/docs/patterns/05-dialogs.md.erb @@ -3,6 +3,131 @@ As of now, this page is still a stub. In particular, the considerations on when For now, it can be stated that OpenProject employs Dialogs for more purposes than GitHub [Primer specifies](https://primer.style/components/dialog). +## Async dialogs as turbo streams + +Primer dialogs need to be rendered and tied to a button, resulting in their content always being present. +If you have any non-trivial content that should be displayed in a dialog, you should use the async dialog pattern. + +To render dialogs asynchronously, you use a Button/Link/IconButton component as a trigger and add the following +attributes to it: + +- `tag: :a` so that the component is rendered as a link +- `href: link_to_dialog_path` to specify where to request the dialog stream from +- `data: { controller: "async-dialog" }` to attach the async-dialog controller to the button. + +```erb +<%%= render(Primer::Beta::Button.new( + tag: :a, + href: link_to_dialog_path, + data: { controller: "async-dialog" } +) do |button| + button.with_leading_visual_icon(icon: :edit) + "Edit something" +end) +%> +``` + +On the Rails controller you wish to render the dialog, you need to respond to the request with the dialog content. + +```ruby +class TestController < ApplicationControler + # include the helper module + include OpTurbo::DialogStreamHelper + + # ... + + def dialog + respond_with_dialog MyDialogComponent.new(work_package: @work_package) + end +end +``` + +Assuming the MyDialogComponent template looks like this: + +```erb +<%%= + render(Primer::Alpha::Dialog.new(title: "Edit something", + size: :medium_portrait, + id: "my-dialog-id")) do |d| + d.with_header(variant: :large) + d.with_body do + # Whatever you want to render here.. + end + end +%> +``` + +You can also render the dialog in a manual turbo_stream template + +```ruby +class TestController < ApplicationControler + # include the helper module + include OpTurbo::DialogStreamHelper + + # ... + + def dialog; end +end +``` + + +The content of `dialog.turbo_stream.erb` would then look like this: + +```erb +<%%= turbo_stream.dialog do + render(Primer::Alpha::Dialog.new(title: t(:label_history), + id: 'meeting-history-dialog')) do |d| + d.with_header(variant: :large) + d.with_body do + render(Activities::DaysComponent.new(events: @events, current_project: @project, activity_page: @activity_page)) + end + end +end +%> +``` + +The dialog content is then rendered in a turbo stream response to the request using +a [custom turbo stream action](https://turbo.hotwired.dev/handbook/streams#custom-actions). + +The frontend turbo stream `dialog` action will take this dialog, append it to the body, and open it immediately. +Once the dialog is closed, the content is removed from the DOM again. + +### Dialogs with separate forms + +We have seen that we want to render the body part of the dialog in a separate component. +This will result in the submit buttons being outside of that component that renders a form. + +In the following example, the body renders a separate component with a form. You can tell the +submit button to reference the form attribute using `form: "id-of-the-form"`. With turbo, +you have to make sure that the data-turbo attribute is also set. + +```erb +<%%= turbo_stream.dialog do + render(Primer::Alpha::Dialog.new(title: t(:label_history), + id: 'my-dialog')) do |d| + d.with_header(variant: :large) + d.with_body do + render(ComponentThatRendersAForm.new(form_id: "my-dialog-form") + end + + d.with_footer do + render(Primer::Beta::Button.new( + tag: :button, + type: :submit, + form: "my-dialog-form" + data: { turbo: true } + variant: :primary, + ) do |button| + button.text = t(:button_save) + end) + end + + end +end +%> +``` + + ## Special kinds of dialogs We have multiple kind of dialogs that re-appear throughout the whole application. In order to make sure, they all look and feel alike, we further specify them here. @@ -19,6 +144,12 @@ Or it can be to ascertain the user actually wants to destroy a model. <%= embed OpenProject::Common::DialogPreview, :confirm_deletion %> +**Note:** Currently, confirmation dialog require a lot of manual work to be implemented. +Prefer using a native browser confirmation dialog when possible using the `data-confirm` attribute and UJS for the time +being. + +Primerized confirmation dialogs are still a work in progress. + #### Where it's used diff --git a/lookbook/docs/patterns/15-colors.md.erb b/lookbook/docs/patterns/15-colors.md.erb index 1a56091a5bbb..f79575eb7583 100644 --- a/lookbook/docs/patterns/15-colors.md.erb +++ b/lookbook/docs/patterns/15-colors.md.erb @@ -57,7 +57,7 @@ The following variables of Primer are overwritten with the `--accent-color`: ```css /* --primer-variable: var(--openProject-variable) */ ---color-accent-fg: var(--accent-color) !important; +--fgColor-accent: var(--accent-color) !important; --control-checked-bgColor-rest: var(--accent-color) !important; --control-checked-bgColor-active: var(--accent-color) !important; --control-checked-bgColor-hover: var(--accent-color--major1) !important; @@ -86,11 +86,11 @@ The goal is to use Primer variables all over the application. Once we get to tha ```css /* --openProject-variable: var(--primer-variable) */ - --avatar-border-color: var(--color-avatar-border); - --ck-color-base-border: var(--color-border-default); - --header-bg-color: var(--color-page-header-bg); - --main-menu-bg-color: var(--color-page-header-bg); - --accent-color: var(--color-accent-fg); - --primary-button-color: var(--color-btn-primary-bg); + --avatar-border-color: var(--avatar-borderColor); + --ck-color-base-border: var(--borderColor-default); + --header-bg-color: var(--page-header-bgColor); + --main-menu-bg-color: var(--page-header-bgColor); + --accent-color: var(--fgColor-accent); + --primary-button-color: var(--button-primary-bgColor-rest); ... ``` diff --git a/lookbook/previews/open_project/common/autocomplete_preview.rb b/lookbook/previews/open_project/common/autocomplete_preview.rb index 6405bcd032a8..3b0388849e3e 100644 --- a/lookbook/previews/open_project/common/autocomplete_preview.rb +++ b/lookbook/previews/open_project/common/autocomplete_preview.rb @@ -40,6 +40,11 @@ def decorated def work_package render_with_template end + + # @display min_height 250px + def project + render_with_template + end end end end diff --git a/lookbook/previews/open_project/common/autocomplete_preview/project.html.erb b/lookbook/previews/open_project/common/autocomplete_preview/project.html.erb new file mode 100644 index 000000000000..b597688638a2 --- /dev/null +++ b/lookbook/previews/open_project/common/autocomplete_preview/project.html.erb @@ -0,0 +1,28 @@ +<% + the_form = Class.new(ApplicationForm) do + form do |f| + f.project_autocompleter( + name: :id, + label: Project.model_name.human, + visually_hide_label: true, + autocomplete_options: { + openDirectly: false, + focusDirectly: false, + dropdownPosition: 'bottom', + disabledProjects: Project.visible.take(10).pluck(:id).to_h { |id| [id, "Disabled reason!"] } + } + ) + end + end + + model = Project.new +%> + + +<%= primer_form_with( + model:, + url: '/abc', + id: 'asdf') do |f| + render(the_form.new(f)) +end +%> diff --git a/lookbook/previews/open_project/common/autocomplete_preview/work_package.html.erb b/lookbook/previews/open_project/common/autocomplete_preview/work_package.html.erb index 3d5b6f719c2f..2408d9b885cd 100644 --- a/lookbook/previews/open_project/common/autocomplete_preview/work_package.html.erb +++ b/lookbook/previews/open_project/common/autocomplete_preview/work_package.html.erb @@ -1,7 +1,7 @@ <% the_form = Class.new(ApplicationForm) do form do |f| - f.autocompleter( + f.work_package_autocompleter( name: :id, label: WorkPackage.model_name.human, visually_hide_label: true, diff --git a/lookbook/previews/queries/sort_by_component_preview.rb b/lookbook/previews/queries/sort_by_component_preview.rb new file mode 100644 index 000000000000..7d332cba9f74 --- /dev/null +++ b/lookbook/previews/queries/sort_by_component_preview.rb @@ -0,0 +1,17 @@ +module Queries + class SortByComponentPreview < Lookbook::Preview + def default + query = ::Queries::Projects::ProjectQuery.new + query.order(lft: :asc) + query.order(created_at: :desc) + + render SortByComponent.new( + query:, + selectable_columns: [ + { id: :lft, name: I18n.t(:label_project_hierarchy) }, + { id: :created_at, name: I18n.t("attributes.created_at") } + ] + ) + end + end +end diff --git a/modules/auth_plugins/openproject-auth_plugins.gemspec b/modules/auth_plugins/openproject-auth_plugins.gemspec index 0b85d8ea90c9..915b613b3bb4 100644 --- a/modules/auth_plugins/openproject-auth_plugins.gemspec +++ b/modules/auth_plugins/openproject-auth_plugins.gemspec @@ -4,7 +4,7 @@ Gem::Specification.new do |s| s.authors = "OpenProject GmbH" s.email = "info@openproject.com" s.summary = "OpenProject Auth Plugins" - s.description = "Integration of OmniAuth strategy providers for authentication in Openproject." + s.description = "Integration of OmniAuth strategy providers for authentication in OpenProject." s.license = "GPLv3" s.files = Dir["{app,config,db,lib}/**/*"] + %w(doc/CHANGELOG.md README.md) diff --git a/modules/avatars/app/views/settings/_openproject_avatars.html.erb b/modules/avatars/app/views/settings/_openproject_avatars.html.erb index 990560c942c7..5391edf8f354 100644 --- a/modules/avatars/app/views/settings/_openproject_avatars.html.erb +++ b/modules/avatars/app/views/settings/_openproject_avatars.html.erb @@ -1,5 +1,5 @@ <% manager = ::OpenProject::Avatars::AvatarManager %> -<% html_title t(:label_administration), 'Openproject Avatars' %> +<% html_title t(:label_administration), 'OpenProject Avatars' %>
    <%= t 'avatars.label_gravatar' %> diff --git a/modules/avatars/config/locales/crowdin/js-ms.yml b/modules/avatars/config/locales/crowdin/js-ms.yml index 37948aeb504b..88aac2b59ccd 100644 --- a/modules/avatars/config/locales/crowdin/js-ms.yml +++ b/modules/avatars/config/locales/crowdin/js-ms.yml @@ -5,11 +5,11 @@ ms: button_update: 'Kemaskini' avatars: label_choose_avatar: "Pilih Avatar dari fail" - uploading_avatar: "Memuatnaik avatar anda." + uploading_avatar: "Memuat naik avatar anda." text_upload_instructions: | - Muatnaik avatar tersuai anda sendiri bersaiz 128 x 128 piksel. Fail lebih besar akan disaizkan dan dipotong untuk disesuaikan. + Muat naik avatar tersuai anda sendiri bersaiz 128 x 128 piksel. Fail lebih besar akan disaizkan dan dipotong untuk disesuaikan. Previu avatar anda akan ditunjukkan sebelum muat naik, sebaik sahaja anda memilih imej. error_image_too_large: "Imej terlalu besar." wrong_file_format: "Format yang dibenarkan adalah jpg, png, gif" - empty_file_error: "Sila muatnaik imej yang sah (jpg, png, gif)" + empty_file_error: "Sila muat naik imej yang sah (jpg, png, gif)" diff --git a/modules/avatars/openproject-avatars.gemspec b/modules/avatars/openproject-avatars.gemspec index 469c5ed82950..d6dd5b322f10 100644 --- a/modules/avatars/openproject-avatars.gemspec +++ b/modules/avatars/openproject-avatars.gemspec @@ -10,7 +10,7 @@ Gem::Specification.new do |s| s.files = Dir["{app,config,db,lib}/**/*"] + %w(README.md) - s.add_dependency "fastimage", "~> 2.2.0" + s.add_dependency "fastimage", "~> 2.3.0" s.add_dependency "gravatar_image_tag", "~> 1.2.0" s.metadata["rubygems_mfa_required"] = "true" end diff --git a/modules/backlogs/config/locales/crowdin/ca.yml b/modules/backlogs/config/locales/crowdin/ca.yml index 146d8bf381bc..ad46902febb8 100644 --- a/modules/backlogs/config/locales/crowdin/ca.yml +++ b/modules/backlogs/config/locales/crowdin/ca.yml @@ -64,8 +64,8 @@ ca: properties: "Propietats" rebuild: "Reconstruir" rebuild_positions: "Reconstruir posicions" - remaining_hours: "Remaining work" - remaining_hours_ideal: "Remaining work (ideal)" + remaining_hours: "Treball restant" + remaining_hours_ideal: "Treball restant (ideal)" show_burndown_chart: "Diagrama de progrés" story: "Història" story_points: "Punts d'història" @@ -147,7 +147,7 @@ ca: rb_label_copy_tasks_none: "Cap" rb_label_copy_tasks_open: "Obre" rb_label_link_to_original: "Incloure l'enllaç a la història original" - remaining_hours: "remaining work" + remaining_hours: "treball restant" required_burn_rate_hours: "ritme de progrés necessari (hores)" required_burn_rate_points: "ritme de progrés necessari (punts)" todo_work_package_description: "%{summary}: %{url}\n%{description}" diff --git a/modules/backlogs/config/locales/crowdin/ms.yml b/modules/backlogs/config/locales/crowdin/ms.yml index a06f2bd812cd..3a1c3c3285b1 100644 --- a/modules/backlogs/config/locales/crowdin/ms.yml +++ b/modules/backlogs/config/locales/crowdin/ms.yml @@ -22,7 +22,7 @@ ms: plugin_openproject_backlogs: name: "Tunggakan OpenProject" - description: "Modul ini menambahkan ciri-ciri yang membolehkan kumpulan-kumpulan yang tangkas untuk bekerja menggunakan OpenProject di projek Scrum." + description: "Modul ini menambahkan fitur-fitur yang membolehkan kumpulan-kumpulan yang tangkas untuk bekerja menggunakan OpenProject di projek Scrum." activerecord: attributes: work_package: @@ -35,14 +35,14 @@ ms: attributes: blocks_ids: can_only_contain_work_packages_of_current_sprint: "hanya boleh mengandungi ID pakej kerja dalam pecutan semasa." - must_block_at_least_one_work_package: "perlu mengandungi sekurang-kurangnya ID untuk satu tiket." + must_block_at_least_one_work_package: "perlu mengandungi ID untuk sekurang-kurangnya satu tiket." version_id: task_version_must_be_the_same_as_story_version: "perlu sama dengan versi cerita induk." sprint: cannot_end_before_it_starts: "Pecutan tidak boleh berakhir lebih awal sebelum ia bermula." backlogs: - add_new_story: "Cerita baharu" - any: "mana-mana" + add_new_story: "Cerita Baharu" + any: "sebarang" backlog_settings: "Tetapan tunggakan" burndown_graph: "Graf Burndown" card_paper_size: "Saiz kertas untuk pencetakan kad" @@ -57,15 +57,15 @@ ms: label_versions_default_fold_state: "Paparkan versi dilipat" work_package_is_closed: "Pakej kerja selesai apabila" label_is_done_status: "Status %{status_name} bermaksud selesai" - no_burndown_data: "Tiada data burndown tersedia. Adalah perlu untuk menentukan tarikh mula dan tarikh akhir pecutan." + no_burndown_data: "Tiada data burndown tersedia. Ia diperlukan untuk menentukan tarikh mula dan tarikh akhir pecutan." points: "Mata" positions_could_not_be_rebuilt: "Kedudukan tidak boleh dibina semula." positions_rebuilt_successfully: "Kedudukan berjaya dibina semula." properties: "Ciri-ciri" rebuild: "Bina semula" rebuild_positions: "Bina semula kedudukan" - remaining_hours: "Kerja yang tinggal" - remaining_hours_ideal: "Kerja yang tinggal (ideal)" + remaining_hours: "Baki kerja" + remaining_hours_ideal: "Baki kerja (ideal)" show_burndown_chart: "Carta Burndown" story: "Cerita" story_points: "Titik Cerita" @@ -75,13 +75,13 @@ ms: unassigned: "Belum Ditetapkan" x_more: "%{count} lagi..." backlogs_active: "aktif" - backlogs_any: "mana-mana" - backlogs_inactive: "Projek tidak menunjukkan sebarang aktiviti" + backlogs_any: "sebarang" + backlogs_inactive: "Projek menunjukkan tiada sebarang aktiviti" backlogs_points_burn_direction: "Mata untuk burn up/down" backlogs_product_backlog: "Tunggakan produk" backlogs_product_backlog_is_empty: "Tunggakan produk kosong" backlogs_product_backlog_unsized: "Bahagian atas tunggakan produk mempunyai cerita tanpa saiz" - backlogs_sizing_inconsistent: "Saiz cerita berbeza berbanding anggaran" + backlogs_sizing_inconsistent: "Saiz cerita berbeza mengikut anggaran" backlogs_sprint_notes_missing: "Pecutan ditutup tanpa nota restrospektif atau semakan" backlogs_sprint_unestimated: "Pecutan aktif atau ditutup bersama cerita yang tiada anggaran" backlogs_sprint_unsized: "Projek mempunyai cerita-cerita berkenaan pecutan aktif atau baru ditutup yang tidak bersaiz" @@ -89,14 +89,14 @@ ms: backlogs_story: "Cerita" backlogs_story_type: "Jenis cerita" backlogs_task: "Tugasan" - backlogs_task_type: "Jenis Tugasan" + backlogs_task_type: "Jenis tugasan" backlogs_velocity_missing: "Tiada kelajuan yang boleh dikira untuk projek ini" backlogs_velocity_varies: "Kelajuan berubah signifikan dengan pecutan" backlogs_wiki_template: "Templat untuk pecutan halaman wiki" backlogs_empty_title: "Tiada versi ditetapkan untuk digunakan dalam tunggakan" backlogs_empty_action_text: "Untuk bermula dengan tunggakan, cipta satu versi baru dan tetapkan ia ke kolum tunggakan." button_edit_wiki: "Edit halaman wiki" - error_backlogs_task_cannot_be_story: "Seting tidak sah. Jenis tugasan yang dipilih tidak boleh dijadikan jenis cerita juga." + error_backlogs_task_cannot_be_story: "Tetapan tidak sah. Jenis tugasan yang dipilih juga tidak boleh dijadikan jenis cerita." error_intro_plural: "Ralat-ralat berikut telah ditemui:" error_intro_singular: "Ralat berikut telah ditemui:" error_outro: "Sila betulkan ralat-ralat di atas sebelum menghantar semula." @@ -107,7 +107,7 @@ ms: label_back_to_project: "Kembali ke laman projek" label_backlog: "Tunggakan" label_backlogs: "Tunggakan" - label_backlogs_unconfigured: "Anda belum mengkonfigurasi tunggakan lagi. Sila pergi ke %{administration} > %{plugins}, kemudian klik pautan %{configure} untuk plugin ini. Setelah anda menetapkan ruangan, kembali ke halaman ini untuk mula menggunakan alat ini." + label_backlogs_unconfigured: "Anda masih belum mengkonfigurasi tunggakan. Sila pergi ke %{administration} > %{plugins}, kemudian klik pautan %{configure} untuk plugin ini. Setelah anda menetapkan ruangan, kembali ke halaman ini untuk mula menggunakan alat ini." label_blocks_ids: "ID pakej kerja yang disekat" label_burndown: "Burndown" label_column_in_backlog: "Kolum dalam tunggakan" @@ -121,7 +121,7 @@ ms: label_product_backlog: "produk tunggakan" label_select_all: "Pilih semua" label_sprint_backlog: "tunggakan pecutan " - label_sprint_cards: "Kad eksport" + label_sprint_cards: "Eksport kad" label_sprint_impediments: "Halangan Pecutan" label_sprint_name: "Pecutan \"%{name}\"" label_sprint_velocity: "Kelajuan %{velocity}, berdasarkan %{sprints} pecutan dengan purata %{days} hari" @@ -137,7 +137,7 @@ ms: permission_select_done_statuses: "Pilih status selesai" permission_update_sprints: "Kemas kini pecutan" points_accepted: "mata diterima" - points_committed: "mata yang dianggarkan" + points_committed: "mata yang komited" points_resolved: "mata yang diselesaikan" points_to_accept: "mata yang tidak diterima" points_to_resolve: "mata tidak diselesaikan" @@ -147,9 +147,9 @@ ms: rb_label_copy_tasks_none: "Tiada" rb_label_copy_tasks_open: "Buka" rb_label_link_to_original: "Sertakan pautan ke cerita asal" - remaining_hours: "kerja yang berbaki" - required_burn_rate_hours: "kadar pembakaran yang diperlukan (jam)" - required_burn_rate_points: "kadar pembakaran yang diperlukan (mata)" + remaining_hours: "baki kerja" + required_burn_rate_hours: "kadar burn yang diperlukan (jam)" + required_burn_rate_points: "kadar burn yang diperlukan (mata)" todo_work_package_description: "%{summary}: %{url}\n%{description}" todo_work_package_summary: "%{type}: %{summary}" version_settings_display_label: "Kolum dalam tunggakan" diff --git a/modules/backlogs/config/locales/crowdin/ro.yml b/modules/backlogs/config/locales/crowdin/ro.yml index b600547b9691..6df04accf974 100644 --- a/modules/backlogs/config/locales/crowdin/ro.yml +++ b/modules/backlogs/config/locales/crowdin/ro.yml @@ -59,7 +59,7 @@ ro: label_is_done_status: "Starea %{status_name} înseamnă terminat" no_burndown_data: "Nu sunt disponibile date privind arderea în vegetație. Este necesar să fie stabilite datele de început și de sfârșit ale sprintului." points: "Puncte" - positions_could_not_be_rebuilt: "Nu s-a putut verifica etapa '%{stage}'." + positions_could_not_be_rebuilt: "Pozițiile nu au putut fi reconstruite." positions_rebuilt_successfully: "Toate elementele au fost șterse cu succes" properties: "Proprietăţi" rebuild: "Reconstruiți" diff --git a/modules/backlogs/config/locales/crowdin/th.yml b/modules/backlogs/config/locales/crowdin/th.yml index 99782d990c13..4fbac119a457 100644 --- a/modules/backlogs/config/locales/crowdin/th.yml +++ b/modules/backlogs/config/locales/crowdin/th.yml @@ -42,15 +42,15 @@ th: cannot_end_before_it_starts: "Sprint cannot end before it starts." backlogs: add_new_story: "New Story" - any: "any" + any: "ทั้งหมด" backlog_settings: "Backlogs settings" burndown_graph: "Burndown Graph" card_paper_size: "Paper size for card printing" - chart_options: "Chart options" - close: "Close" - column_width: "Column width:" - date: "Day" - definition_of_done: "Definition of Done" + chart_options: "ตัวเลือกแผนภูมิ" + close: "ปิด" + column_width: "ขนาดคอลัมน์:" + date: "วันที่" + definition_of_done: "นิยามของคำว่าเสร็จสิ้น" generating_chart: "Generating Graph..." hours: "ชั่วโมง" impediment: "Impediment" @@ -58,7 +58,7 @@ th: work_package_is_closed: "Work package is done, when" label_is_done_status: "Status %{status_name} means done" no_burndown_data: "No burndown data available. It is necessary to have the sprint start- and end dates set." - points: "Points" + points: "แต้ม" positions_could_not_be_rebuilt: "Positions could not be rebuilt." positions_rebuilt_successfully: "Positions rebuilt successfully." properties: "คุณสมบัติ" @@ -70,9 +70,9 @@ th: story: "Story" story_points: "Story Points" story_points_ideal: "Story Points (ideal)" - task: "Task" - task_color: "Task color" - unassigned: "Unassigned" + task: "งาน" + task_color: "สีของงาน" + unassigned: "ไม่ได้กำหนด" x_more: "%{count} more..." backlogs_active: "ใช้งานอยู่" backlogs_any: "any" diff --git a/modules/backlogs/lib/open_project/backlogs/engine.rb b/modules/backlogs/lib/open_project/backlogs/engine.rb index b4d870efeacd..50f1d865d864 100644 --- a/modules/backlogs/lib/open_project/backlogs/engine.rb +++ b/modules/backlogs/lib/open_project/backlogs/engine.rb @@ -200,7 +200,7 @@ def self.settings end end - ::Type.add_default_mapping(:estimates_and_time, :story_points) + ::Type.add_default_mapping(:estimates_and_progress, :story_points) ::Type.add_default_mapping(:other, :position) ::Queries::Register.register(::Query) do diff --git a/modules/bim/app/controllers/bim/ifc_models/ifc_models_controller.rb b/modules/bim/app/controllers/bim/ifc_models/ifc_models_controller.rb index 6c64972e7752..00c6bdcca400 100644 --- a/modules/bim/app/controllers/bim/ifc_models/ifc_models_controller.rb +++ b/modules/bim/app/controllers/bim/ifc_models/ifc_models_controller.rb @@ -65,6 +65,13 @@ def defaults end def set_direct_upload_file_name + if params[:filesize].to_i > Setting.attachment_max_size.to_i.kilobytes + render json: { error: I18n.t("activerecord.errors.messages.file_too_large", + count: Setting.attachment_max_size.to_i.kilobytes) }, + status: :unprocessable_entity + return + end + session[:pending_ifc_model_title] = params[:title] session[:pending_ifc_model_is_default] = params[:isDefault] end diff --git a/modules/bim/app/services/bim/ifc_models/set_attributes_service.rb b/modules/bim/app/services/bim/ifc_models/set_attributes_service.rb index a5e4b3cbe03e..bf4cb5ddf252 100644 --- a/modules/bim/app/services/bim/ifc_models/set_attributes_service.rb +++ b/modules/bim/app/services/bim/ifc_models/set_attributes_service.rb @@ -34,6 +34,9 @@ class SetAttributesService < ::BaseServices::SetAttributes def set_attributes(params) model.project = params[:project] if params.key?(:project) set_ifc_attachment(params.delete(:ifc_attachment)) + # Do not proceed to build the IfcModel if the attachment contract is not valid + # Let the errors be displayed back to the user + return model if model.errors.any? super @@ -47,16 +50,11 @@ def set_default_attributes(_params) end def validate_and_result - super.tap do |call| - # map errors on attachments to better display them - if call.errors[:attachments].any? - model.ifc_attachment.errors.details.each do |_, errors| - errors.each do |error| - call.errors.add(:attachments, error[:error], **error.except(:error)) - end - end - end - end + # Do not proceed to build the IfcModel if the attachment contract is not valid + # Let the errors be displayed back to the user before validating the IFC contract + return ServiceResult.failure(result: model, errors: model.errors) if model.errors.any? + + super end def set_title @@ -74,11 +72,20 @@ def set_ifc_attachment(ifc_attachment) model.attachments << ifc_attachment else - ::Attachments::BuildService - .bypass_whitelist(user:) - .call(file: ifc_attachment, container: model, filename: ifc_attachment.original_filename, description: "ifc") + build_ifc_attachment(ifc_attachment) end end + + def build_ifc_attachment(ifc_attachment) + ::Attachments::BuildService + .bypass_whitelist(user:) + .call(file: ifc_attachment, container: model, filename: ifc_attachment.original_filename, description: "ifc") + .on_failure do |build_attachment_result| + build_attachment_result.errors.each do |error| + model.errors.add(:attachments, error.type, **error.detail.except(:error)) + end + end + end end end end diff --git a/modules/bim/app/views/bim/ifc_models/ifc_models/_form.html.erb b/modules/bim/app/views/bim/ifc_models/ifc_models/_form.html.erb index 62d8e3464db2..20ee195c3837 100644 --- a/modules/bim/app/views/bim/ifc_models/ifc_models/_form.html.erb +++ b/modules/bim/app/views/bim/ifc_models/ifc_models/_form.html.erb @@ -62,6 +62,10 @@ See COPYRIGHT and LICENSE files for more details. fileName = fileNameField[0].files[0].name; } + <%# Reset the form validity %> + <%# See: https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement/setCustomValidity %> + fileNameField[0].setCustomValidity(''); + var titleField = jQuery("#bim_ifc_models_ifc_model_title"); <%# When creating a new model, there is no titleField. %> @@ -86,12 +90,20 @@ See COPYRIGHT and LICENSE files for more details. }, data: { title: title, - isDefault: jQuery("#bim_ifc_models_ifc_model_is_default").is(":checked") ? 1 : 0 + isDefault: jQuery("#bim_ifc_models_ifc_model_is_default").is(":checked") ? 1 : 0, + filesize: fileNameField[0].files[0].size }, statusCode: { 401: function(resp, status, error) { document.location.reload(); // reload to make user login again } + }, + error: function(jqXHR, ajaxOptions, errorThrown) { + if (jqXHR.status == 422) { + var errorMessage = jqXHR.responseJSON.error; + fileNameField[0].setCustomValidity(errorMessage); + fileNameField[0].reportValidity(); + } } }); }; diff --git a/modules/bim/config/locales/crowdin/js-ms.yml b/modules/bim/config/locales/crowdin/js-ms.yml index f87ca2993c65..8e70359b7d5a 100644 --- a/modules/bim/config/locales/crowdin/js-ms.yml +++ b/modules/bim/config/locales/crowdin/js-ms.yml @@ -11,7 +11,7 @@ ms: add_viewpoint: 'Tambah sudut pandangan' show_viewpoint: 'Paparkan sudut pandangan' delete_viewpoint: 'Padam sudut pandangan' - management: "Pengurusan BCF\n" + management: 'Pengurusan BCF' refresh: 'Muat semula ' refresh_work_package: 'Muat semula pakej kerja' ifc_models: diff --git a/modules/bim/config/locales/crowdin/ms.seeders.yml b/modules/bim/config/locales/crowdin/ms.seeders.yml index de47e6205a34..9257a180411d 100644 --- a/modules/bim/config/locales/crowdin/ms.seeders.yml +++ b/modules/bim/config/locales/crowdin/ms.seeders.yml @@ -22,7 +22,7 @@ ms: item_2: name: Diselesaikan item_3: - name: Tutup + name: Ditutup time_entry_activities: item_0: name: Pengurusan @@ -47,7 +47,7 @@ ms: name: Konflik global_queries: item_0: - name: 'Jadual tetap: Kanak-kanak' + name: 'Jadual yang telah disematkan: Kanak-kanak' type_configuration: item_0: form_configuration: @@ -95,7 +95,7 @@ ms: title: Selamat datang ke projek demo anda summary: | Kami gembira anda menyertai kami. - Dalam modul ini, anda boleh menyampaikan berita projek ke ahli-ahli pasukan anda. + Dalam modul ini, anda boleh menyampaikan berita projek ke ahli pasukan anda. description: Berita sebenar categories: item_0: Kategori 1 (untuk diubah dalam tetapan Projek) @@ -224,7 +224,7 @@ ms: ## Deskripsi - * Mengenalpasti keperluan pelanggan dengan mengadakan bengkel bersama mereka + * Mengenal pasti keperluan pelanggan dengan mengadakan bengkel bersama mereka * Setiap keperluan akan mewakili satu tugasan dengan pakej tugasan yang sepadan * Memperolehi anggaran kos dan jangka waktu item_1: @@ -421,7 +421,7 @@ ms: item_1: name: Pencapaian item_2: - name: Tugasan + name: Tugasan-tugasan item_3: name: Perancang pasukan project-overview: @@ -450,7 +450,7 @@ ms: 9. _Pemangkin kerja? Cipta satu panel baharu:_ → Pergi ke [Board]({{opSetting:base_url}}/projects/demo-bim-project/boards) Di sini anda akan menemui [Panduan pengguna](https://www.openproject.org/docs/user-guide/) kami. - Sila beritahu kami untuk sebarang soalan atau bantuan. Hubungi kami: [support\[at\]openproject.com](mailto:support@openproject.com). + Sila beritahu kami untuk sebarang soalan atau bantuan. Hubungi kami: [support\[at\]openproject.com](mel ke:support@openproject.com). item_4: options: name: Ahli-ahli @@ -709,7 +709,7 @@ ms: options: name: Permulaan text: | - Kami gembira anda menyertai! Kami cadangkan beberapa perkara sebagai permulaan di OpenProject. + Kami gembira anda menyertai kami! Kami cadangkan beberapa perkara sebagai permulaan di OpenProject. Demo projek ini menunjukkan fungsi pengurusan BCF. diff --git a/modules/bim/config/locales/crowdin/ms.yml b/modules/bim/config/locales/crowdin/ms.yml index 4b57e1c3d060..37a17178c476 100644 --- a/modules/bim/config/locales/crowdin/ms.yml +++ b/modules/bim/config/locales/crowdin/ms.yml @@ -2,7 +2,7 @@ ms: plugin_openproject_bim: name: "Kefungsian BIM dan BCF OpenProject" - description: "Plugin OpenProject ini mengenalkan kefungsian BIM dana BCF." + description: "Plugin OpenProject ini mengenalkan kefungsian BIM dan BCF." bim: label_bim: 'BIM' bcf: @@ -40,13 +40,13 @@ ms: contact_project_admin: 'Hubungi pentadbir projek anda untuk menambah mereka sebagai ahli dan mulakan proses import ini semula.' continue_anyways: 'Adakah anda tetap ingin meneruskan dan selesaikan proses import?' description: "Sediakan fail BCF-XML v2.1 untuk mengimport ke dalam projek ini. Anda boleh periksa kandungannya sebelum mengimport." - invalid_types_found: 'Jenis nama topik tidak sah dijumpai' - invalid_statuses_found: 'Status nama tidak sah dijumpai' - invalid_priorities_found: 'Nama keutamaan tidak sah dijumpai' - invalid_emails_found: 'Alamat e-mel tidak sah dijumpai' - unknown_emails_found: 'Alamat e-mel tidak diketahui dijumpai' - unknown_property: 'Harta tanah yang tidak diketahui' - non_members_found: 'Bukan ahli projek dijumpai' + invalid_types_found: 'Jenis nama topik tidak sah ditemui' + invalid_statuses_found: 'Status nama tidak sah ditemui' + invalid_priorities_found: 'Nama keutamaan tidak sah ditemui' + invalid_emails_found: 'Alamat e-mel tidak sah ditemui' + unknown_emails_found: 'Alamat e-mel tidak diketahui ditemui' + unknown_property: 'Ciri-ciri yang tidak diketahui' + non_members_found: 'Bukan ahli projek ditemui' import_types_as: 'Tetapkan semua jenis ini kepada' import_statuses_as: 'Tetapkan semua status ini kepada' import_priorities_as: 'Tetapkan semua keutamaan ini kepada' @@ -55,7 +55,7 @@ ms: no_type_provided: 'Tiada jenis disediakan' no_status_provided: 'Tiada status disediakan' no_priority_provided: 'Tiada keutamaan disediakan' - perform_description: "Adakah anda ingin mengimport atau mengemas kini isu-isu yang tersenarai diatas?" + perform_description: "Adakah anda ingin mengimport atau mengemas kini isu-isu yang tersenarai di atas?" replace_with_system_user: 'Gantikan mereka dengan pengguna "Sistem"' import_as_system_user: 'Import mereka sebagai pengguna "Sistem".' what_to_do: "Apakah yang anda ingin lakukan?" @@ -88,7 +88,7 @@ ms: bim/ifc_models/ifc_model: attributes: base: - ifc_attachment_missing: "Tiada fail IFC yang dilampirkan:" + ifc_attachment_missing: "Tiada fail IFC yang dilampirkan." invalid_ifc_file: "Fail yang disediakan adalah fail IFC yang tidak sah." bim/bcf/viewpoint: bitmaps_not_writable: "bitmaps tidak boleh ditulis kerana belum dilaksanakan." @@ -106,7 +106,7 @@ ms: bim/bcf/issue: uuid_already_taken: "Tidak dapat mengimport isu BCF ini kerana isu yang mempunyai GUID yang sama telah ada. Mungkinkah isu BCF ini telah diimport ke dalam projek lain?" ifc_models: - label_ifc_models: 'Model IFC' + label_ifc_models: 'Model-model IFC' label_new_ifc_model: 'Model IFC baharu' label_show_defaults: 'Paparkan default' label_default_ifc_models: 'Model default IFC ' @@ -125,7 +125,7 @@ ms: processing_notice: processing_default: 'Model IFC default berikut masih dalam proses dan oleh kerana itu belum tersedia lagi:' flash_messages: - upload_successful: 'Muat naik berjaya. Ia akan diproses dan sedia untuk digunakan dalam masa beberapa minit.' + upload_successful: 'Muat naik berjaya. Akan diproses dan sedia untuk digunakan dalam masa beberapa minit.' conversion: missing_commands: "Arahan converter IFC berikut tidak dijumpai dari sistem ini: %{names}" project_module_ifc_models: "Model IFC" diff --git a/modules/bim/spec/features/ifc_models/direct_ifc_upload_spec.rb b/modules/bim/spec/features/ifc_models/direct_ifc_upload_spec.rb index f6e7a9c0be22..6058222ffa85 100644 --- a/modules/bim/spec/features/ifc_models/direct_ifc_upload_spec.rb +++ b/modules/bim/spec/features/ifc_models/direct_ifc_upload_spec.rb @@ -33,5 +33,23 @@ it_behaves_like "can upload an IFC file" do # with direct upload, we don't get the model name let(:model_name) { "model.ifc" } + + context "when the file size exceeds the allowed maximum", with_settings: { attachment_max_size: 1 } do + it "invalidates the form via JavaScript preventing submission" do + pending "This test is currently flaky due to an unknown reason" + + visit new_bcf_project_ifc_model_path(project_id: project.identifier) + + page.attach_file("file", ifc_fixture.path, visible: :all) + + form_validity = page.evaluate_script <<~JS + document + .querySelector('#new_bim_ifc_models_ifc_model') + .checkValidity(); + JS + + expect(form_validity).to be(false) + end + end end end diff --git a/modules/bim/spec/features/ifc_models/regular_ifc_upload_spec.rb b/modules/bim/spec/features/ifc_models/regular_ifc_upload_spec.rb index e9ceec4c3ecc..a7b6678e3205 100644 --- a/modules/bim/spec/features/ifc_models/regular_ifc_upload_spec.rb +++ b/modules/bim/spec/features/ifc_models/regular_ifc_upload_spec.rb @@ -32,5 +32,17 @@ RSpec.describe "IFC upload", :js, with_config: { edition: "bim" } do it_behaves_like "can upload an IFC file" do let(:model_name) { "minimal.ifc" } + + context "when the file size exceeds the allowed maximum", with_settings: { attachment_max_size: 1 } do + it "renders an error message" do + visit new_bcf_project_ifc_model_path(project_id: project.identifier) + + page.attach_file("file", ifc_fixture.path, visible: :all) + + click_on "Create" + + expect(page).to have_content("IFC file is too large (maximum size is 1024 Bytes).") + end + end end end diff --git a/modules/bim/spec/requests/ifc_models/set_direct_upload_filename_spec.rb b/modules/bim/spec/requests/ifc_models/set_direct_upload_filename_spec.rb new file mode 100644 index 000000000000..99f468207fa0 --- /dev/null +++ b/modules/bim/spec/requests/ifc_models/set_direct_upload_filename_spec.rb @@ -0,0 +1,55 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +require "spec_helper" +require_module_spec_helper + +RSpec.describe "POST /projects/:project_id/ifc_models/set_direct_upload_file_name" do + shared_let(:user) { create(:admin, preferences: { time_zone: "Etc/UTC" }) } + let(:project) { build_stubbed(:project) } + + context "when user is not logged in" do + it "requires login" do + post set_direct_upload_file_name_bcf_project_ifc_models_path(project_id: project.id) + expect(last_response.status).to eq(406) # rubocop:disable RSpecRails/HaveHttpStatus + end + end + + context "when user is logged in" do + before { login_as(user) } + + context "and the upload exceeds the maximum size", with_settings: { attachment_max_size: 1 } do + it "returns a 422" do + post set_direct_upload_file_name_bcf_project_ifc_models_path(project_id: project.id), + { title: "Test.ifc", isDefault: "0", filesize: "113328073" } + expect(last_response.status).to eq(422) # rubocop:disable RSpecRails/HaveHttpStatus + expect(parse_json(last_response.body)).to eq({ "error" => "is too large (maximum size is 1024 Bytes)." }) + end + end + end +end diff --git a/modules/bim/spec/services/ifc_models/set_attributes_service_spec.rb b/modules/bim/spec/services/ifc_models/set_attributes_service_spec.rb index 07ce9d6ff408..5444797e4da4 100644 --- a/modules/bim/spec/services/ifc_models/set_attributes_service_spec.rb +++ b/modules/bim/spec/services/ifc_models/set_attributes_service_spec.rb @@ -35,7 +35,7 @@ let(:other_user) { build_stubbed(:user) } let(:contract_class) do - contract = double("contract_class") + contract = double("contract_class") # rubocop:disable RSpec/VerifiedDoubles allow(contract) .to receive(:new) @@ -44,13 +44,9 @@ contract end - let(:contract_instance) do - double("contract_instance", validate: contract_valid, errors: contract_errors) - end + let(:contract_instance) { double("contract_instance", validate: contract_valid, errors: contract_errors) } # rubocop:disable RSpec/VerifiedDoubles let(:contract_valid) { true } - let(:contract_errors) do - double("contract_errors") - end + let(:contract_errors) { double("contract_errors") } # rubocop:disable RSpec/VerifiedDoubles let(:model_valid) { true } let(:instance) do described_class.new(user:, @@ -80,7 +76,7 @@ .to receive(:valid?) .and_return(model_valid) - expect(contract_instance) + allow(contract_instance) .to receive(:validate) .and_return(contract_valid) end @@ -88,7 +84,8 @@ subject { instance.call(call_attributes) } it "is successful" do - expect(subject.success?).to be_truthy + expect(subject).to be_a_success + expect(contract_instance).to have_received(:validate) end it "sets the attributes" do @@ -99,10 +96,9 @@ end it "does not persist the model" do - expect(model) - .not_to receive(:save) - + allow(model).to receive(:save) subject + expect(model).not_to have_received(:save) end context "for a new record" do @@ -118,7 +114,7 @@ end it "is successful" do - expect(subject.success?).to be_truthy + expect(subject).to be_a_success end it "sets the title to the attachment`s filename" do @@ -137,6 +133,30 @@ end end + context "when the attachment is too large", with_settings: { attachment_max_size: 1 } do + let(:model) { Bim::IfcModels::IfcModel.new(project:) } + let(:model_valid) { false } + + let(:call_attributes) do + { + ifc_attachment: ifc_file + } + end + + before do + allow(ifc_file).to receive(:size).and_return(2.kilobytes) + end + + it "returns a service result failure with the file size error message" do + expect(subject).to be_a_failure + expect(subject.errors[:attachments]).to eq(["is too large (maximum size is 1024 Bytes)."]) + + aggregate_failures "skips the ifc model contract" do + expect(contract_instance).not_to have_received(:validate) + end + end + end + context "for an existing model" do context "with an ifc_attachment" do let(:call_attributes) do @@ -146,7 +166,7 @@ end it "is successful" do - expect(subject.success?).to be_truthy + expect(subject).to be_a_success end it "does not alter the title" do diff --git a/modules/boards/config/locales/crowdin/fa.yml b/modules/boards/config/locales/crowdin/fa.yml index 71b85f6a0a6f..17d7fc18c187 100644 --- a/modules/boards/config/locales/crowdin/fa.yml +++ b/modules/boards/config/locales/crowdin/fa.yml @@ -13,7 +13,7 @@ fa: label_board_type: "نوع انجمن" board_types: free: اصول اولیه - action: "تابلوی اکشن" + action: "تابلوی اکشن (%{attribute})" board_type_attributes: assignee: نماینده status: وضعیت diff --git a/modules/boards/config/locales/crowdin/he.yml b/modules/boards/config/locales/crowdin/he.yml index d76edc6441a6..561ad19cef09 100644 --- a/modules/boards/config/locales/crowdin/he.yml +++ b/modules/boards/config/locales/crowdin/he.yml @@ -13,7 +13,7 @@ he: label_board_type: "סוג לוח" board_types: free: בסיס - action: "לוח פעולות" + action: "לוח פעולות (%{attribute})" board_type_attributes: assignee: משויך אל status: מצב diff --git a/modules/boards/config/locales/crowdin/hu.yml b/modules/boards/config/locales/crowdin/hu.yml index bca772f432db..ddcab05c21ac 100644 --- a/modules/boards/config/locales/crowdin/hu.yml +++ b/modules/boards/config/locales/crowdin/hu.yml @@ -13,7 +13,7 @@ hu: label_board_type: "Tábla típus" board_types: free: Alap - action: "Feladattábla" + action: "Feladattábla (%{attribute})" board_type_attributes: assignee: Felelős status: Állapot diff --git a/modules/boards/config/locales/crowdin/js-he.yml b/modules/boards/config/locales/crowdin/js-he.yml index 4b187ca969ab..d568c5241c96 100644 --- a/modules/boards/config/locales/crowdin/js-he.yml +++ b/modules/boards/config/locales/crowdin/js-he.yml @@ -38,7 +38,7 @@ he: free_text: > Start from scratch with a blank board. Manually add cards and columns to this board. action: 'לוח פעולות' - action_by_attribute: 'לוח פעולות' + action_by_attribute: 'לוח פעולות (%{attribute})' action_text: > A board with filtered lists on %{attribute} attribute. Moving work packages to other lists will update their attribute. action_text_subprojects: > diff --git a/modules/boards/config/locales/crowdin/js-ms.yml b/modules/boards/config/locales/crowdin/js-ms.yml index 1900defbd14d..c4228e444bf7 100644 --- a/modules/boards/config/locales/crowdin/js-ms.yml +++ b/modules/boards/config/locales/crowdin/js-ms.yml @@ -2,55 +2,55 @@ ms: js: boards: - create_new: 'Cipta papan baru' - label_unnamed_board: 'Papan tanpa nama' + create_new: 'Cipta board baru' + label_unnamed_board: 'Board tanpa nama' label_unnamed_list: 'Senarai tanpa nama' - label_board_type: "Jenis papan\n" + label_board_type: "Jenis board\n" upsale: - teaser_text: 'Adakah anda ingin mengautomatikkan aliran kerja dengan Board? Board lanjutan ada di dalam tambahan Enterprise. Sila naik taraf ke pelan berbayar.' + teaser_text: 'Adakah anda ingin mengautomasikan aliran kerja dengan Board? Board lanjutan ada di dalam tambahan Enterprise. Sila naik taraf ke pelan berbayar.' upgrade: 'Naik taraf sekarang' lists: delete: 'Padam senarai' version: - is_locked: 'Versi ini dikunci. Tiada item yang dapat ditambah kedalam versi ini.' + is_locked: 'Versi ini dikunci. Tiada item yang boleh ditambah kedalam versi ini.' is_closed: 'Versi ini ditutup. Tiada item yang boleh ditambah kedalam versi ini.' close_version: 'Versi tertutup' open_version: 'Versi terbuka' lock_version: 'Versi terkunci' unlock_version: 'Versi dibuka' - edit_version: 'Versi suntingan' - show_version: 'Tunjuk versi' + edit_version: 'Versi edit' + show_version: 'Papar versi' locked: 'Dikunci' closed: 'Tertutup' - new_board: 'Papan baru' - add_list: 'Tambah senarai ke papan' + new_board: 'Board baharu' + add_list: 'Tambah senarai ke board' add_card: 'Tambah kad' error_attribute_not_writable: "Pakej kerja tidak boleh dialihkan, %{attribute} tidak boleh ditulis." error_loading_the_list: "Ralat memuat senarai: %{error_message}" - error_permission_missing: "Kebenaran untuk membuat pertanyaan awam tidak dijumpai" - error_cannot_move_into_self: "Anda tidak boleh mengalihkan pakej kerja ke dalam lajur sendiri." + error_permission_missing: "Kebenaran untuk membuat pertanyaan awam tidak ditemui" + error_cannot_move_into_self: "Anda tidak boleh mengalihkan pakej kerja ke dalam kolum sendiri." text_hidden_list_warning: "Hanya beberapa senarai dipaparkan kerana anda tidak mempunyai kebenaran. Hubungi pentadbir anda untuk maklumat lanjut." click_to_remove_list: "Klik untuk padamkan senarai ini" board_type: - text: "Jenis papan\n" + text: "Jenis board\n" free: 'asas' - select_board_type: 'Sila pilih jenis papan yang anda perlukan.' + select_board_type: 'Sila pilih jenis board yang anda perlukan.' free_text: > - Bermula dari awal dengan papan yang kosong. Tambah kad dan lajur kepada papan ini secara manual. - action: 'Panel tindakan' - action_by_attribute: 'Panel tindakan (%{attribute})' + Mula dari awal dengan board kosong. Tambah kad dan kolum ke board ini secara manual. + action: 'Board tindakan' + action_by_attribute: 'Board tindakan (%{attribute})' action_text: > - Papan dengan senarai yang disaring di atribut %{attribute}. Pengalihan pakej kerja ke senarai lain akan mengemas kini atribut mereka. + Board dengan senarai yang disaring di atribut %{attribute}. Pemindahan pakej kerja ke senarai lain akan mengemas kini atribut mereka. action_text_subprojects: > - Papan dengan lajur automatik untuk subprojek. Menarik pakej kerja ke senarai lain akan mengemas kini (sub-)projek sewajarnya. + Board dengan kolum automatik untuk subprojek. Menarik pakej kerja ke senarai lain akan mengemas kini (sub-)projek sewajarnya. action_text_subtasks: > - Papan dengan Lajur automatik untuk sub-elemen. Menarik pakej kerja ke senarai lain akan mengemas kini (sub-)projek sewajarnya. + Board dengan kolum automatik untuk sub-elemen. Menarik pakej kerja ke senarai lain akan mengemas kini (sub-)projek sewajarnya. action_text_status: > - Papan gaya kanban asas dengan lajur untuk status seperti Untuk Dilakukan, Dalam Pelaksanaan, Selesai. + Board gaya kanban asas dengan kolum untuk status seperti Untuk Dilakukan, Dalam Pelaksanaan, Selesai. action_text_assignee: > - Papan dengan kolum automatik berdasarkan pengguna yang ditentukan. Ideal untuk penghantaran pakej kerja. + Board dengan kolum automatik berdasarkan pengguna yang ditentukan. Ideal untuk penghantaran pakej kerja. action_text_version: > - Papan dengan lajur automatik berdasarkan versi atribut. Bagus untuk merancang pembangunan produk. + Board dengan kolum automatik berdasarkan versi atribut. Ideal untuk merancang pembangunan produk. action_type: assignee: penerima tugasan status: status @@ -62,25 +62,25 @@ ms: status: Status version: Versi subproject: Subprojek - subtasks: Ibu bapa-anak + subtasks: Induk-anak basic: "Asas\n" select_attribute: "Atribut tindakan" add_list_modal: labels: - assignee: Pilih pengguna untuk ditambah sebagai senarai penerima tugasan baru - status: Pilih status untuk ditambah sebagai senarai baru - version: Pilih versi untuk ditambah sebagai senarai baru - subproject: Pilih subprojek untuk ditambah sebagai senarai baru - subtasks: Pilih pakej kerja untuk ditambah sebagai senarai baru + assignee: Pilih pengguna untuk ditambah sebagai senarai penerima tugasan baharu + status: Pilih status untuk ditambah sebagai senarai baharu + version: Pilih versi untuk ditambah sebagai senarai baharu + subproject: Pilih subprojek untuk ditambah sebagai senarai baharu + subtasks: Pilih pakej kerja untuk ditambah sebagai senarai baharu warning: status: | Tiada status yang tersedia pada masa ini.
    - Sama ada sudah tiada atau semua sudah ditambah ke panel. + Sama ada sudah tiada atau semua sudah ditambah ke board. assignee: Tiada ahli yang sepadan dengan nilai penyaringan anda.
    - no_member: Projek ini tidak mempunyai ahli yang boleh ditambah masa ini.
    + no_member: Projek ini tidak mempunyai ahli yang boleh ditambah pada masa ini.
    add_members: Tambah ahli baru ke projek ini untuk pilih pengguna lagi. configuration_modal: - title: 'Konfigurasikan papan ini' + title: 'Konfigurasi board ini' display_settings: card_mode: "Paparkan sebagai kad" table_mode: "Paparkan sebagai jadual" diff --git a/modules/boards/config/locales/crowdin/ms.yml b/modules/boards/config/locales/crowdin/ms.yml index 8de5dcc37644..f93e31aab327 100644 --- a/modules/boards/config/locales/crowdin/ms.yml +++ b/modules/boards/config/locales/crowdin/ms.yml @@ -1,19 +1,19 @@ #English strings go here ms: plugin_openproject_boards: - name: "Papan OpenProject" - description: "Menyediakan paparan board" + name: "Board OpenProject" + description: "Menyediakan paparan board." permission_show_board_views: "Paparkan board" permission_manage_board_views: "Urus papan" - project_module_board_view: "Papan-papan" + project_module_board_view: "Board" boards: - label_board: "Papan" - label_boards: "Papan-papan" - label_create_new_board: "Cipta papan baru" - label_board_type: "Jenis papan" + label_board: "Board" + label_boards: "Board" + label_create_new_board: "Cipta board baru" + label_board_type: "Jenis board" board_types: free: "Asas\n" - action: "Papan tindakan (%{attribute})" + action: "Board tindakan (%{attribute})" board_type_attributes: assignee: Penerima tugasan status: Status @@ -23,17 +23,17 @@ ms: basic: Asas board_type_descriptions: basic: > - Bermula dari awal dengan papan yang kosong. Tambah kad dan kolum secara manual ke papan ini. + Bermula dari awal dengan board kosong. Tambah kad dan kolum secara manual kepada board ini. status: > - Papan gaya kanban asas dengan kolum untuk status seperti Untuk Dilakukan, Dalam Pelaksanaan, Selesai. + Board gaya kanban asas dengan kolum untuk status seperti Untuk Dilakukan, Dalam Pelaksanaan, Selesai. assignee: > - Papan dengan kolum automatik berdasarkan pengguna yang ditentukan. Ideal untuk penghantaran pakej kerja. + Board dengan kolum automatik berdasarkan pengguna yang ditentukan. Ideal untuk penghantaran pakej kerja. version: > - Papan dengan kolum automatik berdasarkan versi atribut. Ideal untuk merancang pembangunan produk. + Board dengan kolum automatik berdasarkan versi atribut. Ideal untuk merancang pembangunan produk. subproject: > - Papan dengan kolum automatik untuk subprojek. Menarik pakej kerja ke senarai lain akan mengemas kini (sub-)projek sewajarnya. + Board dengan kolum automatik untuk subprojek. Menarik pakej kerja ke senarai lain akan mengemas kini (sub-)projek sewajarnya. subtasks: > - Papan dengan kolum automatik untuk sub-elemen. Menarik pakej kerja ke senarai lain akan mengemas kini (sub-)projek sewajarnya. + Board dengan kolum automatik untuk sub-elements. Menarik pakej kerja ke senarai lain akan mengemas kini (sub-)projek sewajarnya. upsale: - teaser_text: 'Adakah anda ingin mengautomatikkan aliran kerja dengan Papan? Papan lanjutan ada di dalam tambahan Enterprise. Sila naik taraf ke pelan berbayar.' + teaser_text: 'Adakah anda ingin mengautomasikan aliran kerja dengan Board? Board lanjutan ada di dalam tambahan Enterprise. Sila naik taraf ke pelan berbayar.' upgrade: 'Naik taraf sekarang' diff --git a/modules/boards/spec/features/board_navigation_spec.rb b/modules/boards/spec/features/board_navigation_spec.rb index b251b0bab8b4..9fa5a359a0f4 100644 --- a/modules/boards/spec/features/board_navigation_spec.rb +++ b/modules/boards/spec/features/board_navigation_spec.rb @@ -104,8 +104,7 @@ with_settings: { notifications_polling_interval: 1_000 } do visit project_path(project) - item = page.find('#menu-sidebar li[data-name="boards"]', wait: 10) - item.find(".toggler").click + page.find_test_selector("main-menu-toggler--boards", wait: 10).click subitem = page.find_test_selector("op-sidemenu--item-action--Myboard", wait: 10) # Ends with boards due to lazy route diff --git a/modules/boards/spec/features/support/board_index_page.rb b/modules/boards/spec/features/support/board_index_page.rb index 0b266b4f2472..d5f1632fb425 100644 --- a/modules/boards/spec/features/support/board_index_page.rb +++ b/modules/boards/spec/features/support/board_index_page.rb @@ -72,6 +72,8 @@ def create_board(action: "Basic", title: "#{action} Board", expect_empty: false, new_board_page.set_board_type action new_board_page.click_on_submit + new_board_page.expect_and_dismiss_toaster + if expect_empty expect(page).to have_css(".boards-list--add-item-text", wait: 10) expect(page).to have_no_css(".boards-list--item") diff --git a/modules/budgets/app/components/budgets/actual_labor_budget_items_component.html.erb b/modules/budgets/app/components/budgets/actual_labor_budget_items_component.html.erb new file mode 100644 index 000000000000..47783fdca2a0 --- /dev/null +++ b/modules/budgets/app/components/budgets/actual_labor_budget_items_component.html.erb @@ -0,0 +1,81 @@ +
    +

    <%= t(:caption_labor_costs) %>

    +
    +
  • <%= Version.human_attribute_name(:estimated_hours) %>
    + + + + + + + + + + + + + + + + <% by_work_package_and_time_entry do |work_package, entry| %> + + + + + + + <% end %> + + <% if view_rates_allowed? %> + + + + + + + <% end %> +
    +
    +
    + + <%= TimeEntry.human_attribute_name(:work_package) %> + +
    +
    +
    +
    +
    + + <%= TimeEntry.human_attribute_name(:hours) %> + +
    +
    +
    +
    +
    + + <%= TimeEntry.human_attribute_name(:user) %> + +
    +
    +
    +
    +
    + + <%= TimeEntry.human_attribute_name(:costs) %> + +
    +
    +
    <%= entry_work_package(work_package) %><%= entry_hours(work_package, entry) %><%= entry_user(entry) %><%= entry_costs(entry) %>
    + +
    + + +
    +
    +
    + diff --git a/modules/budgets/app/components/budgets/actual_labor_budget_items_component.rb b/modules/budgets/app/components/budgets/actual_labor_budget_items_component.rb new file mode 100644 index 000000000000..64af4e48cdbf --- /dev/null +++ b/modules/budgets/app/components/budgets/actual_labor_budget_items_component.rb @@ -0,0 +1,96 @@ +# frozen_string_literal: true + +# -- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2010-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +# ++ + +class Budgets::ActualLaborBudgetItemsComponent < ApplicationComponent # rubocop:disable OpenProject/AddPreviewForViewComponent + options :budget, :project + + def by_work_package_and_time_entry + budget + .time_entries + .not_ongoing + .visible(User.current) + .group_by(&:work_package) + .each do |work_package, time_entries| + consolidate_time_entries(time_entries).each do |t| + yield work_package, t + end + end + end + + def entry_work_package(work_package) + helpers.link_to_work_package work_package + end + + def entry_hours(work_package, entry) + link_to helpers.l_hours(entry.hours), + cost_reports_path(work_package.project_id, + "fields[]": "WorkPackageId", + "operators[WorkPackageId]": "=", + "values[WorkPackageId]": work_package.id, + set_filter: 1) + end + + def entry_user(entry) + entry.user.name + end + + def entry_costs(entry) + entry.costs_visible_by?(User.current) ? number_to_currency(entry.real_costs) : "" + end + + def spent_sum + number_to_currency(budget.spent_labor) + end + + def view_rates_allowed? + User.current.allowed_in_project?(:view_hourly_rates, + project) || + User.current.allowed_in_project?(:view_own_hourly_rate, + project) + end + + private + + def consolidate_time_entries(time_entries) + time_entries.inject(Hash.new) do |results, entry| + result ||= results[entry.user.id.to_s] = empty_time_entry(entry) + + result.overridden_costs += entry.real_costs + result.hours += entry.hours + results + end.values + end + + def empty_time_entry(entry) + result = TimeEntry.new(user: entry.user, overridden_costs: 0, project:) + result.hours = 0 + result + end +end diff --git a/modules/budgets/app/components/budgets/actual_material_budget_items_component.html.erb b/modules/budgets/app/components/budgets/actual_material_budget_items_component.html.erb new file mode 100644 index 000000000000..bf848633f5d3 --- /dev/null +++ b/modules/budgets/app/components/budgets/actual_material_budget_items_component.html.erb @@ -0,0 +1,81 @@ +
    +

    <%= t(:caption_material_costs) %>

    +
    + +
    +
    diff --git a/modules/budgets/app/components/budgets/actual_material_budget_items_component.rb b/modules/budgets/app/components/budgets/actual_material_budget_items_component.rb new file mode 100644 index 000000000000..715f9987b57a --- /dev/null +++ b/modules/budgets/app/components/budgets/actual_material_budget_items_component.rb @@ -0,0 +1,92 @@ +# frozen_string_literal: true + +# -- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2010-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +# ++ + +class Budgets::ActualMaterialBudgetItemsComponent < ApplicationComponent # rubocop:disable OpenProject/AddPreviewForViewComponent + options :budget, :project + + def by_work_package_and_cost_entry + budget + .cost_entries + .visible(User.current) + .includes(:cost_type) + .group_by(&:work_package) + .each do |work_package, cost_entries| + consolidate_cost_entries(cost_entries).each do |c| + yield work_package, c + end + end + end + + def entry_work_package(work_package) + helpers.link_to_work_package work_package + end + + def entry_hours(work_package, entry) + link_to helpers.localized_float(entry.units), + cost_reports_path(work_package.project_id, + "fields[]": "WorkPackageId", + "operators[WorkPackageId]": "=", + "values[WorkPackageId]": work_package.id, + unit: entry.cost_type_id, + set_filter: 1) + end + + def entry_type(entry) + entry.cost_type + end + + def entry_costs(entry) + entry.costs_visible_by?(User.current) ? number_to_currency(entry.real_costs) : "" + end + + def spent_sum + number_to_currency(budget.spent_material) + end + + def view_rates_allowed? + User.current.allowed_in_project?(:view_cost_rates, project) + end + + private + + def consolidate_cost_entries(cost_entries) + cost_entries.inject(Hash.new) do |results, entry| + result ||= results[entry.cost_type.id.to_s] = empty_cost_entry(entry) + + result.overridden_costs += entry.real_costs + result.units += entry.units + results + end.values + end + + def empty_cost_entry(entry) + CostEntry.new(cost_type: entry.cost_type, project:, overridden_costs: 0.0, units: 0) + end +end diff --git a/modules/budgets/app/components/budgets/planned_labor_budget_items_component.html.erb b/modules/budgets/app/components/budgets/planned_labor_budget_items_component.html.erb new file mode 100644 index 000000000000..942562c33ae1 --- /dev/null +++ b/modules/budgets/app/components/budgets/planned_labor_budget_items_component.html.erb @@ -0,0 +1,81 @@ +
    +

    <%= Budget.human_attribute_name(:labor_budget)%>

    +
    + +
    +
    diff --git a/modules/budgets/app/components/budgets/planned_labor_budget_items_component.rb b/modules/budgets/app/components/budgets/planned_labor_budget_items_component.rb new file mode 100644 index 000000000000..99ac0cc1044d --- /dev/null +++ b/modules/budgets/app/components/budgets/planned_labor_budget_items_component.rb @@ -0,0 +1,60 @@ +# frozen_string_literal: true + +# -- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2010-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +# ++ + +class Budgets::PlannedLaborBudgetItemsComponent < ApplicationComponent # rubocop:disable OpenProject/AddPreviewForViewComponent + options :budget, :project + + def item_hours(item) + helpers.l_hours(item.hours) + end + + def item_user(item) + item.user.name + end + + def item_comments(item) + item.comments + end + + def item_costs(item) + item.costs_visible_by?(User.current) ? number_to_currency(item.costs) : "" + end + + def planned_sum + number_to_currency(budget.labor_budget) + end + + def view_rates_allowed? + User.current.allowed_in_project?(:view_hourly_rates, + project) || + User.current.allowed_in_project?(:view_own_hourly_rate, + project) + end +end diff --git a/modules/budgets/app/components/budgets/planned_material_budget_items_component.html.erb b/modules/budgets/app/components/budgets/planned_material_budget_items_component.html.erb new file mode 100644 index 000000000000..43cc8f324aed --- /dev/null +++ b/modules/budgets/app/components/budgets/planned_material_budget_items_component.html.erb @@ -0,0 +1,81 @@ +
    +

    <%= Budget.human_attribute_name(:material_budget) %>

    +
    + +
    +
    diff --git a/modules/budgets/app/components/budgets/planned_material_budget_items_component.rb b/modules/budgets/app/components/budgets/planned_material_budget_items_component.rb new file mode 100644 index 000000000000..19727745a6b4 --- /dev/null +++ b/modules/budgets/app/components/budgets/planned_material_budget_items_component.rb @@ -0,0 +1,57 @@ +# frozen_string_literal: true + +# -- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2010-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +# ++ + +class Budgets::PlannedMaterialBudgetItemsComponent < ApplicationComponent # rubocop:disable OpenProject/AddPreviewForViewComponent + options :budget, :project + + def item_units(item) + helpers.localized_float(item.units) + end + + def item_type(item) + item.cost_type.name + end + + def item_comments(item) + item.comments + end + + def item_costs(item) + item.costs_visible_by?(User.current) ? number_to_currency(item.costs) : "" + end + + def view_rates_allowed? + User.current.allowed_in_project?(:view_cost_rates, project) + end + + def planned_sum + number_to_currency(budget.material_budget) + end +end diff --git a/modules/budgets/app/models/labor_budget_item.rb b/modules/budgets/app/models/labor_budget_item.rb index 993330ab529c..726a8b38f3a8 100644 --- a/modules/budgets/app/models/labor_budget_item.rb +++ b/modules/budgets/app/models/labor_budget_item.rb @@ -41,29 +41,11 @@ class LaborBudgetItem < ApplicationRecord include ActiveModel::ForbiddenAttributesProtection # user_id correctness is ensured in Budget#*_labor_budget_item_attributes= - def self.visible(user, project) - table = arel_table - - view_allowed = Project.allowed_to(user, :view_hourly_rates).select(:id) - view_own_allowed = Project.allowed_to(user, :view_own_hourly_rate).select(:id) - - view_or_view_own = table[:project_id] - .in(view_allowed.arel) - .or(table[:project_id] - .in(view_own_allowed.arel) - .and(table[:user_id].eq(user.id))) - - scope = includes([{ budget: :project }, :user]) - .references(:projects) - .where(view_or_view_own) - - if project - scope.where(budget: { projects_id: project.id }) - end - end + include Scopes::Scoped + scopes :visible scope :visible_costs, lambda { |*args| - visible((args.first || User.current), args[1]) + visible((args.first || User.current)) } def costs diff --git a/modules/budgets/app/models/labor_budget_items/scopes/visible.rb b/modules/budgets/app/models/labor_budget_items/scopes/visible.rb new file mode 100644 index 000000000000..a057871c02f0 --- /dev/null +++ b/modules/budgets/app/models/labor_budget_items/scopes/visible.rb @@ -0,0 +1,51 @@ +# -- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2010-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +# ++ + +module LaborBudgetItems::Scopes + module Visible + extend ActiveSupport::Concern + + class_methods do + # Return labor budget items visible to a user: + # * the user has permission to see all labor budget items in the project the budget is in. + # * the user has permission to see own labor budget items in the project the budget is in and the item + # is of the user. + def visible(user) + view_scope = includes(:budget) + .where(budget: { project_id: Project.allowed_to(user, :view_hourly_rates).select(:id) }) + + view_own_scope = includes(:budget) + .where(budget: { project_id: Project.allowed_to(user, :view_own_hourly_rate).select(:id) }) + .where(user_id: user.id) + + view_scope + .or(view_own_scope) + end + end + end +end diff --git a/modules/budgets/app/views/budgets/_show.html.erb b/modules/budgets/app/views/budgets/_show.html.erb index 671ba962ed39..a0a38192f3db 100644 --- a/modules/budgets/app/views/budgets/_show.html.erb +++ b/modules/budgets/app/views/budgets/_show.html.erb @@ -32,384 +32,17 @@ See COPYRIGHT and LICENSE files for more details. <%= t(:caption_materials) %>
    -
    -

    <%= Budget.human_attribute_name(:material_budget) %>

    -
    - -
    -
    -
    -

    <%= t(:caption_material_costs) %>

    -
    - -
    -
    + <%= render(Budgets::PlannedMaterialBudgetItemsComponent.new(budget: @budget, project: @project)) %> + <%= render(Budgets::ActualMaterialBudgetItemsComponent.new(budget: @budget, project: @project)) %>
    - +
    <%= t(:caption_labor) %>
    -
    -

    <%= Budget.human_attribute_name(:labor_budget)%>

    -
    - -
    -
    -
    -

    <%= t(:caption_labor_costs) %>

    -
    - -
    -
    + <%= render(Budgets::PlannedLaborBudgetItemsComponent.new(budget: @budget, project: @project)) %> + <%= render(Budgets::ActualLaborBudgetItemsComponent.new(budget: @budget, project: @project)) %>
    +
    diff --git a/modules/budgets/config/locales/crowdin/fa.yml b/modules/budgets/config/locales/crowdin/fa.yml index 08b51b59701a..b9f47e6d8c80 100644 --- a/modules/budgets/config/locales/crowdin/fa.yml +++ b/modules/budgets/config/locales/crowdin/fa.yml @@ -63,7 +63,7 @@ fa: label_budget: "بودجه" label_budget_new: "بودجه جدید" label_budget_plural: "بودجه ها" - label_budget_id: "بودجه" + label_budget_id: "بودجه #%{id}" label_deliverable: "بودجه" label_example_placeholder: 'به عنوان مثال، %{decimal}' label_view_all_budgets: "مشاهده همه بودجه‌ها" diff --git a/modules/budgets/config/locales/crowdin/ms.yml b/modules/budgets/config/locales/crowdin/ms.yml index 9f6cda136c6a..ed445e80a2c3 100644 --- a/modules/budgets/config/locales/crowdin/ms.yml +++ b/modules/budgets/config/locales/crowdin/ms.yml @@ -35,7 +35,7 @@ ms: subject: "Subjek" type: "Jenis kos" labor_budget: "Kos buruh terancang" - material_budget: "Kos unit yang dirancang" + material_budget: "Kos unit terancang" work_package: budget_subject: "Tajuk anggaran" models: @@ -46,10 +46,10 @@ ms: budget: "Anggaran" attributes: budget: "Anggaran" - button_add_budget_item: "Tambah kos yang dirancang" + button_add_budget_item: "Tambah kos terancang" button_add_budget: "Tambah anggaran" button_add_cost_type: "Tambah jenis kos" - button_cancel_edit_budget: "Batalkan anggaran penyuntingan" + button_cancel_edit_budget: "Batalkan anggaran pengeditan" button_cancel_edit_costs: "Batalkan kos penyuntingan" caption_labor: "Buruh" caption_labor_costs: "Kos buruh sebenar" @@ -57,7 +57,7 @@ ms: budgets_title: "Anggaran" events: budget: "Anggaran yang telah diedit" - help_click_to_edit: "Klik di sini untuk mengedit" + help_click_to_edit: "Klik sini untuk mengedit." help_currency_format: "Format nilai mata wang yang dipaparkan. %n digantikan dengan nilai mata wang, %u digantikan dengan unit mata wang." help_override_rate: "Masukkan nilai disini untuk gantikan kadar default." label_budget: "Anggaran" @@ -65,14 +65,14 @@ ms: label_budget_plural: "Anggaran" label_budget_id: "Anggaran #%{id}" label_deliverable: "Anggaran" - label_example_placeholder: 'e.g., %{decimal}' + label_example_placeholder: 'cth., %{decimal}' label_view_all_budgets: "Lihat semua anggaran" label_yes: "Ya" notice_budget_conflict: "Pakej-pakej kerja mestilah daripada projek yang sama." notice_no_budgets_available: "Tiada anggaran yang tersedia." - permission_edit_budgets: "Edit anggaran" + permission_edit_budgets: "Edit belanjawan" permission_view_budgets: "Lihat anggaran" project_module_budgets: "Anggaran" text_budget_reassign_to: "Pindahkan mereka ke anggaran ini:" text_budget_delete: "Padam anggaran dari semua pakej kerja" - text_budget_destroy_assigned_wp: "Terdapat %{count} pakej kerja ditugaskan untuk anggaran ini. Apa yang anda ingin lakukan?" + text_budget_destroy_assigned_wp: "Terdapat %{count} pakej kerja diberikan ke anggaran ini. Apa yang anda ingin lakukan?" diff --git a/modules/budgets/spec/models/labor_budget_items/scopes/visible_spec.rb b/modules/budgets/spec/models/labor_budget_items/scopes/visible_spec.rb new file mode 100644 index 000000000000..36c99a6b17b3 --- /dev/null +++ b/modules/budgets/spec/models/labor_budget_items/scopes/visible_spec.rb @@ -0,0 +1,55 @@ +# -- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2010-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +# ++ + +require "#{File.dirname(__FILE__)}/../../../spec_helper" + +RSpec.describe LaborBudgetItems::Scopes::Visible do + shared_let(:view_project) { create(:project) } + shared_let(:view_own_project) { create(:project) } + shared_let(:other_user) { create(:user) } + shared_let(:user) do + create(:user, + member_with_permissions: { view_project => %i[view_hourly_rates], + view_own_project => %i[view_own_hourly_rate] }) + end + shared_let(:view_budget) { create(:budget, project: view_project) } + shared_let(:view_own_budget) { create(:budget, project: view_own_project) } + shared_let(:own_budget_item_of_view_budget) { create(:labor_budget_item, budget: view_budget, user:) } + shared_let(:budget_item_of_view_budget) { create(:labor_budget_item, budget: view_budget, user: other_user) } + shared_let(:own_budget_item_of_view_own_budget) { create(:labor_budget_item, budget: view_own_budget, user:) } + shared_let(:budget_item_of_view_own_budget) { create(:labor_budget_item, budget: view_own_budget, user: other_user) } + + describe ".visible" do + it "returns all from project the user has view permission and only own from project the user has view own permission" do + expect(LaborBudgetItem.visible(user)) + .to contain_exactly(own_budget_item_of_view_budget, + budget_item_of_view_budget, + own_budget_item_of_view_own_budget) + end + end +end diff --git a/modules/calendar/app/views/calendar/calendars/_form.html.erb b/modules/calendar/app/views/calendar/calendars/_form.html.erb index f793e220b27c..5c2ecbbeb04e 100644 --- a/modules/calendar/app/views/calendar/calendars/_form.html.erb +++ b/modules/calendar/app/views/calendar/calendars/_form.html.erb @@ -79,7 +79,7 @@ See COPYRIGHT and LICENSE files for more details.
    <%= styled_label_tag 'query[starred]', - t(:label_favoured) %> + t(:label_favorite) %>
    <%= styled_check_box_tag 'query[starred]', '1', diff --git a/modules/calendar/config/locales/crowdin/js-hu.yml b/modules/calendar/config/locales/crowdin/js-hu.yml index 73cf2edc1572..4970b7e3381a 100644 --- a/modules/calendar/config/locales/crowdin/js-hu.yml +++ b/modules/calendar/config/locales/crowdin/js-hu.yml @@ -4,5 +4,5 @@ hu: calendar: create_new: 'Új naptár létrehozása' title: 'Naptár' - too_many: 'Összesen %{százalék_szám} munkacsomag van, de csak %{maximum} jeleníthető meg.' + too_many: 'Összesen %{count} munkacsomag van, de csak %{max} jeleníthető meg.' unsaved_title: 'Névtelen naptár' diff --git a/modules/calendar/spec/features/calendar_widget_spec.rb b/modules/calendar/spec/features/calendar_widget_spec.rb index d60ab5f86ef3..29d9f0fedf47 100644 --- a/modules/calendar/spec/features/calendar_widget_spec.rb +++ b/modules/calendar/spec/features/calendar_widget_spec.rb @@ -31,15 +31,18 @@ require_relative "../support/pages/calendar" RSpec.describe "Calendar Widget", :js, :with_cuprite, with_settings: { start_of_week: 1 } do - let(:project) do - create(:project, enabled_module_names: %w[work_package_tracking calendar_view]) + shared_let(:project) do + create(:project, enabled_module_names: %w[work_package_tracking calendar_view meetings]) end - let!(:work_package) do + shared_let(:work_package) do create(:work_package, project:, start_date: Time.zone.today.beginning_of_week.next_occurring(:tuesday), due_date: Time.zone.today.beginning_of_week.next_occurring(:thursday)) end + shared_let(:meeting) do + create(:structured_meeting, title: "Weekly", project:, start_time: Time.zone.tomorrow + 10.hours) + end let(:overview_page) do Pages::Overview.new(project) @@ -50,19 +53,26 @@ current_user do create(:user, member_with_permissions: { - project => %w[view_work_packages edit_work_packages view_calendar manage_overview] + project => %w[view_work_packages view_meetings edit_work_packages view_calendar manage_overview] }) end before do overview_page.visit! - end - - it "opens the work package full view when clicking a calendar entry" do # within top-left area, add an additional widget overview_page.add_widget(1, 1, :row, "Calendar") overview_page.expect_and_dismiss_toaster message: I18n.t("js.notice_successful_update") + end + + it 'shows the meeting' do + expect(page).to have_css('.fc-event', text: "Weekly", visible: :all) + page.find('.fc-event', text: "Weekly", visible: :all).click + + expect(page).to have_current_path /meetings\/#{meeting.id}/ + end + + it "opens the work package full view when clicking a calendar entry" do # Clicking the calendar entry goes to work package full screen page.find(".fc-event-title", text: work_package.subject).click @@ -73,11 +83,6 @@ end it "can resize the same work package twice (Regression #48333)", with_cuprite: false do - # within top-left area, add an additional widget - overview_page.add_widget(1, 1, :row, "Calendar") - - overview_page.expect_and_dismiss_toaster message: I18n.t("js.notice_successful_update") - expect(page).to have_css(".fc-event-title", text: work_package.subject) calendar.resize_date(work_package, work_package.due_date - 1.day) diff --git a/modules/calendar/spec/support/pages/calendar.rb b/modules/calendar/spec/support/pages/calendar.rb index 84b4760bf9c6..aabf59b84694 100644 --- a/modules/calendar/spec/support/pages/calendar.rb +++ b/modules/calendar/spec/support/pages/calendar.rb @@ -132,7 +132,7 @@ def set_public end def set_favoured - check "Favoured" + check "Favorite" end def click_on_submit diff --git a/modules/costs/config/locales/crowdin/ms.yml b/modules/costs/config/locales/crowdin/ms.yml index d741b8aae3cd..b6a1aedb6af1 100644 --- a/modules/costs/config/locales/crowdin/ms.yml +++ b/modules/costs/config/locales/crowdin/ms.yml @@ -27,7 +27,7 @@ ms: attributes: cost_entry: work_package: "Pakej kerja" - overridden_costs: "Kos yang dinaik taraf" + overridden_costs: "Kos yang diambil alih" spent: "Dibelanja" spent_on: "Tarikh" cost_type: @@ -36,7 +36,7 @@ ms: work_package: costs_by_type: "Unit yang telah dibelanjakan" labor_costs: "Kos buruh" - material_costs: "Kos Unit" + material_costs: "Kos unit" overall_costs: "Kos keseluruhan" spent_costs: "Kos yang telah dibelanjakan" spent_units: "Unit yang telah dibelanjakan" @@ -72,14 +72,14 @@ ms: caption_rate_history: "Sejarah kadar" caption_rate_history_for: "Sejarah kadar untuk %{user}" caption_rate_history_for_project: "Sejarah kadar untuk %{user} dalam projek %{project}" - caption_save_rate: "Kadar simpanan" + caption_save_rate: "Simpan kadar" caption_set_rate: "Tetapkan kadar semasa" caption_show_locked: "Papar jenis terkunci" description_date_for_new_rate: "Tarikh untuk kadar baru" group_by_others: "tiada dalam mana-mana kumpulan" label_between: "antara" label_cost_filter_add: "Tambah saringan kos entri" - label_costlog: "Kos unit yang sudah dilog" + label_costlog: "Kos unit yang telah dilog" label_cost_plural: "Kos" label_cost_type_plural: "Jenis kos" label_cost_type_specific: "Jenis kos #%{id}: %{name}" @@ -89,7 +89,7 @@ ms: label_current_default_rate: "Kadar default semasa" label_date_on: "pada" label_deleted_cost_types: "Jenis kos yang dipadam" - label_locked_cost_types: "Jenis kos yang dikunci" + label_locked_cost_types: "Jenis kos terkunci" label_display_cost_entries: "Papar kos unit" label_display_time_entries: "Paparkan jam yang dilaporkan" label_display_types: "Jenis paparan" @@ -97,7 +97,7 @@ ms: label_generic_user: "Pengguna generik" label_greater_or_equal: ">=" label_group_by: "Kumpulkan mengikut" - label_group_by_add: "Tambahkan ruangan kumpulan" + label_group_by_add: "Tambah ruang kumpulan" label_hourly_rate: "Kadar jam" label_include_deleted: "Sertakan yang dipadam" label_work_package_filter_add: "Tambah saringan pakej kerja" @@ -108,11 +108,11 @@ ms: label_option_plural: "Pilihan" label_overall_costs: "Kos keseluruhan" label_rate: "Kadar" - label_rate_plural: "Kadar" - label_status_finished: "Selesai" + label_rate_plural: "Kadar-kadar" + label_status_finished: "Telah selesai" label_units: "Unit kos" label_user: "Pengguna" - label_until: "sehingga\n" + label_until: "sehingga" label_valid_from: "Sah dari" label_yes: "Ya" notice_something_wrong: "Ada ralat berlaku. Sila cuba lagi." @@ -133,11 +133,11 @@ ms: permission_view_own_hourly_rate: "Lihat kadar jam sendiri" permission_view_own_time_entries: "Lihat masa yang digunakan sendiri" project_module_costs: "Masa dan kos" - text_assign_time_and_cost_entries_to_project: "Tetapkan jam dilaporkan dan kos kepada projek" - text_destroy_cost_entries_question: "%{cost_entries} dilaporkan pada pakej kerja yang anda akan padamkan. Apakah yang anda ingin lakukan ?" - text_destroy_time_and_cost_entries: "Padam jam dilaporkan dan kos" - text_destroy_time_and_cost_entries_question: "%{hours} jam, %{cost_entries} dilaporkan pada pakej kerja yang anda akan padamkan. Apakah yang anda ingin lakukan ?" - text_reassign_time_and_cost_entries: "Tetapkan semula jam dilaporkan dan kos kepada projek" + text_assign_time_and_cost_entries_to_project: "Tetapkan jam dan kos yang dilaporkan ke projek" + text_destroy_cost_entries_question: "%{cost_entries} dilaporkan pada pakej kerja yang anda ingin padamkan. Apakah yang anda ingin lakukan ?" + text_destroy_time_and_cost_entries: "Padam jam dan kos yang dilaporkan" + text_destroy_time_and_cost_entries_question: "%{hours} jam, %{cost_entries} dilaporkan pada pakej kerja yang anda ingin padamkan. Apakah yang anda ingin lakukan ?" + text_reassign_time_and_cost_entries: "Tetapkan semula jam dan kos yang dilaporkan ke projek:" text_warning_hidden_elements: "Beberapa entri mungkin telah dikecualikan daripada pengumpulan." week: "minggu" js: diff --git a/modules/documents/config/locales/crowdin/ms.yml b/modules/documents/config/locales/crowdin/ms.yml index 17bd2c4d6d09..b7715638a0ce 100644 --- a/modules/documents/config/locales/crowdin/ms.yml +++ b/modules/documents/config/locales/crowdin/ms.yml @@ -28,7 +28,7 @@ ms: document: "Dokumen" activity: filter: - document: "Dokumen" + document: "Dokumen-dokumen" default_doc_category_tech: "Dokumen teknikal" default_doc_category_user: "Dokumentasi pengguna" enumeration_doc_categories: "Kategori dokumen" @@ -36,8 +36,8 @@ ms: label_attachment_author: "Pengarang lampiran" label_document_added: "Dokumen ditambah" label_document_new: "Dokumen baru" - label_document_plural: "Dokumen" + label_document_plural: "Dokumen-dokumen" label_documents: "Dokumen" permission_manage_documents: "Urus dokumen" permission_view_documents: "Lihat dokumen" - project_module_documents: "Dokumen" + project_module_documents: "Dokumen-dokumen" diff --git a/modules/gantt/spec/features/timeline/timeline_navigation_spec.rb b/modules/gantt/spec/features/timeline/timeline_navigation_spec.rb index 6664d1f43dcb..598d39f94744 100644 --- a/modules/gantt/spec/features/timeline/timeline_navigation_spec.rb +++ b/modules/gantt/spec/features/timeline/timeline_navigation_spec.rb @@ -118,7 +118,7 @@ # Navigate to the WP module find(".main-menu--arrow-left-to-project").click - find("#main-menu-work-packages-wrapper .main-menu-toggler").click + page.find_test_selector("main-menu-toggler--work_packages").click # Select other query query_menu.select query @@ -128,7 +128,7 @@ # Navigate to the Gantt module agin find(".main-menu--arrow-left-to-project").click - find("#main-menu-gantt-wrapper .main-menu-toggler").click + page.find_test_selector("main-menu-toggler--gantt").click # Select first query again query_menu.click_item query_tl.name diff --git a/modules/github_integration/config/locales/crowdin/js-ms.yml b/modules/github_integration/config/locales/crowdin/js-ms.yml index ea593f41cce5..231c79e2c257 100644 --- a/modules/github_integration/config/locales/crowdin/js-ms.yml +++ b/modules/github_integration/config/locales/crowdin/js-ms.yml @@ -31,13 +31,13 @@ ms: description: Salin potongan git ke papan klip git_actions: branch_name: Nama cabang - commit_message: Menyerahkan mesej + commit_message: Mesej komit cmd: Cipta cabang dengan komit kosong title: Potongan cepat untuk Git copy_success: '✅ Disalin!' copy_error: '❌ Salinan gagal!' tab_prs: - empty: 'Masih belum ada tarik permintaan yang dipautkan lagi. Pautkan PR sedia ada menggunakan kod OP#%{wp_id} di deskripsi PR atau ciptakan PR baru.' + empty: 'Masih belum ada tarik permintaan yang dipautkan lagi. Pautkan PR yang sedia ada menggunakan kod OP#%{wp_id} di deskripsi PR atau ciptakan PR baru.' github_actions: Tindakan pull_requests: message: "Tarik permintaan #%{pr_number}%{pr_link} untuk %{repository_link} dikarang oleh %{github_user_link} telah %{pr_state}." diff --git a/modules/github_integration/config/locales/crowdin/ms.yml b/modules/github_integration/config/locales/crowdin/ms.yml index 13b01b4dcb79..4d24deee6a10 100644 --- a/modules/github_integration/config/locales/crowdin/ms.yml +++ b/modules/github_integration/config/locales/crowdin/ms.yml @@ -21,7 +21,7 @@ #++ ms: plugin_openproject_github_integration: - name: "Integrasi OpenProject GitHub" + name: "Integrasi GitHub OpenProject" description: "Mengintegrasikan OpenProject dan GitHub untuk aliran kerja yang lebih baik" project_module_github: "GitHub" permission_show_github_content: "Paparkan kandungan GitHub" diff --git a/modules/github_integration/frontend/module/git-actions-menu/styles/git-actions-menu.sass b/modules/github_integration/frontend/module/git-actions-menu/styles/git-actions-menu.sass index 7a02a628d70e..7931c4aa9a4b 100644 --- a/modules/github_integration/frontend/module/git-actions-menu/styles/git-actions-menu.sass +++ b/modules/github_integration/frontend/module/git-actions-menu/styles/git-actions-menu.sass @@ -1,6 +1,6 @@ .git-actions-menu background-color: var(--body-background) - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) padding: 1rem 1rem 2rem 1rem min-width: 25rem box-shadow: .1em .1em .4em rgba(0,0,0,0.1) @@ -19,7 +19,7 @@ min-height: calc(2 * 0.65em + 0.9em + 1px) border-radius: 2px 0 0 2px padding: 0.65em - color: var(--color-fg-muted) + color: var(--fgColor-muted) white-space: pre resize: none font-size: 0.9rem @@ -27,7 +27,7 @@ .copy-button margin: 0 - border: 1px solid var(--color-border-default) + border: 1px solid var(--borderColor-default) border-radius: 0 2px 2px 0 vertical-align: top left: -1px @@ -47,7 +47,7 @@ position: absolute right: 0 top: calc(2 * 0.65em + 0.9em + 1px + 9px) - box-shadow: 1px 1px 4px var(--color-fg-muted) + box-shadow: 1px 1px 4px var(--fgColor-muted) z-index: 1 &:before diff --git a/modules/github_integration/frontend/module/pull-request/pr-check.component.sass b/modules/github_integration/frontend/module/pull-request/pr-check.component.sass index e813fe944090..9a93d72bccde 100644 --- a/modules/github_integration/frontend/module/pull-request/pr-check.component.sass +++ b/modules/github_integration/frontend/module/pull-request/pr-check.component.sass @@ -4,7 +4,7 @@ grid-template-columns: 28px 33px 1fr auto grid-template-areas: "check-state-icon check-avatar check-info check-details" list-style-type: none - border: 1px solid var(--color-border-muted) + border: 1px solid var(--borderColor-muted) padding: 0.3rem 1rem background: rgba(0, 0, 0, 0.05) font-size: 0.9rem @@ -29,7 +29,7 @@ grid-area: check-info &--state - color: var(--color-fg-muted) + color: var(--fgColor-muted) font-style: italic margin-left: 1em diff --git a/modules/github_integration/frontend/module/pull-request/pull-request.component.sass b/modules/github_integration/frontend/module/pull-request/pull-request.component.sass index 23b75622f4dd..880e3336db41 100644 --- a/modules/github_integration/frontend/module/pull-request/pull-request.component.sass +++ b/modules/github_integration/frontend/module/pull-request/pull-request.component.sass @@ -52,7 +52,7 @@ &--info display: inline-flex grid-area: info - color: var(--color-fg-muted) + color: var(--fgColor-muted) &--avatar, &--date diff --git a/modules/gitlab_integration/README.md b/modules/gitlab_integration/README.md index 33a0a6817088..0a94ead0b919 100644 --- a/modules/gitlab_integration/README.md +++ b/modules/gitlab_integration/README.md @@ -139,7 +139,7 @@ A typical workflow on GitLab side would be: You will have to configure both **OpenProject** and **Gitlab** for the integration to work. In case of **Docker** installation, follow the official OpenProject documentation [here](https://www.openproject.org/docs/installation-and-operations/installation/docker/#openproject-plugins). If for some reason the installation with Docker described in the official documentation does not work for you, you can try building your own docker image: -* Clone from the Openproject Repo: `git clone https://github.com/opf/openproject.git --branch=stable/14 --depth=1 .` +* Clone from the OpenProject Repo: `git clone https://github.com/opf/openproject.git --branch=stable/14 --depth=1 .` * Clone the plugin inside the modules folder: `git clone https://github.com/btey/openproject-gitlab-integration.git --depth=1 modules/gitlab_integration` * Apply the changes below in Gemfile.lock and Gemfile.modules (the same ones you would do in a manual install). * Build the container: `docker build -t openproject-docker --file=docker/prod/Dockerfile .` @@ -157,7 +157,7 @@ But first you must modify **Gemfile.lock** and **Gemfile.modules** so that OpenP Add the following in **Gemfile.lock**: -```yml +```yaml PATH remote: modules/gitlab_integration specs: @@ -167,7 +167,7 @@ PATH And add this other line in DEPENDENCIES section: -```yml +```yaml DEPENDENCIES ... openproject-github_integration! @@ -178,7 +178,7 @@ DEPENDENCIES Add the following in **Gemfile.modules**: -```yml +```yaml group :opf_plugins do ... gem 'openproject-gitlab_integration', path: 'modules/gitlab_integration' diff --git a/modules/gitlab_integration/config/locales/crowdin/js-ms.yml b/modules/gitlab_integration/config/locales/crowdin/js-ms.yml index 8ed27a7726a5..7ff65f4cfbf0 100644 --- a/modules/gitlab_integration/config/locales/crowdin/js-ms.yml +++ b/modules/gitlab_integration/config/locales/crowdin/js-ms.yml @@ -33,7 +33,7 @@ ms: label: Cipta MR description: Cipta satu Merge Request copy_menu: - label: Potongan Git + label: Potongan git description: Salin potongan git ke papan klip git_actions: branch_name: Nama cabang diff --git a/modules/gitlab_integration/config/locales/crowdin/ms.yml b/modules/gitlab_integration/config/locales/crowdin/ms.yml index 104edf607d0a..e703713e50f4 100644 --- a/modules/gitlab_integration/config/locales/crowdin/ms.yml +++ b/modules/gitlab_integration/config/locales/crowdin/ms.yml @@ -38,29 +38,29 @@ ms: merge_request_opened_comment: > **MR Dibuka:** Permintaan gabungan %{mr_number} [%{mr_title}](%{mr_url}) untuk [%{repository}](%{repository_url}) telah dibuka oleh [%{gitlab_user}](%{gitlab_user_url}). merge_request_closed_comment: > - **MR Ditutup:** Permintaan gabungan %{mr_number} [%{mr_title}](%{mr_url}) untuk [%{repository}](%{repository_url}) telah dibuka oleh [%{gitlab_user}](%{gitlab_user_url}). + **MR Ditutup:** Permintaan gabungan %{mr_number} [%{mr_title}](%{mr_url}) untuk [%{repository}](%{repository_url}) telah ditutup oleh [%{gitlab_user}](%{gitlab_user_url}). merge_request_merged_comment: > **Gabungan MR:** Permintaan gabungan %{mr_number} [%{mr_title}](%{mr_url}) untuk [%{repository}](%{repository_url}) telah digabungkan oleh [%{gitlab_user}](%{gitlab_user_url}). merge_request_reopened_comment: > - **MR Dibuka Semula:** Permintaan gabungan %{mr_number} [%{mr_title}](%{mr_url}) untuk [%{repository}](%{repository_url}) sudah dibuka semula oleh [%{gitlab_user}](%{gitlab_user_url}). + **MR Dibuka Semula:** Permintaan gabungan %{mr_number} [%{mr_title}](%{mr_url}) untuk [%{repository}](%{repository_url}) telah dibuka semula oleh [%{gitlab_user}](%{gitlab_user_url}). note_commit_referenced_comment: > - **Dirujuk dalam Commit:** [%{gitlab_user}](%{gitlab_user_url}) dirujuk WP ini dalam satu Commit Note [%{commit_id}](%{commit_url}) pada [%{repository}](%{repository_url}): %{commit_note} + **Dirujuk dalam Komit:** [%{gitlab_user}](%{gitlab_user_url}) dirujuk WP ini dalam Commit Note [%{commit_id}](%{commit_url}) pada [%{repository}](%{repository_url}): %{commit_note} note_mr_referenced_comment: > - **Dirujuk dalam MR:** [%{gitlab_user}](%{gitlab_user_url}) dirujuk WP ini dalam satu Merge Request %{mr_number} [%{mr_title}](%{mr_url}) pada [%{repository}](%{repository_url}): %{mr_note} + **Dirujuk dalam MR:** [%{gitlab_user}](%{gitlab_user_url}) dirujuk WP ini dalam Merge Request %{mr_number} [%{mr_title}](%{mr_url}) pada [%{repository}](%{repository_url}): %{mr_note} note_mr_commented_comment: > **Memberi komen dalam MR:** [%{gitlab_user}](%{gitlab_user_url}) memberi komen WP ini dalam Merge Request %{mr_number} [%{mr_title}](%{mr_url}) pada [%{repository}](%{repository_url}): %{mr_note} note_issue_referenced_comment: > - **Dirujuk dalam Issue:** [%{gitlab_user}](%{gitlab_user_url}) dirujuk WP ini dalam satu Issue %{issue_number} [%{issue_title}](%{issue_url}) pada [%{repository}](%{repository_url}): %{issue_note} + **Dirujuk dalam Isu:** [%{gitlab_user}](%{gitlab_user_url}) dirujuk WP ini dalam Isu %{issue_number} [%{issue_title}](%{issue_url}) pada [%{repository}](%{repository_url}): %{issue_note} note_issue_commented_comment: > - **Memberi komen dalam Issue:** [%{gitlab_user}](%{gitlab_user_url}) dirujuk WP ini dalam Issue %{issue_number} [%{issue_title}](%{issue_url}) pada [%{repository}](%{repository_url}): %{issue_note} + **Memberi komen dalam Isu:** [%{gitlab_user}](%{gitlab_user_url}) dirujuk WP ini dalam Isu %{issue_number} [%{issue_title}](%{issue_url}) pada [%{repository}](%{repository_url}): %{issue_note} note_snippet_referenced_comment: > **Dirujuk dalam Snippet:** [%{gitlab_user}](%{gitlab_user_url}) dirujuk WP ini dalam Snippet %{snippet_number} [%{snippet_title}](%{snippet_url}) pada [%{repository}](%{repository_url}): %{snippet_note} issue_opened_referenced_comment: > - **Isu Dibuka:** Isu %{issue_number} [%{issue_title}](%{issue_url}) untuk [%{repository}](%{repository_url}) sudah dibuka oleh [%{gitlab_user}](%{gitlab_user_url}). + **Isu Dibuka:** Isu %{issue_number} [%{issue_title}](%{issue_url}) untuk [%{repository}](%{repository_url}) telah dibuka oleh [%{gitlab_user}](%{gitlab_user_url}). issue_closed_referenced_comment: > - **Isu Ditutup:** Isu %{issue_number} [%{issue_title}](%{issue_url}) untuk [%{repository}](%{repository_url}) sudah ditutup oleh [%{gitlab_user}](%{gitlab_user_url}). + **Isu Ditutup:** Isu %{issue_number} [%{issue_title}](%{issue_url}) untuk [%{repository}](%{repository_url}) telah ditutup oleh [%{gitlab_user}](%{gitlab_user_url}). issue_reopened_referenced_comment: > - **Isu Dibuka Semula:** Isu %{issue_number} [%{issue_title}](%{issue_url}) untuk [%{repository}](%{repository_url}) sudah dibuka semula oleh [%{gitlab_user}](%{gitlab_user_url}). + **Isu Dibuka Semula:** Isu %{issue_number} [%{issue_title}](%{issue_url}) untuk [%{repository}](%{repository_url}) telah dibuka semula oleh [%{gitlab_user}](%{gitlab_user_url}). push_single_commit_comment: > **Ditolak ke MR** [%{gitlab_user}] (%{gitlab_user_url}) ditolak [%{commit_number}] (%{commit_url}) ke [%{repository}] (%{repository_url}) di %{commit_timestamp}: %{commit_note} push_multiple_commits_comment: > diff --git a/modules/grids/config/locales/crowdin/js-af.yml b/modules/grids/config/locales/crowdin/js-af.yml index 6dbbb6e5a0ea..1aaf13be65d8 100644 --- a/modules/grids/config/locales/crowdin/js-af.yml +++ b/modules/grids/config/locales/crowdin/js-af.yml @@ -42,6 +42,9 @@ af: subprojects: title: 'Subprojekte' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'My spent time' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/config/locales/crowdin/js-ar.yml b/modules/grids/config/locales/crowdin/js-ar.yml index 799a66b74f39..9623ffe30303 100644 --- a/modules/grids/config/locales/crowdin/js-ar.yml +++ b/modules/grids/config/locales/crowdin/js-ar.yml @@ -42,6 +42,9 @@ ar: subprojects: title: 'المشاريع الفرعية' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'My spent time' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/config/locales/crowdin/js-az.yml b/modules/grids/config/locales/crowdin/js-az.yml index c2e2dff679f0..4110c5728c2c 100644 --- a/modules/grids/config/locales/crowdin/js-az.yml +++ b/modules/grids/config/locales/crowdin/js-az.yml @@ -42,6 +42,9 @@ az: subprojects: title: 'Subprojects' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'My spent time' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/config/locales/crowdin/js-be.yml b/modules/grids/config/locales/crowdin/js-be.yml index 4edfb4c6aa79..7e408bc2c845 100644 --- a/modules/grids/config/locales/crowdin/js-be.yml +++ b/modules/grids/config/locales/crowdin/js-be.yml @@ -42,6 +42,9 @@ be: subprojects: title: 'Subprojects' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'My spent time' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/config/locales/crowdin/js-bg.yml b/modules/grids/config/locales/crowdin/js-bg.yml index abf76e58b03d..2fd2b3e7bbf5 100644 --- a/modules/grids/config/locales/crowdin/js-bg.yml +++ b/modules/grids/config/locales/crowdin/js-bg.yml @@ -42,6 +42,9 @@ bg: subprojects: title: 'Подпроекти' no_results: 'Няма подпроекти.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'Мое употребено време' displayed_days: 'Дни, показани в приспособлението:' diff --git a/modules/grids/config/locales/crowdin/js-ca.yml b/modules/grids/config/locales/crowdin/js-ca.yml index 4844459975c8..70d220bf7bce 100644 --- a/modules/grids/config/locales/crowdin/js-ca.yml +++ b/modules/grids/config/locales/crowdin/js-ca.yml @@ -42,6 +42,9 @@ ca: subprojects: title: 'Subprojectes' no_results: 'Sense subprojectes.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'El meu temps invertit' displayed_days: 'Dies mostrats en el widget' diff --git a/modules/grids/config/locales/crowdin/js-ckb-IR.yml b/modules/grids/config/locales/crowdin/js-ckb-IR.yml index defc8859dd36..1fea9704388a 100644 --- a/modules/grids/config/locales/crowdin/js-ckb-IR.yml +++ b/modules/grids/config/locales/crowdin/js-ckb-IR.yml @@ -42,6 +42,9 @@ ckb-IR: subprojects: title: 'Subprojects' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'My spent time' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/config/locales/crowdin/js-cs.yml b/modules/grids/config/locales/crowdin/js-cs.yml index 49a17a388adf..62171d9c0663 100644 --- a/modules/grids/config/locales/crowdin/js-cs.yml +++ b/modules/grids/config/locales/crowdin/js-cs.yml @@ -42,6 +42,9 @@ cs: subprojects: title: 'Podprojekty' no_results: 'Žádné podprojekty.' + project_favorites: + title: 'Oblíbené projekty' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'Můj strávený čas' displayed_days: 'Dny zobrazené ve widgetu:' diff --git a/modules/grids/config/locales/crowdin/js-da.yml b/modules/grids/config/locales/crowdin/js-da.yml index 3131dc7b3f79..0edb4db08cff 100644 --- a/modules/grids/config/locales/crowdin/js-da.yml +++ b/modules/grids/config/locales/crowdin/js-da.yml @@ -42,6 +42,9 @@ da: subprojects: title: 'Underprojekter' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'My spent time' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/config/locales/crowdin/js-de.yml b/modules/grids/config/locales/crowdin/js-de.yml index 20f9f2019db7..b3511e224abb 100644 --- a/modules/grids/config/locales/crowdin/js-de.yml +++ b/modules/grids/config/locales/crowdin/js-de.yml @@ -42,6 +42,9 @@ de: subprojects: title: 'Unterprojekte' no_results: 'Keine Unterprojekte.' + project_favorites: + title: 'Favorisierte Projekte' + no_results: 'Sie haben derzeit keine favorisierten Projekte. Klicken Sie auf den Stern auf der Projektübersicht, um ein Projekt zu Ihren Favoriten hinzuzufügen.' time_entries_current_user: title: 'Meine gebuchte Zeit' displayed_days: 'Dargestellte Tage im Widget:' diff --git a/modules/grids/config/locales/crowdin/js-el.yml b/modules/grids/config/locales/crowdin/js-el.yml index 871991781eec..1e0e461c2468 100644 --- a/modules/grids/config/locales/crowdin/js-el.yml +++ b/modules/grids/config/locales/crowdin/js-el.yml @@ -42,6 +42,9 @@ el: subprojects: title: 'Υποέργα' no_results: 'Δεν υπάρχουν υποέργα.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'Ο δικός μου χρόνος που δαπανήθηκε' displayed_days: 'Ημέρες που εμφανίζονται στο widget:' diff --git a/modules/grids/config/locales/crowdin/js-eo.yml b/modules/grids/config/locales/crowdin/js-eo.yml index 1454c45e868d..3769d782c8fc 100644 --- a/modules/grids/config/locales/crowdin/js-eo.yml +++ b/modules/grids/config/locales/crowdin/js-eo.yml @@ -42,6 +42,9 @@ eo: subprojects: title: 'Subprojektoj' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'My spent time' displayed_days: 'Tagoj montritaj en la kromprogrameto:' diff --git a/modules/grids/config/locales/crowdin/js-es.yml b/modules/grids/config/locales/crowdin/js-es.yml index 5fa3ae608a63..ffb5d687b588 100644 --- a/modules/grids/config/locales/crowdin/js-es.yml +++ b/modules/grids/config/locales/crowdin/js-es.yml @@ -42,6 +42,9 @@ es: subprojects: title: 'Subproyectos' no_results: 'No hay subproyectos.' + project_favorites: + title: 'Proyectos favoritos' + no_results: 'Actualmente no tiene ningún proyecto favorito. Haga clic en el icono de estrella en el panel de control del proyecto para añadirlo a sus favoritos.' time_entries_current_user: title: 'Mi tiempo invertido' displayed_days: 'Días mostrados en el widget:' diff --git a/modules/grids/config/locales/crowdin/js-et.yml b/modules/grids/config/locales/crowdin/js-et.yml index 0d2979306616..d7d181d5c0ce 100644 --- a/modules/grids/config/locales/crowdin/js-et.yml +++ b/modules/grids/config/locales/crowdin/js-et.yml @@ -42,6 +42,9 @@ et: subprojects: title: 'Alamprojektid' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'My spent time' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/config/locales/crowdin/js-eu.yml b/modules/grids/config/locales/crowdin/js-eu.yml index eaf7aa6c304e..c7967739dc51 100644 --- a/modules/grids/config/locales/crowdin/js-eu.yml +++ b/modules/grids/config/locales/crowdin/js-eu.yml @@ -42,6 +42,9 @@ eu: subprojects: title: 'Subprojects' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'My spent time' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/config/locales/crowdin/js-fa.yml b/modules/grids/config/locales/crowdin/js-fa.yml index b9d383fc229d..58cff2386266 100644 --- a/modules/grids/config/locales/crowdin/js-fa.yml +++ b/modules/grids/config/locales/crowdin/js-fa.yml @@ -42,6 +42,9 @@ fa: subprojects: title: 'Subprojects' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'My spent time' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/config/locales/crowdin/js-fi.yml b/modules/grids/config/locales/crowdin/js-fi.yml index f201be68fe6d..fbfd6b3a3cce 100644 --- a/modules/grids/config/locales/crowdin/js-fi.yml +++ b/modules/grids/config/locales/crowdin/js-fi.yml @@ -42,6 +42,9 @@ fi: subprojects: title: 'Aliprojektit' no_results: 'Ei aliprojekteja.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'Käyttämäni aika' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/config/locales/crowdin/js-fil.yml b/modules/grids/config/locales/crowdin/js-fil.yml index cad5c9165e54..6ea03d07592d 100644 --- a/modules/grids/config/locales/crowdin/js-fil.yml +++ b/modules/grids/config/locales/crowdin/js-fil.yml @@ -42,6 +42,9 @@ fil: subprojects: title: 'Ang mga subproject' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'My spent time' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/config/locales/crowdin/js-fr.yml b/modules/grids/config/locales/crowdin/js-fr.yml index d1b4ba04e64f..a51623f187ab 100644 --- a/modules/grids/config/locales/crowdin/js-fr.yml +++ b/modules/grids/config/locales/crowdin/js-fr.yml @@ -42,6 +42,9 @@ fr: subprojects: title: 'Sous-projets' no_results: 'Aucun sous-projet.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'Mon temps passé' displayed_days: 'Jours affichés dans le widget :' diff --git a/modules/grids/config/locales/crowdin/js-he.yml b/modules/grids/config/locales/crowdin/js-he.yml index 729a8b25bb99..18c1beb300fe 100644 --- a/modules/grids/config/locales/crowdin/js-he.yml +++ b/modules/grids/config/locales/crowdin/js-he.yml @@ -42,6 +42,9 @@ he: subprojects: title: 'תת־פרויקטים' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'הזמן שהשקעתי' displayed_days: 'מספר ימים בתוסף:' diff --git a/modules/grids/config/locales/crowdin/js-hi.yml b/modules/grids/config/locales/crowdin/js-hi.yml index 7cc9063a95a0..825543b718a0 100644 --- a/modules/grids/config/locales/crowdin/js-hi.yml +++ b/modules/grids/config/locales/crowdin/js-hi.yml @@ -42,6 +42,9 @@ hi: subprojects: title: 'उपपरियोजनाएँ' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'My spent time' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/config/locales/crowdin/js-hr.yml b/modules/grids/config/locales/crowdin/js-hr.yml index 204edd008090..cf864ebec1a0 100644 --- a/modules/grids/config/locales/crowdin/js-hr.yml +++ b/modules/grids/config/locales/crowdin/js-hr.yml @@ -42,6 +42,9 @@ hr: subprojects: title: 'Potprojekti' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'My spent time' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/config/locales/crowdin/js-hu.yml b/modules/grids/config/locales/crowdin/js-hu.yml index b4eeeac35780..2a12eba77036 100644 --- a/modules/grids/config/locales/crowdin/js-hu.yml +++ b/modules/grids/config/locales/crowdin/js-hu.yml @@ -42,6 +42,9 @@ hu: subprojects: title: 'Alprojektek' no_results: "Nincsenek alprojektek\n" + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'Eltöltött idő rögzítése' displayed_days: 'Napok megjelenítése a főoldalon.' diff --git a/modules/grids/config/locales/crowdin/js-id.yml b/modules/grids/config/locales/crowdin/js-id.yml index cd769e62516b..f249d4bb2016 100644 --- a/modules/grids/config/locales/crowdin/js-id.yml +++ b/modules/grids/config/locales/crowdin/js-id.yml @@ -42,6 +42,9 @@ id: subprojects: title: 'Sub Project' no_results: 'Tidak ada subproyek.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'Waktu yang saya habiskan' displayed_days: 'Hari yang ditampilkan di widget:' diff --git a/modules/grids/config/locales/crowdin/js-it.yml b/modules/grids/config/locales/crowdin/js-it.yml index 62eada176777..2cb9a12e8337 100644 --- a/modules/grids/config/locales/crowdin/js-it.yml +++ b/modules/grids/config/locales/crowdin/js-it.yml @@ -42,6 +42,9 @@ it: subprojects: title: 'Sotto-progetti' no_results: 'Nessun sotto-progetto.' + project_favorites: + title: 'Progetti preferiti' + no_results: 'Al momento non hai progetti preferiti. Clicca sull''icona della stella nella dashboard del progetto per aggiungerne uno ai tuoi preferiti.' time_entries_current_user: title: 'Il mio tempo trascorso' displayed_days: 'Giorni visualizzati nel widget:' diff --git a/modules/grids/config/locales/crowdin/js-ja.yml b/modules/grids/config/locales/crowdin/js-ja.yml index d1185f4680b4..a320e56ed1c7 100644 --- a/modules/grids/config/locales/crowdin/js-ja.yml +++ b/modules/grids/config/locales/crowdin/js-ja.yml @@ -42,6 +42,9 @@ ja: subprojects: title: '子プロジェクト' no_results: '子プロジェクトはありません。' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: '自分の作業時間' displayed_days: 'ウィジェットに表示される日数:' diff --git a/modules/grids/config/locales/crowdin/js-ka.yml b/modules/grids/config/locales/crowdin/js-ka.yml index 51f07a146d65..0eacff12dbb1 100644 --- a/modules/grids/config/locales/crowdin/js-ka.yml +++ b/modules/grids/config/locales/crowdin/js-ka.yml @@ -42,6 +42,9 @@ ka: subprojects: title: 'ქვეპროექტები' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'ჩემი დახარჯული დრო' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/config/locales/crowdin/js-kk.yml b/modules/grids/config/locales/crowdin/js-kk.yml index b8a05ae7ae08..762460e8a09b 100644 --- a/modules/grids/config/locales/crowdin/js-kk.yml +++ b/modules/grids/config/locales/crowdin/js-kk.yml @@ -42,6 +42,9 @@ kk: subprojects: title: 'Subprojects' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'My spent time' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/config/locales/crowdin/js-ko.yml b/modules/grids/config/locales/crowdin/js-ko.yml index 0ff08ebf3717..562b29416ff6 100644 --- a/modules/grids/config/locales/crowdin/js-ko.yml +++ b/modules/grids/config/locales/crowdin/js-ko.yml @@ -42,6 +42,9 @@ ko: subprojects: title: '하위 프로젝트' no_results: '하위 프로젝트가 없습니다.' + project_favorites: + title: '즐겨 찾는 프로젝트' + no_results: '즐겨 찾는 프로젝트가 현재 없습니다. 프로젝트 대시보드에서 별 아이콘을 클릭하여 즐겨찾기에 추가하세요.' time_entries_current_user: title: '내 소요 시간' displayed_days: '위젯에 표시되는 일수:' diff --git a/modules/grids/config/locales/crowdin/js-lt.yml b/modules/grids/config/locales/crowdin/js-lt.yml index ca2e9f4b6fbc..0a19352771bb 100644 --- a/modules/grids/config/locales/crowdin/js-lt.yml +++ b/modules/grids/config/locales/crowdin/js-lt.yml @@ -42,6 +42,9 @@ lt: subprojects: title: 'Sub-projektai' no_results: 'Nėra subprojektų.' + project_favorites: + title: 'Mėgstami projektai' + no_results: 'Jūs šiuo metu neturite mėgiamų projektų. Spauskite žvaigždutės piktogramą projekto skydelyje, kad pridėtumėte prie jūsų mėgstamų.' time_entries_current_user: title: 'Mano sugaištas laikas' displayed_days: 'Valdiklyje rodomos dienos:' diff --git a/modules/grids/config/locales/crowdin/js-lv.yml b/modules/grids/config/locales/crowdin/js-lv.yml index 9afeb3cb436a..96f553f3656c 100644 --- a/modules/grids/config/locales/crowdin/js-lv.yml +++ b/modules/grids/config/locales/crowdin/js-lv.yml @@ -42,6 +42,9 @@ lv: subprojects: title: 'Apakšprojekti' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'My spent time' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/config/locales/crowdin/js-mn.yml b/modules/grids/config/locales/crowdin/js-mn.yml index 525232d537f8..d3dc1e607cdd 100644 --- a/modules/grids/config/locales/crowdin/js-mn.yml +++ b/modules/grids/config/locales/crowdin/js-mn.yml @@ -42,6 +42,9 @@ mn: subprojects: title: 'Subprojects' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'My spent time' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/config/locales/crowdin/js-ms.yml b/modules/grids/config/locales/crowdin/js-ms.yml index 66682fe07057..8762a8853ac0 100644 --- a/modules/grids/config/locales/crowdin/js-ms.yml +++ b/modules/grids/config/locales/crowdin/js-ms.yml @@ -6,11 +6,11 @@ ms: configure: 'Konfigurasi widget' upsale: text: "Beberapa widget seperti widget graf pakej kerja, hanya tersedia dalam edisi Enterprise." - link: 'Edisi enterprise' + link: 'Edisi Enterprise' widgets: missing_permission: "Anda tidak mempunyai kebenaran yang diperlukan untuk melihat widget ini." custom_text: - title: 'Teks custom' + title: 'Teks tersuai' documents: title: 'Dokumen' no_results: 'Tiada dokumen lagi.' @@ -23,7 +23,7 @@ ms: news: title: 'Berita' at: 'pada' - no_results: 'Tiada perkara baru untuk dilaporkan.' + no_results: 'Tiada perkara baharu untuk dilaporkan.' project_description: title: 'Deskripsi projek' no_results: "Tiada deskripsi yang tertulis lagi. Deskripsi boleh diberikan di 'Tetapan Projek'." @@ -36,12 +36,15 @@ ms: on_track: 'Ikut jadual' off_track: 'Lari jadual' at_risk: 'Berisiko' - not_set: 'Tidak ditetapkan' + not_set: 'Belum ditetapkan' finished: 'Selesai' discontinued: 'Dihentikan' subprojects: title: 'Subprojek' no_results: 'Tiada subprojek.' + project_favorites: + title: 'Projek-projek kegemaran' + no_results: 'Kini anda tiada projek kegemaran. Tekan ikon bintang di papan pemuka projek untuk tambahkan ke kegemaran anda.' time_entries_current_user: title: 'Masa yang saya gunakan' displayed_days: 'Hari yang dipaparkan dalam widget:' @@ -64,4 +67,4 @@ ms: title: 'Kalendar' work_packages_overview: title: 'Gambaran keseluruhan pakej kerja' - placeholder: 'Tekan untuk menyunting ...' + placeholder: 'Klik untuk edit ...' diff --git a/modules/grids/config/locales/crowdin/js-ne.yml b/modules/grids/config/locales/crowdin/js-ne.yml index 50e069d0a0e5..d26407446b5e 100644 --- a/modules/grids/config/locales/crowdin/js-ne.yml +++ b/modules/grids/config/locales/crowdin/js-ne.yml @@ -42,6 +42,9 @@ ne: subprojects: title: 'Subprojects' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'मेरो बितेको समय' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/config/locales/crowdin/js-nl.yml b/modules/grids/config/locales/crowdin/js-nl.yml index 6203330d08ed..a3b6052bcd28 100644 --- a/modules/grids/config/locales/crowdin/js-nl.yml +++ b/modules/grids/config/locales/crowdin/js-nl.yml @@ -42,6 +42,9 @@ nl: subprojects: title: 'Subprojecten' no_results: 'Geen subprojecten.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'Mijn bestede tijd' displayed_days: 'Dagen weergegeven in de widget:' diff --git a/modules/grids/config/locales/crowdin/js-no.yml b/modules/grids/config/locales/crowdin/js-no.yml index c89da6cf2059..9ce442998adf 100644 --- a/modules/grids/config/locales/crowdin/js-no.yml +++ b/modules/grids/config/locales/crowdin/js-no.yml @@ -42,6 +42,9 @@ subprojects: title: 'Underprosjekter' no_results: 'Ingen delprosjekter.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'Min tidsbruk' displayed_days: 'Dager vist i widgetet:' diff --git a/modules/grids/config/locales/crowdin/js-pl.yml b/modules/grids/config/locales/crowdin/js-pl.yml index c547a35aa865..86e2b99151ff 100644 --- a/modules/grids/config/locales/crowdin/js-pl.yml +++ b/modules/grids/config/locales/crowdin/js-pl.yml @@ -42,6 +42,9 @@ pl: subprojects: title: 'Podprojekty' no_results: 'Brak podprojektów.' + project_favorites: + title: 'Ulubione projekty' + no_results: 'Obecnie nie masz żadnych ulubionych projektów. Kliknij ikonę gwiazdki na pulpicie nawigacyjnym projektu, aby dodać go do ulubionych.' time_entries_current_user: title: 'Mój spędzony czas' displayed_days: 'Dni wyświetlane w widżecie:' diff --git a/modules/grids/config/locales/crowdin/js-pt-BR.yml b/modules/grids/config/locales/crowdin/js-pt-BR.yml index c39352b80807..89c523007704 100644 --- a/modules/grids/config/locales/crowdin/js-pt-BR.yml +++ b/modules/grids/config/locales/crowdin/js-pt-BR.yml @@ -42,6 +42,9 @@ pt-BR: subprojects: title: 'Subprojetos' no_results: 'Nenhum subprojeto.' + project_favorites: + title: 'Projetos favoritos' + no_results: 'No momento, você não possui projetos favoritos. Clique no ícone de estrela no painel do projeto para adicionar um aos seus favoritos.' time_entries_current_user: title: 'Meu tempo gasto' displayed_days: 'Dias exibidos no widget:' diff --git a/modules/grids/config/locales/crowdin/js-pt-PT.yml b/modules/grids/config/locales/crowdin/js-pt-PT.yml index 470c6a6212a3..2d0762a30533 100644 --- a/modules/grids/config/locales/crowdin/js-pt-PT.yml +++ b/modules/grids/config/locales/crowdin/js-pt-PT.yml @@ -42,6 +42,9 @@ pt-PT: subprojects: title: 'Subprojetos' no_results: 'Nenhum subprojeto.' + project_favorites: + title: 'Projetos favoritos' + no_results: 'Atualmente, não tem projetos favoritos. Clique no ícone da estrela no painel do projeto para adicionar um projeto aos seus favoritos.' time_entries_current_user: title: 'O meu tempo gasto' displayed_days: 'Dias exibidos no widget:' diff --git a/modules/grids/config/locales/crowdin/js-ro.yml b/modules/grids/config/locales/crowdin/js-ro.yml index 461ec140f41d..55f87be51c6d 100644 --- a/modules/grids/config/locales/crowdin/js-ro.yml +++ b/modules/grids/config/locales/crowdin/js-ro.yml @@ -42,6 +42,9 @@ ro: subprojects: title: 'Subproiecte' no_results: 'Cu subproiecte' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'Timpul meu petrecut' displayed_days: 'Zile afișate în lista de activități a proiectului' diff --git a/modules/grids/config/locales/crowdin/js-ru.yml b/modules/grids/config/locales/crowdin/js-ru.yml index c3e7dd79ca13..b5214cfe5423 100644 --- a/modules/grids/config/locales/crowdin/js-ru.yml +++ b/modules/grids/config/locales/crowdin/js-ru.yml @@ -42,6 +42,9 @@ ru: subprojects: title: 'Подпроекты' no_results: 'Подпроектов нет.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'Затраченное мной время' displayed_days: 'Дни, отображаемые в виджете:' diff --git a/modules/grids/config/locales/crowdin/js-rw.yml b/modules/grids/config/locales/crowdin/js-rw.yml index 63e46b9350a2..761cc2f801bd 100644 --- a/modules/grids/config/locales/crowdin/js-rw.yml +++ b/modules/grids/config/locales/crowdin/js-rw.yml @@ -42,6 +42,9 @@ rw: subprojects: title: 'Subprojects' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'My spent time' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/config/locales/crowdin/js-si.yml b/modules/grids/config/locales/crowdin/js-si.yml index 2036c848ca06..c85b628a57aa 100644 --- a/modules/grids/config/locales/crowdin/js-si.yml +++ b/modules/grids/config/locales/crowdin/js-si.yml @@ -42,6 +42,9 @@ si: subprojects: title: 'උප ව්යාපෘති' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'My spent time' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/config/locales/crowdin/js-sk.yml b/modules/grids/config/locales/crowdin/js-sk.yml index 064e5446bc4d..b50f8013212e 100644 --- a/modules/grids/config/locales/crowdin/js-sk.yml +++ b/modules/grids/config/locales/crowdin/js-sk.yml @@ -42,6 +42,9 @@ sk: subprojects: title: 'Podprojekty' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'My spent time' displayed_days: 'Dni zobrazenia v miniaplikácii:' diff --git a/modules/grids/config/locales/crowdin/js-sl.yml b/modules/grids/config/locales/crowdin/js-sl.yml index 5c377f285413..658e03fe3c79 100644 --- a/modules/grids/config/locales/crowdin/js-sl.yml +++ b/modules/grids/config/locales/crowdin/js-sl.yml @@ -42,6 +42,9 @@ sl: subprojects: title: 'Podprojekti' no_results: 'Ni podprojektov. ' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'Moj porabljen čas' displayed_days: 'Dnevi prikazani v gradniku:' diff --git a/modules/grids/config/locales/crowdin/js-sr.yml b/modules/grids/config/locales/crowdin/js-sr.yml index bb23267abab8..2081da747161 100644 --- a/modules/grids/config/locales/crowdin/js-sr.yml +++ b/modules/grids/config/locales/crowdin/js-sr.yml @@ -42,6 +42,9 @@ sr: subprojects: title: 'Subprojects' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'My spent time' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/config/locales/crowdin/js-sv.yml b/modules/grids/config/locales/crowdin/js-sv.yml index 7983bc168081..1149cbcbb82c 100644 --- a/modules/grids/config/locales/crowdin/js-sv.yml +++ b/modules/grids/config/locales/crowdin/js-sv.yml @@ -42,6 +42,9 @@ sv: subprojects: title: 'Delprojekt' no_results: 'Inga delprojekt.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'My spent time' displayed_days: 'Dagar som visas i widgeten:' diff --git a/modules/grids/config/locales/crowdin/js-th.yml b/modules/grids/config/locales/crowdin/js-th.yml index 3a6464c53b02..883abbb69c94 100644 --- a/modules/grids/config/locales/crowdin/js-th.yml +++ b/modules/grids/config/locales/crowdin/js-th.yml @@ -42,6 +42,9 @@ th: subprojects: title: 'โครงการย่อย' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'My spent time' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/config/locales/crowdin/js-tr.yml b/modules/grids/config/locales/crowdin/js-tr.yml index 1579060c9d20..39c839699ecb 100644 --- a/modules/grids/config/locales/crowdin/js-tr.yml +++ b/modules/grids/config/locales/crowdin/js-tr.yml @@ -42,6 +42,9 @@ tr: subprojects: title: 'Alt Projeler' no_results: 'Alt proje yok.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'Geçirdiğim zaman' displayed_days: 'Widget''te görüntülenen günler:' diff --git a/modules/grids/config/locales/crowdin/js-uk.yml b/modules/grids/config/locales/crowdin/js-uk.yml index ea03aae5fb7d..adef6a463c1b 100644 --- a/modules/grids/config/locales/crowdin/js-uk.yml +++ b/modules/grids/config/locales/crowdin/js-uk.yml @@ -42,6 +42,9 @@ uk: subprojects: title: 'Підпроекти' no_results: 'Немає підпроектів.' + project_favorites: + title: 'Обрані проєкти' + no_results: 'Зараз у вас немає обраних проєктів. Натисніть значок зірочки на панелі керування проєктом, щоб додати його в обране.' time_entries_current_user: title: 'Мій витрачений час' displayed_days: 'Днів, доступних у віджеті:' diff --git a/modules/grids/config/locales/crowdin/js-uz.yml b/modules/grids/config/locales/crowdin/js-uz.yml index 2c5c694ffb68..01d06c713da8 100644 --- a/modules/grids/config/locales/crowdin/js-uz.yml +++ b/modules/grids/config/locales/crowdin/js-uz.yml @@ -42,6 +42,9 @@ uz: subprojects: title: 'Subprojects' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'My spent time' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/config/locales/crowdin/js-vi.yml b/modules/grids/config/locales/crowdin/js-vi.yml index 2ebbfacb4efb..dbc0efa0fb95 100644 --- a/modules/grids/config/locales/crowdin/js-vi.yml +++ b/modules/grids/config/locales/crowdin/js-vi.yml @@ -42,6 +42,9 @@ vi: subprojects: title: 'Dự án con' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'Thời gian hiện tại (My spent time)' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/config/locales/crowdin/js-zh-CN.yml b/modules/grids/config/locales/crowdin/js-zh-CN.yml index f71e6875fdb6..a2c6e58743ec 100644 --- a/modules/grids/config/locales/crowdin/js-zh-CN.yml +++ b/modules/grids/config/locales/crowdin/js-zh-CN.yml @@ -42,6 +42,9 @@ zh-CN: subprojects: title: '子项目' no_results: '无子项目。' + project_favorites: + title: '收藏的项目' + no_results: '您目前没有收藏项目,单击项目仪表板中的星形图标将项目添加到收藏夹。' time_entries_current_user: title: '我花费的时间' displayed_days: '微件中显示的天数:' diff --git a/modules/grids/config/locales/crowdin/js-zh-TW.yml b/modules/grids/config/locales/crowdin/js-zh-TW.yml index 6f79ea19b58f..1ff5b7e3f3a3 100644 --- a/modules/grids/config/locales/crowdin/js-zh-TW.yml +++ b/modules/grids/config/locales/crowdin/js-zh-TW.yml @@ -42,6 +42,9 @@ zh-TW: subprojects: title: '子專案' no_results: '無子專案' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: '我的耗時' displayed_days: '小工具顯示天數' diff --git a/modules/grids/config/locales/js-en.yml b/modules/grids/config/locales/js-en.yml index 44543cb57540..ffa20d4f2683 100644 --- a/modules/grids/config/locales/js-en.yml +++ b/modules/grids/config/locales/js-en.yml @@ -42,6 +42,9 @@ en: subprojects: title: 'Subprojects' no_results: 'No subprojects.' + project_favorites: + title: 'Favorite projects' + no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' time_entries_current_user: title: 'My spent time' displayed_days: 'Days displayed in the widget:' diff --git a/modules/grids/spec/support/pages/grid.rb b/modules/grids/spec/support/pages/grid.rb index 96446872a0ca..06f537d9ea6f 100644 --- a/modules/grids/spec/support/pages/grid.rb +++ b/modules/grids/spec/support/pages/grid.rb @@ -83,12 +83,7 @@ def within_add_widget_modal(row_number, column_number, location, &) area = area_of(row_number, column_number, location) area.hover - add_widget_button = if using_cuprite? - area.find(".grid--widget-add") - else - area.find(".grid--widget-add", visible: :all) - end - + add_widget_button = area.find(".grid--widget-add", visible: :all) add_widget_button.click within(".spot-modal", &) diff --git a/modules/job_status/app/workers/job_status/application_job_with_status.rb b/modules/job_status/app/workers/job_status/application_job_with_status.rb index e0c6e128fce0..f5f3bb07d0ca 100644 --- a/modules/job_status/app/workers/job_status/application_job_with_status.rb +++ b/modules/job_status/app/workers/job_status/application_job_with_status.rb @@ -27,7 +27,7 @@ #++ module JobStatus module ApplicationJobWithStatus - # Backgroun jobs can have a status JobStatus::Status + # Background jobs can have a status JobStatus::Status # which is related to the job via a reference which is an AR model instance. def status_reference nil diff --git a/modules/job_status/config/locales/crowdin/js-ms.yml b/modules/job_status/config/locales/crowdin/js-ms.yml index f54302c5eecf..b43a2e070be5 100644 --- a/modules/job_status/config/locales/crowdin/js-ms.yml +++ b/modules/job_status/config/locales/crowdin/js-ms.yml @@ -1,7 +1,7 @@ ms: js: job_status: - download_starts: 'Proses muat turun akan mula secara automatik.' + download_starts: 'Proses muat turun akan bermula secara automatik.' click_to_download: 'Atau klik sini untuk muat turun.' title: 'Latar belakang status kerja' redirect: 'Anda sedang diubah hala.' @@ -9,9 +9,9 @@ ms: redirect_errors: 'Disebabkan ralat ini, anda tidak akan diubah hala secara automatik.' errors: 'Beberapa ralat telah berlaku' generic_messages: - not_found: 'Kerja ini tidak dapat dijumpai.' + not_found: 'Kerja ini tidak dapat ditemui.' in_queue: 'Kerja ini sedang menunggu giliran dan akan diproses sebentar lagi.' in_process: 'Kerja ini sedang diproses.' error: 'Kerja ini gagal disiapkan.' cancelled: 'Kerja ini telah dibatalkan disebabkan oleh sebuah ralat.' - success: 'Kerja ini selesai dengan jayanya.' + success: 'Kerja ini berjaya diselesaikan.' diff --git a/modules/job_status/config/locales/crowdin/ms.yml b/modules/job_status/config/locales/crowdin/ms.yml index b0b50e47ea2f..6c16bc434048 100644 --- a/modules/job_status/config/locales/crowdin/ms.yml +++ b/modules/job_status/config/locales/crowdin/ms.yml @@ -1,4 +1,4 @@ ms: plugin_openproject_job_status: - name: "Status pekerjaan OpenProject" + name: "Status Pekerjaan OpenProject" description: "Senarai dan status latar belakang pekerjaan." diff --git a/modules/job_status/lib/api/v3/job_status/job_status_representer.rb b/modules/job_status/lib/api/v3/job_status/job_status_representer.rb index 179043b822cf..e3d73817c00c 100644 --- a/modules/job_status/lib/api/v3/job_status/job_status_representer.rb +++ b/modules/job_status/lib/api/v3/job_status/job_status_representer.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + #-- copyright # OpenProject is an open source project management software. # Copyright (C) 2012-2024 the OpenProject GmbH @@ -35,7 +37,7 @@ class JobStatusRepresenter < ::API::Decorators::Single property :job_id - property :status + property :status, getter: ->(*) { batch_aware_status }, exec_context: :decorator property :message, render_nil: true @@ -46,6 +48,21 @@ class JobStatusRepresenter < ::API::Decorators::Single def _type "JobStatus" end + + def batch_aware_status + batch = GoodJob::Job.find_by(id: represented.job_id)&.batch + return represented.status unless batch + + unless batch.finished? + return "in_process" if batch.jobs.any?(&:running?) + + return "in_queue" + end + + return "success" if batch.succeeded? + + "failure" if batch.discarded? + end end end end diff --git a/modules/job_status/spec/lib/api/v3/job_status/job_status_representer_spec.rb b/modules/job_status/spec/lib/api/v3/job_status/job_status_representer_spec.rb new file mode 100644 index 000000000000..b8ed79e57587 --- /dev/null +++ b/modules/job_status/spec/lib/api/v3/job_status/job_status_representer_spec.rb @@ -0,0 +1,101 @@ +# frozen_string_literal: true + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +require "spec_helper" + +class NoOpJob < ApplicationJob + discard_on StandardError + + def store_status? = true + + def perform(fail: false) + raise StandardError if fail + + "I'll do nothing" + end +end + +RSpec.describe API::V3::JobStatus::JobStatusRepresenter do + let(:user) { build_stubbed(:admin) } + + describe "status", with_good_job_batches: [NoOpJob] do + subject(:status_json) { described_class.new(job_status, current_user: user).to_json } + + context "when job is not part of a batch" do + let(:job) { NoOpJob.perform_later } + let(:job_status) { JobStatus::Status.find_by(job_id: job.job_id) } + + it_behaves_like "property", :status do + let(:value) { "in_queue" } + end + + it 'returns "succeeded" if the job has finished successfully' do + job = NoOpJob.perform_later + GoodJob.perform_inline + status = JobStatus::Status.find_by(job_id: job.job_id) + + status_json = described_class.new(status, current_user: user).to_json + expect(status_json).to be_json_eql("success".to_json).at_path("status") + end + end + + context "when job is part of a batch" do + it "returns in_process if the batch is running" do + GoodJob::Batch.enqueue { NoOpJob.perform_later } + status = JobStatus::Status.order(:created_at).last + status_json = described_class.new(status, current_user: user).to_json + + expect(status_json).to be_json_eql("in_queue".to_json).at_path("status") + end + + it "returns success if the batch has finished and is successful" do + GoodJob::Batch.enqueue { NoOpJob.perform_later } + GoodJob.perform_inline + status = JobStatus::Status.order(:created_at).last + + status_json = described_class.new(status, current_user: user).to_json + expect(status_json).to be_json_eql("success".to_json).at_path("status") + end + + it "returns failure if the batch has finished and has been discarded" do + GoodJob::Batch.enqueue { NoOpJob.perform_later(fail: true) } + begin + GoodJob.perform_inline + rescue StandardError + # noop + end + status = JobStatus::Status.order(:created_at).last + + status_json = described_class.new(status, current_user: user).to_json + expect(status_json).to be_json_eql("failure".to_json).at_path("status") + end + end + end +end diff --git a/modules/ldap_groups/config/locales/crowdin/ms.yml b/modules/ldap_groups/config/locales/crowdin/ms.yml index e4b101e439af..d9c231720d65 100644 --- a/modules/ldap_groups/config/locales/crowdin/ms.yml +++ b/modules/ldap_groups/config/locales/crowdin/ms.yml @@ -9,29 +9,29 @@ ms: ldap_auth_source: 'Sambungan LDAP' sync_users: 'Selaraskan pengguna-pengguna' ldap_groups/synchronized_filter: - filter_string: 'Saringan LDAP' + filter_string: 'Penyaring LDAP' ldap_auth_source: 'Sambungan LDAP' group_name_attribute: "Atribut nama kumpulan" sync_users: 'Selaraskan pengguna-pengguna' base_dn: "Pangkalan carian DN" models: ldap_groups/synchronized_group: 'Kumpulan LDAP yang diselaraskan' - ldap_groups/synchronized_filter: 'Penyaring penyelarasan Kumpulan LDAP' + ldap_groups/synchronized_filter: 'Penyaring sinkronisasi Kumpulan LDAP' errors: models: ldap_groups/synchronized_filter: must_contain_base_dn: "Pangkalan saringan DN mestilah dikandungi dalam DN asas sambungan LDAP" ldap_groups: label_menu_item: 'Sinkronisasi kumpulan LDAP' - label_group_key: 'Kekunci penyaring kumpulan LDAP' + label_group_key: 'Kekunci saringan kumpulan LDAP' label_synchronize: 'Selaraskan' settings: name_attribute: 'Atribut nama kumpulan LDAP' name_attribute_text: 'Atribut LDAP yang digunakan untuk menamakan kumpulan OpenProject apabila dicipta oleh penyaring' synchronized_filters: add_new: 'Tambah saringan LDAP yang diselaraskan' - singular: 'Penyaring penyelarasan kumpulan LDAP' - plural: 'Penyaring penyelarasan kumpulan LDAP' + singular: 'Penyaring sinkronisasi kumpulan LDAP' + plural: 'Penyaring sinkronisasi kumpulan LDAP' label_n_groups_found: one: "1 kumpulan ditemui penyaring" other: "%{count} kumpulan ditemui penyaring" @@ -45,17 +45,18 @@ ms: group_name_attribute_text: 'Masukkan atribut kumpulan LDAP yang digunakan untuk tetapkan nama kumpulan OpenProject.' filter_string_text: 'Masukkan penyaring LDAP RFC4515 yang kembalikan kumpulan dalam LDAP anda untuk diselaraskan dengan OpenProject.' base_dn_text: > - Masukkan pangkalan carian DN untuk gunakan penyaring ini. Ia perlulah berada di bawah pangkalan DN daripada sambungan LDAP yang dipilih. Tinggalkan kosong pilihan ini untuk gunakan semula sambungan pangkalan DN + Masukkan pangkalan carian DN untuk gunakan penyaring ini. Ia perlulah berada di bawah pangkalan DN daripada sambungan LDAP yang dipilih. Tinggalkan pilihan ini kosong untuk gunakan semula sambungan pangkalan DN synchronized_groups: add_new: 'Tambah kumpulan LDAP yang diselaraskan' destroy: title: 'Keluarkan kumpulan yang diselaraskan %{name}' - confirmation: "Jika anda teruskan, kumpulan yang diselaraskan %{name} dan semua pengguna %{users_count} yang diselaraskan melaluinya akan dikeluarkan." - info: "Perhatian: Kumpulan OpenProject itu sendiri dan ahli-ahli yang ditambah di luar penyelarasan LDAP tidak akan dikeluarkan." + confirmation: "Jika anda teruskan, kumpulan yang diselaraskan %{name} dan semua %{users_count} pengguna yang diselaraskan melaluinya akan dikeluarkan." + info: "Perhatian: Kumpulan OpenProject sendiri dan ahli-ahli yang ditambah di luar sinkronisasi LDAP tidak akan dikeluarkan." verification: "Masukkan nama kumpulan %{name} untuk mengesahkan pembuangan." help_text_html: | - Modul ini membenarkan anda untuk menyediakan penyelarasan antara LDAP dan kumpulan-kumpulan OpenProject. + Modul ini membenarkan anda untuk menyediakan sinkronisasi antara LDAP dan kumpulan-kumpulan OpenProject. Ia bergantung kepada keperluan kumpulan LDAP untuk menggunakan kumpulanNama / ahliKepada
    set atribut untuk bekerjasama dengan OpenProject. +
    Kumpulan diselaraskan setiap jam melalui tugasan cron. Sila lihat dokumentasi kami berkenaan topik ini. no_results: 'Tiada kumpulan yang diseleraskan ditemui.' @@ -65,7 +66,7 @@ ms: form: auth_source_text: 'Pilih sambungan LDAP yang harus digunakan.' sync_users_text: > - Jika anda mengaktifkan pilihan ini, pengguna yang ditemui akan dicipta secara automatik dalam OpenProject. Tanpanya, hanya akaun yang sedia ada dalam OpenProject akan ditambah ke dalam kumpulan. + Jika anda mengaktifkan pilihan ini, pengguna yang ditemui akan dicipta secara automatik di OpenProject. Tanpanya, hanya akaun yang sedia ada dalam OpenProject akan ditambah ke dalam kumpulan. dn_text: 'Masukkan DN penuh kumpulan dalam LDAP' group_text: 'Pilih kumpulan OpenProject sedia ada yang ahli-ahli kumpulan LDAP akan diselaraskan dengannya' upsale: diff --git a/modules/meeting/app/components/_index.sass b/modules/meeting/app/components/_index.sass index 2f17a54aef68..3082e33be43d 100644 --- a/modules/meeting/app/components/_index.sass +++ b/modules/meeting/app/components/_index.sass @@ -1,3 +1,4 @@ @import "./meeting_agenda_items/item_component/show_component.sass" @import "./meeting_agenda_items/form_component.sass" +@import "./meeting_sections/header_component.sass" @import "./meetings/sidebar/state_component.sass" diff --git a/modules/meeting/app/components/meeting_agenda_items/form_component.html.erb b/modules/meeting/app/components/meeting_agenda_items/form_component.html.erb index 063d0fa056e3..e0456e27b2a2 100644 --- a/modules/meeting/app/components/meeting_agenda_items/form_component.html.erb +++ b/modules/meeting/app/components/meeting_agenda_items/form_component.html.erb @@ -29,20 +29,6 @@ render(MeetingAgendaItem::Notes.new(f)) end - grid.with_area(:add_note, - display: display_notes_add_button_value, - data: { 'meeting-agenda-item-form-target': "notesAddButton" }) do - render(Primer::Beta::Button.new( - scheme: :secondary, - data: { - action: 'click->meeting-agenda-item-form#addNotes keydown.enter->meeting-agenda-item-form#addNotes' - } - )) do |component| - component.with_leading_visual_icon(icon: :plus) - MeetingAgendaItem.human_attribute_name(:notes) - end - end - grid.with_area(:actions) do flex_layout do |flex| flex.with_column(mr: 2) do @@ -55,6 +41,9 @@ t("button_cancel") end end + flex.with_column do + render(MeetingAgendaItem::MeetingSectionForm.new(f, meeting_section: @meeting_section)) + end flex.with_column do render(MeetingAgendaItem::Submit.new(f, type: @type)) end diff --git a/modules/meeting/app/components/meeting_agenda_items/form_component.rb b/modules/meeting/app/components/meeting_agenda_items/form_component.rb index 39d90ce694a6..427f542de7f8 100644 --- a/modules/meeting/app/components/meeting_agenda_items/form_component.rb +++ b/modules/meeting/app/components/meeting_agenda_items/form_component.rb @@ -32,10 +32,12 @@ class FormComponent < ApplicationComponent include OpTurbo::Streamable include OpPrimer::ComponentHelpers - def initialize(meeting:, meeting_agenda_item:, method:, submit_path:, cancel_path:, type: :simple, display_notes_input: nil) + def initialize(meeting:, meeting_section:, meeting_agenda_item:, method:, submit_path:, cancel_path:, type: :simple, + display_notes_input: nil) super @meeting = meeting + @meeting_section = meeting_section @meeting_agenda_item = meeting_agenda_item @method = method @submit_path = submit_path diff --git a/modules/meeting/app/components/meeting_agenda_items/item_component.rb b/modules/meeting/app/components/meeting_agenda_items/item_component.rb index e52d1cb514b4..9cdae6d281ce 100644 --- a/modules/meeting/app/components/meeting_agenda_items/item_component.rb +++ b/modules/meeting/app/components/meeting_agenda_items/item_component.rb @@ -86,6 +86,8 @@ def wrapper_arguments scheme: :default, data: { id: @meeting_agenda_item.id, + "draggable-id": @meeting_agenda_item.id, + "draggable-type": "agenda-item", "drop-url": drop_meeting_agenda_item_path(@meeting_agenda_item.meeting, @meeting_agenda_item) } } diff --git a/modules/meeting/app/components/meeting_agenda_items/item_component/edit_component.rb b/modules/meeting/app/components/meeting_agenda_items/item_component/edit_component.rb index 7833da7e7d5f..662733396e8e 100644 --- a/modules/meeting/app/components/meeting_agenda_items/item_component/edit_component.rb +++ b/modules/meeting/app/components/meeting_agenda_items/item_component/edit_component.rb @@ -43,6 +43,7 @@ def call render(Primer::Box.new(pl: 3)) do render(MeetingAgendaItems::FormComponent.new( meeting: @meeting_agenda_item.meeting, + meeting_section: @meeting_agenda_item.meeting_section, meeting_agenda_item: @meeting_agenda_item, method: :put, submit_path: meeting_agenda_item_path(@meeting_agenda_item.meeting, @meeting_agenda_item, format: :turbo_stream), diff --git a/modules/meeting/app/components/meeting_agenda_items/item_component/show_component.html.erb b/modules/meeting/app/components/meeting_agenda_items/item_component/show_component.html.erb index 701053c26260..99062ceb4598 100644 --- a/modules/meeting/app/components/meeting_agenda_items/item_component/show_component.html.erb +++ b/modules/meeting/app/components/meeting_agenda_items/item_component/show_component.html.erb @@ -46,7 +46,7 @@ end if @meeting_agenda_item.duration_in_minutes.present? && @meeting_agenda_item.duration_in_minutes > 0 - grid.with_area(:duration, Primer::Beta::Text, color: duration_color_scheme, mr: 1) do + grid.with_area(:duration, Primer::Beta::Text, color: duration_color_scheme, mr: 1, font_size: :small) do I18n.t('datetime.distance_in_words.x_minutes_abbreviated', count: @meeting_agenda_item.duration_in_minutes) end end @@ -71,8 +71,13 @@ test_selector: 'op-meeting-agenda-actions') edit_action_item(menu) if @meeting_agenda_item.editable? add_note_action_item(menu) if @meeting_agenda_item.editable? && @meeting_agenda_item.notes.blank? + unless first? && last? + menu.with_divider + move_actions(menu) + end + menu.with_divider copy_action_item(menu) - move_actions(menu) + menu.with_divider delete_action_item(menu) end end diff --git a/modules/meeting/app/components/meeting_agenda_items/list_component.html.erb b/modules/meeting/app/components/meeting_agenda_items/list_component.html.erb index 2a378cf8c2f7..a11caa657beb 100644 --- a/modules/meeting/app/components/meeting_agenda_items/list_component.html.erb +++ b/modules/meeting/app/components/meeting_agenda_items/list_component.html.erb @@ -1,39 +1,43 @@ <%= component_wrapper(data: wrapper_data_attributes) do - # The borderBox needs to be `position: relative` because of bug #49853 - # (The action menu items float somewhere on the page as soon as you have to scroll the Box in Firefox) - render(border_box_container) do |border_box| - if @meeting.agenda_items.empty? && @form_hidden - border_box.with_body( - scheme: :default - ) do - render(Primer::Beta::Blankslate.new) do |component| - component.with_visual_icon(icon: :book) - component.with_heading(tag: :h2).with_content(t("text_meeting_empty_heading")) - component.with_description do - flex_layout do |flex| - flex.with_row(mb: 2) do - render(Primer::Beta::Text.new(color: :subtle)) { t("text_meeting_empty_description_1") } - end - flex.with_row do - render(Primer::Beta::Text.new(color: :subtle)) { t("text_meeting_empty_description_2") } - end - end - end - end - end - else - first_and_last = [@meeting.agenda_items.first, @meeting.agenda_items.last] + flex_layout(mb: 3) do |flex| + flex.with_row(classes: 'dragula-container', id: insert_target_modifier_id, data: { 'allowed-drop-type': 'section' }.merge(drop_target_config) ) do + first_and_last = [@meeting.sections.first, @meeting.sections.last] render( - MeetingAgendaItems::ItemComponent.with_collection( - @meeting.agenda_items.with_includes_to_render, - container: border_box, + MeetingSections::ShowComponent.with_collection( + @meeting.sections, first_and_last: ) ) end - border_box.with_row(p: 0, border_top: 0, id: insert_target_modifier_id) do - render(MeetingAgendaItems::NewComponent.new(meeting: @meeting, hidden: @form_hidden, type: @form_type)) + if @meeting.agenda_items.empty? && @meeting.sections.empty? + flex.with_row do + render(border_box_container) do |border_box| + if @form_hidden + border_box.with_body( + scheme: :default + ) do + render(Primer::Beta::Blankslate.new) do |component| + component.with_visual_icon(icon: :book) + component.with_heading(tag: :h2).with_content(t("text_meeting_empty_heading")) + component.with_description do + flex_layout do |flex| + flex.with_row(mb: 2) do + render(Primer::Beta::Text.new(color: :subtle)) { t("text_meeting_empty_description_1") } + end + flex.with_row do + render(Primer::Beta::Text.new(color: :subtle)) { t("text_meeting_empty_description_2") } + end + end + end + end + end + end + border_box.with_row(p: 0, border_top: 0) do + render(MeetingAgendaItems::NewComponent.new(meeting: @meeting, hidden: @form_hidden, type: @form_type)) + end + end + end end end end diff --git a/modules/meeting/app/components/meeting_agenda_items/list_component.rb b/modules/meeting/app/components/meeting_agenda_items/list_component.rb index 79bb962b064e..8b105616fe3f 100644 --- a/modules/meeting/app/components/meeting_agenda_items/list_component.rb +++ b/modules/meeting/app/components/meeting_agenda_items/list_component.rb @@ -44,9 +44,15 @@ def initialize(meeting:, form_hidden: true, form_type: :simple) def wrapper_data_attributes { - controller: "meeting-agenda-item-drag-and-drop", - "application-target": "dynamic", - "target-tag": "ul" + controller: "generic-drag-and-drop", + "application-target": "dynamic" + } + end + + def drop_target_config + { + "is-drag-and-drop-target": true, + "target-allowed-drag-type": "section" # the type of dragged items which are allowed to be dropped in this target } end @@ -55,7 +61,7 @@ def insert_target_modified? end def insert_target_modifier_id - "meeting-agenda-items-new-item" + "meeting-section-new-item" end end end diff --git a/modules/meeting/app/components/meeting_agenda_items/new_button_component.html.erb b/modules/meeting/app/components/meeting_agenda_items/new_button_component.html.erb index ce0328f583d3..f950248b5fcf 100644 --- a/modules/meeting/app/components/meeting_agenda_items/new_button_component.html.erb +++ b/modules/meeting/app/components/meeting_agenda_items/new_button_component.html.erb @@ -1,7 +1,7 @@ <%= - component_wrapper(class: "mt-3", style: 'position: relative') do + component_wrapper(style: "position: relative") do render(Primer::Alpha::ActionMenu.new) do |component| - component.with_show_button(scheme: :primary, disabled: @disabled) do |button| + component.with_show_button(scheme: button_scheme, disabled: @disabled) do |button| button.with_leading_visual_icon(icon: :plus) t("button_add") end @@ -9,18 +9,28 @@ label: t("activerecord.models.meeting_agenda_item", count: 1), tag: :a, content_arguments: { - href: new_meeting_agenda_item_path(@meeting, type: "simple"), - data: { 'turbo-stream': true } + href: new_meeting_agenda_item_path(@meeting, type: "simple", meeting_section_id: @meeting_section&.id), + data: { "turbo-stream": true } } ) component.with_item( label: t("activerecord.models.work_package", count: 1), tag: :a, content_arguments: { - href: new_meeting_agenda_item_path(@meeting, type: "work_package"), - data: { 'turbo-stream': true } + href: new_meeting_agenda_item_path(@meeting, type: "work_package", meeting_section_id: @meeting_section&.id), + data: { "turbo-stream": true } } ) + unless @meeting_section + component.with_item( + label: "Section", + tag: :a, + content_arguments: { + href: meeting_sections_path(@meeting), + data: { "turbo-stream": true, "turbo-method": :post } + } + ) + end end end %> diff --git a/modules/meeting/app/components/meeting_agenda_items/new_button_component.rb b/modules/meeting/app/components/meeting_agenda_items/new_button_component.rb index bfc9b1af307a..06ad902fe000 100644 --- a/modules/meeting/app/components/meeting_agenda_items/new_button_component.rb +++ b/modules/meeting/app/components/meeting_agenda_items/new_button_component.rb @@ -32,16 +32,26 @@ class NewButtonComponent < ApplicationComponent include OpTurbo::Streamable include OpPrimer::ComponentHelpers - def initialize(meeting:, meeting_agenda_item: nil, disabled: false) + def initialize(meeting:, meeting_section: nil, disabled: false) super @meeting = meeting - @meeting_agenda_item = meeting_agenda_item || MeetingAgendaItem.new(meeting:, author: User.current) + @meeting_section = meeting_section @disabled = @meeting.closed? || disabled end + private + + def wrapper_uniq_by + @meeting_section&.id + end + def render? User.current.allowed_in_project?(:manage_agendas, @meeting.project) end + + def button_scheme + @meeting_section ? :secondary : :primary + end end end diff --git a/modules/meeting/app/components/meeting_agenda_items/new_component.html.erb b/modules/meeting/app/components/meeting_agenda_items/new_component.html.erb index 75d91649eaed..8aae29ad1fe1 100644 --- a/modules/meeting/app/components/meeting_agenda_items/new_component.html.erb +++ b/modules/meeting/app/components/meeting_agenda_items/new_component.html.erb @@ -6,9 +6,10 @@ render(MeetingAgendaItems::FormComponent.new( meeting: @meeting, meeting_agenda_item: @meeting_agenda_item, + meeting_section: @meeting_section, method: :post, submit_path: meeting_agenda_items_path(@meeting, format: :turbo_stream), - cancel_path: cancel_new_meeting_agenda_items_path(@meeting), + cancel_path: cancel_new_meeting_agenda_items_path(@meeting, meeting_section_id: @meeting_section&.id), type: @type )) end diff --git a/modules/meeting/app/components/meeting_agenda_items/new_component.rb b/modules/meeting/app/components/meeting_agenda_items/new_component.rb index f20d74affa87..d1dbc6dca937 100644 --- a/modules/meeting/app/components/meeting_agenda_items/new_component.rb +++ b/modules/meeting/app/components/meeting_agenda_items/new_component.rb @@ -32,10 +32,11 @@ class NewComponent < ApplicationComponent include OpTurbo::Streamable include OpPrimer::ComponentHelpers - def initialize(meeting:, meeting_agenda_item: nil, hidden: true, type: :simple) + def initialize(meeting:, meeting_section: nil, meeting_agenda_item: nil, hidden: true, type: :simple) super @meeting = meeting + @meeting_section = meeting_section @meeting_agenda_item = meeting_agenda_item || build_agenda_item @hidden = hidden @type = type @@ -43,6 +44,10 @@ def initialize(meeting:, meeting_agenda_item: nil, hidden: true, type: :simple) private + def wrapper_uniq_by + @meeting_section&.id + end + def build_agenda_item MeetingAgendaItem.new( meeting: @meeting, diff --git a/modules/meeting/app/components/meeting_sections/header_component.html.erb b/modules/meeting/app/components/meeting_sections/header_component.html.erb new file mode 100644 index 000000000000..7d768c2d52f9 --- /dev/null +++ b/modules/meeting/app/components/meeting_sections/header_component.html.erb @@ -0,0 +1,74 @@ +<%= + component_wrapper(class: "op-meeting-section-container", data: wrapper_data_attributes) do + if @state == :show + grid_layout('op-meeting-section', tag: :div) do |grid| + grid.with_area(:'drag-handle', tag: :div) do + if editable? + render(Primer::OpenProject::DragHandle.new(classes: 'handle')) + end + end + grid.with_area(:content, tag: :span) do + render(Primer::Beta::Text.new(font_weight: :bold, mr: 2)) do + @meeting_section.title.presence || I18n.t("meeting_section.untitled_title") + end + end + if @meeting_section.agenda_items_sum_duration_in_minutes > 0 + grid.with_area(:duration, Primer::Beta::Text, color: :subtle, mr: 1, font_size: :small) do + render(Primer::Beta::Text.new(font_size: :small, font_weight: :normal, color: :subtle)) do + render(OpenProject::Common::DurationComponent.new(@meeting_section.agenda_items_sum_duration_in_minutes, :minutes, abbreviated: true)) + end + end + end + grid.with_area(:actions, tag: :div, justify_self: :end) do + if editable? + render(Primer::Alpha::ActionMenu.new(data: { test_selector: "meeting-section-action-menu" })) do |menu| + menu.with_show_button(icon: "kebab-horizontal", 'aria-label': t("settings.project_attributes.label_section_actions"), scheme: :invisible) + edit_action_item(menu) + unless first? && last? + menu.with_divider + move_actions(menu) + end + menu.with_divider + add_agenda_item_action(menu) + add_work_package_action(menu) + menu.with_divider + delete_action_item(menu) + end + end + end + end + else + primer_form_with( + model: @meeting_section, + method: :put, + url: meeting_section_path(@meeting_section.meeting, @meeting_section), + data: { + "controller": "meeting-section-form", + "application-target": "dynamic", + "meeting-section-form-cancel-url-value": cancel_edit_meeting_section_path(@meeting_section.meeting, @meeting_section) + } + ) do |f| + flex_layout do |editable_title_form| + editable_title_form.with_column(flex: 1, mr: 2, pl: 2) do + render(MeetingSection::Title.new(f)) + end + + editable_title_form.with_column(mr: 2) do + render(MeetingSection::Submit.new(f)) + end + + editable_title_form.with_column do + render(Primer::Beta::Button.new( + scheme: :secondary, + tag: :a, + href: cancel_edit_meeting_section_path(@meeting_section.meeting, @meeting_section), + data: { 'turbo-stream': true } + )) do |_c| + t("button_cancel") + end + end + end + end + end + end +%> diff --git a/modules/meeting/app/components/meeting_sections/header_component.rb b/modules/meeting/app/components/meeting_sections/header_component.rb new file mode 100644 index 000000000000..9b5a6c7f2199 --- /dev/null +++ b/modules/meeting/app/components/meeting_sections/header_component.rb @@ -0,0 +1,165 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2023 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module MeetingSections + class HeaderComponent < ApplicationComponent + include ApplicationHelper + include OpPrimer::ComponentHelpers + include OpTurbo::Streamable + + def initialize(meeting_section:, state: :show, first_and_last: []) + super + + @meeting_section = meeting_section + @meeting_agenda_items = meeting_section.agenda_items + @first_and_last = first_and_last + @state = state + end + + private + + def wrapper_uniq_by + @meeting_section.id + end + + def wrapper_data_attributes + { + test_selector: "meeting-section-header-container-#{@meeting_section.id}" + } + end + + def drag_and_drop_target_config + { + "is-drag-and-drop-target": true, + "target-container-accessor": ".Box > ul", # the accessor of the container that contains the drag and drop items + "target-id": @meeting_section.id, # the id of the target + "target-allowed-drag-type": "custom-field" # the type of dragged items which are allowed to be dropped in this target + } + end + + def editable? + @meeting_section.editable? && User.current.allowed_in_project?(:manage_agendas, @meeting_section.project) + end + + def first? + @first ||= + if @first_and_last.first + @first_and_last.first == @meeting_section + else + @meeting_section.first? + end + end + + def last? + @last ||= + if @first_and_last.last + @first_and_last.last == @meeting_section + else + @meeting_section.last? + end + end + + def move_actions(menu) + unless first? + move_action_item(menu, :highest, t("label_agenda_item_move_to_top"), + "move-to-top") + move_action_item(menu, :higher, t("label_agenda_item_move_up"), "chevron-up") + end + unless last? + move_action_item(menu, :lower, t("label_agenda_item_move_down"), + "chevron-down") + move_action_item(menu, :lowest, t("label_agenda_item_move_to_bottom"), + "move-to-bottom") + end + end + + def move_action_item(menu, move_to, label_text, icon) + menu.with_item(label: label_text, + href: move_meeting_section_path(@meeting_section.meeting, @meeting_section, move_to:), + form_arguments: { + method: :put, data: { "turbo-stream": true, + test_selector: "meeting-section-move-#{move_to}" } + }) do |item| + item.with_leading_visual_icon(icon:) + end + end + + def edit_action_item(menu) + menu.with_item(label: t("label_edit"), + href: edit_meeting_section_path(@meeting_section.meeting, @meeting_section), + content_arguments: { + data: { "turbo-stream": true, "test-selector": "meeting-section-edit" } + }) do |item| + item.with_leading_visual_icon(icon: :pencil) + end + end + + def add_agenda_item_action(menu) + menu.with_item( + label: t("activerecord.models.meeting_agenda_item", count: 1), + href: new_meeting_agenda_item_path(@meeting_section.meeting, type: "simple", meeting_section_id: @meeting_section&.id), + content_arguments: { + data: { "turbo-stream": true, "test-selector": "meeting-section-add-agenda-item-from-menu" } + } + ) do |item| + item.with_leading_visual_icon(icon: :plus) + end + end + + def add_work_package_action(menu) + menu.with_item( + label: t("activerecord.models.work_package", count: 1), + href: new_meeting_agenda_item_path(@meeting_section.meeting, type: "work_package", + meeting_section_id: @meeting_section&.id), + content_arguments: { + data: { "turbo-stream": true, "test-selector": "meeting-section-add-work-package-from-menu" } + } + ) do |item| + item.with_leading_visual_icon(icon: :plus) + end + end + + def delete_action_item(menu) + confirm_text = + if @meeting_section.agenda_items.any? + t("meeting_section.delete_confirmation") + else + t("text_are_you_sure") + end + menu.with_item(label: t("text_destroy"), + scheme: :danger, + href: meeting_section_path(@meeting_section.meeting, @meeting_section), + form_arguments: { + method: :delete, data: { confirm: confirm_text, "turbo-stream": true, + test_selector: "meeting-section-delete" } + }) do |item| + item.with_leading_visual_icon(icon: :trash) + end + end + end +end diff --git a/modules/meeting/app/components/meeting_sections/header_component.sass b/modules/meeting/app/components/meeting_sections/header_component.sass new file mode 100644 index 000000000000..e855233a9e5c --- /dev/null +++ b/modules/meeting/app/components/meeting_sections/header_component.sass @@ -0,0 +1,23 @@ +@import 'helpers' + +.op-meeting-section + display: grid + grid-template-columns: 20px auto 1fr fit-content(40px) + grid-template-areas: "drag-handle content duration actions" + + &--drag-handle, + &--duration, + &--content + align-self: center + + &--actions + justify-self: end + + &--duration + white-space: nowrap + + &--content + @include text-shortener + + @media screen and (max-width: $breakpoint-lg) + grid-template-columns: 20px auto 1fr 50px diff --git a/modules/meeting/app/components/meeting_sections/show_component.html.erb b/modules/meeting/app/components/meeting_sections/show_component.html.erb new file mode 100644 index 000000000000..ac0e581d780b --- /dev/null +++ b/modules/meeting/app/components/meeting_sections/show_component.html.erb @@ -0,0 +1,37 @@ +<%= + component_wrapper(class: "op-meeting-section-container", data: { test_selector: "meeting-section-container-#{@meeting_section.id}" }.merge(draggable_item_config)) do + render(Primer::Beta::BorderBox.new(mt: 3, data: drag_and_drop_target_config)) do |component| + if render_section_wrapper? + component.with_header(font_weight: :bold, pl: 0) do + render(MeetingSections::HeaderComponent.new(meeting_section: @meeting_section, state: @state)) + end + end + if render_new_button_in_section? + component.with_row(data: { 'empty-list-item': true }) do + flex_layout(align_items: :center, justify_content: :space_between) do |empty_list_container| + empty_list_container.with_column(mr: 2) do + render(Primer::Beta::Text.new(color: :subtle)) { t("meeting_section.empty_text") } + end + empty_list_container.with_column do + render(MeetingAgendaItems::NewButtonComponent.new(meeting: @meeting, meeting_section: @meeting_section)) + end + end + end + else + first_and_last = [@meeting_agenda_items.first, @meeting_agenda_items.last] + @meeting_agenda_items.each do |agenda_item| + render( + MeetingAgendaItems::ItemComponent.new( + meeting_agenda_item: agenda_item, + container: component, + first_and_last: + ) + ) + end + end + component.with_row(p: 0, border_top: 0, id: insert_target_modifier_id) do + render(MeetingAgendaItems::NewComponent.new(meeting: @meeting, meeting_section: @meeting_section, hidden: @form_hidden, type: @form_type)) + end + end + end +%> diff --git a/modules/meeting/app/components/meeting_sections/show_component.rb b/modules/meeting/app/components/meeting_sections/show_component.rb new file mode 100644 index 000000000000..eb1bc55b5a63 --- /dev/null +++ b/modules/meeting/app/components/meeting_sections/show_component.rb @@ -0,0 +1,95 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2023 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module MeetingSections + class ShowComponent < ApplicationComponent + include ApplicationHelper + include OpPrimer::ComponentHelpers + include OpTurbo::Streamable + + with_collection_parameter :meeting_section + + def initialize(meeting_section:, first_and_last: [], form_hidden: true, form_type: :simple, insert_target_modified: true, + force_wrapper: false, state: :show) + super + + @meeting = meeting_section.meeting + @meeting_section = meeting_section + @meeting_agenda_items = meeting_section.agenda_items + @first_and_last = first_and_last + @form_hidden = form_hidden + @form_type = form_type + @insert_target_modified = insert_target_modified + @force_wrapper = force_wrapper + @state = state + end + + private + + def wrapper_uniq_by + @meeting_section.id + end + + def insert_target_modified? + @insert_target_modified + end + + def insert_target_modifier_id + "meeting-agenda-items-new-item-#{@meeting_section.id}" + end + + def editable? + @meeting_section.editable? && User.current.allowed_in_project?(:manage_agendas, @meeting_section.project) + end + + def render_section_wrapper? + @force_wrapper || !@meeting_section.untitled? || @meeting.sections.count > 1 + end + + def render_new_button_in_section? + @meeting_agenda_items.empty? && @form_hidden && editable? + end + + def draggable_item_config + { + "draggable-id": @meeting_section.id, + "draggable-type": "section", + "drop-url": drop_meeting_section_path(@meeting, @meeting_section) + } + end + + def drag_and_drop_target_config + { + "is-drag-and-drop-target": true, + "target-container-accessor": ".Box > ul", # the accessor of the container that contains the drag and drop items + "target-id": @meeting_section.id, # the id of the target + "target-allowed-drag-type": "agenda-item" # the type of dragged items which are allowed to be dropped in this target + } + end + end +end diff --git a/modules/meeting/app/components/meetings/header_component.html.erb b/modules/meeting/app/components/meetings/header_component.html.erb index c99e3c3e8d9a..19ac108a6d43 100644 --- a/modules/meeting/app/components/meetings/header_component.html.erb +++ b/modules/meeting/app/components/meetings/header_component.html.erb @@ -1,121 +1,76 @@ <%= component_wrapper do - case @state - when :show - flex_layout do |show_header| - show_header.with_row do - flex_layout(justify_content: :space_between, align_items: :center) do |title| - title.with_column(flex: 1) do - render(Primer::Beta::Heading.new(tag: :h2)) { @meeting.title } - end - - title.with_column do - render(Primer::Alpha::ActionMenu.new) do |menu| - menu.with_show_button(icon: "kebab-horizontal", 'aria-label': t("label_meeting_actions"), test_selector: 'op-meetings-header-action-trigger') - - menu.with_item(label: t("label_meeting_edit_title"), - href: edit_meeting_path(@meeting), - content_arguments: { - data: { 'turbo-stream': true } - }) do |item| - item.with_leading_visual_icon(icon: :pencil) - end if @meeting.editable? - - menu.with_item(label: t(:button_copy), - href: copy_meeting_path(@meeting), - content_arguments: { - data: { turbo: false } - }) do |item| - item.with_leading_visual_icon(icon: :copy) - end - - menu.with_item(label: t(:label_icalendar_download), - href: download_ics_meeting_path(@meeting)) do |item| - item.with_leading_visual_icon(icon: :download) - end + render(Primer::OpenProject::PageHeader.new) do |header| + if show_state? + header.with_title { @meeting.title } + header.with_breadcrumbs(breadcrumb_items) + header.with_description { render(Meetings::HeaderInfolineComponent.new(@meeting)) } + header.with_action_menu(menu_arguments: {}, + button_arguments: { icon: "kebab-horizontal", + "aria-label": t("label_meeting_actions"), + test_selector: 'op-meetings-header-action-trigger'}) do |menu| + menu.with_item(label: t("label_meeting_edit_title"), + href: edit_meeting_path(@meeting), + content_arguments: { + data: { 'turbo-stream': true } + }) do |item| + item.with_leading_visual_icon(icon: :pencil) + end if @meeting.editable? - if User.current.allowed_in_project?(:send_meeting_agendas_notification, @meeting.project - ) - menu.with_item(label: t('meeting.label_mail_all_participants'), - href: notify_meeting_path(@meeting), - form_arguments: { method: :post, data: { turbo: 'false' } }) do |item| - item.with_leading_visual_icon(icon: :mail) - end - end + menu.with_item(label: t(:button_copy), + href: copy_meeting_path(@meeting), + content_arguments: { + data: { turbo: false } + }) do |item| + item.with_leading_visual_icon(icon: :copy) + end - menu.with_item(label: t(:label_history), - tag: :button, - content_arguments: { "data-show-dialog-id": "meetings-history-dialog" }, - value: "" - ) do |item| - item.with_leading_visual_icon(icon: :clock) # or :check TBD - end + menu.with_item(label: t(:label_icalendar_download), + href: download_ics_meeting_path(@meeting)) do |item| + item.with_leading_visual_icon(icon: :download) + end - menu.with_item(label: t("label_meeting_delete"), - scheme: :danger, - href: meeting_path(@meeting), - form_arguments: { - method: :delete, data: { confirm: t("text_are_you_sure"), turbo: 'false' } - }) do |item| - item.with_leading_visual_icon(icon: :trash) - end if delete_enabled? - end + if User.current.allowed_in_project?(:send_meeting_agendas_notification, @meeting.project + ) + menu.with_item(label: t('meeting.label_mail_all_participants'), + href: notify_meeting_path(@meeting), + form_arguments: { method: :post, data: { turbo: 'false' } }) do |item| + item.with_leading_visual_icon(icon: :mail) end end - end - show_header.with_row do - render(OpTurbo::OpPrimer::AsyncDialogComponent.new( - id: "meetings-history-dialog", - src: history_meeting_path(@meeting), - size: :xlarge, - header_variant: :large, - title: I18n.t(:label_history), - hide_button: true - )) - end - - show_header.with_row do - render(Meetings::HeaderInfolineComponent.new(@meeting)) - end - end - - when :edit - if @meeting.editable? - flex_layout do |edit_header| - edit_header.with_row(mb: 2) do - primer_form_with( - model: @meeting, - method: :put, - url: update_title_meeting_path(@meeting) - ) do |f| - flex_layout do |editable_title_form| - editable_title_form.with_column(flex: 1, mr: 2) do - render(Meeting::Title.new(f)) - end - - editable_title_form.with_column(mr: 2) do - render(Meeting::Submit.new(f)) - end - - editable_title_form.with_column do - render(Primer::Beta::Button.new( - scheme: :secondary, - tag: :a, - href: cancel_edit_meeting_path(@meeting), - data: { 'turbo-stream': true } - )) do |_c| - t("button_cancel") - end - end - end - end + menu.with_item(label: t(:label_history), + tag: :a, + href: history_meeting_path(@meeting), + content_arguments: { + "data-controller": "async-dialog", + }, + value: "" + ) do |item| + item.with_leading_visual_icon(icon: :clock) # or :check TBD end - edit_header.with_row do - render(Meetings::HeaderInfolineComponent.new(@meeting)) + menu.with_item(label: t("label_meeting_delete"), + scheme: :danger, + href: meeting_path(@meeting), + form_arguments: { + method: :delete, data: { confirm: t("text_are_you_sure"), turbo: 'false' } + }) do |item| + item.with_leading_visual_icon(icon: :trash) + end if delete_enabled? + end + elsif @meeting.editable? + header.with_title do + primer_form_with( + model: @meeting, + method: :put, + url: update_title_meeting_path(@meeting) + ) do |f| + render(Meeting::Title.new(f, meeting: @meeting)) end end + header.with_breadcrumbs(breadcrumb_items) + header.with_description { render(Meetings::HeaderInfolineComponent.new(@meeting)) } end end end diff --git a/modules/meeting/app/components/meetings/header_component.rb b/modules/meeting/app/components/meetings/header_component.rb index d3e69e2592a4..77a6de63cc90 100644 --- a/modules/meeting/app/components/meetings/header_component.rb +++ b/modules/meeting/app/components/meetings/header_component.rb @@ -31,18 +31,42 @@ class HeaderComponent < ApplicationComponent include ApplicationHelper include OpTurbo::Streamable include OpPrimer::ComponentHelpers + include Primer::FetchOrFallbackHelper - def initialize(meeting:, state: :show) + STATE_DEFAULT = :show + STATE_EDIT = :edit + STATE_OPTIONS = [STATE_DEFAULT, STATE_EDIT].freeze + def initialize(meeting:, project: nil, state: :show) super @meeting = meeting - @state = state + @project = project + @state = fetch_or_fallback(STATE_OPTIONS, state) end private + def show_state? + @state == :show + end + def delete_enabled? User.current.allowed_in_project?(:delete_meetings, @meeting.project) end + + def breadcrumb_items + [parent_element, + { href: @project.present? ? project_meetings_path(@project.id) : meetings_path, + text: I18n.t(:label_meeting_plural) }, + @meeting.title] + end + + def parent_element + if @project.present? + { href: project_overview_path(@project.id), text: @project.name } + else + { href: home_path, text: I18n.t(:label_home) } + end + end end end diff --git a/modules/meeting/app/components/meetings/header_infoline_component.html.erb b/modules/meeting/app/components/meetings/header_infoline_component.html.erb index d6e0169dc7db..d5ac7c726ff7 100644 --- a/modules/meeting/app/components/meetings/header_infoline_component.html.erb +++ b/modules/meeting/app/components/meetings/header_infoline_component.html.erb @@ -1,7 +1,8 @@ -<%= render(Primer::BaseComponent.new(tag: :div, color: :subtle, font_size: :small)) do %> +<%= render(Primer::BaseComponent.new(tag: :div)) do %> <%= t("label_meeting_created_by") %> - <%= render(Primer::Beta::Link.new(href: user_path(@meeting.author), underline: false, + <%= render(Primer::Beta::Link.new(href: user_path(@meeting.author), + underline: false, target: "_blank")) { @meeting.author.name } %>. <%= t("label_meeting_last_updated") %> - <%= render(OpPrimer::RelativeTimeComponent.new(font_size: :small, datetime: last_updated_at, prefix: I18n.t(:label_on))) %>. + <%= render(OpPrimer::RelativeTimeComponent.new(datetime: last_updated_at, prefix: I18n.t(:label_on))) %>. <% end %> diff --git a/modules/meeting/app/components/meetings/index_page_header_component.html.erb b/modules/meeting/app/components/meetings/index_page_header_component.html.erb new file mode 100644 index 000000000000..7c1db02b469d --- /dev/null +++ b/modules/meeting/app/components/meetings/index_page_header_component.html.erb @@ -0,0 +1,18 @@ +<%= render(Primer::OpenProject::PageHeader.new) do |header| + header.with_title { page_title } + header.with_breadcrumbs(breadcrumb_items) + if render_create_button? + header.with_action_button(tag: :a, + href: dynamic_path, + scheme: :primary, + mobile_icon: :plus, + mobile_label: label_text, + aria: { label: accessibility_label_text }, + title: accessibility_label_text, + id: id, + test_selector: "add-meeting-button") do |button| + button.with_leading_visual_icon(icon: :plus) + label_text + end + end +end %> diff --git a/modules/meeting/app/components/meetings/index_page_header_component.rb b/modules/meeting/app/components/meetings/index_page_header_component.rb new file mode 100644 index 000000000000..e17a3ca8f370 --- /dev/null +++ b/modules/meeting/app/components/meetings/index_page_header_component.rb @@ -0,0 +1,82 @@ +# frozen_string_literal: true + +# -- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2010-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +# ++ + +module Meetings + class IndexPageHeaderComponent < ApplicationComponent + include OpPrimer::ComponentHelpers + include ApplicationHelper + + def initialize(project: nil) + super + @project = project + end + + def render_create_button? + if @project + User.current.allowed_in_project?(:create_meetings, @project) + else + User.current.allowed_in_any_project?(:create_meetings) + end + end + + def dynamic_path + polymorphic_path([:new, @project, :meeting]) + end + + def id + "add-meeting-button" + end + + def accessibility_label_text + I18n.t(:label_meeting_new) + end + + def label_text + I18n.t(:label_meeting) + end + + def page_title + I18n.t(:label_meeting_plural) + end + + def breadcrumb_items + [parent_element, + page_title] + end + + def parent_element + if @project.present? + { href: project_overview_path(@project.id), text: @project.name } + else + { href: home_path, text: I18n.t(:label_home) } + end + end + end +end diff --git a/modules/meeting/app/components/meetings/meeting_filters_component.rb b/modules/meeting/app/components/meetings/meeting_filters_component.rb new file mode 100644 index 000000000000..0e37103f39b7 --- /dev/null +++ b/modules/meeting/app/components/meetings/meeting_filters_component.rb @@ -0,0 +1,84 @@ +# frozen_string_literal: true + +# -- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2010-2023 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +# ++ +module Meetings + class MeetingFiltersComponent < FiltersComponent + options :project + + def allowed_filters + super + .select { |f| allowed_filter?(f) } + .sort_by(&:human_name) + end + + def filters_count + @filters_count ||= begin + count = super + count -= 1 if project.present? + + count + end + end + + protected + + def additional_filter_attributes(filter) + case filter + when Queries::Meetings::Filters::AuthorFilter, + Queries::Meetings::Filters::AttendedUserFilter, + Queries::Meetings::Filters::InvitedUserFilter + { + autocomplete_options: { + component: "opce-user-autocompleter", + resource: "principals" + } + } + else + super(filter) + end + end + + private + + def allowed_filter?(filter) + allowlist = [ + Queries::Meetings::Filters::TimeFilter, + Queries::Meetings::Filters::AttendedUserFilter, + Queries::Meetings::Filters::InvitedUserFilter, + Queries::Meetings::Filters::AuthorFilter + ] + + if project.nil? + allowlist << Queries::Meetings::Filters::ProjectFilter + end + + allowlist.detect { |clazz| filter.is_a? clazz } + end + end +end diff --git a/modules/meeting/app/components/meetings/row_component.rb b/modules/meeting/app/components/meetings/row_component.rb index 800a65cc5516..c3e906479808 100644 --- a/modules/meeting/app/components/meetings/row_component.rb +++ b/modules/meeting/app/components/meetings/row_component.rb @@ -35,7 +35,7 @@ def project_name end def title - link_to model.title, meeting_path(model) + link_to model.title, project_meeting_path(model.project, model) end def type diff --git a/modules/meeting/app/components/meetings/show_component.html.erb b/modules/meeting/app/components/meetings/show_component.html.erb index 2cf6000430b0..38e4240339ed 100644 --- a/modules/meeting/app/components/meetings/show_component.html.erb +++ b/modules/meeting/app/components/meetings/show_component.html.erb @@ -7,8 +7,8 @@ render(FlashMessageComponent.new) end - show_page.with_row(mt: 2, mb: 3, pb: 2, border: :bottom) do - render(Meetings::HeaderComponent.new(meeting: @meeting)) + show_page.with_row do + render(Meetings::HeaderComponent.new(meeting: @meeting, project: @project)) end show_page.with_row do diff --git a/modules/meeting/app/components/meetings/show_component.rb b/modules/meeting/app/components/meetings/show_component.rb index 88c8ce12bff7..7a50d6f7c536 100644 --- a/modules/meeting/app/components/meetings/show_component.rb +++ b/modules/meeting/app/components/meetings/show_component.rb @@ -31,10 +31,11 @@ class ShowComponent < ApplicationComponent include ApplicationHelper include OpPrimer::ComponentHelpers - def initialize(meeting:) + def initialize(meeting:, project:) super @meeting = meeting + @project = project end end end diff --git a/modules/meeting/app/components/meetings/sidebar/details_component.html.erb b/modules/meeting/app/components/meetings/sidebar/details_component.html.erb index 462d10d66d72..f95c064a5871 100644 --- a/modules/meeting/app/components/meetings/sidebar/details_component.html.erb +++ b/modules/meeting/app/components/meetings/sidebar/details_component.html.erb @@ -1,6 +1,6 @@ <%= component_wrapper do - flex_layout do |details_container| + flex_layout(mt: 3) do |details_container| details_container.with_row do flex_layout(align_items: :center, justify_content: :space_between) do |heading| heading.with_column(flex: 1) do @@ -102,7 +102,9 @@ render(Primer::Beta::Button.new( scheme: :link, underline: false, - data: { 'show-dialog-id': "edit-participants-dialog" } + tag: :a, + href: participants_dialog_meeting_path(@meeting), + data: { controller: 'async-dialog' } )) do t("label_meeting_show_all_participants") end @@ -110,16 +112,6 @@ end end end - - details.with_row do - render(OpTurbo::OpPrimer::AsyncDialogComponent.new( - id: "edit-participants-dialog", - src: participants_dialog_meeting_path(@meeting), - size: :medium_portrait, - title: Meeting.human_attribute_name(:participants), - hide_button: true - )) - end end end end diff --git a/modules/meeting/app/components/meetings/sidebar/participants_component.html.erb b/modules/meeting/app/components/meetings/sidebar/participants_component.html.erb index 913d6a470c99..cd083d2738ec 100644 --- a/modules/meeting/app/components/meetings/sidebar/participants_component.html.erb +++ b/modules/meeting/app/components/meetings/sidebar/participants_component.html.erb @@ -20,9 +20,11 @@ render(Primer::Beta::IconButton.new( icon: :gear, scheme: :invisible, + tag: :a, + href: participants_dialog_meeting_path(@meeting), + data: { controller: 'async-dialog' }, 'aria-label': t("label_meeting_manage_participants"), test_selector: "manage-participants-button", - data: { 'show-dialog-id': "edit-participants-dialog" } )) end end @@ -80,7 +82,9 @@ color: :default, underline: false, font_weight: :bold, - data: { 'show-dialog-id': "edit-participants-dialog" } + tag: :a, + href: participants_dialog_meeting_path(@meeting), + data: { controller: 'async-dialog' } )) do |button| button.with_leading_visual_icon(icon: "person-add") t("label_meeting_add_participants") diff --git a/modules/meeting/app/components/meetings/sidebar/participants_dialog.html.erb b/modules/meeting/app/components/meetings/sidebar/participants_dialog.html.erb new file mode 100644 index 000000000000..8c1fde5e83ac --- /dev/null +++ b/modules/meeting/app/components/meetings/sidebar/participants_dialog.html.erb @@ -0,0 +1,134 @@ +<%= + render(Primer::Alpha::Dialog.new( + id: "edit-participants-dialog", + size: :medium_portrait, + title: Meeting.human_attribute_name(:participants + ))) do |d| + d.with_header(variant: :large) + + d.with_body do + component_wrapper(class: 'Overlay-form') do + primer_form_with( + id: "edit_participants_form", + model: @meeting, + method: :put, + url: update_participants_meeting_path(@meeting), + data: { turbo: true, turbo_stream: true }, + class: 'Overlay-form' + ) do |f| + flex_layout(mt: 3) do |form_container| + form_container.with_row do + flex_layout(justify_content: :flex_end) do |header| + header.with_column(style: "width: 90px;", text_align: :center) do + render(Primer::Beta::Text.new(font_weight: :emphasized)) { t("description_invite").capitalize } + end + + header.with_column(style: "width: 90px;", text_align: :center) do + render(Primer::Beta::Text.new(font_weight: :emphasized)) { t("description_attended").capitalize } + end + end + end + + form_container.with_row do + flex_layout(my: 3) do |form_content| + @meeting.all_changeable_participants.sort.each do |user| + form_content.with_row do + hidden_field_tag "meeting[participants_attributes][][user_id]", user.id + end + form_content.with_row(mb: 2, pb: 1, border: :bottom) do + if @meeting.participants.present? && participant = @meeting.participants.detect { |p| p.user_id == user.id } + flex_layout do |existing_participant_container| + existing_participant_container.with_row do + hidden_field_tag "meeting[participants_attributes][][id]", participant.id + end + + existing_participant_container.with_row do + flex_layout(align_items: :center) do |existing_participant| + existing_participant.with_column(flex: 1, classes: 'ellipsis') do + render(Users::AvatarComponent.new( + user: participant.user, + classes: 'op-principal_flex' + )) + end + existing_participant.with_column(style: "width: 90px;", text_align: :center) do + styled_check_box_tag "meeting[participants_attributes][][invited]", + value = 1, + checked = participant.invited?, + id: "checkbox_invited_#{participant.user.id}", + disabled: !@meeting.editable? + # Primer checkboxes currently not working in this context as they render an additional hidden input tag + # messing up the nested attributes mapping when posting the data to the server + # + # render(Primer::Alpha::CheckBox.new( + # name: "meeting[participants_attributes][][invited]", + # checked: participant.invited?, + # id: "checkbox_invited_#{participant.user.id}", + # visually_hide_label: true, + # label: "Invited", + # scheme: :boolean, + # unchecked_value: "" + # )) + end + existing_participant.with_column(style: "width: 90px;", text_align: :center) do + styled_check_box_tag "meeting[participants_attributes][][attended]", + value = 1, + checked = participant.attended?, + id: "checkbox_attended_#{participant.user.id}", + disabled: !@meeting.editable? + end + end + end + end + else + flex_layout(align_items: :center) do |new_participant| + new_participant.with_column(flex: 1, classes: 'ellipsis') do + render(Users::AvatarComponent.new( + user:, + classes: 'op-principal_flex' + )) + end + + new_participant.with_column(style: "width: 90px;", text_align: :center) do + styled_check_box_tag "meeting[participants_attributes][][invited]", + value = "1", + checked = false, + id: "checkbox_invited_#{user.id}", + disabled: !@meeting.editable? + end + + new_participant.with_column(style: "width: 90px;", text_align: :center) do + styled_check_box_tag "meeting[participants_attributes][][attended]", + value = "1", + checked = false, + id: "checkbox_attended_#{user.id}", + disabled: !@meeting.editable? + end + end + end + end + end + end + end + end + end + end + end + + if @meeting.editable? + d.with_footer do + component_collection do |footer| + footer.with_component(Primer::ButtonComponent.new(data: { 'close-dialog-id': "edit-participants-dialog" })) do + t("button_cancel") + end + footer.with_component(Primer::ButtonComponent.new( + scheme: :primary, + form: "edit_participants_form", + data: { turbo: true }, + type: :submit)) do + t("button_save") + end + end + end + end + end +%> diff --git a/modules/meeting/app/components/meetings/sidebar/participants_form_component.rb b/modules/meeting/app/components/meetings/sidebar/participants_dialog.rb similarity index 95% rename from modules/meeting/app/components/meetings/sidebar/participants_form_component.rb rename to modules/meeting/app/components/meetings/sidebar/participants_dialog.rb index 7e799c911464..1e1824b86ab0 100644 --- a/modules/meeting/app/components/meetings/sidebar/participants_form_component.rb +++ b/modules/meeting/app/components/meetings/sidebar/participants_dialog.rb @@ -27,7 +27,7 @@ #++ module Meetings - class Sidebar::ParticipantsFormComponent < ApplicationComponent + class Sidebar::ParticipantsDialog < ApplicationComponent include ApplicationHelper include OpenProject::FormTagHelper include OpTurbo::Streamable diff --git a/modules/meeting/app/components/meetings/sidebar/participants_form_component.html.erb b/modules/meeting/app/components/meetings/sidebar/participants_form_component.html.erb deleted file mode 100644 index 8cd962c23d88..000000000000 --- a/modules/meeting/app/components/meetings/sidebar/participants_form_component.html.erb +++ /dev/null @@ -1,124 +0,0 @@ -<%= - content_tag("turbo-frame", id: "edit-participants-dialog-frame") do - component_wrapper(class: 'Overlay-form') do - primer_form_with( - model: @meeting, - method: :put, - url: update_participants_meeting_path(@meeting), - class: 'Overlay-form' - ) do |f| - component_collection do |collection| - collection.with_component(Primer::Alpha::Dialog::Body.new(my: 3)) do - flex_layout(mt: 3) do |form_container| - form_container.with_row do - flex_layout(justify_content: :flex_end) do |header| - header.with_column(style: "width: 90px;", text_align: :center) do - render(Primer::Beta::Text.new(font_weight: :emphasized)) { t("description_invite").capitalize } - end - - header.with_column(style: "width: 90px;", text_align: :center) do - render(Primer::Beta::Text.new(font_weight: :emphasized)) { t("description_attended").capitalize } - end - end - end - - form_container.with_row do - flex_layout(my: 3) do |form_content| - @meeting.all_changeable_participants.sort.each do |user| - form_content.with_row do - hidden_field_tag "meeting[participants_attributes][][user_id]", user.id - end - form_content.with_row(mb: 2, pb: 1, border: :bottom) do - if @meeting.participants.present? && participant = @meeting.participants.detect { |p| p.user_id == user.id } - flex_layout do |existing_participant_container| - existing_participant_container.with_row do - hidden_field_tag "meeting[participants_attributes][][id]", participant.id - end - - existing_participant_container.with_row do - flex_layout(align_items: :center) do |existing_participant| - existing_participant.with_column(flex: 1, classes: 'ellipsis') do - render(Users::AvatarComponent.new( - user: participant.user, - classes: 'op-principal_flex' - )) - end - existing_participant.with_column(style: "width: 90px;", text_align: :center) do - styled_check_box_tag "meeting[participants_attributes][][invited]", - value = 1, - checked = participant.invited?, - id: "checkbox_invited_#{participant.user.id}", - disabled: !@meeting.editable? - # Primer checkboxes currently not working in this context as they render an additional hidden input tag - # messing up the nested attributes mapping when posting the data to the server - # - # render(Primer::Alpha::CheckBox.new( - # name: "meeting[participants_attributes][][invited]", - # checked: participant.invited?, - # id: "checkbox_invited_#{participant.user.id}", - # visually_hide_label: true, - # label: "Invited", - # scheme: :boolean, - # unchecked_value: "" - # )) - end - existing_participant.with_column(style: "width: 90px;", text_align: :center) do - styled_check_box_tag "meeting[participants_attributes][][attended]", - value = 1, - checked = participant.attended?, - id: "checkbox_attended_#{participant.user.id}", - disabled: !@meeting.editable? - end - end - end - end - else - flex_layout(align_items: :center) do |new_participant| - new_participant.with_column(flex: 1, classes: 'ellipsis') do - render(Users::AvatarComponent.new( - user:, - classes: 'op-principal_flex' - )) - end - - new_participant.with_column(style: "width: 90px;", text_align: :center) do - styled_check_box_tag "meeting[participants_attributes][][invited]", - value = "1", - checked = false, - id: "checkbox_invited_#{user.id}", - disabled: !@meeting.editable? - end - - new_participant.with_column(style: "width: 90px;", text_align: :center) do - styled_check_box_tag "meeting[participants_attributes][][attended]", - value = "1", - checked = false, - id: "checkbox_attended_#{user.id}", - disabled: !@meeting.editable? - end - end - end - end - end - end - end - end - end - - if @meeting.editable? - collection.with_component(Primer::Alpha::Dialog::Footer.new(show_divider: true)) do - component_collection do |footer| - footer.with_component(Primer::ButtonComponent.new(data: { 'close-dialog-id': "edit-participants-dialog" })) do - t("button_cancel") - end - footer.with_component(Primer::ButtonComponent.new(scheme: :primary, type: :submit)) do - t("button_save") - end - end - end - end - end - end - end - end -%> diff --git a/modules/meeting/app/components/op_turbo/op_primer/async_dialog_component.html.erb b/modules/meeting/app/components/op_turbo/op_primer/async_dialog_component.html.erb deleted file mode 100644 index 59c335906474..000000000000 --- a/modules/meeting/app/components/op_turbo/op_primer/async_dialog_component.html.erb +++ /dev/null @@ -1,35 +0,0 @@ -<%= - render(Primer::Box.new(data: stimulus_attributes)) do - render(Primer::Alpha::Dialog.new( - id: @id, - title: @title, - size: @size - )) do |dialog| - dialog.with_header(variant: @header_variant) - - unless @hide_button - if @button_text - dialog.with_show_button(**merged_text_button_attributes) do |button| - button.with_leading_visual_icon(icon: @button_icon) if @button_icon - @button_text - end - else - dialog.with_show_button(**merged_icon_button_attributes) - end - end - - content_tag("turbo-frame", - id: "#{@id}-frame", - loading: :lazy, - src: @src, - class: 'Overlay-form', - data: { 'op-turbo-op-primer-async-dialog-target': "frameElement" }) do - flex_layout(justify_content: :center) do |flex| - flex.with_column(my: 5) do - render(Primer::Beta::Spinner.new) - end - end - end - end - end -%> diff --git a/modules/meeting/app/components/op_turbo/op_primer/async_dialog_component.rb b/modules/meeting/app/components/op_turbo/op_primer/async_dialog_component.rb deleted file mode 100644 index eab357825573..000000000000 --- a/modules/meeting/app/components/op_turbo/op_primer/async_dialog_component.rb +++ /dev/null @@ -1,76 +0,0 @@ -#-- copyright -# OpenProject is an open source project management software. -# Copyright (C) 2012-2024 the OpenProject GmbH -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License version 3. -# -# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: -# Copyright (C) 2006-2013 Jean-Philippe Lang -# Copyright (C) 2010-2013 the ChiliProject Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# See COPYRIGHT and LICENSE files for more details. -#++ - -module OpTurbo - module OpPrimer - class AsyncDialogComponent < ApplicationComponent - include ApplicationHelper - include ::OpPrimer::ComponentHelpers - - def initialize(id:, src:, title:, size: :auto, header_variant: :medium, - hide_button: false, button_icon: nil, button_icon_label: nil, button_text: nil, button_attributes: {}) - super - - @id = id - @src = src - @title = title - @header_variant = header_variant - @size = size - @hide_button = hide_button - @button_icon = button_icon - @button_icon_label = button_icon_label - @button_text = button_text - @button_attributes = button_attributes - end - - private - - def stimulus_attributes - { - controller: 'op-turbo-op-primer-async-dialog', - 'application-target': 'dynamic' - } - end - - def merged_text_button_attributes - stimuls_action_ref = 'click->op-turbo-op-primer-async-dialog#reinitFrame' - - @button_attributes[:data] = {} if @button_attributes[:data].nil? - @button_attributes[:data][:action] = stimuls_action_ref - - @button_attributes - end - - def merged_icon_button_attributes - merged_text_button_attributes.merge( - icon: @button_icon, 'aria-label': @button_icon_label - ) - end - end - end -end diff --git a/modules/meeting/app/components/work_package_meetings_tab/add_work_package_to_meeting_dialog_component.html.erb b/modules/meeting/app/components/work_package_meetings_tab/add_work_package_to_meeting_dialog_component.html.erb new file mode 100644 index 000000000000..f5fb18c671ec --- /dev/null +++ b/modules/meeting/app/components/work_package_meetings_tab/add_work_package_to_meeting_dialog_component.html.erb @@ -0,0 +1,31 @@ +<%= + render(Primer::Alpha::Dialog.new(title: t("label_add_work_package_to_meeting_dialog_title"), + size: :xlarge, + id: 'add-work-package-to-meeting-dialog')) do |d| + d.with_header(variant: :large) + d.with_body do + render(WorkPackageMeetingsTab::AddWorkPackageToMeetingFormComponent.new( + work_package: @work_package, + meeting_agenda_item: @meeting_agenda_item + )) + end + d.with_footer do + component_collection do |buttons| + buttons.with_component(Primer::ButtonComponent.new( + data: { + 'close-dialog-id': "add-work-package-to-meeting-dialog" + } + )) do + t("button_cancel") + end + buttons.with_component(Primer::ButtonComponent.new( + scheme: :primary, + form: "add-work-package-to-meeting-form", + data: { turbo: true }, + type: :submit)) do + t("button_save") + end + end + end + end +%> diff --git a/app/components/admin/virus_scanning/index_page_header_component.rb b/modules/meeting/app/components/work_package_meetings_tab/add_work_package_to_meeting_dialog_component.rb similarity index 72% rename from app/components/admin/virus_scanning/index_page_header_component.rb rename to modules/meeting/app/components/work_package_meetings_tab/add_work_package_to_meeting_dialog_component.rb index 1ccf9648cb63..49cd7944de72 100644 --- a/app/components/admin/virus_scanning/index_page_header_component.rb +++ b/modules/meeting/app/components/work_package_meetings_tab/add_work_package_to_meeting_dialog_component.rb @@ -1,8 +1,6 @@ -# frozen_string_literal: true - -# -- copyright +#-- copyright # OpenProject is an open source project management software. -# Copyright (C) 2010-2023 the OpenProject GmbH +# Copyright (C) 2012-2024 the OpenProject GmbH # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License version 3. @@ -26,17 +24,19 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # See COPYRIGHT and LICENSE files for more details. -# ++ +#++ -module Admin::VirusScanning - # rubocop:disable OpenProject/AddPreviewForViewComponent - class IndexPageHeaderComponent < ApplicationComponent +module WorkPackageMeetingsTab + class AddWorkPackageToMeetingDialogComponent < ApplicationComponent include ApplicationHelper + include OpTurbo::Streamable + include OpPrimer::ComponentHelpers + + def initialize(work_package:, meeting_agenda_item: nil) + super - def breadcrumb_items - [{ href: admin_index_path, text: t("label_administration") }, - { href: admin_settings_attachments_path, text: t("attributes.attachments") }, - t("settings.antivirus.title")] + @work_package = work_package + @meeting_agenda_item = meeting_agenda_item || MeetingAgendaItem.new(work_package: @work_package) end end end diff --git a/modules/meeting/app/components/work_package_meetings_tab/add_work_package_to_meeting_form_component.html.erb b/modules/meeting/app/components/work_package_meetings_tab/add_work_package_to_meeting_form_component.html.erb index ceb7acf637e5..0b736b31f17f 100644 --- a/modules/meeting/app/components/work_package_meetings_tab/add_work_package_to_meeting_form_component.html.erb +++ b/modules/meeting/app/components/work_package_meetings_tab/add_work_package_to_meeting_form_component.html.erb @@ -1,43 +1,23 @@ <%= - content_tag("turbo-frame", id: "add-work-package-to-meeting-dialog-frame") do - component_wrapper(class: 'Overlay-form') do - primer_form_with( - model: @meeting_agenda_item, - method: :post, - url: work_package_meeting_agenda_items_path(@work_package), - class: 'Overlay-form' - ) do |f| - component_collection do |collection| - collection.with_component(Primer::Alpha::Dialog::Body.new(test_selector: 'op-add-work-package-to-meeting-dialog-body')) do - flex_layout(my: 3) do |flex| - flex.with_row do - if @base_errors&.any? - render(Primer::Alpha::Banner.new(mb: 3, icon: :stop, scheme: :danger)) { @base_errors.join("\n") } - end - end - flex.with_row do - render(MeetingAgendaItem::MeetingForm.new(f, wrapper_id: 'add-work-package-to-meeting-dialog')) - end - flex.with_row(mt: 3) do - render(MeetingAgendaItem::Notes.new(f)) - end - end - end - collection.with_component(Primer::Alpha::Dialog::Footer.new) do - component_collection do |collection1| - collection1.with_component(Primer::ButtonComponent.new( - data: { - 'close-dialog-id': "add-work-package-to-meeting-dialog" - } - )) do - t("button_cancel") - end - collection1.with_component(Primer::ButtonComponent.new(scheme: :primary, type: :submit)) do - t("button_save") - end - end + component_wrapper do + primer_form_with( + id: "add-work-package-to-meeting-form", + model: @meeting_agenda_item, + method: :post, + url: work_package_meeting_agenda_items_path(@work_package), + ) do |f| + flex_layout(my: 3) do |flex| + flex.with_row do + if @base_errors&.any? + render(Primer::Alpha::Banner.new(mb: 3, icon: :stop, scheme: :danger)) { @base_errors.join("\n") } end end + flex.with_row do + render(MeetingAgendaItem::MeetingForm.new(f, wrapper_id: 'add-work-package-to-meeting-dialog')) + end + flex.with_row(mt: 3) do + render(MeetingAgendaItem::Notes.new(f)) + end end end end diff --git a/modules/meeting/app/components/work_package_meetings_tab/heading_component.html.erb b/modules/meeting/app/components/work_package_meetings_tab/heading_component.html.erb index 3bb93be69817..da04671cd96d 100644 --- a/modules/meeting/app/components/work_package_meetings_tab/heading_component.html.erb +++ b/modules/meeting/app/components/work_package_meetings_tab/heading_component.html.erb @@ -6,17 +6,15 @@ end if allowed_to_add_to_meeting? flex.with_column(ml: 3) do - render(OpTurbo::OpPrimer::AsyncDialogComponent.new( - id: "add-work-package-to-meeting-dialog", - src: dialog_work_package_meeting_agenda_items_path(@work_package), - size: :xlarge, - title: t("label_add_work_package_to_meeting_dialog_title"), - button_icon: :plus, - button_text: t("label_add_work_package_to_meeting_dialog_button"), - button_attributes: { - test_selector: "op-add-work-package-to-meeting-dialog-trigger" - } - )) + render(Primer::Beta::Button.new( + tag: :a, + href: dialog_work_package_meeting_agenda_items_path(@work_package), + data: { controller: 'async-dialog' }, + test_selector: "op-add-work-package-to-meeting-dialog-trigger" + )) do |button| + button.with_leading_visual_icon(icon: :plus) + t("label_add_work_package_to_meeting_dialog_button") + end end end end diff --git a/modules/meeting/app/components/work_package_meetings_tab/meeting_component.html.erb b/modules/meeting/app/components/work_package_meetings_tab/meeting_component.html.erb index 22060ad9cc94..71d360c0c47d 100644 --- a/modules/meeting/app/components/work_package_meetings_tab/meeting_component.html.erb +++ b/modules/meeting/app/components/work_package_meetings_tab/meeting_component.html.erb @@ -6,7 +6,7 @@ flex.with_column(mr: 1) do render(Primer::Beta::Link.new(href: meeting_path(@meeting), target: "_blank", font_size: :normal, font_weight: :bold, scheme: :primary, underline: false)) do - @meeting.title + "#{@meeting.project.name}: #{@meeting.title}" end end flex.with_column do diff --git a/modules/meeting/app/contracts/meeting_agenda_items/base_contract.rb b/modules/meeting/app/contracts/meeting_agenda_items/base_contract.rb index 414ebd2cd02f..0c353b54b5e8 100644 --- a/modules/meeting/app/contracts/meeting_agenda_items/base_contract.rb +++ b/modules/meeting/app/contracts/meeting_agenda_items/base_contract.rb @@ -36,6 +36,7 @@ def self.model attribute :meeting attribute :work_package + attribute :meeting_section attribute :position attribute :title diff --git a/modules/meeting/app/contracts/meeting_sections/base_contract.rb b/modules/meeting/app/contracts/meeting_sections/base_contract.rb new file mode 100644 index 000000000000..ffac0b4d6274 --- /dev/null +++ b/modules/meeting/app/contracts/meeting_sections/base_contract.rb @@ -0,0 +1,42 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module MeetingSections + class BaseContract < ::ModelContract + include ModifiableItem + + def self.model + MeetingSection + end + + attribute :meeting + + attribute :title + attribute :position + end +end diff --git a/modules/meeting/app/contracts/meeting_sections/create_contract.rb b/modules/meeting/app/contracts/meeting_sections/create_contract.rb new file mode 100644 index 000000000000..93d5f8eb2a39 --- /dev/null +++ b/modules/meeting/app/contracts/meeting_sections/create_contract.rb @@ -0,0 +1,83 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module MeetingSections + class CreateContract < BaseContract + # Note: + # the CreateContract is currently only called internally in the create action which substitutes the new action + # of the controller. The contract is not used in the context of a form. + # Only the UpdateContract is used alongside a user facing form. + # Thus we're not validating for title presence here, which enables us to create a section without a title which is required for + # the current UX implementation + + validate :user_allowed_to_add, + :validate_meeting_existence + + def self.assignable_meetings(user) + StructuredMeeting + .open + .visible(user) + end + + ## + # Meeting agenda items can currently be only created + # through the project permission :manage_agendas + # When MeetingRole becomes available, agenda items will + # be created through meeting permissions :manage_agendas + def user_allowed_to_add + # when creating a meeting agenda item from the work package tab and not selecting a meeting + # the meeting and therefore the project is not set + # in this case we only want to show the "Meeting can't be blank" error instead of a misleading permission base error + # the error is added by the models presence validation + return unless visible? + + unless user.allowed_in_project?(:manage_agendas, model.project) + errors.add :base, :error_unauthorized + end + end + + ## + # A stale browser window might provide an already deleted meeting as an option when creating an agenda item from the + # work package tab. This would lead to an 500 server error when trying to save the agenda item. + def validate_meeting_existence + # when creating a meeting agenda item from the work package tab and not selecting a meeting + # the meeting and therefore the project is not set + # in this case we only want to show the "Meeting can't be blank" error instead of a misleading not existance error + # the error is added by the models presence validation + return if model.meeting.nil? + + errors.add :base, :does_not_exist unless visible? + end + + private + + def visible? + @visible ||= model.meeting&.visible?(user) + end + end +end diff --git a/modules/meeting/app/contracts/meeting_sections/delete_contract.rb b/modules/meeting/app/contracts/meeting_sections/delete_contract.rb new file mode 100644 index 000000000000..1cb41b06f240 --- /dev/null +++ b/modules/meeting/app/contracts/meeting_sections/delete_contract.rb @@ -0,0 +1,35 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module MeetingSections + class DeleteContract < ::DeleteContract + include ModifiableItem + + delete_permission :manage_agendas + end +end diff --git a/modules/meeting/app/contracts/meeting_sections/modifiable_item.rb b/modules/meeting/app/contracts/meeting_sections/modifiable_item.rb new file mode 100644 index 000000000000..b054059f142a --- /dev/null +++ b/modules/meeting/app/contracts/meeting_sections/modifiable_item.rb @@ -0,0 +1,45 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module MeetingSections + module ModifiableItem + extend ActiveSupport::Concern + + included do + validate :validate_modifiable + end + + protected + + def validate_modifiable + unless model.modifiable? + errors.add :base, I18n.t(:text_agenda_item_not_editable_anymore) + end + end + end +end diff --git a/modules/meeting/app/contracts/meeting_sections/move_contract.rb b/modules/meeting/app/contracts/meeting_sections/move_contract.rb new file mode 100644 index 000000000000..2a1259ec1d9d --- /dev/null +++ b/modules/meeting/app/contracts/meeting_sections/move_contract.rb @@ -0,0 +1,48 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module MeetingSections + class MoveContract < BaseContract + validate :user_allowed_to_edit + + # We allow an empty title internally via create to mark an untitled/implicit section + # Moving/Dragging them needs to be possible as well + # this we're not validating the title here in contrast to the UpdateContract + # validates :title, presence: true + + # Meeting agenda items can currently be only edited + # through the project permission :manage_agendas + # When MeetingRole becomes available, agenda items will + # be edited through meeting permissions :manage_agendas + def user_allowed_to_edit + unless user.allowed_in_project?(:manage_agendas, model.project) + errors.add :base, :error_unauthorized + end + end + end +end diff --git a/modules/meeting/app/contracts/meeting_sections/update_contract.rb b/modules/meeting/app/contracts/meeting_sections/update_contract.rb new file mode 100644 index 000000000000..f01ca9887b56 --- /dev/null +++ b/modules/meeting/app/contracts/meeting_sections/update_contract.rb @@ -0,0 +1,47 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module MeetingSections + class UpdateContract < BaseContract + validate :user_allowed_to_edit + + # We allow an empty title internally via create to mark an untitled/implicit section + # but users should not be able to update it with an empty title through this contract + validates :title, presence: true + + # Meeting agenda items can currently be only edited + # through the project permission :manage_agendas + # When MeetingRole becomes available, agenda items will + # be edited through meeting permissions :manage_agendas + def user_allowed_to_edit + unless user.allowed_in_project?(:manage_agendas, model.project) + errors.add :base, :error_unauthorized + end + end + end +end diff --git a/modules/meeting/app/controllers/concerns/meetings/agenda_component_streams.rb b/modules/meeting/app/controllers/concerns/meetings/agenda_component_streams.rb index c5bc4f953a9e..7557049e5c26 100644 --- a/modules/meeting/app/controllers/concerns/meetings/agenda_component_streams.rb +++ b/modules/meeting/app/controllers/concerns/meetings/agenda_component_streams.rb @@ -31,10 +31,11 @@ module AgendaComponentStreams extend ActiveSupport::Concern included do - def update_header_component_via_turbo_stream(meeting: @meeting, state: :show) + def update_header_component_via_turbo_stream(project: @project, meeting: @meeting, state: :show) update_via_turbo_stream( component: Meetings::HeaderComponent.new( meeting:, + project:, state: ) ) @@ -86,12 +87,18 @@ def update_sidebar_participants_form_component_via_turbo_stream(meeting: @meetin component: Meetings::Sidebar::ParticipantsFormComponent.new( meeting: ), - status: :bad_request + status: :bad_request # TODO: why bad_request? ) end def update_show_items_via_turbo_stream(meeting: @meeting) - agenda_items = meeting.agenda_items.with_includes_to_render + meeting.sections.each do |meeting_section| + update_show_items_of_section_via_turbo_stream(meeting_section:) + end + end + + def update_show_items_of_section_via_turbo_stream(meeting_section: @meeting_section) + agenda_items = meeting_section.agenda_items.with_includes_to_render first_and_last = [agenda_items.first, agenda_items.last] agenda_items.each do |meeting_agenda_item| @@ -101,27 +108,71 @@ def update_show_items_via_turbo_stream(meeting: @meeting) end end - def update_new_component_via_turbo_stream(hidden: false, meeting_agenda_item: nil, meeting: @meeting, type: :simple) + def update_new_component_via_turbo_stream(hidden: false, meeting_section: @meeting_section, meeting_agenda_item: nil, + meeting: @meeting, type: :simple) + if meeting_section.nil? && meeting_agenda_item.nil? + meeting_section = meeting.sections.last + end + + if meeting_agenda_item.present? + meeting_section = meeting_agenda_item.meeting_section + end + update_via_turbo_stream( component: MeetingAgendaItems::NewComponent.new( hidden:, meeting:, + meeting_section:, meeting_agenda_item:, type: ) ) end - def update_new_button_via_turbo_stream(disabled: false, meeting_agenda_item: nil, meeting: @meeting) + def update_new_button_via_turbo_stream(disabled: false, meeting: @meeting, meeting_section: nil) update_via_turbo_stream( component: MeetingAgendaItems::NewButtonComponent.new( disabled:, meeting:, - meeting_agenda_item: + meeting_section: ) ) end + def render_agenda_item_form_via_turbo_stream(meeting: @meeting, meeting_section: @meeting_section, type: :simple) + if meeting.sections.empty? + render_agenda_item_form_for_empty_meeting_via_turbo_stream(meeting:, type:) + else + render_agenda_item_form_in_section_via_turbo_stream(meeting:, meeting_section:, type:) + end + + update_new_button_via_turbo_stream(disabled: true) + end + + def render_agenda_item_form_for_empty_meeting_via_turbo_stream(meeting: @meeting, type: :simple) + update_new_component_via_turbo_stream( + hidden: false, + meeting_section: nil, + type: + ) + end + + def render_agenda_item_form_in_section_via_turbo_stream(meeting: @meeting, meeting_section: @meeting_section, type: :simple) + if meeting_section.nil? + meeting_section = meeting.sections.last + end + + if meeting_section.agenda_items.empty? + update_section_via_turbo_stream(meeting_section:, form_hidden: false, form_type: type) + else + update_new_component_via_turbo_stream( + hidden: false, + meeting_section:, + type: + ) + end + end + def update_list_via_turbo_stream(meeting: @meeting, form_hidden: true, form_type: :simple) # replace needs to be called in order to mount the drag and drop handlers again # update would not do that and drag and drop would stop working after the first update @@ -151,15 +202,33 @@ def update_item_via_turbo_stream(state: :show, meeting_agenda_item: @meeting_age def add_item_via_turbo_stream(meeting_agenda_item: @meeting_agenda_item, clear_slate: false) if clear_slate update_list_via_turbo_stream(form_hidden: false, form_type: @agenda_item_type) + elsif meeting_agenda_item.meeting.agenda_items.count == 1 + update_list_via_turbo_stream(form_hidden: true) + + update_new_component_via_turbo_stream( + hidden: false, + meeting_section: meeting_agenda_item.meeting_section, + type: @agenda_item_type + ) else + update_section_header_via_turbo_stream(meeting_section: meeting_agenda_item.meeting_section) + add_before_via_turbo_stream( component: MeetingAgendaItems::ItemComponent.new( state: :show, meeting_agenda_item: ), - target_component: MeetingAgendaItems::ListComponent.new(meeting: @meeting) + target_component: MeetingSections::ShowComponent.new( + meeting_section: @meeting_agenda_item.meeting_section + ) ) - update_new_component_via_turbo_stream(hidden: false, type: @agenda_item_type) + + update_new_component_via_turbo_stream( + hidden: false, + meeting_section: meeting_agenda_item.meeting_section, + type: @agenda_item_type + ) + update_show_items_via_turbo_stream end end @@ -168,14 +237,48 @@ def remove_item_via_turbo_stream(meeting_agenda_item: @meeting_agenda_item, clea if clear_slate update_list_via_turbo_stream else - update_show_items_via_turbo_stream - remove_via_turbo_stream( - component: MeetingAgendaItems::ItemComponent.new( - state: :show, - meeting_agenda_item:, - display_notes_input: nil + update_show_items_of_section_via_turbo_stream(meeting_section: meeting_agenda_item.meeting_section) + if meeting_agenda_item.meeting_section.agenda_items.empty? + # Show the empty section state by updating the whole section if items are empty + update_section_via_turbo_stream(meeting_section: meeting_agenda_item.meeting_section) + else + remove_via_turbo_stream( + component: MeetingAgendaItems::ItemComponent.new( + state: :show, + meeting_agenda_item:, + display_notes_input: nil + ) ) - ) + end + end + end + + def move_item_within_section_via_turbo_stream(meeting_agenda_item: @meeting_agenda_item) + move_item_via_turbo_stream(meeting_agenda_item:) + + # update the displayed time slots of all other items in the section + update_show_items_of_section_via_turbo_stream(meeting_section: meeting_agenda_item.meeting_section) + end + + def move_item_to_other_section_via_turbo_stream(old_section:, current_section:, meeting_agenda_item: @meeting_agenda_item) + move_item_via_turbo_stream(meeting_agenda_item:) + + # update the old section + update_section_header_via_turbo_stream(meeting_section: old_section) + + if old_section.agenda_items.empty? + update_section_via_turbo_stream(meeting_section: old_section) + else + update_show_items_of_section_via_turbo_stream(meeting_section: old_section) + end + + # update the new section + update_section_header_via_turbo_stream(meeting_section: current_section) + + if current_section.agenda_items.count == 1 + update_section_via_turbo_stream(meeting_section: current_section) + else + update_show_items_of_section_via_turbo_stream(meeting_section: current_section) end end @@ -187,17 +290,19 @@ def move_item_via_turbo_stream(meeting_agenda_item: @meeting_agenda_item) remove_via_turbo_stream(component: remove_component) component = MeetingAgendaItems::ItemComponent.new(state: :show, meeting_agenda_item:) - target_component = - if @meeting_agenda_item.lower_item - MeetingAgendaItems::ItemComponent.new( - state: :show, - meeting_agenda_item: @meeting_agenda_item.lower_item - ) - else - MeetingAgendaItems::ListComponent.new(meeting: @meeting) - end + + target_component = if meeting_agenda_item.lower_item + MeetingAgendaItems::ItemComponent.new( + state: :show, + meeting_agenda_item: meeting_agenda_item.lower_item + ) + else + MeetingSections::ShowComponent.new( + meeting_section: meeting_agenda_item.meeting_section + ) + end + add_before_via_turbo_stream(component:, target_component:) - update_show_items_via_turbo_stream end def render_base_error_in_flash_message_via_turbo_stream(errors) @@ -206,6 +311,97 @@ def render_base_error_in_flash_message_via_turbo_stream(errors) end end + def update_section_headers_via_turbo_stream(meeting: @meeting) + meeting.sections.each do |meeting_section| + update_section_header_via_turbo_stream(meeting_section:) + end + end + + def update_section_header_via_turbo_stream(meeting_section: @meeting_section, state: :show) + update_via_turbo_stream( + component: MeetingSections::HeaderComponent.new( + meeting_section:, + state: + ) + ) + end + + def update_section_via_turbo_stream(meeting_section: @meeting_section, form_hidden: true, form_type: :simple, + force_wrapper: false, state: :show) + update_via_turbo_stream( + component: MeetingSections::ShowComponent.new( + meeting_section:, + form_type:, + form_hidden:, + force_wrapper:, + state: + ) + ) + end + + def add_section_via_turbo_stream(meeting_section: @meeting_section) + if meeting_section.meeting.sections.count <= 2 + # hide blank slate again through rerendering the list component -> count == 0 + # or show section wrapper of first untitled section -> count == 1 + update_list_via_turbo_stream + # CODE MAINTENANCE: potentially loosing edit state in last section + else + append_via_turbo_stream( + component: MeetingSections::ShowComponent.new( + meeting_section: + ), + target_component: MeetingAgendaItems::ListComponent.new( + meeting: meeting_section.meeting + ) + ) + end + end + + def remove_section_via_turbo_stream(meeting_section: @meeting_section) + if meeting_section.meeting.sections.count <= 1 + # show blank slate again through rerendering the list component -> count == 0 + # or hide section wrapper of first (potentially) untitled section -> count == 1 + update_list_via_turbo_stream + # CODE MAINTENANCE: potentially loosing edit state in last section + else + remove_via_turbo_stream( + component: MeetingSections::ShowComponent.new( + meeting_section: + ) + ) + end + end + + def move_section_via_turbo_stream(meeting_section: @meeting_section) + # Note: The `remove_component` and the `component` are pointing to the same + # component, but we still need to instantiate them separately, otherwise re-adding + # of the item will render and empty component. + remove_component = MeetingSections::ShowComponent.new(meeting_section:) + remove_via_turbo_stream(component: remove_component) + + component = MeetingSections::ShowComponent.new(meeting_section:) + + if meeting_section.lower_item + add_before_via_turbo_stream( + component:, + target_component: MeetingSections::ShowComponent.new( + meeting_section: meeting_section.lower_item, + insert_target_modified: false + # insert target is modified for agenda items in this section, but not for sections + ) + ) + else + append_via_turbo_stream( + component: MeetingSections::ShowComponent.new( + meeting_section: + ), + target_component: MeetingAgendaItems::ListComponent.new( + meeting: meeting_section.meeting + ) + ) + end + end + def update_all_via_turbo_stream update_header_component_via_turbo_stream update_sidebar_component_via_turbo_stream diff --git a/modules/meeting/app/controllers/concerns/meetings/work_package_meetings_tab_component_streams.rb b/modules/meeting/app/controllers/concerns/meetings/work_package_meetings_tab_component_streams.rb index 750b676b4f83..eb3498f2ffe0 100644 --- a/modules/meeting/app/controllers/concerns/meetings/work_package_meetings_tab_component_streams.rb +++ b/modules/meeting/app/controllers/concerns/meetings/work_package_meetings_tab_component_streams.rb @@ -47,7 +47,7 @@ def update_add_to_meeting_form_component_via_turbo_stream(meeting_agenda_item:, work_package:, base_errors: ), - status: base_errors.blank? && meeting_agenda_item.errors.blank? ? :ok : :bad_request + status: :bad_request ) end diff --git a/modules/meeting/app/controllers/meeting_agenda_items_controller.rb b/modules/meeting/app/controllers/meeting_agenda_items_controller.rb index dbef2a15100b..2a4c5859ae41 100644 --- a/modules/meeting/app/controllers/meeting_agenda_items_controller.rb +++ b/modules/meeting/app/controllers/meeting_agenda_items_controller.rb @@ -40,8 +40,10 @@ class MeetingAgendaItemsController < ApplicationController def new if @meeting.open? - update_new_component_via_turbo_stream(hidden: false, type: @agenda_item_type) - update_new_button_via_turbo_stream(disabled: true) + if params[:meeting_section_id].present? + meeting_section = @meeting.sections.find(params[:meeting_section_id]) + end + render_agenda_item_form_via_turbo_stream(meeting_section:, type: @agenda_item_type) else update_all_via_turbo_stream render_error_flash_message_via_turbo_stream(message: t("text_meeting_not_editable_anymore")) @@ -51,14 +53,23 @@ def new end def cancel_new - update_new_component_via_turbo_stream(hidden: true) + if params[:meeting_section_id].present? + meeting_section = @meeting.sections.find(params[:meeting_section_id]) + if meeting_section.agenda_items.empty? + update_section_via_turbo_stream(form_hidden: true, meeting_section:) + else + update_new_button_via_turbo_stream(disabled: false, meeting_section:) + end + end + + update_new_component_via_turbo_stream(hidden: true, meeting_section:) update_new_button_via_turbo_stream(disabled: false) respond_with_turbo_streams end def create - clear_slate = @meeting.agenda_items.empty? + # clear_slate = @meeting.agenda_items.empty? call = ::MeetingAgendaItems::CreateService .new(user: current_user) @@ -73,7 +84,7 @@ def create if call.success? # enable continue editing - add_item_via_turbo_stream(clear_slate:) + add_item_via_turbo_stream(clear_slate: false) update_header_component_via_turbo_stream update_sidebar_details_component_via_turbo_stream else @@ -111,6 +122,7 @@ def update if call.success? update_item_via_turbo_stream + update_section_header_via_turbo_stream(meeting_section: @meeting_agenda_item.meeting_section) update_header_component_via_turbo_stream update_sidebar_details_component_via_turbo_stream else @@ -123,6 +135,8 @@ def update end def destroy + section = @meeting_agenda_item.meeting_section + call = ::MeetingAgendaItems::DeleteService .new(user: current_user, model: @meeting_agenda_item) .call @@ -130,6 +144,7 @@ def destroy if call.success? remove_item_via_turbo_stream(clear_slate: @meeting.agenda_items.empty?) update_header_component_via_turbo_stream + update_section_header_via_turbo_stream(meeting_section: section) if section&.reload.present? update_sidebar_details_component_via_turbo_stream else generic_call_failure_response(call) @@ -139,13 +154,22 @@ def destroy end def drop - call = ::MeetingAgendaItems::UpdateService - .new(user: current_user, model: @meeting_agenda_item) - .call(position: params[:position].to_i) + call = ::MeetingAgendaItems::DropService.new( + user: current_user, meeting_agenda_item: @meeting_agenda_item + ).call( + target_id: params[:target_id], + position: params[:position] + ) if call.success? - update_show_items_via_turbo_stream - update_header_component_via_turbo_stream + if call.result[:section_changed] + move_item_to_other_section_via_turbo_stream( + old_section: call.result[:old_section], + current_section: call.result[:current_section] + ) + else + move_item_within_section_via_turbo_stream + end else generic_call_failure_response(call) end @@ -159,7 +183,7 @@ def move .call(move_to: params[:move_to]&.to_sym) if call.success? - move_item_via_turbo_stream + move_item_within_section_via_turbo_stream update_header_component_via_turbo_stream else generic_call_failure_response(call) @@ -168,17 +192,6 @@ def move respond_with_turbo_streams end - # Primer's autocomplete displays the ID of a user when selected instead of the name - # this cannot be changed at the moment as the component uses a simple text field which - # can't differentiate between a display and submit value - # thus, we can't use it - # leaving the code here for future reference - # def author_autocomplete_index - # @users = User.active.like(params[:q]).limit(10) - - # render(Authors::AutocompleteItemComponent.with_collection(@users), layout: false) - # end - private def set_meeting @@ -197,7 +210,7 @@ def set_meeting_agenda_item def meeting_agenda_item_params params .require(:meeting_agenda_item) - .permit(:title, :duration_in_minutes, :presenter_id, :notes, :work_package_id, :lock_version) + .permit(:title, :duration_in_minutes, :presenter_id, :notes, :work_package_id, :lock_version, :meeting_section_id) end def generic_call_failure_response(call) diff --git a/modules/meeting/app/controllers/meeting_sections_controller.rb b/modules/meeting/app/controllers/meeting_sections_controller.rb new file mode 100644 index 000000000000..9d2567820a3b --- /dev/null +++ b/modules/meeting/app/controllers/meeting_sections_controller.rb @@ -0,0 +1,195 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +class MeetingSectionsController < ApplicationController + include AttachableServiceCall + include OpTurbo::ComponentStream + include Meetings::AgendaComponentStreams + include ApplicationComponentStreams + + before_action :set_meeting + before_action :set_meeting_section, + except: %i[create] + before_action :authorize + + def create + call = ::MeetingSections::CreateService + .new(user: current_user) + .call( + { + meeting_id: @meeting.id + } + ) + + @meeting_section = call.result + + if call.success? + add_section_via_turbo_stream + update_section_via_turbo_stream(force_wrapper: true, state: :edit) + # update the section header of the previously last section in order to ensure the action menu move options are updated + update_section_header_via_turbo_stream(meeting_section: @meeting.sections.last(2).first) if @meeting.sections.count > 1 + update_new_button_via_turbo_stream(disabled: true) + else + render_base_error_in_flash_message_via_turbo_stream(call.errors) + end + + respond_with_turbo_streams + end + + def edit + if @meeting_section.editable? + update_section_header_via_turbo_stream(state: :edit) + else + update_all_via_turbo_stream + render_error_flash_message_via_turbo_stream(message: t("text_meeting_not_editable_anymore")) + end + + respond_with_turbo_streams + end + + def cancel_edit + if @meeting_section.untitled? && @meeting_section.agenda_items.empty? + # if the section is untitled and no agenda items, we can safely delete it + destroy and return + else + update_section_header_via_turbo_stream(state: :show) + update_new_button_via_turbo_stream(disabled: false) + end + + respond_with_turbo_streams + end + + def update + call = ::MeetingSections::UpdateService + .new(user: current_user, model: @meeting_section) + .call(meeting_section_params) + + if call.success? + update_section_header_via_turbo_stream(state: :show) + update_header_component_via_turbo_stream + update_sidebar_details_component_via_turbo_stream + update_new_button_via_turbo_stream(disabled: false) + else + # show errors + update_section_header_via_turbo_stream(state: :edit) + render_base_error_in_flash_message_via_turbo_stream(call.errors) + end + + respond_with_turbo_streams + end + + def destroy + call = ::MeetingSections::DeleteService + .new(user: current_user, model: @meeting_section) + .call + + if call.success? + remove_section_via_turbo_stream + # in case the destroy action was called from the cancel_edit action + # we need to update the new button state, which was disabled before + update_new_button_via_turbo_stream(disabled: false) + # update all section headers in order to ensure the action menu move options are updated + update_section_headers_via_turbo_stream + else + generic_call_failure_response(call) + end + + respond_with_turbo_streams + end + + def drop + call = ::MeetingSections::UpdateService + .new(user: current_user, model: @meeting_section, contract_class: MeetingSections::MoveContract) + .call(position: params[:position].to_i) + + if call.success? + # the DOM is already updated on the client-side through the drag + # in order to preserve an edit state within the section, + # we don't send a server-side rendered update via `move_section_via_turbo_stream` + # update all section headers in order to ensure the action menu move options are updated + update_section_headers_via_turbo_stream + # update all time slots as a section position change affects potentially all time slots + update_show_items_via_turbo_stream + else + generic_call_failure_response(call) + end + + respond_with_turbo_streams + end + + def move + call = ::MeetingSections::UpdateService + .new(user: current_user, model: @meeting_section, contract_class: MeetingSections::MoveContract) + .call(move_to: params[:move_to]&.to_sym) + + if call.success? + move_section_via_turbo_stream + # CODE MAINTENANCE: edit state within the moved section potentially gets lost + # unlike at the drop action, we need to send server-side rendered updates in order to reflect the new position + # thus an edit state inside the section gets lost + update_header_component_via_turbo_stream + # update all section headers in order to ensure the action menu move options are updated + update_section_headers_via_turbo_stream + # update all time slots as a section position change affects potentially all time slots + update_show_items_via_turbo_stream + else + generic_call_failure_response(call) + end + + respond_with_turbo_streams + end + + private + + def set_meeting + @meeting = Meeting.find(params[:meeting_id]) + @project = @meeting.project # required for authorization via before_action + end + + def set_agenda_item_type + @agenda_item_type = params[:type]&.to_sym + end + + def set_meeting_section + @meeting_section = MeetingSection.find(params[:id]) + end + + def meeting_section_params + params + .require(:meeting_section) + .permit(:title) + end + + def generic_call_failure_response(call) + # A failure might imply that the meeting was already closed and the action was triggered from a stale browser window + # updating all components resolves the stale state of that window + update_all_via_turbo_stream + # show additional base error message + render_base_error_in_flash_message_via_turbo_stream(call.errors) + end +end diff --git a/modules/meeting/app/controllers/meetings_controller.rb b/modules/meeting/app/controllers/meetings_controller.rb index 78b68179643a..d71402442d9c 100644 --- a/modules/meeting/app/controllers/meetings_controller.rb +++ b/modules/meeting/app/controllers/meetings_controller.rb @@ -28,7 +28,7 @@ class MeetingsController < ApplicationController around_action :set_time_zone - before_action :find_optional_project, only: %i[index new create history] + before_action :find_optional_project, only: %i[index new show create history] before_action :verify_activities_module_activated, only: %i[history] before_action :determine_date_range, only: %i[history] before_action :determine_author, only: %i[history] @@ -68,7 +68,7 @@ def index def show html_title "#{t(:label_meeting)}: #{@meeting.title}" if @meeting.is_a?(StructuredMeeting) - render(Meetings::ShowComponent.new(meeting: @meeting)) + render(Meetings::ShowComponent.new(meeting: @meeting, project: @project)) elsif @meeting.agenda.present? && @meeting.agenda.locked? params[:tab] ||= 'minutes' end @@ -90,7 +90,7 @@ def create text = I18n.t(:notice_successful_create) if User.current.time_zone.nil? link = I18n.t(:notice_timezone_missing, zone: Time.zone) - text += " #{view_context.link_to(link, { controller: '/my', action: :account }, class: 'link_to_profile')}" + text += " #{view_context.link_to(link, { controller: '/my', action: :settings, anchor: 'pref_time_zone' }, class: 'link_to_profile')}" end flash[:notice] = text.html_safe # rubocop:disable Rails/OutputSafety @@ -138,8 +138,6 @@ def edit def history @events = get_events - - render :history rescue ActiveRecord::RecordNotFound => e op_handle_warning "Failed to find all resources in activities: #{e.message}" render_404 I18n.t(:error_can_not_find_all_resources) @@ -162,20 +160,14 @@ def update end end - def participants_dialog - render(Meetings::Sidebar::ParticipantsFormComponent.new(meeting: @meeting), layout: false) - end + def participants_dialog; end def update_participants @meeting.participants_attributes = @converted_params.delete(:participants_attributes) @meeting.save - if @meeting.errors.any? - update_sidebar_participants_form_component_via_turbo_stream - else - update_sidebar_details_component_via_turbo_stream - update_sidebar_participants_component_via_turbo_stream - end + update_sidebar_details_component_via_turbo_stream + update_sidebar_participants_component_via_turbo_stream respond_with_turbo_streams end diff --git a/modules/meeting/app/controllers/work_package_meetings_tab_controller.rb b/modules/meeting/app/controllers/work_package_meetings_tab_controller.rb index add8df560536..d65153e964d7 100644 --- a/modules/meeting/app/controllers/work_package_meetings_tab_controller.rb +++ b/modules/meeting/app/controllers/work_package_meetings_tab_controller.rb @@ -28,6 +28,7 @@ class WorkPackageMeetingsTabController < ApplicationController include OpTurbo::ComponentStream + include OpTurbo::DialogStreamHelper include Meetings::WorkPackageMeetingsTabComponentStreams before_action :set_work_package @@ -56,7 +57,7 @@ def count end def add_work_package_to_meeting_dialog - render(WorkPackageMeetingsTab::AddWorkPackageToMeetingFormComponent.new(work_package: @work_package), layout: false) + respond_with_dialog WorkPackageMeetingsTab::AddWorkPackageToMeetingDialogComponent.new(work_package: @work_package) end def add_work_package_to_meeting @@ -65,6 +66,7 @@ def add_work_package_to_meeting .call( add_work_package_to_meeting_params.merge( work_package_id: @work_package.id, + presenter_id: current_user.id, item_type: MeetingAgendaItem::ITEM_TYPES[:work_package] ) ) diff --git a/modules/meeting/app/forms/meeting/title.rb b/modules/meeting/app/forms/meeting/title.rb index 61f04a27afc6..8df8e0deb5ea 100644 --- a/modules/meeting/app/forms/meeting/title.rb +++ b/modules/meeting/app/forms/meeting/title.rb @@ -27,14 +27,34 @@ #++ class Meeting::Title < ApplicationForm - form do |meeting_form| - meeting_form.text_field( - name: :title, - placeholder: Meeting.human_attribute_name(:title), - label: Meeting.human_attribute_name(:title), - visually_hide_label: true, - required: true, - autofocus: true - ) + include OpenProject::StaticRouting::UrlHelpers + + form do |query_form| + query_form.group(layout: :horizontal) do |group| + group.text_field( + name: :title, + placeholder: Meeting.human_attribute_name(:title), + label: Meeting.human_attribute_name(:title), + visually_hide_label: true, + required: true, + autofocus: true + ) + + group.submit(name: :submit, label: I18n.t("button_save"), scheme: :primary) + + group.button( + name: :cancel, + scheme: :secondary, + label: I18n.t(:button_cancel), + tag: :a, + data: { 'turbo-stream': true }, + href: OpenProject::StaticRouting::StaticUrlHelpers.new.cancel_edit_meeting_path(@meeting) + ) + end + end + + def initialize(meeting:) + super() + @meeting = meeting end end diff --git a/modules/meeting/app/forms/meeting_agenda_item/meeting_form.rb b/modules/meeting/app/forms/meeting_agenda_item/meeting_form.rb index 0effb6db1bb9..9aa49bac6f21 100644 --- a/modules/meeting/app/forms/meeting_agenda_item/meeting_form.rb +++ b/modules/meeting/app/forms/meeting_agenda_item/meeting_form.rb @@ -45,9 +45,10 @@ class MeetingAgendaItem::MeetingForm < ApplicationForm MeetingAgendaItems::CreateContract .assignable_meetings(User.current) .where("meetings.start_time + (interval '1 hour' * meetings.duration) >= ?", Time.zone.now) + .includes(:project) .find_each do |meeting| select.option( - label: "#{meeting.title} #{format_date(meeting.start_time)} #{format_time(meeting.start_time, false)}", + label: "#{meeting.project.name}: #{meeting.title} #{format_date(meeting.start_time)} #{format_time(meeting.start_time, false)}", value: meeting.id ) end diff --git a/modules/meeting/app/forms/meeting_agenda_item/meeting_section_form.rb b/modules/meeting/app/forms/meeting_agenda_item/meeting_section_form.rb new file mode 100644 index 000000000000..8e2c35031cbd --- /dev/null +++ b/modules/meeting/app/forms/meeting_agenda_item/meeting_section_form.rb @@ -0,0 +1,40 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +class MeetingAgendaItem::MeetingSectionForm < ApplicationForm + form do |agenda_item_form| + agenda_item_form.hidden( + name: :meeting_section_id, + value: @meeting_section&.id + ) + end + + def initialize(meeting_section: nil) + @meeting_section = meeting_section + end +end diff --git a/modules/meeting/app/forms/meeting_agenda_item/work_package.rb b/modules/meeting/app/forms/meeting_agenda_item/work_package.rb index 7b2f169b7d68..fcc6dd81d7bf 100644 --- a/modules/meeting/app/forms/meeting_agenda_item/work_package.rb +++ b/modules/meeting/app/forms/meeting_agenda_item/work_package.rb @@ -28,7 +28,7 @@ class MeetingAgendaItem::WorkPackage < ApplicationForm form do |agenda_item_form| - agenda_item_form.autocompleter( + agenda_item_form.work_package_autocompleter( name: :work_package_id, label: WorkPackage.model_name.human, visually_hide_label: true, @@ -37,8 +37,6 @@ class MeetingAgendaItem::WorkPackage < ApplicationForm data: { "test-selector": "op-agenda-items-wp-autocomplete" }, - resource: "work_packages", - searchKey: "subjectOrId", focusDirectly: true, disabled: @disabled } diff --git a/modules/meeting/app/forms/meeting/submit.rb b/modules/meeting/app/forms/meeting_section/submit.rb similarity index 87% rename from modules/meeting/app/forms/meeting/submit.rb rename to modules/meeting/app/forms/meeting_section/submit.rb index 47a86063684f..94279486aeda 100644 --- a/modules/meeting/app/forms/meeting/submit.rb +++ b/modules/meeting/app/forms/meeting_section/submit.rb @@ -26,8 +26,8 @@ # See COPYRIGHT and LICENSE files for more details. #++ -class Meeting::Submit < ApplicationForm - form do |meeting_form| - meeting_form.submit(name: :submit, label: I18n.t("button_save"), scheme: :primary) +class MeetingSection::Submit < ApplicationForm + form do |meeting_section_form| + meeting_section_form.submit(name: :submit, label: I18n.t("button_save"), scheme: :primary) end end diff --git a/modules/meeting/app/forms/meeting_section/title.rb b/modules/meeting/app/forms/meeting_section/title.rb new file mode 100644 index 000000000000..566494d5fb36 --- /dev/null +++ b/modules/meeting/app/forms/meeting_section/title.rb @@ -0,0 +1,44 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +class MeetingSection::Title < ApplicationForm + form do |meeting_section_form| + meeting_section_form.text_field( + name: :title, + placeholder: I18n.t("meeting_section.placeholder_title"), + label: Meeting.human_attribute_name(:title), + visually_hide_label: true, + required: true, + autofocus: true, + bg: :default, + data: { + action: "keydown.esc->meeting-section-form#cancel" + } + ) + end +end diff --git a/modules/meeting/app/models/meeting.rb b/modules/meeting/app/models/meeting.rb index c777a5516513..9116281ae333 100644 --- a/modules/meeting/app/models/meeting.rb +++ b/modules/meeting/app/models/meeting.rb @@ -30,26 +30,27 @@ class Meeting < ApplicationRecord include VirtualAttribute include OpenProject::Journal::AttachmentHelper - self.table_name = 'meetings' + self.table_name = "meetings" belongs_to :project - belongs_to :author, class_name: 'User' - has_one :agenda, dependent: :destroy, class_name: 'MeetingAgenda' - has_one :minutes, dependent: :destroy, class_name: 'MeetingMinutes' - has_many :contents, -> { readonly }, class_name: 'MeetingContent' + belongs_to :author, class_name: "User" + has_one :agenda, dependent: :destroy, class_name: "MeetingAgenda" + has_one :minutes, dependent: :destroy, class_name: "MeetingMinutes" + has_many :contents, -> { readonly }, class_name: "MeetingContent" has_many :participants, dependent: :destroy, - class_name: 'MeetingParticipant', + class_name: "MeetingParticipant", after_add: :send_participant_added_mail - has_many :agenda_items, dependent: :destroy, class_name: 'MeetingAgendaItem' + has_many :sections, dependent: :destroy, class_name: "MeetingSection" + has_many :agenda_items, dependent: :destroy, class_name: "MeetingAgendaItem" default_scope do order("#{Meeting.table_name}.start_time DESC") end - scope :from_tomorrow, -> { where(['start_time >= ?', Date.tomorrow.beginning_of_day]) } - scope :from_today, -> { where(['start_time >= ?', Time.zone.today.beginning_of_day]) } + scope :from_tomorrow, -> { where(["start_time >= ?", Date.tomorrow.beginning_of_day]) } + scope :from_today, -> { where(["start_time >= ?", Time.zone.today.beginning_of_day]) } scope :with_users_by_date, -> { order("#{Meeting.table_name}.title ASC") .includes({ participants: :user }, :author) @@ -109,21 +110,6 @@ class Meeting < ApplicationRecord closed: 5 } - # => {"agenda_items_7"=>{"title"=>["New agenda item edited", "New agenda item edited again"], "duration_in_minutes"=>["5", "3"], "notes"=>["Notes added as well", "Notes edited"]}} - -# => {"project_id"=>[nil, 14], -# "user_id"=>[nil, 9], -# "work_package_id"=>[nil, 48211], -# "hours"=>[nil, 1.0], -# "comments"=>[nil, "Alex"], -# "activity_id"=>[nil, 8], -# "spent_on"=>[nil, Mon, 31 Jul 2023], -# "tyear"=>[nil, 2023], -# "tmonth"=>[nil, 7], -# "tweek"=>[nil, 31], -# "costs"=>[nil, 0.0], -# "logged_by_id"=>[nil, 9]} - ## # Return the computed start_time when changed def start_time @@ -214,7 +200,7 @@ def close_agenda_and_copy_to_minutes! attachments = agenda.attachments.map { |a| [a, a.copy] } original_text = String(agenda.text) minutes = create_minutes(text: original_text, - journal_notes: I18n.t('events.meeting_minutes_created'), + journal_notes: I18n.t("events.meeting_minutes_created"), attachments: attachments.map(&:last)) # substitute attachment references in text to use the respective copied attachments @@ -233,7 +219,7 @@ def close_agenda_and_copy_to_minutes! def participants_attributes=(attrs) attrs.each do |participant| - participant['_destroy'] = true if !(participant[:attended] || participant[:invited]) + participant["_destroy"] = true if !(participant[:attended] || participant[:invited]) end self.original_participants_attributes = attrs end @@ -260,7 +246,7 @@ def set_initial_values def update_derived_fields @start_date = start_time.to_date.iso8601 - @start_time_hour = start_time.strftime('%H:%M') + @start_time_hour = start_time.strftime("%H:%M") end private @@ -319,7 +305,7 @@ def parsed_start_date ## # Enforce HH::MM time parsing for the given input string def parsed_start_time_hour - Time.strptime(@start_time_hour, '%H:%M') + Time.strptime(@start_time_hour, "%H:%M") rescue ArgumentError nil end diff --git a/modules/meeting/app/models/meeting_agenda_item.rb b/modules/meeting/app/models/meeting_agenda_item.rb index 3babdc799c92..3f26a4c8221f 100644 --- a/modules/meeting/app/models/meeting_agenda_item.rb +++ b/modules/meeting/app/models/meeting_agenda_item.rb @@ -36,12 +36,13 @@ class MeetingAgendaItem < ApplicationRecord enum item_type: ITEM_TYPES belongs_to :meeting, class_name: "StructuredMeeting" + belongs_to :meeting_section, optional: false belongs_to :work_package, class_name: "::WorkPackage" has_one :project, through: :meeting belongs_to :author, class_name: "User", optional: false belongs_to :presenter, class_name: "User", optional: true - acts_as_list scope: :meeting + acts_as_list scope: :meeting_section default_scope { order(:position) } scope :with_includes_to_render, -> { includes(:author, :meeting) } @@ -61,16 +62,41 @@ class MeetingAgendaItem < ApplicationRecord numericality: { greater_than_or_equal_to: 0, less_than_or_equal_to: 1440 }, allow_nil: true + before_validation :add_to_latest_meeting_section + after_create :trigger_meeting_agenda_item_time_slots_calculation after_save :trigger_meeting_agenda_item_time_slots_calculation, if: Proc.new { |item| item.duration_in_minutes_previously_changed? || item.position_previously_changed? } after_destroy :trigger_meeting_agenda_item_time_slots_calculation + # after_destroy :delete_meeting_section_if_empty + + def add_to_latest_meeting_section + return if meeting.nil? + + if meeting_section_id.nil? + meeting_section = meeting.sections.order(position: :asc).last + + if meeting_section.nil? + meeting_section = meeting.sections.build(title: "") + end + + self.meeting_section = meeting_section + end + end def trigger_meeting_agenda_item_time_slots_calculation meeting.calculate_agenda_item_time_slots end + # def delete_meeting_section_if_empty + # # we need to delete the last existing section if the last meeting agenda item is deleted + # # as we don't render the section (including the section menu) if only one section exists + # # thus the section would silently exist in the database when the very last agenda item was deleted + # # which makes UI rendering inconsistent + # meeting_section.destroy if meeting_section.agenda_items.empty? && meeting.sections.count == 1 + # end + def linked_work_package? item_type == "work_package" && work_package.present? end diff --git a/modules/meeting/app/models/meeting_section.rb b/modules/meeting/app/models/meeting_section.rb new file mode 100644 index 000000000000..9e9db7b6bc60 --- /dev/null +++ b/modules/meeting/app/models/meeting_section.rb @@ -0,0 +1,64 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +class MeetingSection < ApplicationRecord + self.table_name = "meeting_sections" + + belongs_to :meeting + + has_many :agenda_items, dependent: :destroy, class_name: "MeetingAgendaItem" + has_one :project, through: :meeting + + after_save :trigger_meeting_agenda_item_time_slots_calculation, if: Proc.new { |section| + section.position_previously_changed? + } + + acts_as_list scope: :meeting + + default_scope { order(:position) } + + def trigger_meeting_agenda_item_time_slots_calculation + meeting.calculate_agenda_item_time_slots + end + + def untitled? + title.blank? + end + + def editable? + !meeting&.closed? + end + + def modifiable? + !meeting&.closed? + end + + def agenda_items_sum_duration_in_minutes + agenda_items.sum(:duration_in_minutes) + end +end diff --git a/modules/meeting/app/models/queries/meetings.rb b/modules/meeting/app/models/queries/meetings.rb index 07ce66e99db1..6054468a835b 100644 --- a/modules/meeting/app/models/queries/meetings.rb +++ b/modules/meeting/app/models/queries/meetings.rb @@ -33,5 +33,6 @@ module Queries::Meetings filter Filters::AttendedUserFilter filter Filters::InvitedUserFilter filter Filters::AuthorFilter + filter Filters::DatesIntervalFilter end end diff --git a/modules/meeting/app/models/queries/meetings/filters/dates_interval_filter.rb b/modules/meeting/app/models/queries/meetings/filters/dates_interval_filter.rb new file mode 100644 index 000000000000..c082aa4ce41b --- /dev/null +++ b/modules/meeting/app/models/queries/meetings/filters/dates_interval_filter.rb @@ -0,0 +1,52 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +class Queries::Meetings::Filters::DatesIntervalFilter < Queries::Meetings::Filters::MeetingFilter + include Queries::Operators::DateRangeClauses + + def type + :date + end + + def where + lower_boundary, upper_boundary = values.map { |v| v.blank? ? nil : Date.parse(v) } + + <<-SQL + (meetings.start_time >= '#{quoted_date_from_utc(lower_boundary)}' AND + meetings.start_time <= '#{quoted_date_from_utc(upper_boundary)}') + SQL + end + + def type_strategy + @type_strategy ||= Queries::Filters::Strategies::DateInterval.new(self) + end + + def connection + ActiveRecord::Base::connection + end +end diff --git a/modules/meeting/app/models/queries/meetings/filters/time_filter.rb b/modules/meeting/app/models/queries/meetings/filters/time_filter.rb index 0f2691d911f1..cb6d03e1945d 100644 --- a/modules/meeting/app/models/queries/meetings/filters/time_filter.rb +++ b/modules/meeting/app/models/queries/meetings/filters/time_filter.rb @@ -34,8 +34,8 @@ class Queries::Meetings::Filters::TimeFilter < Queries::Meetings::Filters::Meeti def allowed_values [ - [PAST_VALUE], - [FUTURE_VALUE] + [I18n.t(:label_past_meetings_short), PAST_VALUE], + [I18n.t(:label_upcoming_meetings_short), FUTURE_VALUE] ] end diff --git a/modules/meeting/app/models/structured_meeting.rb b/modules/meeting/app/models/structured_meeting.rb index c4d42d469791..93a998a368e2 100644 --- a/modules/meeting/app/models/structured_meeting.rb +++ b/modules/meeting/app/models/structured_meeting.rb @@ -38,7 +38,7 @@ class StructuredMeeting < Meeting def calculate_agenda_item_time_slots current_time = start_time MeetingAgendaItem.transaction do - changed_items = agenda_items.order(:position).map do |top| + changed_items = agenda_items.includes(:meeting_section).reorder("meeting_sections.position", :position).map do |top| start_time = current_time current_time += top.duration_in_minutes&.minutes || 0.minutes end_time = current_time diff --git a/modules/meeting/app/seeders/meetings/demo_data/meeting_agenda_items_seeder.rb b/modules/meeting/app/seeders/meetings/demo_data/meeting_agenda_items_seeder.rb index 36227d6c825b..385c64f2f180 100644 --- a/modules/meeting/app/seeders/meetings/demo_data/meeting_agenda_items_seeder.rb +++ b/modules/meeting/app/seeders/meetings/demo_data/meeting_agenda_items_seeder.rb @@ -40,14 +40,28 @@ def initialize(_project, seed_data) def model_attributes(meeting_data) { - title: meeting_data["title"], + item_type: item_type(meeting_data), + title: title(meeting_data), notes: meeting_data["notes"], duration_in_minutes: meeting_data["duration"], author: seed_data.find_reference(meeting_data["author"]), + presenter: seed_data.find_reference(meeting_data["presenter"]), meeting: seed_data.find_reference(meeting_data["meeting"]), work_package: seed_data.find_reference(meeting_data["work_package"]) } end + + def item_type(meeting_data) + if meeting_data["work_package"] + MeetingAgendaItem.item_types[:work_package] + else + MeetingAgendaItem.item_types[:simple] + end + end + + def title(meeting_data) + meeting_data["title"] unless meeting_data["work_package"] + end end end end diff --git a/modules/meeting/app/seeders/standard.yml b/modules/meeting/app/seeders/standard.yml index 17783c5d6329..75f83203b5fa 100644 --- a/modules/meeting/app/seeders/standard.yml +++ b/modules/meeting/app/seeders/standard.yml @@ -31,50 +31,60 @@ projects: meetings: - reference: :weekly_meeting t_title: Weekly - duration: 80 + duration: 60 author: :openproject_admin meeting_agenda_items: - t_title: Good news notes: "What went well this week?" meeting: :weekly_meeting author: :openproject_admin + presenter: :openproject_admin duration: 5 - t_title: Updates from development team notes: "News and focused topics for the upcoming week." meeting: :weekly_meeting author: :openproject_admin + presenter: :openproject_admin duration: 5 - t_title: Updates from product team notes: "News and focused topics for the upcoming week." meeting: :weekly_meeting author: :openproject_admin + presenter: :openproject_admin duration: 5 - t_title: Updates from marketing team notes: "News and focused topics for the upcoming week." meeting: :weekly_meeting author: :openproject_admin + presenter: :openproject_admin + duration: 5 + - work_package: :organize_open_source_conference + notes: "**Today's topic**: Organizing the open-source conference." + meeting: :weekly_meeting + author: :openproject_admin + presenter: :openproject_admin duration: 5 - t_title: Updates from sales team notes: "News and focused topics for the upcoming week." meeting: :weekly_meeting author: :openproject_admin + presenter: :openproject_admin duration: 5 - t_title: Review of quarterly goals notes: "Assessing the status and progress of the defined quarterly goals." meeting: :weekly_meeting author: :openproject_admin - duration: 12 + presenter: :openproject_admin + duration: 5 - t_title: Core values feedback notes: "Highlight employees who have lived the core values this week." meeting: :weekly_meeting author: :openproject_admin - duration: 10 + presenter: :openproject_admin + duration: 5 - t_title: General topics - notes: | - Solving or discussing one topic together. - - **Today's topic**: Organizing the open-source conference + notes: "Solving or discussing topics together." meeting: :weekly_meeting - work_package: :organize_open_source_conference author: :openproject_admin - duration: 30 + presenter: :openproject_admin + duration: 20 diff --git a/modules/meeting/app/services/meeting_agenda_items/drop_service.rb b/modules/meeting/app/services/meeting_agenda_items/drop_service.rb new file mode 100644 index 000000000000..29fccee1d7a4 --- /dev/null +++ b/modules/meeting/app/services/meeting_agenda_items/drop_service.rb @@ -0,0 +1,117 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module MeetingAgendaItems + class DropService < ::BaseServices::BaseCallable + include AfterPerformHook + + def initialize(user:, meeting_agenda_item:) + super() + @user = user + @meeting_agenda_item = meeting_agenda_item + @meeting = meeting_agenda_item.meeting + end + + def perform(params) + service_call = validate_permission + service_call = validate_meeting_existence if service_call.success? + service_call = validate_meeting_agenda_item_editable if service_call.success? + + service_call = perform_drop(service_call, params) if service_call.success? + + # after_perform(service_call) if service_call.success? # TODO properly integrate after_perform_hook + + service_call + end + + def validate_permission + if @user.allowed_in_project?(:manage_agendas, @meeting.project) + ServiceResult.success + else + ServiceResult.failure(errors: { base: :error_unauthorized }) + end + end + + def validate_meeting_existence + if @meeting.present? + ServiceResult.success + else + ServiceResult.failure(errors: { base: :does_not_exist }) + end + end + + def validate_meeting_agenda_item_editable + if @meeting_agenda_item.editable? + ServiceResult.success + else + ServiceResult.failure(errors: { base: :error_unauthorized }) + end + end + + def perform_drop(service_call, params) + begin + section_changed, current_section, old_section = check_and_update_section_if_changed(params) + update_position(params[:position]&.to_i) + + service_call.success = true + service_call.result = { section_changed:, current_section:, old_section: } + rescue StandardError => e + service_call.success = false + service_call.errors = e.message + end + + service_call + end + + private + + def check_and_update_section_if_changed(params) + current_section = @meeting_agenda_item.meeting_section + new_section_id = params[:target_id]&.to_i + + if current_section.id != new_section_id + old_section = current_section + current_section = update_section(new_section_id) + return [true, current_section, old_section] + end + + [false, current_section, nil] + end + + def update_section(new_section_id) + current_section = MeetingSection.find(new_section_id) + @meeting_agenda_item.remove_from_list + @meeting_agenda_item.update(meeting_section: current_section) + current_section + end + + def update_position(new_position) + @meeting_agenda_item.insert_at(new_position) + end + end +end diff --git a/modules/meeting/app/services/meeting_sections/create_service.rb b/modules/meeting/app/services/meeting_sections/create_service.rb new file mode 100644 index 000000000000..2024669c06b4 --- /dev/null +++ b/modules/meeting/app/services/meeting_sections/create_service.rb @@ -0,0 +1,32 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module MeetingSections + class CreateService < ::BaseServices::Create + end +end diff --git a/modules/meeting/app/services/meeting_sections/delete_service.rb b/modules/meeting/app/services/meeting_sections/delete_service.rb new file mode 100644 index 000000000000..160d428c99d7 --- /dev/null +++ b/modules/meeting/app/services/meeting_sections/delete_service.rb @@ -0,0 +1,32 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module MeetingSections + class DeleteService < ::BaseServices::Delete + end +end diff --git a/modules/meeting/app/services/meeting_sections/set_attributes_service.rb b/modules/meeting/app/services/meeting_sections/set_attributes_service.rb new file mode 100644 index 000000000000..cbfbd5880143 --- /dev/null +++ b/modules/meeting/app/services/meeting_sections/set_attributes_service.rb @@ -0,0 +1,32 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module MeetingSections + class SetAttributesService < ::BaseServices::SetAttributes + end +end diff --git a/modules/meeting/app/services/meeting_sections/update_service.rb b/modules/meeting/app/services/meeting_sections/update_service.rb new file mode 100644 index 000000000000..025eafc8cf62 --- /dev/null +++ b/modules/meeting/app/services/meeting_sections/update_service.rb @@ -0,0 +1,32 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module MeetingSections + class UpdateService < ::BaseServices::Update + end +end diff --git a/modules/meeting/app/services/meetings/copy_service.rb b/modules/meeting/app/services/meetings/copy_service.rb index 1e40c87ea05d..c20714f8de94 100644 --- a/modules/meeting/app/services/meetings/copy_service.rb +++ b/modules/meeting/app/services/meetings/copy_service.rb @@ -76,6 +76,7 @@ def copied_attributes(meeting, override) .slice(*writable_meeting_attributes(meeting)) .merge("start_time" => meeting.start_time + 1.week) .merge("author" => user) + .merge("state" => "open") .merge("participants_attributes" => meeting.allowed_participants.collect(&:copy_attributes)) .merge(overwritten_attributes) end @@ -102,8 +103,14 @@ def update_references(attachment_source:, attachment_target:, model_source:, mod def copy_meeting_agenda(copy) if meeting.is_a?(StructuredMeeting) - meeting.agenda_items.each do |agenda_item| - copy.agenda_items << agenda_item.dup + meeting.sections.each do |section| + copy.sections << section.dup + copied_section = copy.reload.sections.last + section.agenda_items.each do |agenda_item| + copied_agenda_item = agenda_item.dup + copied_agenda_item.meeting_id = copy.id + copied_section.agenda_items << copied_agenda_item + end end else MeetingAgenda.create!( diff --git a/modules/meeting/app/services/meetings/ical_service.rb b/modules/meeting/app/services/meetings/ical_service.rb index 9ef87dc81b77..e47c60b31de9 100644 --- a/modules/meeting/app/services/meetings/ical_service.rb +++ b/modules/meeting/app/services/meetings/ical_service.rb @@ -73,9 +73,13 @@ def generate_ical def ical_event(&) calendar = ::Icalendar::Calendar.new + ical_timezone = @timezone.tzinfo.ical_timezone meeting.start_time + calendar.add_timezone ical_timezone + calendar.event(&) calendar.publish + calendar.to_ical end diff --git a/modules/meeting/app/views/meetings/history.turbo_stream.erb b/modules/meeting/app/views/meetings/history.turbo_stream.erb new file mode 100644 index 000000000000..dd3b518b3f18 --- /dev/null +++ b/modules/meeting/app/views/meetings/history.turbo_stream.erb @@ -0,0 +1,11 @@ +<%= + turbo_stream.dialog do + render(Primer::Alpha::Dialog.new(title: t(:label_history), + id: 'meeting-history-dialog')) do |d| + d.with_header(variant: :large) + d.with_body do + render(Activities::DaysComponent.new(events: @events, current_project: @project, activity_page: @activity_page)) + end + end + end +%> diff --git a/modules/meeting/app/views/meetings/index.html.erb b/modules/meeting/app/views/meetings/index.html.erb index a050a22018e0..cde9cfb053f9 100644 --- a/modules/meeting/app/views/meetings/index.html.erb +++ b/modules/meeting/app/views/meetings/index.html.erb @@ -27,9 +27,11 @@ See COPYRIGHT and LICENSE files for more details. ++#%> <% html_title t(:label_meeting_plural) %> -<%= toolbar title: t(:label_meeting_plural) do %> - <%= render Meetings::AddButtonComponent.new(current_project: @project) %> -<% end %> + +<%= render(Meetings::IndexPageHeaderComponent.new(project: @project)) %> + +<%= render(Meetings::MeetingFiltersComponent.new(query: @query, project: @project, output_format: 'json')) %> + <% if @meetings.empty? -%> <%= no_results_box %> <% else -%> diff --git a/modules/meeting/app/views/meetings/new.html.erb b/modules/meeting/app/views/meetings/new.html.erb index 1661907a753d..dcdd6a7b7112 100644 --- a/modules/meeting/app/views/meetings/new.html.erb +++ b/modules/meeting/app/views/meetings/new.html.erb @@ -27,13 +27,28 @@ See COPYRIGHT and LICENSE files for more details. ++#%> <% copy_from = local_assigns[:copy_from] %> -<% if copy_from %> - <% html_title t('meeting.copy.title', title: copy_from.title) %> - <%= toolbar title: t('meeting.copy.title', title: copy_from.title) %> -<% else %> - <% html_title t(:label_meeting_new) %> - <%= toolbar title: t(:label_meeting_new) %> -<% end %> +<% if copy_from + page_title = t('meeting.copy.title', title: copy_from.title) + breadcrumb_element = t('meeting.copy.title', title: "#{copy_from.title}") + else + page_title = t(:label_meeting_new) + breadcrumb_element = t(:label_meeting_new) + end %> + +<% html_title page_title %> + +<%= + render(Primer::OpenProject::PageHeader.new) do |header| + header.with_title { page_title } + header.with_breadcrumbs([@project.present? ? + { href: project_overview_path(@project.id), text: @project.name } : + { href: home_path, text: I18n.t(:label_home) }, + { href: @project.present? ? project_meetings_path(@project.id) : meetings_path, + text: I18n.t(:label_meeting_plural) }, + breadcrumb_element.html_safe]) + end +%> + <%= labelled_tabular_form_for @meeting, as: :meeting, diff --git a/modules/meeting/app/views/meetings/participants_dialog.turbo_stream.erb b/modules/meeting/app/views/meetings/participants_dialog.turbo_stream.erb new file mode 100644 index 000000000000..d0a526ec92d2 --- /dev/null +++ b/modules/meeting/app/views/meetings/participants_dialog.turbo_stream.erb @@ -0,0 +1,5 @@ +<%= + turbo_stream.dialog do + render(Meetings::Sidebar::ParticipantsDialog.new(meeting: @meeting)) + end +%> diff --git a/modules/meeting/config/locales/crowdin/af.seeders.yml b/modules/meeting/config/locales/crowdin/af.seeders.yml index eab2c0648600..8f2106d7a7a8 100644 --- a/modules/meeting/config/locales/crowdin/af.seeders.yml +++ b/modules/meeting/config/locales/crowdin/af.seeders.yml @@ -19,11 +19,11 @@ af: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/af.yml b/modules/meeting/config/locales/crowdin/af.yml index 0cbe88a4c2bb..b70b2d1f2f82 100644 --- a/modules/meeting/config/locales/crowdin/af.yml +++ b/modules/meeting/config/locales/crowdin/af.yml @@ -48,6 +48,8 @@ af: duration_in_minutes: "min" description: "Notas" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "is not a valid time. Required format: HH:MM" @@ -99,7 +101,7 @@ af: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -122,6 +124,11 @@ af: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Notification sent successfully" notice_timezone_missing: No time zone is set and %{zone} is assumed. To choose your time zone, please click here. permission_create_meetings: "Create meetings" diff --git a/modules/meeting/config/locales/crowdin/ar.seeders.yml b/modules/meeting/config/locales/crowdin/ar.seeders.yml index e3d19194f8ed..76b236d6e8d0 100644 --- a/modules/meeting/config/locales/crowdin/ar.seeders.yml +++ b/modules/meeting/config/locales/crowdin/ar.seeders.yml @@ -19,11 +19,11 @@ ar: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/ar.yml b/modules/meeting/config/locales/crowdin/ar.yml index 66c174e72f93..0111ce70b1fb 100644 --- a/modules/meeting/config/locales/crowdin/ar.yml +++ b/modules/meeting/config/locales/crowdin/ar.yml @@ -52,6 +52,8 @@ ar: duration_in_minutes: "min" description: "ملاحظات" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "ليس وقتًا صالحًا. التصميم المطلوب: HH:MM" @@ -103,7 +105,7 @@ ar: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -126,6 +128,11 @@ ar: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "نسخ من الاجتماع #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "تم إرسال الإشعار بنجاح" notice_timezone_missing: لم يتم تعيين المنطقة الزمنية و%{zone} مُفترض. لاختيار منطقتك الزمنية، من فضلك اضغط هنا. permission_create_meetings: "إنشاء الاجتماعات" diff --git a/modules/meeting/config/locales/crowdin/az.seeders.yml b/modules/meeting/config/locales/crowdin/az.seeders.yml index d8eac23bc048..02ee586c2382 100644 --- a/modules/meeting/config/locales/crowdin/az.seeders.yml +++ b/modules/meeting/config/locales/crowdin/az.seeders.yml @@ -19,11 +19,11 @@ az: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/az.yml b/modules/meeting/config/locales/crowdin/az.yml index ccf7b18a345a..a277b55cbd64 100644 --- a/modules/meeting/config/locales/crowdin/az.yml +++ b/modules/meeting/config/locales/crowdin/az.yml @@ -48,6 +48,8 @@ az: duration_in_minutes: "min" description: "Notes" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "is not a valid time. Required format: HH:MM" @@ -99,7 +101,7 @@ az: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -122,6 +124,11 @@ az: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Notification sent successfully" notice_timezone_missing: No time zone is set and %{zone} is assumed. To choose your time zone, please click here. permission_create_meetings: "Create meetings" diff --git a/modules/meeting/config/locales/crowdin/be.seeders.yml b/modules/meeting/config/locales/crowdin/be.seeders.yml index f7291fa4c29e..868b3cbe57fc 100644 --- a/modules/meeting/config/locales/crowdin/be.seeders.yml +++ b/modules/meeting/config/locales/crowdin/be.seeders.yml @@ -19,11 +19,11 @@ be: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/be.yml b/modules/meeting/config/locales/crowdin/be.yml index 79b909483cb0..88fa904f7733 100644 --- a/modules/meeting/config/locales/crowdin/be.yml +++ b/modules/meeting/config/locales/crowdin/be.yml @@ -50,6 +50,8 @@ be: duration_in_minutes: "min" description: "Notes" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "is not a valid time. Required format: HH:MM" @@ -101,7 +103,7 @@ be: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -124,6 +126,11 @@ be: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Notification sent successfully" notice_timezone_missing: No time zone is set and %{zone} is assumed. To choose your time zone, please click here. permission_create_meetings: "Create meetings" diff --git a/modules/meeting/config/locales/crowdin/bg.seeders.yml b/modules/meeting/config/locales/crowdin/bg.seeders.yml index b8f24ba2a5d2..951ebc8f1b34 100644 --- a/modules/meeting/config/locales/crowdin/bg.seeders.yml +++ b/modules/meeting/config/locales/crowdin/bg.seeders.yml @@ -19,11 +19,11 @@ bg: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/bg.yml b/modules/meeting/config/locales/crowdin/bg.yml index 01b37de8abf9..bd1193cd06fa 100644 --- a/modules/meeting/config/locales/crowdin/bg.yml +++ b/modules/meeting/config/locales/crowdin/bg.yml @@ -48,6 +48,8 @@ bg: duration_in_minutes: "min" description: "Бележки" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "is not a valid time. Required format: HH:MM" @@ -99,7 +101,7 @@ bg: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -122,6 +124,11 @@ bg: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Notification sent successfully" notice_timezone_missing: No time zone is set and %{zone} is assumed. To choose your time zone, please click here. permission_create_meetings: "Create meetings" diff --git a/modules/meeting/config/locales/crowdin/ca.seeders.yml b/modules/meeting/config/locales/crowdin/ca.seeders.yml index 36044d360b33..d249915bbaa7 100644 --- a/modules/meeting/config/locales/crowdin/ca.seeders.yml +++ b/modules/meeting/config/locales/crowdin/ca.seeders.yml @@ -19,11 +19,11 @@ ca: title: Actualitzacions de l'equip de producte item_3: title: Actualitzacions de l'equip de màrqueting - item_4: - title: Actualitzacions de l'equip de vendes item_5: - title: Revisió dels objectius quadrimestrals + title: Updates from sales team item_6: - title: Opinions dels valors principals + title: Review of quarterly goals item_7: - title: Temes generals + title: Core values feedback + item_8: + title: General topics diff --git a/modules/meeting/config/locales/crowdin/ca.yml b/modules/meeting/config/locales/crowdin/ca.yml index 7bf2b28d5a6c..14e8e0b34418 100644 --- a/modules/meeting/config/locales/crowdin/ca.yml +++ b/modules/meeting/config/locales/crowdin/ca.yml @@ -40,14 +40,16 @@ ca: participants_invited: "Convidats" project: "Projecte" start_date: "Data" - start_time: "Start time" - start_time_hour: "Start time" + start_time: "Hora d'inici" + start_time_hour: "Hora d'inici" meeting_agenda_item: title: "Títol" author: "Autor/a" duration_in_minutes: "min" description: "Notes" - presenter: "Presenter" + presenter: "Presentador" + meeting_section: + title: "Títol" errors: messages: invalid_time_format: "no és una hora vàlida. El format requerit és: HH:MM" @@ -97,13 +99,13 @@ ca: label_start_date: "Data d'inici" meeting: attachments: - text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." + text: "Els fitxers adjunts estan disponibles per a tots els participants de la reunió. També podeu arrossegar-los i deixar-los anar a les notes dels punts de l'agenda." copy: - title: "Copy meeting %{title}" - attachments: "Copy attachments" - attachments_text: "Copy over all attached files to the new meeting" - agenda: "Copy agenda" - agenda_text: "Copy the agenda of the old meeting" + title: "Copia la reunió: %{title}" + attachments: "Copia adjunts" + attachments_text: "Copia tots els fitxers adjunts a la nova reunió" + agenda: "Copia l'agenda" + agenda_text: "Copia l'agenda de l'antiga reunió" email: open_meeting_link: "Reunió oberta" invited: @@ -122,6 +124,11 @@ ca: structured_text: "Organitza la vostra reunió com una llista d'elements de l'agenda, enllaçant-los opcionalment a un paquet de treball." structured_text_copy: "Actualment en copiar una reunió no es copiaran els elements associats a l'agenda de la reunió, només els detalls." copied: "Copiat de la reunió #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Arrossega els elements aquí o crea un de nou" notice_successful_notification: "Notificació enviada correctament" notice_timezone_missing: No s'ha configurat la zona horària i la %{zone} és assumida. Per seleccionar la teva zona horària, si us plau, fes clic aquí. permission_create_meetings: "Crea reunions" @@ -155,9 +162,9 @@ ca: label_meeting_delete: "Elimina reunió" label_meeting_created_by: "Creat per" label_meeting_last_updated: "Última actualització" - label_agenda_items: "Agenda items" - label_agenda_items_reordered: "reordered" - label_agenda_item_remove: "Remove from agenda" + label_agenda_items: "Punts de l'ordre del dia" + label_agenda_items_reordered: "reordenat" + label_agenda_item_remove: "Suprimeix de l'agenda" label_agenda_item_undisclosed_wp: "Paquet de treball #%{id} no visible" label_agenda_item_deleted_wp: "Referència de paquet de treball eliminada" label_agenda_item_actions: "Accions d'element de l'agenda" @@ -166,18 +173,18 @@ ca: label_agenda_item_move_up: "Mou amunt" label_agenda_item_move_down: "Mou avall" label_agenda_item_add_notes: "Afegir notes" - label_agenda_item_work_package: "Agenda item work package" - text_agenda_item_title: 'Agenda item "%{title}"' - text_agenda_work_package_deleted: 'Agenda item for deleted work package' - text_deleted_agenda_item: 'Deleted agenda item' + label_agenda_item_work_package: "Paquet de treball d'elements de l'agenda" + text_agenda_item_title: 'Punt de l''ordre del dia "%{title}"' + text_agenda_work_package_deleted: 'Punt de l''ordre del dia per al paquet de treball suprimit' + text_deleted_agenda_item: 'Punt de l''ordre del dia eliminat' label_initial_meeting_details: "Reunió" label_meeting_details: "Detalls de la reunió" label_meeting_details_edit: "Edita els detalls de la reunió" - label_meeting_state: "Meeting status" + label_meeting_state: "Estat de la reunió" label_meeting_state_open: "Oberta" - label_meeting_state_open_html: "Open" + label_meeting_state_open_html: "Obre" label_meeting_state_closed: "Tancada" - label_meeting_state_closed_html: "Closed" + label_meeting_state_closed_html: "Tancat" label_meeting_reopen_action: "Reobrir reunió" label_meeting_close_action: "Tancar reunió" text_meeting_open_description: "Aquesta reunió està oberta. Pots afegir o eliminar elements de l'agenda i editar-los lliurement. Al final de la reunió, tanca-la per bloquejar-la." diff --git a/modules/meeting/config/locales/crowdin/ckb-IR.seeders.yml b/modules/meeting/config/locales/crowdin/ckb-IR.seeders.yml index 041d194d37b8..68d9a21916c0 100644 --- a/modules/meeting/config/locales/crowdin/ckb-IR.seeders.yml +++ b/modules/meeting/config/locales/crowdin/ckb-IR.seeders.yml @@ -19,11 +19,11 @@ ckb-IR: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/ckb-IR.yml b/modules/meeting/config/locales/crowdin/ckb-IR.yml index 93ed6c1d7d68..6865815999e9 100644 --- a/modules/meeting/config/locales/crowdin/ckb-IR.yml +++ b/modules/meeting/config/locales/crowdin/ckb-IR.yml @@ -48,6 +48,8 @@ ckb-IR: duration_in_minutes: "min" description: "Notes" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "is not a valid time. Required format: HH:MM" @@ -99,7 +101,7 @@ ckb-IR: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -122,6 +124,11 @@ ckb-IR: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Notification sent successfully" notice_timezone_missing: No time zone is set and %{zone} is assumed. To choose your time zone, please click here. permission_create_meetings: "Create meetings" diff --git a/modules/meeting/config/locales/crowdin/cs.seeders.yml b/modules/meeting/config/locales/crowdin/cs.seeders.yml index 868aebcaf914..d62d110dd3b3 100644 --- a/modules/meeting/config/locales/crowdin/cs.seeders.yml +++ b/modules/meeting/config/locales/crowdin/cs.seeders.yml @@ -19,11 +19,11 @@ cs: title: Novinky od produktového týmu item_3: title: Novinky od marketingového týmu - item_4: - title: Novinky od obchodního týmu item_5: - title: Vyhodnocení čtvrtletních cílů + title: Updates from sales team item_6: - title: Zpětná vazba základních hodnot + title: Review of quarterly goals item_7: - title: Obecná témata + title: Core values feedback + item_8: + title: General topics diff --git a/modules/meeting/config/locales/crowdin/cs.yml b/modules/meeting/config/locales/crowdin/cs.yml index 8a2639ba3801..7215a6782888 100644 --- a/modules/meeting/config/locales/crowdin/cs.yml +++ b/modules/meeting/config/locales/crowdin/cs.yml @@ -42,14 +42,16 @@ cs: participants_invited: "Pozvaní" project: "Projekt" start_date: "Datum" - start_time: "Start time" - start_time_hour: "Start time" + start_time: "Čas zahájení" + start_time_hour: "Čas zahájení" meeting_agenda_item: title: "Název" author: "Autor" duration_in_minutes: "min" description: "Poznámky" - presenter: "Presenter" + presenter: "Přednášející" + meeting_section: + title: "Název" errors: messages: invalid_time_format: "není platný čas. Požadovaný formát: HH:MM" @@ -102,7 +104,7 @@ cs: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: title: "Kopírovat schůzku %{title}" - attachments: "Copy attachments" + attachments: "Kopírovat přílohy" attachments_text: "Copy over all attached files to the new meeting" agenda: "Kopírovat program" agenda_text: "Zkopírujte program staré schůzky" @@ -124,6 +126,11 @@ cs: structured_text: "Uspořádat schůzku jako seznam bodů pořadu jednání, případně je propojit s pracovním balíčkem." structured_text_copy: "Kopírování schůzky v současné době nezkopíruje související body pořadu jednání, jen podrobnosti" copied: "Zkopírováno ze schůzky #%{id}" + meeting_section: + untitled_title: "Sekce bez názvu" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "Nová sekce" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Oznámení bylo úspěšně odesláno" notice_timezone_missing: Není nastaveno žádné časové pásmo a předpokládá se %{zone} . Chcete-li vybrat časové pásmo, klikněte prosím zde. permission_create_meetings: "Vytvořit schůzku\n" @@ -158,7 +165,7 @@ cs: label_meeting_created_by: "Vytvořil" label_meeting_last_updated: "Naposledy aktualizováno" label_agenda_items: "Agenda items" - label_agenda_items_reordered: "reordered" + label_agenda_items_reordered: "přeřazeno" label_agenda_item_remove: "Remove from agenda" label_agenda_item_undisclosed_wp: "Pracovní balíček #%{id} není viditelný" label_agenda_item_deleted_wp: "Odstraněna reference pracovního balíčku" diff --git a/modules/meeting/config/locales/crowdin/da.seeders.yml b/modules/meeting/config/locales/crowdin/da.seeders.yml index 56c2b0888f64..fefe716b05cf 100644 --- a/modules/meeting/config/locales/crowdin/da.seeders.yml +++ b/modules/meeting/config/locales/crowdin/da.seeders.yml @@ -19,11 +19,11 @@ da: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/da.yml b/modules/meeting/config/locales/crowdin/da.yml index d1445aa9cfcd..7662e0391314 100644 --- a/modules/meeting/config/locales/crowdin/da.yml +++ b/modules/meeting/config/locales/crowdin/da.yml @@ -48,6 +48,8 @@ da: duration_in_minutes: "min" description: "Kommentarer" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "is not a valid time. Required format: HH:MM" @@ -99,7 +101,7 @@ da: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -122,6 +124,11 @@ da: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Påmindelse er afsendt" notice_timezone_missing: Der er ikke sat en tidszone og systemet har valgt %{zone}. For at vælge din egen tidszone, klik venligst her. permission_create_meetings: "Opret møder" diff --git a/modules/meeting/config/locales/crowdin/de.seeders.yml b/modules/meeting/config/locales/crowdin/de.seeders.yml index c50883bc13b1..6977ec91bce2 100644 --- a/modules/meeting/config/locales/crowdin/de.seeders.yml +++ b/modules/meeting/config/locales/crowdin/de.seeders.yml @@ -19,11 +19,11 @@ de: title: Updates des Produktteams item_3: title: Updates des Marketingteams - item_4: - title: Updates des Vertriebsteams item_5: - title: Überprüfung der Quartalsziele + title: Updates des Vertriebsteams item_6: - title: Rückmeldung der Kernwerte + title: Überprüfung der Quartalsziele item_7: + title: Feedback zu den Core Values + item_8: title: Allgemeine Themen diff --git a/modules/meeting/config/locales/crowdin/de.yml b/modules/meeting/config/locales/crowdin/de.yml index 8b48afe21cb1..5666b0a36ce4 100644 --- a/modules/meeting/config/locales/crowdin/de.yml +++ b/modules/meeting/config/locales/crowdin/de.yml @@ -48,6 +48,8 @@ de: duration_in_minutes: "Min." description: "Anmerkungen" presenter: "Referent" + meeting_section: + title: "Titel" errors: messages: invalid_time_format: "ist keine gültige Zeit. Erforderliches Format: HH:MM" @@ -99,7 +101,7 @@ de: attachments: text: "Angehängte Dateien sind für alle Teilnehmer der Besprechung verfügbar. Sie können diese auch per Drag-and-drop in die Notizen der Tagesordnungspunkte ziehen." copy: - title: "Besprechung %{title} kopieren" + title: "Besprechung kopieren: %{title}" attachments: "Anhänge kopieren" attachments_text: "Alle angehängten Dateien in die neue Besprechung kopieren" agenda: "Tagesordnung kopieren" @@ -122,6 +124,11 @@ de: structured_text: "Organisieren Sie Ihr Meeting als strukturierte Liste von Einträgen und verknüpfen Sie diese optional mit einem Arbeitspaket." structured_text_copy: "Das Kopieren einer Besprechung kopiert derzeit nicht die zugehörigen Tagesordnungspunkte, sondern nur dessen Details" copied: "Kopiert von Meeting #%{id}" + meeting_section: + untitled_title: "Unbenannter Abschnitt" + delete_confirmation: "Wenn Sie den Abschnitt löschen, werden auch alle zugehörigen Tagesordnungspunkte gelöscht. Möchten Sie fortfahren?" + placeholder_title: "Neuer Abschnitt" + empty_text: "Neue Agendapunkte hierhin bewegen oder neu erstellen" notice_successful_notification: "Benachrichtigung erfolgreich gesendet" notice_timezone_missing: Keine Zeitzone eingestellt und daher %{zone} angenommen. Um Ihre Zeitzone einzustellen, klicken Sie bitte hier. permission_create_meetings: "Besprechungen erstellen" diff --git a/modules/meeting/config/locales/crowdin/el.seeders.yml b/modules/meeting/config/locales/crowdin/el.seeders.yml index ff466ff6be9b..d6f2a650024c 100644 --- a/modules/meeting/config/locales/crowdin/el.seeders.yml +++ b/modules/meeting/config/locales/crowdin/el.seeders.yml @@ -19,11 +19,11 @@ el: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/el.yml b/modules/meeting/config/locales/crowdin/el.yml index 61eec9ea7294..3abd8ee84428 100644 --- a/modules/meeting/config/locales/crowdin/el.yml +++ b/modules/meeting/config/locales/crowdin/el.yml @@ -48,6 +48,8 @@ el: duration_in_minutes: "min" description: "Παρατηρήσεις" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "δεν είναι έγκυρη ώρα. Απαιτούμενη μορφοποίηση: ΩΩ:ΛΛ" @@ -99,7 +101,7 @@ el: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -122,6 +124,11 @@ el: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Αντιγράφηκε από τη Συνάντηση #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Η ειδοποίηση απεστάλη επιτυχώς" notice_timezone_missing: Δεν έχει οριστεί ζώνη ώρας και θεωρήθηκε η %{zone}. Για να επιλέξετε την ζώνη ώρας σας, παρακαλούμε κάντε κλικ εδώ. permission_create_meetings: "Δημιουργία συναντήσεων" diff --git a/modules/meeting/config/locales/crowdin/eo.seeders.yml b/modules/meeting/config/locales/crowdin/eo.seeders.yml index 8f91277c9042..1b1bd8aa042f 100644 --- a/modules/meeting/config/locales/crowdin/eo.seeders.yml +++ b/modules/meeting/config/locales/crowdin/eo.seeders.yml @@ -19,11 +19,11 @@ eo: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/eo.yml b/modules/meeting/config/locales/crowdin/eo.yml index dadce35258d8..faa4c8c2ecd6 100644 --- a/modules/meeting/config/locales/crowdin/eo.yml +++ b/modules/meeting/config/locales/crowdin/eo.yml @@ -48,6 +48,8 @@ eo: duration_in_minutes: "min" description: "Notoj" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "is not a valid time. Required format: HH:MM" @@ -99,7 +101,7 @@ eo: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -122,6 +124,11 @@ eo: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Notification sent successfully" notice_timezone_missing: No time zone is set and %{zone} is assumed. To choose your time zone, please click here. permission_create_meetings: "Create meetings" diff --git a/modules/meeting/config/locales/crowdin/es.seeders.yml b/modules/meeting/config/locales/crowdin/es.seeders.yml index 4083425ea63e..c86c9a9a16a5 100644 --- a/modules/meeting/config/locales/crowdin/es.seeders.yml +++ b/modules/meeting/config/locales/crowdin/es.seeders.yml @@ -19,11 +19,11 @@ es: title: Actualizaciones del equipo de producto item_3: title: Actualizaciones del equipo de marketing - item_4: - title: Actualizaciones del equipo de ventas item_5: - title: Revisión de los objetivos trimestrales + title: Updates from sales team item_6: - title: Calificación del núcleo + title: Review of quarterly goals item_7: - title: Temas generales + title: Core values feedback + item_8: + title: General topics diff --git a/modules/meeting/config/locales/crowdin/es.yml b/modules/meeting/config/locales/crowdin/es.yml index 90c24a184f10..b0adb4032944 100644 --- a/modules/meeting/config/locales/crowdin/es.yml +++ b/modules/meeting/config/locales/crowdin/es.yml @@ -48,6 +48,8 @@ es: duration_in_minutes: "min" description: "Notas" presenter: "Responsable" + meeting_section: + title: "Título" errors: messages: invalid_time_format: "no es una hora válida. Formato requerido: HH:MM" @@ -122,6 +124,11 @@ es: structured_text: "Organice su reunión como una lista de temas del orden del día, enlazándolos opcionalmente a un paquete de trabajo." structured_text_copy: "Copiar una reunión no copiará actualmente los elementos asociados de la agenda de la reunión, solo los detalles" copied: "Copiado de la reunión %{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Arrastre los elementos aquí o cree uno nuevo" notice_successful_notification: "Notificación enviada correctamente" notice_timezone_missing: No se ha establecido zona horaria y se asume %{zone}. Para elegir su zona horaria, por favor, haga clic aquí. permission_create_meetings: "Crear reuniones" diff --git a/modules/meeting/config/locales/crowdin/et.seeders.yml b/modules/meeting/config/locales/crowdin/et.seeders.yml index 15e5ebb1e36b..0fc7beb62c7b 100644 --- a/modules/meeting/config/locales/crowdin/et.seeders.yml +++ b/modules/meeting/config/locales/crowdin/et.seeders.yml @@ -19,11 +19,11 @@ et: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/et.yml b/modules/meeting/config/locales/crowdin/et.yml index fe798d40b231..78021e0b0e42 100644 --- a/modules/meeting/config/locales/crowdin/et.yml +++ b/modules/meeting/config/locales/crowdin/et.yml @@ -48,6 +48,8 @@ et: duration_in_minutes: "min" description: "Märkmed" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "is not a valid time. Required format: HH:MM" @@ -99,7 +101,7 @@ et: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -122,6 +124,11 @@ et: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Notification sent successfully" notice_timezone_missing: No time zone is set and %{zone} is assumed. To choose your time zone, please click here. permission_create_meetings: "Koosolekute loomine" diff --git a/modules/meeting/config/locales/crowdin/eu.seeders.yml b/modules/meeting/config/locales/crowdin/eu.seeders.yml index 702d86bfa9d0..92efad114e5f 100644 --- a/modules/meeting/config/locales/crowdin/eu.seeders.yml +++ b/modules/meeting/config/locales/crowdin/eu.seeders.yml @@ -19,11 +19,11 @@ eu: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/eu.yml b/modules/meeting/config/locales/crowdin/eu.yml index 150f28ff70b4..b37a2d78c78c 100644 --- a/modules/meeting/config/locales/crowdin/eu.yml +++ b/modules/meeting/config/locales/crowdin/eu.yml @@ -48,6 +48,8 @@ eu: duration_in_minutes: "min" description: "Notes" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "ez da baliozko ordua. Eskatzen den formatua: OO:MM" @@ -99,7 +101,7 @@ eu: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -122,6 +124,11 @@ eu: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "#%{id} Hitzordutik kopiatua" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Jakinarazpena ondo bidali da" notice_timezone_missing: Ez da ordu-eremurik zehaztu eta %{zone} hartu da ontzat. Ordu-eremua aukeratzeko klikatu hemen, mesedez. permission_create_meetings: "Sortu hitzordua" diff --git a/modules/meeting/config/locales/crowdin/fa.seeders.yml b/modules/meeting/config/locales/crowdin/fa.seeders.yml index 4ad4ff24cd2a..603d8ddcca3c 100644 --- a/modules/meeting/config/locales/crowdin/fa.seeders.yml +++ b/modules/meeting/config/locales/crowdin/fa.seeders.yml @@ -19,11 +19,11 @@ fa: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/fa.yml b/modules/meeting/config/locales/crowdin/fa.yml index 6d10ff1ffddb..904fcd7692ae 100644 --- a/modules/meeting/config/locales/crowdin/fa.yml +++ b/modules/meeting/config/locales/crowdin/fa.yml @@ -48,6 +48,8 @@ fa: duration_in_minutes: "min" description: "یادداشت ها" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "is not a valid time. Required format: HH:MM" @@ -99,7 +101,7 @@ fa: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -122,6 +124,11 @@ fa: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Notification sent successfully" notice_timezone_missing: No time zone is set and %{zone} is assumed. To choose your time zone, please click here. permission_create_meetings: "ایجاد جلسات" diff --git a/modules/meeting/config/locales/crowdin/fi.seeders.yml b/modules/meeting/config/locales/crowdin/fi.seeders.yml index e59b46c7153f..ad45d7e2262d 100644 --- a/modules/meeting/config/locales/crowdin/fi.seeders.yml +++ b/modules/meeting/config/locales/crowdin/fi.seeders.yml @@ -19,11 +19,11 @@ fi: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/fi.yml b/modules/meeting/config/locales/crowdin/fi.yml index c7841291cee1..824445ed08f5 100644 --- a/modules/meeting/config/locales/crowdin/fi.yml +++ b/modules/meeting/config/locales/crowdin/fi.yml @@ -48,6 +48,8 @@ fi: duration_in_minutes: "min" description: "Kommentit" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "ei ole kelvollinen aika. Vaadittava muoto: TT:MM" @@ -99,7 +101,7 @@ fi: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -122,6 +124,11 @@ fi: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Kopioitu kokouksesta #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Ilmoituksen lähettäminen onnistui" notice_timezone_missing: Aikavyöhykettä ei ole määritetty, joten oletuksena on %{zone}. Valitaksesi aikavyöhykkeen, klikkaa tästä. permission_create_meetings: "Luo kokouksia" diff --git a/modules/meeting/config/locales/crowdin/fil.seeders.yml b/modules/meeting/config/locales/crowdin/fil.seeders.yml index 7ec73d9c136b..2fb019d1e7b3 100644 --- a/modules/meeting/config/locales/crowdin/fil.seeders.yml +++ b/modules/meeting/config/locales/crowdin/fil.seeders.yml @@ -19,11 +19,11 @@ fil: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/fil.yml b/modules/meeting/config/locales/crowdin/fil.yml index 625d9fc544f3..4ba078f22568 100644 --- a/modules/meeting/config/locales/crowdin/fil.yml +++ b/modules/meeting/config/locales/crowdin/fil.yml @@ -48,6 +48,8 @@ fil: duration_in_minutes: "min" description: "Ang mga tala" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "ay hindi balidong oras. Ang hinihinging format ay: HH:MM" @@ -99,7 +101,7 @@ fil: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -122,6 +124,11 @@ fil: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Ang abiso ay naipadala ng matagumpay" notice_timezone_missing: Walang nakatakdang time zone at ang %{zone} ay ipinagpalagay na siyang time zone. Para piliin ang iyong time zone, mangyaring magclick dito. permission_create_meetings: "Lumikha ng mga pulong" diff --git a/modules/meeting/config/locales/crowdin/fr.seeders.yml b/modules/meeting/config/locales/crowdin/fr.seeders.yml index c481ea3b5d20..fa53d7541911 100644 --- a/modules/meeting/config/locales/crowdin/fr.seeders.yml +++ b/modules/meeting/config/locales/crowdin/fr.seeders.yml @@ -19,11 +19,11 @@ fr: title: Des nouvelles de l'équipe produit item_3: title: Des nouvelles de l'équipe marketing - item_4: - title: Des nouvelles de l'équipe commerciale item_5: - title: Révision des objectifs trimestriels + title: Updates from sales team item_6: - title: Feedback sur les valeurs fondamentales + title: Review of quarterly goals item_7: - title: Sujets généraux + title: Core values feedback + item_8: + title: General topics diff --git a/modules/meeting/config/locales/crowdin/fr.yml b/modules/meeting/config/locales/crowdin/fr.yml index 4580b2096301..69c0a446780c 100644 --- a/modules/meeting/config/locales/crowdin/fr.yml +++ b/modules/meeting/config/locales/crowdin/fr.yml @@ -48,6 +48,8 @@ fr: duration_in_minutes: "min" description: "Notes" presenter: "Responsable" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "n’est pas une heure valide. Format requis : HH:MM" @@ -99,7 +101,7 @@ fr: attachments: text: "Les fichiers joints sont accessibles à tous les participants à la réunion. Vous pouvez également les glisser-déposer dans les notes relatives aux points de l'ordre du jour." copy: - title: "Copier la réunion %{title}" + title: "Copy meeting: %{title}" attachments: "Copier les fichiers" attachments_text: "Copiez tous les fichiers joints dans la nouvelle réunion." agenda: "Copier l'ordre du jour" @@ -122,6 +124,11 @@ fr: structured_text: "Organisez votre réunion sous la forme d'une liste de points à l'ordre du jour, en les reliant éventuellement à des lots de travaux." structured_text_copy: "Actuellement, la copie d'une réunion n'entraîne pas la copie des points de l'ordre du jour de la réunion, mais uniquement des détails." copied: "Copié depuis la réunion #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Notification envoyée avec succès" notice_timezone_missing: Aucun fuseau horaire n'est défini et %{zone} est supposé. Pour choisir votre fuseau horaire, veuillez cliquer ici. permission_create_meetings: "Créer des réunions" diff --git a/modules/meeting/config/locales/crowdin/he.seeders.yml b/modules/meeting/config/locales/crowdin/he.seeders.yml index 70a4984bf1e4..861515aa12a9 100644 --- a/modules/meeting/config/locales/crowdin/he.seeders.yml +++ b/modules/meeting/config/locales/crowdin/he.seeders.yml @@ -19,11 +19,11 @@ he: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/he.yml b/modules/meeting/config/locales/crowdin/he.yml index 6c022a90b924..c181f0a4e120 100644 --- a/modules/meeting/config/locales/crowdin/he.yml +++ b/modules/meeting/config/locales/crowdin/he.yml @@ -50,6 +50,8 @@ he: duration_in_minutes: "min" description: "הערות" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "תבנית הזמן אינה תקינה. התבנית הנדרשת היא: HH:MM" @@ -101,7 +103,7 @@ he: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -124,6 +126,11 @@ he: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "הודעה נשלחה בהצלחה" notice_timezone_missing: אין איזור זמן מוגדר, ההערכה היא %{zone}. כדי לבחור את איזור הזמן שלך, אנא לחץ כאן. permission_create_meetings: "צור פגישות" diff --git a/modules/meeting/config/locales/crowdin/hi.seeders.yml b/modules/meeting/config/locales/crowdin/hi.seeders.yml index b2e2b7c1ea9c..147b674a9141 100644 --- a/modules/meeting/config/locales/crowdin/hi.seeders.yml +++ b/modules/meeting/config/locales/crowdin/hi.seeders.yml @@ -19,11 +19,11 @@ hi: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/hi.yml b/modules/meeting/config/locales/crowdin/hi.yml index 7f6a72e2a35c..ce0b3828332a 100644 --- a/modules/meeting/config/locales/crowdin/hi.yml +++ b/modules/meeting/config/locales/crowdin/hi.yml @@ -48,6 +48,8 @@ hi: duration_in_minutes: "min" description: "टिप्पणियाँ" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "is not a valid time. Required format: HH:MM" @@ -99,7 +101,7 @@ hi: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -122,6 +124,11 @@ hi: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Notification sent successfully" notice_timezone_missing: No time zone is set and %{zone} is assumed. To choose your time zone, please click here. permission_create_meetings: "Create meetings" diff --git a/modules/meeting/config/locales/crowdin/hr.seeders.yml b/modules/meeting/config/locales/crowdin/hr.seeders.yml index 87fa8064ba85..e7b4fd7bda34 100644 --- a/modules/meeting/config/locales/crowdin/hr.seeders.yml +++ b/modules/meeting/config/locales/crowdin/hr.seeders.yml @@ -19,11 +19,11 @@ hr: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/hr.yml b/modules/meeting/config/locales/crowdin/hr.yml index 06c1e1d7bc73..69c080624d44 100644 --- a/modules/meeting/config/locales/crowdin/hr.yml +++ b/modules/meeting/config/locales/crowdin/hr.yml @@ -49,6 +49,8 @@ hr: duration_in_minutes: "min" description: "Bilješke" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "is not a valid time. Required format: HH:MM" @@ -100,7 +102,7 @@ hr: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -123,6 +125,11 @@ hr: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Notifikacija uspješno poslana" notice_timezone_missing: Vremenska zona nije postavljena na osnovu zamišljene %{zone} zone. Da bi ste odabrali vremensku zonu molim vas kliknite ovdje. permission_create_meetings: "Dodaj sastanke" diff --git a/modules/meeting/config/locales/crowdin/hu.seeders.yml b/modules/meeting/config/locales/crowdin/hu.seeders.yml index ce8bc6ce6faa..266bde26cec5 100644 --- a/modules/meeting/config/locales/crowdin/hu.seeders.yml +++ b/modules/meeting/config/locales/crowdin/hu.seeders.yml @@ -19,11 +19,11 @@ hu: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/hu.yml b/modules/meeting/config/locales/crowdin/hu.yml index ca94c514c85a..7120e3558483 100644 --- a/modules/meeting/config/locales/crowdin/hu.yml +++ b/modules/meeting/config/locales/crowdin/hu.yml @@ -48,6 +48,8 @@ hu: duration_in_minutes: "min" description: "Jegyzet" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "nem egy érvényes időpont. Előírt formátum: óó:pp" @@ -99,7 +101,7 @@ hu: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "%{title} megbeszélés másolása" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Napirend másolása" @@ -122,6 +124,11 @@ hu: structured_text: "Szervezd meg a találkozódat napirendi pontokkal, melyeket opcionálisan munkacsomagokhoz rendelhetsz." structured_text_copy: "A megbeszélés másolásával jelnleg nem fogja átmásolni a hozzákapcsolt napirendi pontokat, csak a megbeszélés részleteit." copied: "#%{id} megbeszélésből másolva" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Értesítés sikeresen kiküldve" notice_timezone_missing: Nincs időzóna beállítva, %{zone} a feltételezett. Időzóna beállításához kattintson ide. permission_create_meetings: "Megbeszélések létrehozása" diff --git a/modules/meeting/config/locales/crowdin/id.seeders.yml b/modules/meeting/config/locales/crowdin/id.seeders.yml index 9cad8f10767b..f480d70069cc 100644 --- a/modules/meeting/config/locales/crowdin/id.seeders.yml +++ b/modules/meeting/config/locales/crowdin/id.seeders.yml @@ -19,11 +19,11 @@ id: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/id.yml b/modules/meeting/config/locales/crowdin/id.yml index 4a802d8f4ba2..5e351fd96e60 100644 --- a/modules/meeting/config/locales/crowdin/id.yml +++ b/modules/meeting/config/locales/crowdin/id.yml @@ -47,6 +47,8 @@ id: duration_in_minutes: "min" description: "Note" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "bukanlah waktu yang valid. Format seharusnya; JJ:MM" @@ -98,7 +100,7 @@ id: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -121,6 +123,11 @@ id: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Disalin dari Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Berhasil mengirim notifikasi" notice_timezone_missing: Tidak ada zona waktu yang ditetapkan sehingga diasumsikan %{zone}. Untuk memilih zona waktu, silakan mengeklik di sini. permission_create_meetings: "Membuat rapat" diff --git a/modules/meeting/config/locales/crowdin/it.seeders.yml b/modules/meeting/config/locales/crowdin/it.seeders.yml index 2a92ab9004f1..b31ebbaed45e 100644 --- a/modules/meeting/config/locales/crowdin/it.seeders.yml +++ b/modules/meeting/config/locales/crowdin/it.seeders.yml @@ -19,11 +19,11 @@ it: title: Aggiornamenti dal team di prodotto item_3: title: Aggiornamenti dal team di marketing - item_4: - title: Aggiornamenti dal team di vendita item_5: - title: Riesame degli obiettivi trimestrali + title: Aggiornamenti dal team di vendita item_6: - title: Feedback dei valori fondamentali + title: Riesame degli obiettivi trimestrali item_7: + title: Feedback dei valori fondamentali + item_8: title: Argomenti generali diff --git a/modules/meeting/config/locales/crowdin/it.yml b/modules/meeting/config/locales/crowdin/it.yml index c0b965c4cb77..681d4d272aaa 100644 --- a/modules/meeting/config/locales/crowdin/it.yml +++ b/modules/meeting/config/locales/crowdin/it.yml @@ -48,6 +48,8 @@ it: duration_in_minutes: "min" description: "Note" presenter: "Presentatore" + meeting_section: + title: "Titolo" errors: messages: invalid_time_format: "non è un tempo valido. Formato richiesto: HH: mm" @@ -99,7 +101,7 @@ it: attachments: text: "I file allegati sono disponibili per tutti i partecipanti alla riunione. Puoi anche trascinarli nelle note dei punti all'ordine del giorno." copy: - title: "Copia riunione %{title}" + title: "Copia riunione: %{title}" attachments: "Copia allegati" attachments_text: "Copia tutti i file allegati nella nuova riunione" agenda: "Copia ordine del giorno" @@ -122,6 +124,11 @@ it: structured_text: "Organizza la tua riunione come un elenco di punti all'ordine del giorno, collegandoli facoltativamente a un pacchetto di lavoro." structured_text_copy: "La copia di una riunione al momento non copierà gli elementi dell'ordine del giorno della riunione, ma solo i dettagli" copied: "Copiato dalla riunione #%{id}" + meeting_section: + untitled_title: "Sezione senza titolo" + delete_confirmation: "L'eliminazione della sezione eliminerà anche tutti i suoi elementi dell'ordine del giorno. Continuare?" + placeholder_title: "Nuova sezione" + empty_text: "Trascina gli elementi qui o creane una nuova" notice_successful_notification: "Notifica inviata con successo" notice_timezone_missing: Nessun fuso orario è impostato e la %{zone} è un requisito necessario. Per scegliere il tuo fuso orario, fare clic qui. permission_create_meetings: "Creare riunioni" diff --git a/modules/meeting/config/locales/crowdin/ja.seeders.yml b/modules/meeting/config/locales/crowdin/ja.seeders.yml index 9687444286f4..4736f45be604 100644 --- a/modules/meeting/config/locales/crowdin/ja.seeders.yml +++ b/modules/meeting/config/locales/crowdin/ja.seeders.yml @@ -19,11 +19,11 @@ ja: title: 製品チームからの最新情報 item_3: title: 製品チームからの最新情報 - item_4: - title: 製品チームからの最新情報 item_5: - title: 四半期目標の見直し + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: - title: 一般的なトピック + title: Core values feedback + item_8: + title: General topics diff --git a/modules/meeting/config/locales/crowdin/ja.yml b/modules/meeting/config/locales/crowdin/ja.yml index 3d751beb420c..fabf97fcc041 100644 --- a/modules/meeting/config/locales/crowdin/ja.yml +++ b/modules/meeting/config/locales/crowdin/ja.yml @@ -47,6 +47,8 @@ ja: duration_in_minutes: "min" description: "注記" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "有効な時間ではありません。必要なフォーマット: HH:MM" @@ -98,7 +100,7 @@ ja: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -121,6 +123,11 @@ ja: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "ミーティング#%{id}からコピーしました" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "通知が正常に送信されました" notice_timezone_missing: タイムゾーンが設定されていない場合、%{zone} が使用されます。タイムゾーンを選択するには、ここをクリックしてください。 permission_create_meetings: "会議を作成" diff --git a/modules/meeting/config/locales/crowdin/ka.seeders.yml b/modules/meeting/config/locales/crowdin/ka.seeders.yml index 4ca586dd7466..c617bccc000b 100644 --- a/modules/meeting/config/locales/crowdin/ka.seeders.yml +++ b/modules/meeting/config/locales/crowdin/ka.seeders.yml @@ -19,11 +19,11 @@ ka: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/ka.yml b/modules/meeting/config/locales/crowdin/ka.yml index b9ce87d95478..eb297528fcf0 100644 --- a/modules/meeting/config/locales/crowdin/ka.yml +++ b/modules/meeting/config/locales/crowdin/ka.yml @@ -48,6 +48,8 @@ ka: duration_in_minutes: "min" description: "შენიშვნები" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "is not a valid time. Required format: HH:MM" @@ -99,7 +101,7 @@ ka: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -122,6 +124,11 @@ ka: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Notification sent successfully" notice_timezone_missing: No time zone is set and %{zone} is assumed. To choose your time zone, please click here. permission_create_meetings: "Create meetings" diff --git a/modules/meeting/config/locales/crowdin/kk.seeders.yml b/modules/meeting/config/locales/crowdin/kk.seeders.yml index 1a0c302a4fa4..43013d8626da 100644 --- a/modules/meeting/config/locales/crowdin/kk.seeders.yml +++ b/modules/meeting/config/locales/crowdin/kk.seeders.yml @@ -19,11 +19,11 @@ kk: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/kk.yml b/modules/meeting/config/locales/crowdin/kk.yml index 94f9fa7fc9eb..68c5759d7bb8 100644 --- a/modules/meeting/config/locales/crowdin/kk.yml +++ b/modules/meeting/config/locales/crowdin/kk.yml @@ -48,6 +48,8 @@ kk: duration_in_minutes: "min" description: "Notes" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "is not a valid time. Required format: HH:MM" @@ -99,7 +101,7 @@ kk: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -122,6 +124,11 @@ kk: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Notification sent successfully" notice_timezone_missing: No time zone is set and %{zone} is assumed. To choose your time zone, please click here. permission_create_meetings: "Create meetings" diff --git a/modules/meeting/config/locales/crowdin/ko.seeders.yml b/modules/meeting/config/locales/crowdin/ko.seeders.yml index 6e27bf855ee4..a94cc2ecba27 100644 --- a/modules/meeting/config/locales/crowdin/ko.seeders.yml +++ b/modules/meeting/config/locales/crowdin/ko.seeders.yml @@ -19,11 +19,11 @@ ko: title: 제품 팀의 업데이트 item_3: title: 마케팅 팀의 업데이트 - item_4: - title: 세일즈 팀의 업데이트 item_5: - title: 분기별 목표 검토 + title: 세일즈 팀의 업데이트 item_6: - title: 핵심 가치 피드백 + title: 분기별 목표 검토 item_7: + title: 핵심 가치 피드백 + item_8: title: 일반 주제 diff --git a/modules/meeting/config/locales/crowdin/ko.yml b/modules/meeting/config/locales/crowdin/ko.yml index 4c280c70641e..062ef78d9c50 100644 --- a/modules/meeting/config/locales/crowdin/ko.yml +++ b/modules/meeting/config/locales/crowdin/ko.yml @@ -47,6 +47,8 @@ ko: duration_in_minutes: "분" description: "메모" presenter: "발표자" + meeting_section: + title: "제목" errors: messages: invalid_time_format: "은(는) 유효한 시간이 아닙니다. 필요한 형식: HH:MM" @@ -98,7 +100,7 @@ ko: attachments: text: "첨부된 파일은 모든 미팅 참가자가 사용할 수 있습니다. 이러한 파일을 의제 항목 메모에 끌어다 놓을 수도 있습니다." copy: - title: "미팅 %{title} 복사" + title: "미팅 복사: %{title}" attachments: "첨부 파일 복사" attachments_text: "첨부된 모든 파일을 새 미팅에 복사" agenda: "의제 복사" @@ -121,6 +123,11 @@ ko: structured_text: "미팅을 의제 항목 목록으로 구성하고, 선택적으로 작업 패키지에 연결합니다." structured_text_copy: "미팅을 복사하면 관련 미팅 의제 항목은 현재 복사되지 않고 세부 정보만 복사됩니다" copied: "미팅 #%{id}에서 복사됨" + meeting_section: + untitled_title: "제목 없는 섹션" + delete_confirmation: "이 섹션을 삭제하면 모든 의제 항목도 삭제됩니다. 계속하시겠습니까?" + placeholder_title: "새 섹션" + empty_text: "항목을 여기에 끌어오거나 새로 만들기" notice_successful_notification: "알림이 전송됨" notice_timezone_missing: 표준 시간대가 설정되지 않았으며 %{zone}(으)로 간주됩니다. 해당 표준 시간대를 선택하려면 여기를 클릭하세요. permission_create_meetings: "미팅 생성" diff --git a/modules/meeting/config/locales/crowdin/lt.seeders.yml b/modules/meeting/config/locales/crowdin/lt.seeders.yml index 4fada5b0da4e..fedd769553d9 100644 --- a/modules/meeting/config/locales/crowdin/lt.seeders.yml +++ b/modules/meeting/config/locales/crowdin/lt.seeders.yml @@ -19,11 +19,11 @@ lt: title: Produkto komandos naujienos item_3: title: Marketingo komandos naujienos - item_4: - title: Pardavimų komandos naujienos item_5: - title: Ketvirčio tikslų apžvalga + title: Pardavimų komandos naujienos item_6: - title: Pagrindinių vertybių atsiliepimai + title: Ketvirčio tikslų apžvalga item_7: + title: Pagrindinių vertybių atsiliepimai + item_8: title: Bendros temos diff --git a/modules/meeting/config/locales/crowdin/lt.yml b/modules/meeting/config/locales/crowdin/lt.yml index b6f931745741..1063dd3f0925 100644 --- a/modules/meeting/config/locales/crowdin/lt.yml +++ b/modules/meeting/config/locales/crowdin/lt.yml @@ -50,6 +50,8 @@ lt: duration_in_minutes: "min" description: "Pastabos" presenter: "Pateikėjas" + meeting_section: + title: "Pavadinimas" errors: messages: invalid_time_format: "netinkamas laikas. Reikalingas formatas: HH:MM (pvz.: 10:30)" @@ -101,7 +103,7 @@ lt: attachments: text: "Prisegti failai prieinami visiems susitikimo dalyviams. Taipogi galite nutempti juos į plano elemento pastabas." copy: - title: "Kopijuoti susitikimą %{title}" + title: "Kopijuoti susitikimą: %{title}" attachments: "Kopijuoti priedus" attachments_text: "Perkopijuoti visus prisegtus failus į naują susitikimą" agenda: "Kopijuoti dienotvarkę" @@ -124,6 +126,11 @@ lt: structured_text: "Organizuokite jūsų susitikimą su darbotvarkės elementų sąrašu, pasirinktinai susiejant juos su darbo paketu." structured_text_copy: "Šiuo metu nukopijavus susitikimą, susiję susitikimo elmentai nebus kopijuojami, tik detalės." copied: "Nukopijuota iš susitikimo #%{id}" + meeting_section: + untitled_title: "Bevardė skiltis" + delete_confirmation: "Ištrynus skiltį taipogi bus ištrinti ir visi jos plano elementai. Ar tikrai norite tai padaryti?" + placeholder_title: "Nauja skiltis" + empty_text: "Tempkite elementus čia arba sukurtkite naują" notice_successful_notification: "Pranešimas sėkmingai išsiųstas" notice_timezone_missing: Laiko zona nenustatyta ir %{zone} zona yra rekomenduojama. Kad pasirinktumėte laiko zoną, paspauskite čia. permission_create_meetings: "Sukurti pasitarimus" diff --git a/modules/meeting/config/locales/crowdin/lv.seeders.yml b/modules/meeting/config/locales/crowdin/lv.seeders.yml index ffb5fa89601f..1fdde03d764a 100644 --- a/modules/meeting/config/locales/crowdin/lv.seeders.yml +++ b/modules/meeting/config/locales/crowdin/lv.seeders.yml @@ -19,11 +19,11 @@ lv: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/lv.yml b/modules/meeting/config/locales/crowdin/lv.yml index 118ccdd988ac..a0c7ad08f935 100644 --- a/modules/meeting/config/locales/crowdin/lv.yml +++ b/modules/meeting/config/locales/crowdin/lv.yml @@ -49,6 +49,8 @@ lv: duration_in_minutes: "min" description: "Piezīmes" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "nav derīgs laiks. Vajadzīgais formāts: HH:MM" @@ -100,7 +102,7 @@ lv: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -123,6 +125,11 @@ lv: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Notification sent successfully" notice_timezone_missing: No time zone is set and %{zone} is assumed. To choose your time zone, please click here. permission_create_meetings: "Create meetings" diff --git a/modules/meeting/config/locales/crowdin/mn.seeders.yml b/modules/meeting/config/locales/crowdin/mn.seeders.yml index 94128a23ed4c..519fe9a40dc1 100644 --- a/modules/meeting/config/locales/crowdin/mn.seeders.yml +++ b/modules/meeting/config/locales/crowdin/mn.seeders.yml @@ -19,11 +19,11 @@ mn: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/mn.yml b/modules/meeting/config/locales/crowdin/mn.yml index fe93d38bc092..38b506dcaf6d 100644 --- a/modules/meeting/config/locales/crowdin/mn.yml +++ b/modules/meeting/config/locales/crowdin/mn.yml @@ -48,6 +48,8 @@ mn: duration_in_minutes: "min" description: "Notes" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "is not a valid time. Required format: HH:MM" @@ -99,7 +101,7 @@ mn: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -122,6 +124,11 @@ mn: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Notification sent successfully" notice_timezone_missing: No time zone is set and %{zone} is assumed. To choose your time zone, please click here. permission_create_meetings: "Create meetings" diff --git a/modules/meeting/config/locales/crowdin/ms.seeders.yml b/modules/meeting/config/locales/crowdin/ms.seeders.yml index ffdf184cb36f..028a74374084 100644 --- a/modules/meeting/config/locales/crowdin/ms.seeders.yml +++ b/modules/meeting/config/locales/crowdin/ms.seeders.yml @@ -19,11 +19,11 @@ ms: title: Kemas kini dari pasukan produk item_3: title: Kemas kini dari pasukan pemasaran - item_4: - title: Kemas kini dari pasukan jualan item_5: - title: Penilaian matlamat suku tahunan + title: Kemas kini dari pasukan jualan item_6: - title: Maklum balas nilai teras + title: Semakan semula matlamat suku tahunan item_7: + title: Maklum balas nilai teras + item_8: title: Topik umum diff --git a/modules/meeting/config/locales/crowdin/ms.yml b/modules/meeting/config/locales/crowdin/ms.yml index 8f8630ecee95..f3700332533f 100644 --- a/modules/meeting/config/locales/crowdin/ms.yml +++ b/modules/meeting/config/locales/crowdin/ms.yml @@ -24,7 +24,7 @@ ms: plugin_openproject_meeting: name: "Mesyuarat OpenProject" description: >- - Modul ini tambahkan fungsi-fungsi ke OpenProject untuk menyokong mesyuarat projek. Mesyuarat boleh dijadualkan untuk memilih jemputan dari projek yang sama untuk mengambil bahagian dalam mesyuarat ini. Agenda boleh dibuat dan dihantar ke para jemputan. Selepas mesyuarat, penghadir boleh dipilih dan minit mesyuarat boleh dibuat berdasarkan agenda tersebut. Akhirnya, minit mesyuarat boleh dihantar ke semua penghadir dan jemputan. + Modul ini menambah fungsi-fungsi ke OpenProject untuk menyokong mesyuarat projek. Mesyuarat boleh dijadualkan dengan memilih jemputan dari projek yang sama untuk mengambil bahagian dalam mesyuarat ini. Agenda boleh dicipta dan dihantar ke para jemputan. Selepas mesyuarat, hadirin boleh dipilih dan minit mesyuarat boleh dibuat berdasarkan agenda tersebut. Akhirnya, minit mesyuarat boleh dihantar ke semua hadirin dan jemputan. activerecord: attributes: meeting: @@ -32,11 +32,11 @@ ms: location: "Lokasi" duration: "Tempoh" notes: "Nota" - participants: "Peserta" + participants: "Peserta-peserta" participant: - other: "1 Peserta" + other: "%{count} Peserta" participants_attended: "Penghadir" - participants_invited: "Tetamu" + participants_invited: "Tetamu-tetamu" project: "Projek" start_date: "Tarikh" start_time: "Masa mula" @@ -47,6 +47,8 @@ ms: duration_in_minutes: "min" description: "Nota-nota" presenter: "Penyampai" + meeting_section: + title: "Tajuk" errors: messages: invalid_time_format: "bukan masa yang sah. Format yang diperlukan: JJ:MM" @@ -61,17 +63,17 @@ ms: description_attended: "dihadiri" description_invite: "dijemput" events: - meeting: Mesyuarat telah disunting - meeting_agenda: Agenda mesyuarat yang disunting + meeting: Mesyuarat telah diedit + meeting_agenda: Agenda mesyuarat yang diedit meeting_agenda_closed: Agenda mesyuarat ditutup meeting_agenda_opened: Agenda mesyuarat dibuka - meeting_minutes: Minit mesyuarat yang disunting + meeting_minutes: Minit mesyuarat diedit meeting_minutes_created: Minit mesyuarat dicipta error_notification_with_errors: "Gagal untuk hantar pemberitahuan. Penerima berikut tidak dapat dimaklumkan: %{recipients}" label_meeting: "Mesyuarat" label_meeting_plural: "Mesyuarat-mesyuarat" label_meeting_new: "Mesyuarat Baharu" - label_meeting_edit: "Menyunting mesyuarat" + label_meeting_edit: "Edit mesyuarat" label_meeting_agenda: "Agenda" label_meeting_minutes: "Minit" label_meeting_close: "Tutup" @@ -90,7 +92,7 @@ ms: label_author: "Pencipta" label_notify: "Hantar untuk semakan" label_icalendar: "Hantar iCalendar\n" - label_icalendar_download: "Muat turun acara dalam iCalendar" + label_icalendar_download: "Muat turun peristiwa dalam iCalendar" label_version: "Versi" label_time_zone: "Zon waktu" label_start_date: "Tarikh mula" @@ -98,21 +100,21 @@ ms: attachments: text: "Lampirkan fail yang tersedia kepada semua peserta mesyuarat. Anda juga boleh menarik dan melepaskannya ke dalam nota item agenda." copy: - title: "Salin mesyuarat %{title}" + title: "Salin mesyuarat: %{title}" attachments: "Salin lampiran" - attachments_text: "Salin semua fail yang dilampirkan ke dalam mesyuarat baru" + attachments_text: "Salin semua fail yang dilampirkan ke dalam mesyuarat baharu" agenda: "Salin agenda" agenda_text: "Salin agenda mesyuarat lama" email: open_meeting_link: "Buka mesyuarat" invited: - summary: "%{actor} telah menghantar anda jemputan untuk mesyuarat %{title}" + summary: "%{actor} telah menghantar anda jemputan ke mesyuarat %{title}" rescheduled: header: "Mesyuarat %{title} telah dijadualkan semula" summary: "Mesyuarat %{title} telah dijadual semula oleh %{actor}" body: "Mesyuarat %{title} telah dijadual semula oleh %{actor}" old_date_time: "Tarikh/masa lama" - new_date_time: "Tarikh/masa baru" + new_date_time: "Tarikh/masa baharu" label_mail_all_participants: "Hantar e-mel ke semua peserta" types: classic: "Klasik" @@ -120,38 +122,43 @@ ms: structured: "Dinamik" structured_text: "Aturkan mesyuarat anda sebagai senarai butiran agenda, pautkannya ke pakej kerja secara pilihan." structured_text_copy: "Menyalin mesyuarat pada masa ini tidak akan menyalin item agenda mesyuarat yang berkaitan, hanya butiran sahaja" - copied: "Disalin dari mesyuarat #%{id}" + copied: "Disalin dari Mesyuarat #%{id}" + meeting_section: + untitled_title: "Bahagian tanpa tajuk" + delete_confirmation: "Memadam bahagian ini akan memadam setiap item agenda juga. Adakah anda pasti anda ingin berbuat demikian?" + placeholder_title: "Bahagian baharu" + empty_text: "Tarik item ke sini atau cipta yang baharu" notice_successful_notification: "Pemberitahuan berjaya dihantar" notice_timezone_missing: Tiada zon waktu yang ditetapkan dan %{zone} adalah diandaikan. Untuk pilih zon waktu anda, sila klik sini. permission_create_meetings: "Cipta mesyuarat" - permission_edit_meetings: "Menyunting mesyuarat" + permission_edit_meetings: "Edit mesyuarat" permission_delete_meetings: "Padam mesyuarat" permission_view_meetings: "Lihat mesyuarat" permission_create_meeting_agendas: "Cipta agenda mesyuarat" permission_create_meeting_agendas_explanation: "Benarkan kandungan agenda Mesyuarat Klasik untuk diedit." permission_manage_agendas: "Urus agenda" - permission_manage_agendas_explanation: "Benarkan pengurusan item agenda Dinamik Mesyuarat." + permission_manage_agendas_explanation: "Benarkan pengurusan item agenda Mesyuarat Dinamik." permission_close_meeting_agendas: "Tutup agenda-agenda" permission_send_meeting_agendas_notification: "Hantar pemberitahuan semakan untuk agenda-agenda" permission_create_meeting_minutes: "Urus minit mesyuarat" permission_send_meeting_minutes_notification: "Hantar pemberitahuan semakan untuk minit mesyuarat" permission_meetings_send_invite: "Jemput pengguna ke mesyuarat" - permission_send_meeting_agendas_icalendar: "Hantar agenda mesyuarat sebagai kemasukan kalendar" + permission_send_meeting_agendas_icalendar: "Hantar agenda mesyuarat sebagai entri kalendar" project_module_meetings: "Mesyuarat-mesyuarat" - text_duration_in_hours: "Jangka masa dalam jam" + text_duration_in_hours: "Tempoh masa dalam jam" text_in_hours: "dalam jam" text_meeting_agenda_for_meeting: 'agenda untuk mesyuarat "%{meeting}"' text_meeting_closing_are_you_sure: "Adakah anda pasti anda ingin menutup agenda mesyuarat?" text_meeting_agenda_open_are_you_sure: "Ini akan menggantikan semua perubahan dalam minit mesyuarat! Adakah anda ingin teruskan?" text_meeting_minutes_for_meeting: 'minit untuk mesyuarat "%{meeting}"' - text_notificiation_invited: "Mel ini mengandungi kemasukan ics untuk mesyuarat dibawah:" + text_notificiation_invited: "Mel ini mengandungi entri ics untuk mesyuarat dibawah:" text_meeting_empty_heading: "Mesyuarat anda kosong" text_meeting_empty_description_1: "Mula dengan menambah item agenda dibawah. Setiap item boleh jadi seringkas tajuk, tapi anda juga boleh tambah butiran tambahan seperti tempoh masa dan nota." - text_meeting_empty_description_2: 'Anda juga boleh menambah rujukan ke pakej kerja yang sedia ada. Apabila anda lakukan, nota berkaitan akan boleh dilihat dalam tab "Mesyuarat" pakej kerja secara automatik.' + text_meeting_empty_description_2: 'Anda juga boleh menambah rujukan ke pakej kerja yang sedia ada. Apabila anda lakukannya, nota berkaitan boleh dilihat dalam tab "Mesyuarat" pakej kerja secara automatik.' label_meeting_empty_action: "Tambah item agenda" - label_meeting_actions: "Tindakan terhadap mesyuarat" - label_meeting_edit_title: "Sunting tajuk mesyuarat" - label_meeting_delete: "Padamkan mesyuarat" + label_meeting_actions: "Tindakan mesyuarat" + label_meeting_edit_title: "Edit tajuk mesyuarat" + label_meeting_delete: "Padam mesyuarat" label_meeting_created_by: "Dicipta oleh" label_meeting_last_updated: "Kemas kini terakhir" label_agenda_items: "Item-item agenda" @@ -171,7 +178,7 @@ ms: text_deleted_agenda_item: 'Item agenda yang telah dipadam' label_initial_meeting_details: "Mesyuarat" label_meeting_details: "Butiran mesyuarat" - label_meeting_details_edit: "Sunting butiran mesyuarat" + label_meeting_details_edit: "Edit butiran mesyuarat" label_meeting_state: "Status mesyuarat" label_meeting_state_open: "Buka" label_meeting_state_open_html: "Buka" @@ -179,21 +186,21 @@ ms: label_meeting_state_closed_html: "Ditutup" label_meeting_reopen_action: "Buka semula mesyuarat" label_meeting_close_action: "Tutup mesyuarat" - text_meeting_open_description: "Mesyuarat ini terbuka. Anda boleh tambah/keluarkan item agenda dan menyuntingnya. Setelah mesyuarat berakhir, tutup mesyuarat untuk menguncinya." + text_meeting_open_description: "Mesyuarat ini dibuka. Anda boleh tambah/keluarkan item agenda dan mengeditnya. Setelah mesyuarat berakhir, tutup untuk menguncinya." text_meeting_closed_description: "Mesyuarat ini ditutup. Anda tidak boleh tambah/keluarkan item agenda lagi." label_meeting_manage_participants: "Urus peserta" label_meeting_no_participants: "Tiada peserta" - label_meeting_show_hide_participants: "Tunjukkan/sorokkan %{count} lagi" - label_meeting_show_all_participants: "Tunjukkan semua" + label_meeting_show_hide_participants: "Paparkan/sorokkan %{count} lagi" + label_meeting_show_all_participants: "Paparkan semua" label_meeting_add_participants: "Tambah peserta" - text_meeting_not_editable_anymore: "Mesyuarat ini tidak boleh disunting lagi." + text_meeting_not_editable_anymore: "Mesyuarat ini tidak boleh diedit lagi." text_meeting_not_present_anymore: "Mesyuarat ini telah dipadamkan. Sila pilih mesyuarat lain." label_add_work_package_to_meeting_dialog_title: "Tambah pakej kerja ke mesyuarat" label_add_work_package_to_meeting_dialog_button: "Tambah ke mesyuarat" - label_meeting_selection_caption: "Ia hanya boleh tambahkan pakej kerja ini ke mesyuarat terbuka akan datang atau yang sedang berlangsung." - text_add_work_package_to_meeting_description: "Pakej kerja boleh ditambah kepada satu atau beberapa mesyuarat untuk perbincangan. Sebarang nota berkaitan juga boleh dilihat di sini." + label_meeting_selection_caption: "Hanya boleh tambahkan pakej kerja ini ke mesyuarat terbuka akan datang atau yang sedang berlangsung." + text_add_work_package_to_meeting_description: "Pakej kerja boleh ditambah ke satu atau beberapa mesyuarat untuk perbincangan. Sebarang nota berkaitan juga boleh dilihat di sini." text_agenda_item_no_notes: "Tiada nota disediakan" - text_agenda_item_not_editable_anymore: "Item agenda tidak boleh disunting lagi." + text_agenda_item_not_editable_anymore: "Item agenda tidak boleh diedit lagi." text_work_package_has_no_upcoming_meeting_agenda_items: "Pakej kerja ini belum lagi dijadualkan dalam agenda mesyuarat akan datang." text_work_package_add_to_meeting_hint: 'Guna butang "Tambah ke mesyuarat" untuk tambah pakej kerja ini ke mesyuarat akan datang.' text_work_package_has_no_past_meeting_agenda_items: "Pakej kerja ini tidak diutarakan dalam mesyuarat yang lalu." diff --git a/modules/meeting/config/locales/crowdin/ne.seeders.yml b/modules/meeting/config/locales/crowdin/ne.seeders.yml index fd3cffc73156..0471e47f764a 100644 --- a/modules/meeting/config/locales/crowdin/ne.seeders.yml +++ b/modules/meeting/config/locales/crowdin/ne.seeders.yml @@ -19,11 +19,11 @@ ne: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/ne.yml b/modules/meeting/config/locales/crowdin/ne.yml index 89f2f92f93cb..cf3aacea16f1 100644 --- a/modules/meeting/config/locales/crowdin/ne.yml +++ b/modules/meeting/config/locales/crowdin/ne.yml @@ -48,6 +48,8 @@ ne: duration_in_minutes: "min" description: "द्रष्टव्यहरु" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "is not a valid time. Required format: HH:MM" @@ -99,7 +101,7 @@ ne: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -122,6 +124,11 @@ ne: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Notification sent successfully" notice_timezone_missing: No time zone is set and %{zone} is assumed. To choose your time zone, please click here. permission_create_meetings: "Create meetings" diff --git a/modules/meeting/config/locales/crowdin/nl.seeders.yml b/modules/meeting/config/locales/crowdin/nl.seeders.yml index e877051598b6..b8e3a156cd84 100644 --- a/modules/meeting/config/locales/crowdin/nl.seeders.yml +++ b/modules/meeting/config/locales/crowdin/nl.seeders.yml @@ -19,11 +19,11 @@ nl: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/nl.yml b/modules/meeting/config/locales/crowdin/nl.yml index f77a4036ffd3..a06bd5c80fb6 100644 --- a/modules/meeting/config/locales/crowdin/nl.yml +++ b/modules/meeting/config/locales/crowdin/nl.yml @@ -48,6 +48,8 @@ nl: duration_in_minutes: "min" description: "Notities" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "is geen geldige tijd. Vereist formaat: UH:MM" @@ -99,7 +101,7 @@ nl: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -122,6 +124,11 @@ nl: structured_text: "Organiseren van uw vergadering als een lijst met agendapunten, eventueel koppelen aan een werkpakket." structured_text_copy: "Een vergadering kopiëren zal momenteel niet de bijbehorende agendapunten kopiëren, alleen de details" copied: "Gekopieerd van vergadering #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Notificatie succesvol verzonden" notice_timezone_missing: Geen tijdzone is ingesteld en %{zone} is aangenomen. Om uw tijdzone te kiezen, klik dan hier. permission_create_meetings: "Creëer vergaderingen" diff --git a/modules/meeting/config/locales/crowdin/no.seeders.yml b/modules/meeting/config/locales/crowdin/no.seeders.yml index 1d2de7462cb6..5634f75b71ce 100644 --- a/modules/meeting/config/locales/crowdin/no.seeders.yml +++ b/modules/meeting/config/locales/crowdin/no.seeders.yml @@ -19,11 +19,11 @@ title: Oppdateringer fra produkt-teamet item_3: title: Oppdateringer fra markedsføringsteam - item_4: - title: Oppdateringer fra salgsteam item_5: - title: Gjennomgang av kvartalsvise mål + title: Updates from sales team item_6: - title: Tilbakemelding på kjerneverdier + title: Review of quarterly goals item_7: - title: Generelle emner + title: Core values feedback + item_8: + title: General topics diff --git a/modules/meeting/config/locales/crowdin/no.yml b/modules/meeting/config/locales/crowdin/no.yml index 52d50ca0ea1c..cf51f66b0520 100644 --- a/modules/meeting/config/locales/crowdin/no.yml +++ b/modules/meeting/config/locales/crowdin/no.yml @@ -48,6 +48,8 @@ duration_in_minutes: "min" description: "Notater" presenter: "Foredragsholder" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "er ikke et gyldig tidpunkt. Formatet må være HH:MM" @@ -122,6 +124,11 @@ structured_text: "Organiser møtet som en liste over saker, eventuelt knytte dem til en arbeidspakke." structured_text_copy: "Kopiering av et møte vil for tiden ikke kopiere de tilknyttede elementene på dagsordenen, bare detaljene" copied: "Kopiert fra møte #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Påminning sendt" notice_timezone_missing: Ingen tidssone angis og %{zone} antas. Vennligst klikk her for å velge egen tidssone. permission_create_meetings: "Opprett møter" diff --git a/modules/meeting/config/locales/crowdin/pl.seeders.yml b/modules/meeting/config/locales/crowdin/pl.seeders.yml index 006ca480211b..c8f26174c30a 100644 --- a/modules/meeting/config/locales/crowdin/pl.seeders.yml +++ b/modules/meeting/config/locales/crowdin/pl.seeders.yml @@ -19,11 +19,11 @@ pl: title: Aktualizacje od zespołu produktowego item_3: title: Aktualizacje od zespołu marketingowego - item_4: - title: Aktualizacje od zespołu sprzedaży item_5: - title: Przegląd celów kwartalnych + title: Aktualizacje od zespołu sprzedaży item_6: - title: Informacje zwrotne o podstawowych wartościach + title: Przegląd celów kwartalnych item_7: + title: Informacje zwrotne o podstawowych wartościach + item_8: title: Tematy ogólne diff --git a/modules/meeting/config/locales/crowdin/pl.yml b/modules/meeting/config/locales/crowdin/pl.yml index d69f57d220da..dfe2cccaad05 100644 --- a/modules/meeting/config/locales/crowdin/pl.yml +++ b/modules/meeting/config/locales/crowdin/pl.yml @@ -50,6 +50,8 @@ pl: duration_in_minutes: "min" description: "Notatki" presenter: "Prezenter" + meeting_section: + title: "Tytuł" errors: messages: invalid_time_format: "nie jest prawidłowy. Wymagany format to: GG:MM" @@ -101,7 +103,7 @@ pl: attachments: text: "Załączone pliki są dostępne dla wszystkich uczestników spotkania. Można je również przeciągać i upuszczać w notatkach do punktów planu spotkania." copy: - title: "Kopiuj spotkanie %{title}" + title: "Kopiuj spotkanie: %{title}" attachments: "Skopiuj załączniki" attachments_text: "Skopiuj wszystkie załączone pliki do nowego spotkania" agenda: "Kopiuj agendę spotkania" @@ -124,6 +126,11 @@ pl: structured_text: "Zorganizuj spotkanie jako listę punktów planu spotkania, opcjonalnie powiązując je z pakietem roboczym." structured_text_copy: "Skopiowanie spotkania nie powoduje obecnie skopiowania powiązanych pozycji planu spotkania, a jedynie szczegółów" copied: "Skopiowano ze spotkania #%{id}" + meeting_section: + untitled_title: "Sekcja bez nazwy" + delete_confirmation: "Usunięcie sekcji spowoduje również usunięcie wszystkich jej elementów punktów planu spotkania. Czy na pewno chcesz to zrobić?" + placeholder_title: "Nowa sekcja" + empty_text: "Przeciągnij elementy tutaj lub utwórz nowe" notice_successful_notification: "Powiadomienia wysłane pomyślnie" notice_timezone_missing: 'Została ustawiona domyślna strefa czasowa: %{zone}. Aby zmienić strefę czasową, kliknij tutaj.' permission_create_meetings: "Utwórz spotkanie" diff --git a/modules/meeting/config/locales/crowdin/pt-BR.seeders.yml b/modules/meeting/config/locales/crowdin/pt-BR.seeders.yml index 2d1eb4c6d26e..aa253d771ff3 100644 --- a/modules/meeting/config/locales/crowdin/pt-BR.seeders.yml +++ b/modules/meeting/config/locales/crowdin/pt-BR.seeders.yml @@ -19,11 +19,11 @@ pt-BR: title: Atualizações da equipe do produto item_3: title: Atualizações da equipe de marketing - item_4: - title: Atualizações da equipe de vendas item_5: - title: Análise dos objetivos trimestrais + title: Atualizações da equipe de vendas item_6: - title: Feedback sobre os valores fundamentais + title: Análise dos objetivos trimestrais item_7: + title: Feedback sobre os valores fundamentais + item_8: title: Tópicos gerais diff --git a/modules/meeting/config/locales/crowdin/pt-BR.yml b/modules/meeting/config/locales/crowdin/pt-BR.yml index b0284a451693..90eb0105c140 100644 --- a/modules/meeting/config/locales/crowdin/pt-BR.yml +++ b/modules/meeting/config/locales/crowdin/pt-BR.yml @@ -48,6 +48,8 @@ pt-BR: duration_in_minutes: "min" description: "Anotações" presenter: "Apresentador" + meeting_section: + title: "Título" errors: messages: invalid_time_format: "não é um horário válido. Formato exigido: HH:MM" @@ -99,7 +101,7 @@ pt-BR: attachments: text: "Os arquivos anexados podem ser acessados por todos os participantes da reunião. Além disso, você pode simplesmente arrastá-los e soltá-los nas anotações do item da agenda." copy: - title: "Copiar reunião %{title}" + title: "Copiar reunião: %{title}" attachments: "Copiar anexos" attachments_text: "Copie todos os arquivos anexados para a nova reunião" agenda: "Copiar agenda" @@ -122,6 +124,11 @@ pt-BR: structured_text: "Organize sua reunião como uma lista de itens da agenda, opcionalmente vinculando-os a um pacote de trabalho." structured_text_copy: "Copiar uma reunião atualmente não copiará os itens associados da agenda da reunião, apenas os detalhes" copied: "Copiado para a Reunião #%{id}" + meeting_section: + untitled_title: "Seção sem título" + delete_confirmation: "Excluir a seção também excluirá todos os itens da pauta. Tem certeza de que deseja fazer isso?" + placeholder_title: "Nova seção" + empty_text: "Arraste itens para cá ou crie um novo." notice_successful_notification: "Notificação enviada com sucesso" notice_timezone_missing: Nenhum fuso horário está definido, portanto assumiu-se %{zone}. Para escolher o seu fuso horário, clique aqui. permission_create_meetings: "Criar reuniões" diff --git a/modules/meeting/config/locales/crowdin/pt-PT.seeders.yml b/modules/meeting/config/locales/crowdin/pt-PT.seeders.yml index 4f63928bdae6..4bcd1ab0fd1a 100644 --- a/modules/meeting/config/locales/crowdin/pt-PT.seeders.yml +++ b/modules/meeting/config/locales/crowdin/pt-PT.seeders.yml @@ -19,11 +19,11 @@ pt-PT: title: Atualizações da equipa do produto item_3: title: Atualizações da equipa de marketing - item_4: - title: Atualizações da equipa de vendas item_5: - title: Revisão dos objetivos trimestrais + title: Atualizações da equipa de vendas item_6: - title: Feedback sobre os valores fundamentais + title: Revisão dos objetivos trimestrais item_7: + title: Feedback sobre os valores fundamentais + item_8: title: Tópicos gerais diff --git a/modules/meeting/config/locales/crowdin/pt-PT.yml b/modules/meeting/config/locales/crowdin/pt-PT.yml index 422a2684918f..b745293dff8e 100644 --- a/modules/meeting/config/locales/crowdin/pt-PT.yml +++ b/modules/meeting/config/locales/crowdin/pt-PT.yml @@ -48,6 +48,8 @@ pt-PT: duration_in_minutes: "min" description: "Notas" presenter: "Apresentador" + meeting_section: + title: "Título" errors: messages: invalid_time_format: "não é uma hora válida. Formato exigido: HH:MM" @@ -99,7 +101,7 @@ pt-PT: attachments: text: "Os ficheiros anexados estão disponíveis para todos os participantes na reunião. Também pode arrastar e soltar estes ficheiros nas notas do item da agenda." copy: - title: "Copiar reunião %{title}" + title: "Copiar reunião: %{title}" attachments: "Copiar anexos" attachments_text: "Copiar todos os ficheiros anexados para a nova reunião" agenda: "Copiar agenda" @@ -122,6 +124,11 @@ pt-PT: structured_text: "Organize a sua reunião como uma lista de itens da agenda, associando-os opcionalmente a um pacote de trabalho." structured_text_copy: "Atualmente, a cópia de uma reunião não copia os itens associados da agenda da reunião, apenas os detalhes" copied: "Copiado da reunião #%{id}" + meeting_section: + untitled_title: "Secção sem título" + delete_confirmation: "A eliminação da secção também irá eliminar os seus pontos da ordem de trabalhos. Tem a certeza de que pretende fazê-lo?" + placeholder_title: "Nova secção" + empty_text: "Arraste itens para aqui ou crie um novo" notice_successful_notification: "Notificação enviada com sucesso" notice_timezone_missing: Sem fuso horário definido, presume-se %{zone}. Para escolher o seu fuso horário, por favor clique aqui. permission_create_meetings: "Criar reuniões" diff --git a/modules/meeting/config/locales/crowdin/ro.seeders.yml b/modules/meeting/config/locales/crowdin/ro.seeders.yml index e4cf04136277..9a9cc5d9b1fb 100644 --- a/modules/meeting/config/locales/crowdin/ro.seeders.yml +++ b/modules/meeting/config/locales/crowdin/ro.seeders.yml @@ -19,11 +19,11 @@ ro: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/ro.yml b/modules/meeting/config/locales/crowdin/ro.yml index 6888fe2ef1c0..9014d3b05a61 100644 --- a/modules/meeting/config/locales/crowdin/ro.yml +++ b/modules/meeting/config/locales/crowdin/ro.yml @@ -49,6 +49,8 @@ ro: duration_in_minutes: "min" description: "Mențiuni" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "nu este o oră valabilă. Format necesar: HH:MM" @@ -100,7 +102,7 @@ ro: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -123,6 +125,11 @@ ro: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copiat de la Întâlnire #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Notificare trimisă cu succes" notice_timezone_missing: Nu este setat niciun fus orar și se presupune %{zone}. Pentru a vă alege fusul orar, vă rugăm să faceți clic aici. permission_create_meetings: "Creați întâlniri" diff --git a/modules/meeting/config/locales/crowdin/ru.seeders.yml b/modules/meeting/config/locales/crowdin/ru.seeders.yml index 0de3d845810b..2baeaca36a9c 100644 --- a/modules/meeting/config/locales/crowdin/ru.seeders.yml +++ b/modules/meeting/config/locales/crowdin/ru.seeders.yml @@ -19,11 +19,11 @@ ru: title: Обновления от команды продукта item_3: title: Обновления от команды маркетинга - item_4: - title: Обновления от команды продаж item_5: - title: Обзор квартальных целей + title: Updates from sales team item_6: - title: Обратная связь по основным значениям + title: Review of quarterly goals item_7: - title: Основные темы + title: Core values feedback + item_8: + title: General topics diff --git a/modules/meeting/config/locales/crowdin/ru.yml b/modules/meeting/config/locales/crowdin/ru.yml index 6b949cb1e7df..7f177ee15d88 100644 --- a/modules/meeting/config/locales/crowdin/ru.yml +++ b/modules/meeting/config/locales/crowdin/ru.yml @@ -42,14 +42,16 @@ ru: participants_invited: "Приглашенные" project: "Проект" start_date: "Дата" - start_time: "Start time" - start_time_hour: "Start time" + start_time: "Время начала" + start_time_hour: "Время начала" meeting_agenda_item: title: "Заголовок" author: "Автор" duration_in_minutes: "мин" description: "Примечания" - presenter: "Presenter" + presenter: "Ведущий" + meeting_section: + title: "Заголовок" errors: messages: invalid_time_format: "недопустимое время. Требуемый формат: ЧЧ:ММ" @@ -99,11 +101,11 @@ ru: label_start_date: "Дата начала" meeting: attachments: - text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." + text: "Прикрепленные файлы доступны всем участникам встречи. Вы также можете перенести их в примечания к пунктам повестки дня." copy: title: "Копировать встречу %{title}" - attachments: "Copy attachments" - attachments_text: "Copy over all attached files to the new meeting" + attachments: "Копировать вложения" + attachments_text: "Копировать все прикрепленные файлы в новую встречу" agenda: "Копировать повестку дня" agenda_text: "Копировать повестку дня старой встречи" email: @@ -111,7 +113,7 @@ ru: invited: summary: "%{actor} отправил вам приглашение на совещание %{title}" rescheduled: - header: "Встреча %{title} была перенесена %{actor}" + header: "Встреча %{title} была перенесена" summary: "Совещание %{title} перенесено %{actor}" body: "Совещание %{title} было перенесено пользователем %{actor}." old_date_time: "Старые дата/время" @@ -124,6 +126,11 @@ ru: structured_text: "Организуйте своё совещание в виде списка пунктов повестки, при необходимости связав их с пакетом работ." structured_text_copy: "При копировании совещания в настоящее время не скопируются связанные с ним пункты повестки, будут скопированы только детали" copied: "Скопировано со встречи #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Удаление раздела также удалит все пункты его повестки дня. Вы уверены, что хотите это сделать?" + placeholder_title: "Новый раздел" + empty_text: "Перенесите элементы сюда или создайте новый" notice_successful_notification: "Уведомление успешно отправленно" notice_timezone_missing: Не установлен часовой пояс и применена %{zone}. Чтобы выбрать часовой пояс, пожалуйста, нажмите сюда. permission_create_meetings: "Создание совещания" @@ -157,9 +164,9 @@ ru: label_meeting_delete: "Удалить совещание" label_meeting_created_by: "Автор" label_meeting_last_updated: "Последнее обновление" - label_agenda_items: "Agenda items" - label_agenda_items_reordered: "reordered" - label_agenda_item_remove: "Remove from agenda" + label_agenda_items: "Пункты повестки дня" + label_agenda_items_reordered: "переупорядочено" + label_agenda_item_remove: "Удалить из повестки дня" label_agenda_item_undisclosed_wp: "Пакет работ #%{id} невидим" label_agenda_item_deleted_wp: "Ссылка на удалённый пакет работ" label_agenda_item_actions: "Действия по пунктам повестки" @@ -168,18 +175,18 @@ ru: label_agenda_item_move_up: "Вверх" label_agenda_item_move_down: "Вниз" label_agenda_item_add_notes: "Добавить заметки" - label_agenda_item_work_package: "Agenda item work package" - text_agenda_item_title: 'Agenda item "%{title}"' - text_agenda_work_package_deleted: 'Agenda item for deleted work package' - text_deleted_agenda_item: 'Deleted agenda item' + label_agenda_item_work_package: "Пункт повестки дня Комплекс работ" + text_agenda_item_title: 'Пункт повестки дня "%{title}"' + text_agenda_work_package_deleted: 'Пункт повестки дня для удаленного пакета работ' + text_deleted_agenda_item: 'Удаленный пункт повестки дня' label_initial_meeting_details: "Совещание" label_meeting_details: "Детали совещания" label_meeting_details_edit: "Изменить сведения о совещании" - label_meeting_state: "Meeting status" + label_meeting_state: "Статус встречи" label_meeting_state_open: "Открыть" - label_meeting_state_open_html: "Open" + label_meeting_state_open_html: "Открыть" label_meeting_state_closed: "Закрыто" - label_meeting_state_closed_html: "Closed" + label_meeting_state_closed_html: "Закрытый" label_meeting_reopen_action: "Открыть совещание заново" label_meeting_close_action: "Закрыть совещание" text_meeting_open_description: "Эта совещание является открытым. Вы можете добавлять/удалять пункты повестки и редактировать их по своему усмотрению. После завершения совещания закройте его, чтобы заблокировать." diff --git a/modules/meeting/config/locales/crowdin/rw.seeders.yml b/modules/meeting/config/locales/crowdin/rw.seeders.yml index f1e401f4f717..e15b6d933998 100644 --- a/modules/meeting/config/locales/crowdin/rw.seeders.yml +++ b/modules/meeting/config/locales/crowdin/rw.seeders.yml @@ -19,11 +19,11 @@ rw: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/rw.yml b/modules/meeting/config/locales/crowdin/rw.yml index 13ca8226d682..bccfc6cf2061 100644 --- a/modules/meeting/config/locales/crowdin/rw.yml +++ b/modules/meeting/config/locales/crowdin/rw.yml @@ -48,6 +48,8 @@ rw: duration_in_minutes: "min" description: "Notes" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "is not a valid time. Required format: HH:MM" @@ -99,7 +101,7 @@ rw: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -122,6 +124,11 @@ rw: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Notification sent successfully" notice_timezone_missing: No time zone is set and %{zone} is assumed. To choose your time zone, please click here. permission_create_meetings: "Create meetings" diff --git a/modules/meeting/config/locales/crowdin/si.seeders.yml b/modules/meeting/config/locales/crowdin/si.seeders.yml index 1336b846e427..73ecfd8b44db 100644 --- a/modules/meeting/config/locales/crowdin/si.seeders.yml +++ b/modules/meeting/config/locales/crowdin/si.seeders.yml @@ -19,11 +19,11 @@ si: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/si.yml b/modules/meeting/config/locales/crowdin/si.yml index f85c8d92002a..dfa1c48bfb57 100644 --- a/modules/meeting/config/locales/crowdin/si.yml +++ b/modules/meeting/config/locales/crowdin/si.yml @@ -48,6 +48,8 @@ si: duration_in_minutes: "min" description: "සටහන්" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "is not a valid time. Required format: HH:MM" @@ -99,7 +101,7 @@ si: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -122,6 +124,11 @@ si: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Notification sent successfully" notice_timezone_missing: No time zone is set and %{zone} is assumed. To choose your time zone, please click here. permission_create_meetings: "Create meetings" diff --git a/modules/meeting/config/locales/crowdin/sk.seeders.yml b/modules/meeting/config/locales/crowdin/sk.seeders.yml index a5536fe4fd41..1ad8687fd01c 100644 --- a/modules/meeting/config/locales/crowdin/sk.seeders.yml +++ b/modules/meeting/config/locales/crowdin/sk.seeders.yml @@ -19,11 +19,11 @@ sk: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/sk.yml b/modules/meeting/config/locales/crowdin/sk.yml index ca432a68549a..52857d7dfc96 100644 --- a/modules/meeting/config/locales/crowdin/sk.yml +++ b/modules/meeting/config/locales/crowdin/sk.yml @@ -50,6 +50,8 @@ sk: duration_in_minutes: "min" description: "Poznámky" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "nie je platný čas. Požadovaný formát: HH:MM" @@ -101,7 +103,7 @@ sk: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -124,6 +126,11 @@ sk: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Notifikácia úspešne odoslaná" notice_timezone_missing: Časové pásmo nebolo špecificky nastavené, použilo sa teda %{zone}. Ak chcete vybrať iné časové pásmo, kliknite prosím tu. permission_create_meetings: "Vytvárať stretnutia" diff --git a/modules/meeting/config/locales/crowdin/sl.seeders.yml b/modules/meeting/config/locales/crowdin/sl.seeders.yml index 7d7a6cf7f5a6..fe5175125a07 100644 --- a/modules/meeting/config/locales/crowdin/sl.seeders.yml +++ b/modules/meeting/config/locales/crowdin/sl.seeders.yml @@ -19,11 +19,11 @@ sl: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/sl.yml b/modules/meeting/config/locales/crowdin/sl.yml index ef293318497f..1b7d73da68fd 100644 --- a/modules/meeting/config/locales/crowdin/sl.yml +++ b/modules/meeting/config/locales/crowdin/sl.yml @@ -50,6 +50,8 @@ sl: duration_in_minutes: "min" description: "Opombe" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "ni veljaven čas. Potreben format: HH:MM" @@ -101,7 +103,7 @@ sl: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -124,6 +126,11 @@ sl: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Kopirano iz sestanka #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Obvestila uspešno poslana" notice_timezone_missing: Časovni pas ni določen, %{zone} je izbran avtomatsko. Za določitev časovnega pasu kliknite tukaj. permission_create_meetings: "Ustvarite sestanke" diff --git a/modules/meeting/config/locales/crowdin/sr.seeders.yml b/modules/meeting/config/locales/crowdin/sr.seeders.yml index e12a36288da4..e9d0c9610b0c 100644 --- a/modules/meeting/config/locales/crowdin/sr.seeders.yml +++ b/modules/meeting/config/locales/crowdin/sr.seeders.yml @@ -19,11 +19,11 @@ sr: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/sr.yml b/modules/meeting/config/locales/crowdin/sr.yml index a2df57ec7f3a..68c9c76bc1a0 100644 --- a/modules/meeting/config/locales/crowdin/sr.yml +++ b/modules/meeting/config/locales/crowdin/sr.yml @@ -49,6 +49,8 @@ sr: duration_in_minutes: "min" description: "Notes" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "is not a valid time. Required format: HH:MM" @@ -100,7 +102,7 @@ sr: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -123,6 +125,11 @@ sr: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Notification sent successfully" notice_timezone_missing: No time zone is set and %{zone} is assumed. To choose your time zone, please click here. permission_create_meetings: "Create meetings" diff --git a/modules/meeting/config/locales/crowdin/sv.seeders.yml b/modules/meeting/config/locales/crowdin/sv.seeders.yml index 2f991d1595e5..70eb1710c233 100644 --- a/modules/meeting/config/locales/crowdin/sv.seeders.yml +++ b/modules/meeting/config/locales/crowdin/sv.seeders.yml @@ -19,11 +19,11 @@ sv: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/sv.yml b/modules/meeting/config/locales/crowdin/sv.yml index bac68d9b811f..47573d37a755 100644 --- a/modules/meeting/config/locales/crowdin/sv.yml +++ b/modules/meeting/config/locales/crowdin/sv.yml @@ -48,6 +48,8 @@ sv: duration_in_minutes: "min" description: "Anteckningar" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "är inte en giltig tid. Använd formatet HH:MM" @@ -99,7 +101,7 @@ sv: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Kopiera bilagor" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -122,6 +124,11 @@ sv: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Kopierat från möte #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Underrättelse skickades" notice_timezone_missing: Ingen tidszon angiven och %{zone} antas. För att välja din tidszon, vänligen klicka här. permission_create_meetings: "Skapa möten" diff --git a/modules/meeting/config/locales/crowdin/th.seeders.yml b/modules/meeting/config/locales/crowdin/th.seeders.yml index ef50bd2f49a3..34e747637bd7 100644 --- a/modules/meeting/config/locales/crowdin/th.seeders.yml +++ b/modules/meeting/config/locales/crowdin/th.seeders.yml @@ -19,11 +19,11 @@ th: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/th.yml b/modules/meeting/config/locales/crowdin/th.yml index 1374a26a7c83..f5e5d53eb76b 100644 --- a/modules/meeting/config/locales/crowdin/th.yml +++ b/modules/meeting/config/locales/crowdin/th.yml @@ -47,6 +47,8 @@ th: duration_in_minutes: "min" description: "หมายเหตุ" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "is not a valid time. Required format: HH:MM" @@ -98,7 +100,7 @@ th: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -121,6 +123,11 @@ th: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Notification sent successfully" notice_timezone_missing: No time zone is set and %{zone} is assumed. To choose your time zone, please click here. permission_create_meetings: "Create meetings" diff --git a/modules/meeting/config/locales/crowdin/tr.seeders.yml b/modules/meeting/config/locales/crowdin/tr.seeders.yml index c729e186cd40..8dbed7b63573 100644 --- a/modules/meeting/config/locales/crowdin/tr.seeders.yml +++ b/modules/meeting/config/locales/crowdin/tr.seeders.yml @@ -19,11 +19,11 @@ tr: title: Üretim ekibinden ilerlemeler item_3: title: Pazarlama ekibinden ilerlemeler - item_4: - title: Satış ekibinden ilerlemeler item_5: - title: Çeyrek bazlı hedefleri gözden geçir + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: - title: Genel başlıklar + title: Core values feedback + item_8: + title: General topics diff --git a/modules/meeting/config/locales/crowdin/tr.yml b/modules/meeting/config/locales/crowdin/tr.yml index 11c6d7385f48..d0bcb8dfb3b4 100644 --- a/modules/meeting/config/locales/crowdin/tr.yml +++ b/modules/meeting/config/locales/crowdin/tr.yml @@ -48,6 +48,8 @@ tr: duration_in_minutes: "dakika" description: "Notlar" presenter: "Sunucu " + meeting_section: + title: "Başlık" errors: messages: invalid_time_format: "geçerli bir zaman değil. Gerekli format: SS:DD" @@ -99,29 +101,34 @@ tr: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" - agenda: "Copy agenda" - agenda_text: "Copy the agenda of the old meeting" + agenda: "Gündemi kopyala" + agenda_text: "Eski toplantının gündemini kopyalayın" email: - open_meeting_link: "Open meeting" + open_meeting_link: "Açık toplantı" invited: - summary: "%{actor} has sent you an invitation for the meeting %{title}" + summary: "%{actor} size toplantı için bir davetiye gönderdi %{title}" rescheduled: header: "Meeting %{title} has been rescheduled" - summary: "Meeting %{title} has been rescheduled by %{actor}" - body: "The meeting %{title} has been rescheduled by %{actor}." - old_date_time: "Old date/time" - new_date_time: "New date/time" - label_mail_all_participants: "Send email to all participants" + summary: "%{title} toplantısı %{actor} tarafından yeniden planlanmıştır." + body: "%{title} toplantısı %{actor} tarafından yeniden planlanmıştır." + old_date_time: "Eski tarih/saat" + new_date_time: "Yeni tarih/saat" + label_mail_all_participants: "Tüm katılımcılara e-posta gönderin" types: classic: "Klasik" - classic_text: "Organize your meeting in a formattable text agenda and protocol." - structured: "Dynamic" - structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." + classic_text: "Toplantınızı biçimlendirilebilir bir metin gündemi ve protokolüyle düzenleyin." + structured: "Dinamik" + structured_text: "Toplantınızı, isteğe bağlı olarak bunları bir çalışma paketine bağlayarak, gündem maddelerinin bir listesi halinde düzenleyin." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "#%{id} numaralı toplantıdan kopyalandı" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Bildirim başarıyla gönderildi" notice_timezone_missing: Saat dilimi ayarlanmadı ve %{zone} kabul edildi. Saat dilimini seçmek için lütfen buraya tıklayın. permission_create_meetings: "Toplantı oluşturma" @@ -151,11 +158,11 @@ tr: text_meeting_empty_description_2: 'You can also add references to existing work packages. When you do, related notes will automatically be visible in the work package''s "Meetings" tab.' label_meeting_empty_action: "Add agenda item" label_meeting_actions: "Meeting actions" - label_meeting_edit_title: "Edit meeting title" - label_meeting_delete: "Delete meeting" + label_meeting_edit_title: "Toplantı başlığını düzenle" + label_meeting_delete: "Toplantıyı sil" label_meeting_created_by: "Oluşturan" label_meeting_last_updated: "Last updated" - label_agenda_items: "Agenda items" + label_agenda_items: "Gündem maddeleri" label_agenda_items_reordered: "reordered" label_agenda_item_remove: "Remove from agenda" label_agenda_item_undisclosed_wp: "Work package #%{id} not visible" diff --git a/modules/meeting/config/locales/crowdin/uk.seeders.yml b/modules/meeting/config/locales/crowdin/uk.seeders.yml index 8432fbefd26b..4abc915c2e96 100644 --- a/modules/meeting/config/locales/crowdin/uk.seeders.yml +++ b/modules/meeting/config/locales/crowdin/uk.seeders.yml @@ -19,11 +19,11 @@ uk: title: Оновлення від команди розробників item_3: title: Оновлення від маркетологів - item_4: - title: Новини від відділу продажів item_5: - title: Перегляд квартальних цілей + title: Новини від відділу продажів item_6: - title: Зворотний зв'язок щодо головних цінностей + title: Перегляд квартальних цілей item_7: + title: Відгук щодо ключових цінностей + item_8: title: Загальні теми diff --git a/modules/meeting/config/locales/crowdin/uk.yml b/modules/meeting/config/locales/crowdin/uk.yml index 51cd671f2479..6515a0f574d8 100644 --- a/modules/meeting/config/locales/crowdin/uk.yml +++ b/modules/meeting/config/locales/crowdin/uk.yml @@ -50,6 +50,8 @@ uk: duration_in_minutes: "хв" description: "Примітки" presenter: "Доповідач" + meeting_section: + title: "Назва " errors: messages: invalid_time_format: "не є допустимим часом. Необхідний формат: HH:MM" @@ -101,7 +103,7 @@ uk: attachments: text: "Прикріплені файли доступні всім учасникам наради. Ви також можете перетягнути їх у примітки до пунктів порядку денного." copy: - title: "Копіювати нараду «%{title}»" + title: "Копіювати нараду: %{title}" attachments: "Копіювати вкладення" attachments_text: "Скопіюйте всі прикріплені файли до нової наради" agenda: "Копіювати порядок денний" @@ -124,6 +126,11 @@ uk: structured_text: "Організуйте нараду у вигляді переліку пунктів порядку денного, за бажанням пов’язавши їх із пакетом робіт." structured_text_copy: "Зараз копіювання наради стосується лише докладних даних про неї, але не пов’язаних пунктів її порядку денного" copied: "Скопійовано з наради #%{id} " + meeting_section: + untitled_title: "Розділ без назви" + delete_confirmation: "Видалення цього розділу також призведе до видалення його елементів порядку денного. Ви впевнені?" + placeholder_title: "Новий розділ" + empty_text: "Перетягніть елементи сюди або створіть новий" notice_successful_notification: "Повідомлення успішно надіслано" notice_timezone_missing: Часовий пояс не встановлено і %{zone} передбачається. Щоб вибрати часовий пояс, натисніть тут. permission_create_meetings: "Створюйте зустрічі" diff --git a/modules/meeting/config/locales/crowdin/uz.seeders.yml b/modules/meeting/config/locales/crowdin/uz.seeders.yml index 6b372a25fc42..5169c0db3c75 100644 --- a/modules/meeting/config/locales/crowdin/uz.seeders.yml +++ b/modules/meeting/config/locales/crowdin/uz.seeders.yml @@ -19,11 +19,11 @@ uz: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/uz.yml b/modules/meeting/config/locales/crowdin/uz.yml index 4cdf1b232ce7..07846712d79d 100644 --- a/modules/meeting/config/locales/crowdin/uz.yml +++ b/modules/meeting/config/locales/crowdin/uz.yml @@ -48,6 +48,8 @@ uz: duration_in_minutes: "min" description: "Notes" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "is not a valid time. Required format: HH:MM" @@ -99,7 +101,7 @@ uz: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -122,6 +124,11 @@ uz: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Notification sent successfully" notice_timezone_missing: No time zone is set and %{zone} is assumed. To choose your time zone, please click here. permission_create_meetings: "Create meetings" diff --git a/modules/meeting/config/locales/crowdin/vi.seeders.yml b/modules/meeting/config/locales/crowdin/vi.seeders.yml index bbaaec5aac46..1063def95178 100644 --- a/modules/meeting/config/locales/crowdin/vi.seeders.yml +++ b/modules/meeting/config/locales/crowdin/vi.seeders.yml @@ -19,11 +19,11 @@ vi: title: Updates from product team item_3: title: Updates from marketing team - item_4: - title: Updates from sales team item_5: - title: Review of quarterly goals + title: Updates from sales team item_6: - title: Core values feedback + title: Review of quarterly goals item_7: + title: Core values feedback + item_8: title: General topics diff --git a/modules/meeting/config/locales/crowdin/vi.yml b/modules/meeting/config/locales/crowdin/vi.yml index cc9d4c5d1059..91b0416d404a 100644 --- a/modules/meeting/config/locales/crowdin/vi.yml +++ b/modules/meeting/config/locales/crowdin/vi.yml @@ -47,6 +47,8 @@ vi: duration_in_minutes: "min" description: "Ghi chú" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "không phải giờ hợp lệ. Yêu cầu định dạng: HH:MM" @@ -98,7 +100,7 @@ vi: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -121,6 +123,11 @@ vi: structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "Đã gửi thông báo thành công" notice_timezone_missing: Chưa đặt múi giờ và %{zone} đã được chọn. Để chọn múi giowf của bạn, nhấn vào đây. permission_create_meetings: "Create meetings" diff --git a/modules/meeting/config/locales/crowdin/zh-CN.seeders.yml b/modules/meeting/config/locales/crowdin/zh-CN.seeders.yml index d38c31a31af1..13d67f5aed05 100644 --- a/modules/meeting/config/locales/crowdin/zh-CN.seeders.yml +++ b/modules/meeting/config/locales/crowdin/zh-CN.seeders.yml @@ -19,11 +19,11 @@ zh-CN: title: 产品团队的更新 item_3: title: 市场团队的更新 - item_4: - title: 销售团队的更新 item_5: - title: 季度目标回顾 + title: Updates from sales team item_6: - title: 核心价值反馈 + title: Review of quarterly goals item_7: - title: 一般性议题 + title: Core values feedback + item_8: + title: General topics diff --git a/modules/meeting/config/locales/crowdin/zh-CN.yml b/modules/meeting/config/locales/crowdin/zh-CN.yml index 7a00cbbc449f..9c085d4d150c 100644 --- a/modules/meeting/config/locales/crowdin/zh-CN.yml +++ b/modules/meeting/config/locales/crowdin/zh-CN.yml @@ -34,7 +34,7 @@ zh-CN: notes: "备注" participants: "参加者" participant: - other: "1位参与者" + other: "%{count}位参与者" participants_attended: "与会者" participants_invited: "受邀者" project: "项目" @@ -47,6 +47,8 @@ zh-CN: duration_in_minutes: "分钟" description: "备注" presenter: "演讲者" + meeting_section: + title: "标题" errors: messages: invalid_time_format: "不是有效时间。所需格式:HH:MM" @@ -98,7 +100,7 @@ zh-CN: attachments: text: "所有与会者都可以查看附件。您还可以将这些文件拖放到议程项目注释中。" copy: - title: "复制会议 %{title}" + title: "复制会议: %{title}" attachments: "复制附件" attachments_text: "将所有附件复制到新会议" agenda: "复制议程" @@ -121,6 +123,11 @@ zh-CN: structured_text: "将您的会议组织成一个议程项目列表,并可选择地将它们与一个工作包连接起来。" structured_text_copy: "目前复制会议不会复制相关会议的议程项目,只会复制会议的详细信息。" copied: "从会议 #%{id} 复制" + meeting_section: + untitled_title: "无标题章节" + delete_confirmation: "删除该属性也会删除其在所有项目中的值。您确定要这样做吗?" + placeholder_title: "新建章节" + empty_text: "拖动项目到此处或创建一个新项目" notice_successful_notification: "通知发送成功" notice_timezone_missing: 没有设定时区,预设时区为 %{zone}。要选择您的时区,请单击此处。 permission_create_meetings: "创建会议" diff --git a/modules/meeting/config/locales/crowdin/zh-TW.seeders.yml b/modules/meeting/config/locales/crowdin/zh-TW.seeders.yml index 9166a90b5ada..b5676b86cd14 100644 --- a/modules/meeting/config/locales/crowdin/zh-TW.seeders.yml +++ b/modules/meeting/config/locales/crowdin/zh-TW.seeders.yml @@ -19,11 +19,11 @@ zh-TW: title: 產品團隊的更新 item_3: title: 行銷團隊的更新 - item_4: - title: 銷售團隊的更新 item_5: - title: 季度目標回顧 + title: Updates from sales team item_6: - title: 核心價值反饋 + title: Review of quarterly goals item_7: - title: 一般性議題 + title: Core values feedback + item_8: + title: General topics diff --git a/modules/meeting/config/locales/crowdin/zh-TW.yml b/modules/meeting/config/locales/crowdin/zh-TW.yml index ff9ef77668e2..4f64dc3bdd3d 100644 --- a/modules/meeting/config/locales/crowdin/zh-TW.yml +++ b/modules/meeting/config/locales/crowdin/zh-TW.yml @@ -47,6 +47,8 @@ zh-TW: duration_in_minutes: "分鐘" description: "備註" presenter: "簡報者" + meeting_section: + title: "標題" errors: messages: invalid_time_format: "不是有效時間。所需格式: HH:MM" @@ -121,6 +123,11 @@ zh-TW: structured_text: "將您的會議整理成一個議程項目列表,並可選擇地將它們與一個工作項目連接起來。" structured_text_copy: "目前複製會議不會複製相關會議的議程項目,只會複製會議的詳細信息。" copied: "從會議紀錄 #%{id} 中複製" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" notice_successful_notification: "通知傳送成功" notice_timezone_missing: 沒有設定時區,預設時區為 %{zone} 。請按這裡選擇您的時區。 permission_create_meetings: "建立會議" diff --git a/modules/meeting/config/locales/en.yml b/modules/meeting/config/locales/en.yml index 77818c73e7a3..0216c57cec28 100644 --- a/modules/meeting/config/locales/en.yml +++ b/modules/meeting/config/locales/en.yml @@ -59,6 +59,8 @@ en: duration_in_minutes: "min" description: "Notes" presenter: "Presenter" + meeting_section: + title: "Title" errors: messages: invalid_time_format: "is not a valid time. Required format: HH:MM" @@ -116,7 +118,7 @@ en: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting %{title}" + title: "Copy meeting: %{title}" attachments: "Copy attachments" attachments_text: "Copy over all attached files to the new meeting" agenda: "Copy agenda" @@ -140,6 +142,12 @@ en: structured_text_copy: "Copying a meeting will currently not copy the associated meeting agenda items, just the details" copied: "Copied from Meeting #%{id}" + meeting_section: + untitled_title: "Untitled section" + delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" + placeholder_title: "New section" + empty_text: "Drag items here or create a new one" + notice_successful_notification: "Notification sent successfully" notice_timezone_missing: No time zone is set and %{zone} is assumed. To choose your time zone, please click here. diff --git a/modules/meeting/config/routes.rb b/modules/meeting/config/routes.rb index f9e015eb11e0..0044abb9ec46 100644 --- a/modules/meeting/config/routes.rb +++ b/modules/meeting/config/routes.rb @@ -28,21 +28,21 @@ Rails.application.routes.draw do resources :projects, only: %i[] do - resources :meetings, only: %i[index new create] + resources :meetings, only: %i[index new create show] end resources :work_packages, only: %i[] do resources :meetings, only: %i[] do collection do - resources :tab, only: %i[index], controller: 'work_package_meetings_tab', as: 'meetings_tab' do + resources :tab, only: %i[index], controller: "work_package_meetings_tab", as: "meetings_tab" do get :count, on: :collection end end end resources :meeting_agenda_items, only: %i[] do collection do - get :dialog, controller: 'work_package_meetings_tab', action: :add_work_package_to_meeting_dialog - post :create, controller: 'work_package_meetings_tab', action: :add_work_package_to_meeting + get :dialog, controller: "work_package_meetings_tab", action: :add_work_package_to_meeting_dialog + post :create, controller: "work_package_meetings_tab", action: :add_work_package_to_meeting end end end @@ -59,11 +59,21 @@ post :notify get :history end - resources :agenda_items, controller: 'meeting_agenda_items' do + resources :agenda_items, controller: "meeting_agenda_items" do + collection do + get :new, action: :new, as: :new + get :cancel_new + end + member do + get :cancel_edit + put :drop + put :move + end + end + resources :sections, controller: "meeting_sections" do collection do get :new, action: :new, as: :new get :cancel_new - # get :author_autocomplete_index end member do get :cancel_edit @@ -72,7 +82,7 @@ end end - resource :agenda, controller: 'meeting_agendas', only: [:update] do + resource :agenda, controller: "meeting_agendas", only: [:update] do member do get :history get :diff @@ -82,17 +92,17 @@ end resources :versions, only: [:show], - controller: 'meeting_agendas' + controller: "meeting_agendas" end - resource :contents, controller: 'meeting_contents', only: %i[show update] do + resource :contents, controller: "meeting_contents", only: %i[show update] do member do get :history get :diff end end - resource :minutes, controller: 'meeting_minutes', only: [:update] do + resource :minutes, controller: "meeting_minutes", only: [:update] do member do get :history get :diff @@ -100,14 +110,14 @@ end resources :versions, only: [:show], - controller: 'meeting_minutes' + controller: "meeting_minutes" end member do get :copy - match '/:tab' => 'meetings#show', :constraints => { tab: /(agenda|minutes)/ }, + match "/:tab" => "meetings#show", :constraints => { tab: /(agenda|minutes)/ }, :via => :get, - :as => 'tab' + :as => "tab" end end end diff --git a/modules/meeting/db/migrate/20240405131352_create_meeting_sections.rb b/modules/meeting/db/migrate/20240405131352_create_meeting_sections.rb new file mode 100644 index 000000000000..dd4a2688759b --- /dev/null +++ b/modules/meeting/db/migrate/20240405131352_create_meeting_sections.rb @@ -0,0 +1,34 @@ +class CreateMeetingSections < ActiveRecord::Migration[7.1] + def up + create_table :meeting_sections do |t| + t.integer :position + t.string :title + t.references :meeting, null: false, foreign_key: true + + t.timestamps + end + + add_reference :meeting_agenda_items, :meeting_section + + create_and_assign_default_section + end + + def down + remove_reference :meeting_agenda_items, :meeting_section + drop_table :meeting_sections + # TODO: positions of agenda items are now not valid anymore as they have been scoped to sections + # Do we need to catch this? + end + + private + + def create_and_assign_default_section + StructuredMeeting.includes(:agenda_items).find_each do |meeting| + section = MeetingSection.create!( + meeting:, + title: "Untitled" + ) + meeting.agenda_items.update_all(meeting_section_id: section.id) + end + end +end diff --git a/modules/meeting/db/migrate/20240516102219_fix_untitled_meetings.rb b/modules/meeting/db/migrate/20240516102219_fix_untitled_meetings.rb new file mode 100644 index 000000000000..6909ee6af411 --- /dev/null +++ b/modules/meeting/db/migrate/20240516102219_fix_untitled_meetings.rb @@ -0,0 +1,9 @@ +class FixUntitledMeetings < ActiveRecord::Migration[7.1] + def up + MeetingSection.where(title: "Untitled").update_all(title: "") + end + + def down + MeetingSection.where(title: "").update_all(title: "Untitled") + end +end diff --git a/modules/meeting/lib/api/v3/meetings/meeting_collection_representer.rb b/modules/meeting/lib/api/v3/meetings/meeting_collection_representer.rb new file mode 100644 index 000000000000..00ce8cd78c55 --- /dev/null +++ b/modules/meeting/lib/api/v3/meetings/meeting_collection_representer.rb @@ -0,0 +1,36 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module API + module V3 + module Meetings + class MeetingCollectionRepresenter < ::API::Decorators::OffsetPaginatedCollection + end + end + end +end diff --git a/modules/meeting/lib/api/v3/meetings/meetings_api.rb b/modules/meeting/lib/api/v3/meetings/meetings_api.rb index 6a8e4a791a5a..bcff3679e831 100644 --- a/modules/meeting/lib/api/v3/meetings/meetings_api.rb +++ b/modules/meeting/lib/api/v3/meetings/meetings_api.rb @@ -37,6 +37,8 @@ def meeting end end + get &::API::V3::Utilities::Endpoints::Index.new(model: Meeting).mount + route_param :id, type: Integer, desc: "Activity ID" do after_validation do @meeting = Meeting.visible.find(declared_params[:id]) diff --git a/modules/meeting/lib/open_project/meeting/engine.rb b/modules/meeting/lib/open_project/meeting/engine.rb index b7faee8275bb..ca96c171ed11 100644 --- a/modules/meeting/lib/open_project/meeting/engine.rb +++ b/modules/meeting/lib/open_project/meeting/engine.rb @@ -26,8 +26,8 @@ # See COPYRIGHT and LICENSE files for more details. #++ -require 'open_project/plugins' -require_relative 'patches/api/work_package_representer' +require "open_project/plugins" +require_relative "patches/api/work_package_representer" module OpenProject::Meeting class Engine < ::Rails::Engine @@ -35,8 +35,8 @@ class Engine < ::Rails::Engine include OpenProject::Plugins::ActsAsOpEngine - register 'openproject-meeting', - author_url: 'https://www.openproject.org', + register "openproject-meeting", + author_url: "https://www.openproject.org", bundled: true do project_module :meetings do permission :view_meetings, @@ -73,7 +73,8 @@ class Engine < ::Rails::Engine require: :member permission :manage_agendas, { - meeting_agenda_items: %i[new cancel_new create edit cancel_edit update destroy drop move] + meeting_agenda_items: %i[new cancel_new create edit cancel_edit update destroy drop move], + meeting_sections: %i[new cancel_new create edit cancel_edit update destroy drop move] }, permissible_on: :project, # TODO: Change this to :meeting when MeetingRoles are available require: :member @@ -110,16 +111,16 @@ class Engine < ::Rails::Engine end menu :project_menu, - :meetings, { controller: '/meetings', action: 'index' }, + :meetings, { controller: "/meetings", action: "index" }, caption: :project_module_meetings, after: :wiki, before: :members, - icon: 'meetings' + icon: "meetings" menu :project_menu, - :meetings_query_select, { controller: '/meetings', action: 'index' }, + :meetings_query_select, { controller: "/meetings", action: "index" }, parent: :meetings, - partial: 'meetings/menu_query_select' + partial: "meetings/menu_query_select" should_render_global_menu_item = Proc.new do (User.current.logged? || !Setting.login_required?) && @@ -127,32 +128,32 @@ class Engine < ::Rails::Engine end menu :top_menu, - :meetings, { controller: '/meetings', action: 'index', project_id: nil }, + :meetings, { controller: "/meetings", action: "index", project_id: nil }, context: :modules, caption: :label_meeting_plural, last: true, - icon: 'meetings', + icon: "meetings", if: should_render_global_menu_item menu :global_menu, - :meetings, { controller: '/meetings', action: 'index', project_id: nil }, + :meetings, { controller: "/meetings", action: "index", project_id: nil }, caption: :label_meeting_plural, last: true, - icon: 'meetings', + icon: "meetings", if: should_render_global_menu_item menu :global_menu, - :meetings_query_select, { controller: '/meetings', action: 'index', project_id: nil }, + :meetings_query_select, { controller: "/meetings", action: "index", project_id: nil }, parent: :meetings, - partial: 'meetings/menu_query_select', + partial: "meetings/menu_query_select", if: should_render_global_menu_item ActiveSupport::Inflector.inflections do |inflect| - inflect.uncountable 'meeting_minutes' + inflect.uncountable "meeting_minutes" end end - activity_provider :meetings, class_name: 'Activities::MeetingActivityProvider', default: false + activity_provider :meetings, class_name: "Activities::MeetingActivityProvider", default: false patches [:Project] patch_with_namespace :BasicData, :SettingSeeder @@ -160,17 +161,21 @@ class Engine < ::Rails::Engine extend_api_response(:v3, :work_packages, :work_package, &::OpenProject::Meeting::Patches::API::WorkPackageRepresenter.extension) - add_api_endpoint 'API::V3::Root' do + add_api_endpoint "API::V3::Root" do mount ::API::V3::Meetings::MeetingsAPI mount ::API::V3::Meetings::MeetingContentsAPI end config.to_prepare do - OpenProject::ProjectLatestActivity.register on: 'Meeting' + OpenProject::ProjectLatestActivity.register on: "Meeting" PermittedParams.permit(:search, :meetings) end + add_api_path :meetings do + "#{root}/meetings" + end + add_api_path :meeting do |id| "#{root}/meetings/#{id}" end diff --git a/modules/meeting/spec/contracts/meeting_sections/create_contract_spec.rb b/modules/meeting/spec/contracts/meeting_sections/create_contract_spec.rb new file mode 100644 index 000000000000..e74d169683bd --- /dev/null +++ b/modules/meeting/spec/contracts/meeting_sections/create_contract_spec.rb @@ -0,0 +1,85 @@ +# frozen_string_literal: true + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +require "spec_helper" +require "contracts/shared/model_contract_shared_context" + +RSpec.describe MeetingSections::CreateContract do + include_context "ModelContract shared context" + + shared_let(:project) { create(:project) } + let(:meeting) { create(:structured_meeting, project:) } + let(:section) { build(:meeting_section, meeting:) } + let(:contract) { described_class.new(section, user) } + + context "with permission" do + let(:user) do + create(:user, member_with_permissions: { project => %i[view_meetings manage_agendas] }) + end + + it_behaves_like "contract is valid" + + context "when :meeting is not editable" do + before do + meeting.update_column(:state, :closed) + end + + it_behaves_like "contract is invalid", base: I18n.t(:text_agenda_item_not_editable_anymore) + end + + context "when :meeting is not present anymore" do + before do + meeting.destroy + end + + it_behaves_like "contract is invalid", base: :error_unauthorized + end + + context "when :title is empty" do + before do + section.title = "" + end + + # empty title allowed in create contract in contrast to update contract + # only used internally and not alongside a user facing form + it_behaves_like "contract is valid" + end + end + + context "without permission" do + let(:user) { build_stubbed(:user) } + + it_behaves_like "contract is invalid", base: :does_not_exist + end + + include_examples "contract reuses the model errors" do + let(:user) { build_stubbed(:user) } + end +end diff --git a/modules/meeting/spec/contracts/meeting_sections/delete_contract_spec.rb b/modules/meeting/spec/contracts/meeting_sections/delete_contract_spec.rb new file mode 100644 index 000000000000..19f6aea0c1e7 --- /dev/null +++ b/modules/meeting/spec/contracts/meeting_sections/delete_contract_spec.rb @@ -0,0 +1,75 @@ +# frozen_string_literal: true + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +require "spec_helper" +require "contracts/shared/model_contract_shared_context" + +RSpec.describe MeetingSections::DeleteContract do + include_context "ModelContract shared context" + + shared_let(:project) { create(:project) } + shared_let(:meeting) { create(:structured_meeting, project:) } + let(:section) { create(:meeting_section, meeting:) } + let(:contract) { described_class.new(section, user) } + + context "with permission" do + let(:user) do + create(:user, member_with_permissions: { project => [:manage_agendas] }) + end + + it_behaves_like "contract is valid" + + context "when :meeting is not editable" do + before do + meeting.update_column(:state, :closed) + end + + it_behaves_like "contract is invalid", base: I18n.t(:text_agenda_item_not_editable_anymore) + end + + context "when meeting_agenda_items are present" do + before do + create(:meeting_agenda_item, meeting_section: section) + end + + it_behaves_like "contract is valid" + end + end + + context "without permission" do + let(:user) { build_stubbed(:user) } + + it_behaves_like "contract is invalid", base: :error_unauthorized + end + + include_examples "contract reuses the model errors" do + let(:user) { build_stubbed(:user) } + end +end diff --git a/modules/meeting/spec/contracts/meeting_sections/update_contract_spec.rb b/modules/meeting/spec/contracts/meeting_sections/update_contract_spec.rb new file mode 100644 index 000000000000..46e901963cba --- /dev/null +++ b/modules/meeting/spec/contracts/meeting_sections/update_contract_spec.rb @@ -0,0 +1,67 @@ +# frozen_string_literal: true + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +require "spec_helper" +require "contracts/shared/model_contract_shared_context" + +RSpec.describe MeetingSections::UpdateContract do + include_context "ModelContract shared context" + + shared_let(:project) { create(:project) } + shared_let(:meeting) { create(:structured_meeting, project:) } + shared_let(:section) { create(:meeting_section, meeting:) } + let(:contract) { described_class.new(section, user) } + + context "with permission" do + let(:user) do + create(:user, member_with_permissions: { project => [:manage_agendas] }) + end + + it_behaves_like "contract is valid" + + context "when :meeting is not editable" do + before do + meeting.update_column(:state, :closed) + end + + it_behaves_like "contract is invalid", base: I18n.t(:text_agenda_item_not_editable_anymore) + end + end + + context "without permission" do + let(:user) { build_stubbed(:user) } + + it_behaves_like "contract is invalid", base: :error_unauthorized + end + + include_examples "contract reuses the model errors" do + let(:user) { build_stubbed(:user) } + end +end diff --git a/modules/meeting/spec/factories/meeting_section_factory.rb b/modules/meeting/spec/factories/meeting_section_factory.rb new file mode 100644 index 000000000000..9d1b469bdfb3 --- /dev/null +++ b/modules/meeting/spec/factories/meeting_section_factory.rb @@ -0,0 +1,35 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +FactoryBot.define do + factory :meeting_section do |m| + meeting factory: :structured_meeting + + m.sequence(:title) { |n| "Section #{n}" } + end +end diff --git a/modules/meeting/spec/features/structured_meetings/attachment_upload_spec.rb b/modules/meeting/spec/features/structured_meetings/attachment_upload_spec.rb index 01d2e32a25e0..994436f7351e 100644 --- a/modules/meeting/spec/features/structured_meetings/attachment_upload_spec.rb +++ b/modules/meeting/spec/features/structured_meetings/attachment_upload_spec.rb @@ -52,9 +52,8 @@ it "can upload an image to new and existing meeting agenda item via drag & drop in editor" do show_page.visit! - show_page.add_agenda_item(save: false) do - click_on "Notes" - end + click_on "Add" + click_on "Agenda item" # adding an image editor.drag_attachment image_fixture.path, "Image uploaded the first time" diff --git a/modules/meeting/spec/features/structured_meetings/history_spec.rb b/modules/meeting/spec/features/structured_meetings/history_spec.rb index 184087f12b8c..24ee173c99f5 100644 --- a/modules/meeting/spec/features/structured_meetings/history_spec.rb +++ b/modules/meeting/spec/features/structured_meetings/history_spec.rb @@ -161,6 +161,10 @@ click_on "Save" end + # dynamically wait for the item to be updated successfully + # before checking the history modal, otherwise running into timing issues + show_page.expect_agenda_item(title: "Updated title") + history_page.open_history_modal history_page.expect_event( 'Agenda item "Updated title"', @@ -202,6 +206,7 @@ show_page.remove_agenda_item(second) history_page.open_history_modal + item = history_page.first_item expect(item).to have_css(".op-activity-list--item-title", text: 'Agenda item "Second"') expect(item).to have_css(".op-activity-list--item-subtitle", text: "deleted by") @@ -221,6 +226,7 @@ expect(wp_item).to be_present history_page.open_history_modal + item = history_page.first_item expect(item).to have_css(".op-activity-list--item-title", text: work_package.to_s.strip) expect(item).to have_css(".op-activity-list--item-subtitle", text: "added by") @@ -241,6 +247,7 @@ expect(wp_item).to be_present history_page.open_history_modal + item = history_page.first_item expect(item).to have_css(".op-activity-list--item-title", text: changed_wp.to_s.strip) expect(item).to have_css(".op-activity-list--item-subtitle", text: "updated by") @@ -271,6 +278,7 @@ # Is visible for user history_page.open_history_modal + item = history_page.first_item expect(item).to have_css(".op-activity-list--item-title", text: other_wp.to_s.strip) expect(item).to have_css(".op-activity-list--item-subtitle", text: "added by") @@ -281,6 +289,7 @@ show_page.visit! history_page.open_history_modal + item = history_page.first_item expect(item).to have_css(".op-activity-list--item-title", text: I18n.t(:label_agenda_item_undisclosed_wp, id: other_wp.id)) expect(item).to have_css(".op-activity-list--item-subtitle", text: "added by") @@ -289,6 +298,10 @@ login_as(user) show_page.visit! show_page.remove_agenda_item wp_item + + # dynamically wait for the item to be removed successfully + show_page.expect_no_agenda_item(title: wp_item.to_s) + history_page.open_history_modal item = history_page.first_item @@ -301,6 +314,7 @@ show_page.visit! history_page.open_history_modal + item = history_page.first_item expect(item).to have_css(".op-activity-list--item-title", text: I18n.t(:label_agenda_item_undisclosed_wp, id: other_wp.id)) expect(item).to have_css(".op-activity-list--item-subtitle", text: "removed by") @@ -313,12 +327,11 @@ show_page.add_agenda_item do fill_in "Title", with: "My agenda item" - click_on "Notes" end show_page.expect_agenda_item(title: "My agenda item") item = MeetingAgendaItem.find_by(title: "My agenda item") - show_page.cancel_add_form + show_page.cancel_add_form(item) show_page.select_action(item, "Add notes") editor.set_markdown "# Hello there" diff --git a/modules/meeting/spec/features/structured_meetings/structured_meeting_crud_spec.rb b/modules/meeting/spec/features/structured_meetings/structured_meeting_crud_spec.rb index 3f7e816bd85c..7469f18899da 100644 --- a/modules/meeting/spec/features/structured_meetings/structured_meeting_crud_spec.rb +++ b/modules/meeting/spec/features/structured_meetings/structured_meeting_crud_spec.rb @@ -90,15 +90,17 @@ end show_page.expect_agenda_item title: "My agenda item" - show_page.cancel_add_form - item = MeetingAgendaItem.find_by(title: "My agenda item") + show_page.cancel_add_form(item) + + # can update show_page.edit_agenda_item(item) do fill_in "Title", with: "Updated title" click_on "Save" end show_page.expect_no_agenda_item title: "My agenda item" + show_page.expect_agenda_item title: "Updated title" # Can add multiple items show_page.add_agenda_item do @@ -136,7 +138,7 @@ # Can remove show_page.remove_agenda_item first show_page.assert_agenda_order! "Updated title", "Second" - show_page.cancel_add_form + show_page.cancel_add_form(second) # Can link work packages show_page.add_agenda_item(type: WorkPackage) do @@ -164,7 +166,7 @@ end show_page.select_action(item, I18n.t(:label_sort_lowest)) - show_page.cancel_add_form + show_page.cancel_add_form(item) show_page.add_agenda_item do fill_in "Title", with: "My agenda item" @@ -223,6 +225,16 @@ click_on I18n.t(:label_icalendar_download) + # dynamically wait for download to finish, otherwise expectation is too early + seconds = 0 + while seconds < 5 + # don't use subject as it will not get reevaluated in the next iteration + break if @download_list.refresh_from(page).latest_download.to_s != "" + + sleep 1 + seconds += 1 + end + expect(subject).to end_with ".ics" end end @@ -237,9 +249,10 @@ end show_page.expect_agenda_item title: "My agenda item" - show_page.cancel_add_form - item = MeetingAgendaItem.find_by!(title: "My agenda item") + + show_page.cancel_add_form(item) + show_page.edit_agenda_item(item) do # Side effect: update the item item.update!(title: "Updated title") @@ -261,7 +274,9 @@ end show_page.expect_agenda_item title: "My agenda item" - show_page.cancel_add_form + item = MeetingAgendaItem.find_by!(title: "My agenda item") + + show_page.cancel_add_form(item) click_on("op-meetings-header-action-trigger") click_on "Copy" @@ -272,7 +287,7 @@ show_page.expect_agenda_item title: "My agenda item" new_meeting = StructuredMeeting.reorder(id: :asc).last - expect(page).to have_current_path "/meetings/#{new_meeting.id}" + expect(page).to have_current_path "/projects/#{project.identifier}/meetings/#{new_meeting.id}" end context "with a work package reference to another" do @@ -296,4 +311,157 @@ expect(page).to have_no_text "Private task" end end + + context "with sections" do + let!(:meeting) { create(:structured_meeting, project:, author: current_user) } + let(:show_page) { Pages::StructuredMeeting::Show.new(meeting) } + + context "when starting with empty sections" do + it "can add, edit and delete sections" do + show_page.expect_toast(message: "Successful creation") + + # create the first section + show_page.add_section do + fill_in "Title", with: "First section" + click_on "Save" + end + + show_page.expect_section(title: "First section") + + first_section = MeetingSection.find_by!(title: "First section") + + meeting = first_section.meeting + + # edit the first section + show_page.edit_section(first_section) do + fill_in "Title", with: "Updated first section title" + click_on "Save" + end + + show_page.expect_no_section title: "First section" + show_page.expect_section title: "Updated first section title" + + # add a second section + show_page.add_section do + fill_in "Title", with: "Second section" + click_on "Save" + end + + show_page.expect_section(title: "Updated first section title") + show_page.expect_section(title: "Second section") + + second_section = MeetingSection.find_by!(title: "Second section") + + # remove the second section + show_page.remove_section second_section + + ## the first section is still rendered explicitly, as a name was specified + show_page.expect_section(title: "Updated first section title") + show_page.expect_no_section(title: "Second section") + + # add a section without a name is not possible + show_page.add_section do + click_on "Save" + expect(page).to have_text "Title can't be blank" + end + + # remove the first section + show_page.remove_section first_section + show_page.expect_no_section(title: "Updated first section title") + + # now the meeting completely empty again + + # add an item to the meeting + show_page.add_agenda_item do + fill_in "Title", with: "First item without explicit section" + end + + # the agenda item is wrapped in an "untitled" section, but the section is not explicitly rendered + show_page.expect_no_section(title: "Untitled section") + + # add a second section again + show_page.add_section do + fill_in "Title", with: "Second section" + click_on "Save" + end + + ## the first section without a name is now explicitly rendered as "Untitled" + show_page.expect_section(title: "Untitled section") + show_page.expect_section(title: "Second section") + + second_section = MeetingSection.find_by!(title: "Second section") + + # remove the second section + show_page.remove_section second_section + + ## the last existing section is not explicitly rendered as a section as no name was specified for this section + ## -> back to "no section mode" + show_page.expect_no_section(title: "Second section") + show_page.expect_no_section(title: "Untitled section") + + # TBD: remove the agenda item again, the untitle section is not rendered explicitly and will not be removed + first_item = MeetingAgendaItem.find_by!(title: "First item without explicit section") + show_page.remove_agenda_item(first_item) + + # add a second section again + show_page.add_section do + fill_in "Title", with: "Second section" + click_on "Save" + end + + ## the first section without a name is now again explicitly rendered as "Untitled" + show_page.expect_section(title: "Untitled section") + show_page.expect_section(title: "Second section") + + second_section = MeetingSection.find_by!(title: "Second section") + + # add an item to the latest section + show_page.add_agenda_item do + fill_in "Title", with: "First item" + fill_in "min", with: "25" + end + + show_page.expect_agenda_item_in_section title: "First item", section: second_section + + first_section = meeting.sections.first + + # add an item to the first section explicitly + show_page.add_agenda_item_to_section(section: first_section) do + fill_in "Title", with: "Second item" + fill_in "min", with: "30" + end + + show_page.expect_agenda_item_in_section title: "Second item", section: first_section + + # duration per section is shown + show_page.expect_section_duration(section: first_section, duration_text: "30 min") + show_page.expect_section_duration(section: second_section, duration_text: "25 min") + + item_in_first_section = MeetingAgendaItem.find_by!(title: "Second item") + item_in_second_section = MeetingAgendaItem.find_by!(title: "First item") + + show_page.edit_agenda_item(item_in_second_section) do + fill_in "min", with: "15" + click_on "Save" + end + + # duration gets updated + show_page.expect_section_duration(section: second_section, duration_text: "15 min") + + # deleting a section with agenda items is not possible + accept_confirm do + show_page.select_section_action(second_section, "Delete") + end + + # only untitled secion is left -> will not be rendered explicitly as secion + show_page.expect_no_section(title: "Untitled section") + show_page.expect_no_section(title: "Second section") + + expect { item_in_second_section.reload }.to raise_error(ActiveRecord::RecordNotFound) + + # the agenda items of the "untitled" section are still visible in "no-section mode" + show_page.expect_agenda_item(title: item_in_first_section.title) + end + end + end end diff --git a/modules/meeting/spec/features/structured_meetings/work_package_meetings_tab_spec.rb b/modules/meeting/spec/features/structured_meetings/work_package_meetings_tab_spec.rb index 0b7f7926dca0..c3367a974d8f 100644 --- a/modules/meeting/spec/features/structured_meetings/work_package_meetings_tab_spec.rb +++ b/modules/meeting/spec/features/structured_meetings/work_package_meetings_tab_spec.rb @@ -28,6 +28,7 @@ require "spec_helper" require_relative "../../support/pages/work_package_meetings_tab" +require_relative "../../support/pages/structured_meeting/show" RSpec.describe "Open the Meetings tab", :js do shared_let(:project) { create(:project) } @@ -279,19 +280,16 @@ end context "when user is allowed to edit meetings" do - it "shows the add to meeting button" do + it "shows the add to meeting button and dialog" do work_package_page.visit! switch_to_meetings_tab meetings_tab.expect_add_to_meeting_button_present - end - it "opens the add to meeting dialog when clicking the add to meeting button" do work_package_page.visit! switch_to_meetings_tab meetings_tab.open_add_to_meeting_dialog - meetings_tab.expect_add_to_meeting_dialog_shown end @@ -304,6 +302,8 @@ create(:structured_meeting, title: "Ongoing", project:, start_time: 1.hour.ago, duration: 4.0) end + let(:meeting_page) { Pages::StructuredMeeting::Show.new(first_upcoming_meeting) } + it "enables the user to add the work package to multiple open, upcoming meetings" do work_package_page.visit! switch_to_meetings_tab @@ -385,6 +385,22 @@ expect(page).to have_content("Meeting can't be blank") end + + it "adds presenter when the work package is added to a meeting" do + work_package_page.visit! + switch_to_meetings_tab + + meetings_tab.open_add_to_meeting_dialog + + meetings_tab.fill_and_submit_meeting_dialog( + first_upcoming_meeting, + "A very important note added from the meetings tab to the first meeting!" + ) + + meeting_page.visit! + + expect(page.find(".op-meeting-agenda-item--presenter")).to have_text(user.name) + end end end diff --git a/modules/meeting/spec/mailers/meeting_mailer_spec.rb b/modules/meeting/spec/mailers/meeting_mailer_spec.rb index c7119eb91565..af06a91f25fa 100644 --- a/modules/meeting/spec/mailers/meeting_mailer_spec.rb +++ b/modules/meeting/spec/mailers/meeting_mailer_spec.rb @@ -86,7 +86,7 @@ end context "with a recipient with another time zone" do - let!(:preference) { create(:user_preference, user: watcher1, time_zone: "Asia/Tokyo") } + let!(:preference) { watcher1.pref.update(time_zone: "Asia/Tokyo") } it "renders the mail with the correcet locale" do expect(mail.text_part.body).to include("Tokyo") @@ -119,7 +119,7 @@ end describe "it renders november 10th for Tokyo zone" do - let!(:preference) { create(:user_preference, user: watcher1, time_zone: "Asia/Tokyo") } + let!(:preference) { watcher1.pref.update(time_zone: "Asia/Tokyo") } let(:mail) { described_class.invited(meeting, watcher1, author) } it "renders the mail with the correct locale" do @@ -203,7 +203,7 @@ end context "with a recipient with another time zone" do - let!(:preference) { create(:user_preference, user: watcher1, time_zone: "Asia/Tokyo") } + let!(:preference) { watcher1.pref.update(time_zone: "Asia/Tokyo") } let(:mail) { described_class.icalendar_notification(meeting, watcher1, author) } it "renders the mail with the correct locale" do @@ -237,7 +237,7 @@ describe "it renders november 10th for Tokyo zone" do let(:mail) { described_class.icalendar_notification(meeting, watcher1, author) } - let!(:preference) { create(:user_preference, user: watcher1, time_zone: "Asia/Tokyo") } + let!(:preference) { watcher1.pref.update(time_zone: "Asia/Tokyo") } it "renders the mail with the correct locale" do expect(mail.text_part.body).to include("11/10/2021 07:00 AM-08:00 AM (GMT+09:00) Asia/Tokyo") diff --git a/modules/meeting/spec/models/meeting_section_spec.rb b/modules/meeting/spec/models/meeting_section_spec.rb new file mode 100644 index 000000000000..fe796a05e8f1 --- /dev/null +++ b/modules/meeting/spec/models/meeting_section_spec.rb @@ -0,0 +1,88 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +require_relative "../spec_helper" + +RSpec.describe MeetingSection do + let(:meeting_attributes) { {} } + let(:meeting) { build_stubbed(:structured_meeting, **meeting_attributes) } + let(:attributes) { {} } + let(:meeting_section) { described_class.new(meeting:, **attributes) } + + subject { meeting_section } + + describe "#title" do + let(:attributes) { { title: } } + + context "when title is blank" do + let(:title) { "" } + + it "is allowed" do + expect(subject).to be_valid + end + end + + context "when title is present" do + let(:title) { "My section" } + + it "validates" do + expect(subject).to be_valid + expect(subject.title).to eq "My section" + end + end + end + + describe "#modifiable?" do + subject { meeting_section.modifiable? } + + let(:attributes) { {} } + + context "when meeting is closed" do + let(:meeting_attributes) { { state: :closed } } + + it { is_expected.to be false } + end + end + + describe "#agenda_items_sum_duration_in_minutes" do + subject { meeting_section.agenda_items_sum_duration_in_minutes } + + let(:meeting) { create(:structured_meeting, **meeting_attributes) } + let(:meeting_section) { create(:meeting_section, meeting:) } + + context "when there are no agenda items" do + it { is_expected.to eq 0 } + end + + context "when there are agenda items" do + let!(:agenda_item) { create(:meeting_agenda_item, meeting_section:, duration_in_minutes: 15) } + + it { is_expected.to eq 15 } + end + end +end diff --git a/modules/meeting/spec/models/meeting_spec.rb b/modules/meeting/spec/models/meeting_spec.rb index 7774235d9e54..5a34ce14fd08 100644 --- a/modules/meeting/spec/models/meeting_spec.rb +++ b/modules/meeting/spec/models/meeting_spec.rb @@ -196,7 +196,7 @@ describe "acts_as_watchable" do it "is watchable" do - expect(described_class).to include(Redmine::Acts::Watchable::InstanceMethods) + expect(described_class).to include(::OpenProject::Acts::Watchable::InstanceMethods) end it "uses the :view_meetings permission" do diff --git a/modules/meeting/spec/models/queries/meetings/filters/dates_interval_filter_spec.rb b/modules/meeting/spec/models/queries/meetings/filters/dates_interval_filter_spec.rb new file mode 100644 index 000000000000..0184c0e58507 --- /dev/null +++ b/modules/meeting/spec/models/queries/meetings/filters/dates_interval_filter_spec.rb @@ -0,0 +1,50 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +require "spec_helper" + +RSpec.describe Queries::Meetings::Filters::DatesIntervalFilter do + it_behaves_like "basic query filter" do + let(:type) { :date } + let(:class_key) { :dates_interval } + + describe "#available?" do + it "is true" do + expect(instance).to be_available + end + end + + describe "#allowed_values" do + it "is nil" do + expect(instance.allowed_values).to be_nil + end + end + + it_behaves_like "non ar filter" + end +end diff --git a/modules/meeting/spec/seeders/demo_data/meeting_agenda_items_seeder_spec.rb b/modules/meeting/spec/seeders/demo_data/meeting_agenda_items_seeder_spec.rb new file mode 100644 index 000000000000..671aeccaa444 --- /dev/null +++ b/modules/meeting/spec/seeders/demo_data/meeting_agenda_items_seeder_spec.rb @@ -0,0 +1,103 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +require "spec_helper" + +RSpec.describe Meetings::DemoData::MeetingAgendaItemsSeeder do + include_context "with basic seed data" + + shared_let(:alice) { create(:user, firstname: "Alice") } + shared_let(:bob) { create(:user, firstname: "Bob") } + shared_let(:meeting) { create(:structured_meeting, title: "Weekly meeting") } + shared_let(:work_package) { create(:work_package, subject: "Some important task") } + + subject(:seeder) { described_class.new("_project", seed_data) } + + let(:seed_data) do + seed_data = basic_seed_data.merge(Source::SeedData.new(data_hash)) + seed_data.store_reference(:user_alice, alice) + seed_data.store_reference(:user_bob, bob) + seed_data.store_reference(:weekly_meeting, meeting) + seed_data.store_reference(:work_package_some_important_task, work_package) + seed_data + end + + before do + seeder.seed! + end + + context "with some meeting agenda items defined" do + let(:data_hash) do + YAML.load <<~SEEDING_DATA_YAML + meeting_agenda_items: + - title: Good news + notes: "What went well this week?" + meeting: :weekly_meeting + author: :user_alice + duration: 5 + - work_package: :work_package_some_important_task + title: "Important task" + notes: "We should discuss this..." + meeting: :weekly_meeting + author: :user_bob + presenter: :user_bob + SEEDING_DATA_YAML + end + + it "creates the corresponding statuses with the given attributes" do + expect(MeetingAgendaItem.count).to eq(2) + expect(MeetingAgendaItem.find_by(title: "Good news")).to have_attributes( + notes: "What went well this week?", + meeting:, + author: alice, + presenter: nil, + duration_in_minutes: 5 + ) + expect(MeetingAgendaItem.find_by(work_package_id: work_package.id)).to have_attributes( + notes: "We should discuss this...", + meeting:, + author: bob, + presenter: bob, + duration_in_minutes: nil + ) + end + + it "sets item type to simple if title is set and work_package is not set" do + expect(MeetingAgendaItem.find_by(title: "Good news")).to have_attributes( + item_type: "simple" + ) + end + + it "sets item type to work_package and set title to nil if work_package is set" do + expect(MeetingAgendaItem.find_by(work_package_id: work_package.id)).to have_attributes( + item_type: "work_package", + title: nil + ) + end + end +end diff --git a/modules/meeting/spec/seeders/demo_data/project_seeder_spec.rb b/modules/meeting/spec/seeders/demo_data/project_seeder_spec.rb index 839e59efb4ac..12b763b8e15b 100644 --- a/modules/meeting/spec/seeders/demo_data/project_seeder_spec.rb +++ b/modules/meeting/spec/seeders/demo_data/project_seeder_spec.rb @@ -93,11 +93,11 @@ expect(first.author).to eq user expect(first.notes).to eq "Some **markdown**" - second = meeting.agenda_items.find_by(title: "Reference") + second = meeting.agenda_items.find_by(work_package:) + expect(second.title).to be_nil expect(second.duration_in_minutes).to eq 5 expect(second.author).to eq user expect(second.notes).to eq "Some **markdown**" - expect(second.work_package).to eq work_package end it "uses default duration of 1h if not specified" do diff --git a/modules/meeting/spec/services/meetings/copy_service_integration_spec.rb b/modules/meeting/spec/services/meetings/copy_service_integration_spec.rb index f0fcd27170b1..3b6a3addbadf 100644 --- a/modules/meeting/spec/services/meetings/copy_service_integration_spec.rb +++ b/modules/meeting/spec/services/meetings/copy_service_integration_spec.rb @@ -48,6 +48,14 @@ expect(copy.start_time).to eq(meeting.start_time + 1.week) end + context 'when the meeting is closed' do + it "reopens the meeting" do + meeting.update! state: "closed" + expect(service_result).to be_success + expect(copy.state).to eq("open") + end + end + describe "with participants" do let(:invited_user) { create(:user, member_with_permissions: { project => %i(view_meetings) }) } let(:attending_user) { create(:user, member_with_permissions: { project => %i(view_meetings) }) } @@ -92,7 +100,7 @@ end it "copies the agenda item" do - expect(copy.agenda_items.length) + expect(copy.reload.agenda_items.length) .to eq 1 expect(copy.agenda_items.first.notes) @@ -121,6 +129,7 @@ context "when asking to copy attachments" do let(:params) { { copy_attachments: true } } + it "copies the attachment" do expect(copy.attachments.length) .to eq 1 diff --git a/modules/meeting/spec/services/meetings/ical_service_spec.rb b/modules/meeting/spec/services/meetings/ical_service_spec.rb index 56aad869dc5f..ffb784253987 100644 --- a/modules/meeting/spec/services/meetings/ical_service_spec.rb +++ b/modules/meeting/spec/services/meetings/ical_service_spec.rb @@ -28,8 +28,11 @@ require "spec_helper" -RSpec.describe Meetings::ICalService, type: :model do - shared_let(:user) { create(:user, firstname: "Bob", lastname: "Barker", mail: "bob@example.com") } +RSpec.describe Meetings::ICalService, type: :model do # rubocop:disable RSpec/SpecFilePathFormat + shared_let(:user) do + create(:user, firstname: "Bob", lastname: "Barker", + mail: "bob@example.com", preferences: { time_zone: "America/New_York" }) + end shared_let(:user2) { create(:user, firstname: "Foo", lastname: "Fooer", mail: "foo@example.com") } shared_let(:project) { create(:project, name: "My Project") } @@ -50,7 +53,9 @@ let(:service) { described_class.new(user:, meeting:) } let(:result) { service.call.result } - subject(:entry) { Icalendar::Event.parse(result).first } + let(:entry) { Icalendar::Event.parse(result).first } + let(:standard_zone) { Icalendar::Calendar.parse(result).first.timezones.first.standards.first } + let(:daylight_zone) { Icalendar::Calendar.parse(result).first.timezones.first.daylights.first } describe "#call" do it "returns a success" do @@ -81,6 +86,14 @@ expect(entry.location).to eq(meeting.location.presence) expect(entry.dtstart).to eq Time.zone.parse("2021-01-19T10:00:00Z").in_time_zone("Europe/Berlin") expect(entry.dtend).to eq (Time.zone.parse("2021-01-19T10:00:00Z") + 1.hour).in_time_zone("Europe/Berlin") + + # do autogenerated ical timezone definitions match real DST switch times? + standard = standard_zone.dtstart.to_time + real_standard = Time.zone.parse("01-11-2020 01:00:00") + daylight = daylight_zone.dtstart.to_time + real_daylight = Time.zone.parse("14-03-2021 03:00:00") + expect(standard.strftime("%a, %d %b %Y %H:%M:%S")).to eq (real_standard.strftime("%a, %d %b %Y %H:%M:%S")) + expect(daylight.strftime("%a, %d %b %Y %H:%M:%S")).to eq (real_daylight.strftime("%a, %d %b %Y %H:%M:%S")) end end end diff --git a/modules/meeting/spec/support/pages/meetings/index.rb b/modules/meeting/spec/support/pages/meetings/index.rb index df51b70a4ed7..abf2f2c317e9 100644 --- a/modules/meeting/spec/support/pages/meetings/index.rb +++ b/modules/meeting/spec/support/pages/meetings/index.rb @@ -39,9 +39,7 @@ def initialize(project:) end def click_create_new - within ".toolbar-items" do - click_on "Meeting" - end + click_on("add-meeting-button") New.new(project) end @@ -51,15 +49,11 @@ def expect_no_main_menu end def expect_no_create_new_button - within ".toolbar-items" do - expect(page).to have_no_css "#add-meeting-button" - end + expect(page).not_to have_test_selector("add-meeting-button") end def expect_no_create_new_buttons - within ".toolbar-items" do - expect(page).to have_no_css "#add-meeting-button" - end + expect(page).not_to have_test_selector("add-meeting-button") within "#main-menu" do expect(page).to have_no_button "Meeting" @@ -67,15 +61,11 @@ def expect_no_create_new_buttons end def expect_create_new_button - within ".toolbar-items" do - expect(page).to have_css "#add-meeting-button" - end + expect(page).to have_test_selector("add-meeting-button") end def expect_create_new_buttons - within ".toolbar-items" do - expect(page).to have_css "#add-meeting-button" - end + expect(page).to have_test_selector("add-meeting-button") within "#main-menu" do expect(page).to have_button "Meeting" diff --git a/modules/meeting/spec/support/pages/structured_meeting/history.rb b/modules/meeting/spec/support/pages/structured_meeting/history.rb index a4df4a6f6911..33bcabb2ad07 100644 --- a/modules/meeting/spec/support/pages/structured_meeting/history.rb +++ b/modules/meeting/spec/support/pages/structured_meeting/history.rb @@ -37,6 +37,9 @@ def open_history_modal retry_block do click_link_or_button "op-meetings-header-action-trigger" click_link_or_button "History" + # dynamically wait for the modal to be loaded + # otherwise running into timing issues with `item = history_page.first_item` + expect(page).to have_css(".op-activity-list--item") end end @@ -66,9 +69,7 @@ def first_item def find_item(detail) detail = page.find("li.op-activity-list--item-detail", text: detail) - item = detail.ancestor(".op-activity-list--item-details").ancestor(".op-activity-list--item") - - item + detail.ancestor(".op-activity-list--item-details").ancestor(".op-activity-list--item") end end end diff --git a/modules/meeting/spec/support/pages/structured_meeting/mobile/show.rb b/modules/meeting/spec/support/pages/structured_meeting/mobile/show.rb index 4455dd0dd0a7..20e63fdbf445 100644 --- a/modules/meeting/spec/support/pages/structured_meeting/mobile/show.rb +++ b/modules/meeting/spec/support/pages/structured_meeting/mobile/show.rb @@ -33,15 +33,15 @@ class Show < ::Pages::StructuredMeeting::Show def expect_participants(count: 1) within(meeting_details_container) do expect(page).to have_text(Meeting.human_attribute_name(:participant, count:)) - expect(page).to have_button("Show all") + expect(page).to have_link("Show all") end end def open_participant_form within(meeting_details_container) do - click_on "Show all" + click_link_or_button "Show all" end - expect(page).to have_css("#meetings-sidebar-participants-form-component") + expect(page).to have_css("#edit-participants-dialog") end end end diff --git a/modules/meeting/spec/support/pages/structured_meeting/show.rb b/modules/meeting/spec/support/pages/structured_meeting/show.rb index 68d28ab95900..3370db6ed294 100644 --- a/modules/meeting/spec/support/pages/structured_meeting/show.rb +++ b/modules/meeting/spec/support/pages/structured_meeting/show.rb @@ -48,13 +48,24 @@ def add_agenda_item(type: MeetingAgendaItem, save: true, &) end end - def cancel_add_form - page.within("#meeting-agenda-items-new-component") do + def cancel_add_form(item) + page.within("#meeting-agenda-items-new-component-#{item.meeting_section_id}") do click_on I18n.t(:button_cancel) expect(page).to have_no_link I18n.t(:button_cancel) end end + def add_agenda_item_to_section(section:, type: MeetingAgendaItem, save: true, &) + select_section_action(section, type.model_name.human) + + within("#meeting-sections-show-component-#{section.id}") do + in_agenda_form do + yield + click_on("Save") if save + end + end + end + def cancel_edit_form(item) in_edit_form(item) do click_on I18n.t(:button_cancel) @@ -91,6 +102,12 @@ def expect_agenda_item(title:) expect(page).to have_test_selector("op-meeting-agenda-title", text: title) end + def expect_agenda_item_in_section(title:, section:) + within("#meeting-sections-show-component-#{section.id}") do + expect_agenda_item(title:) + end + end + def expect_agenda_link(item) if item.is_a?(WorkPackage) expect(page).to have_css("[id^='meeting-agenda-items-item-component-']", text: item.subject) @@ -125,6 +142,23 @@ def select_action(item, action) end end + def select_section_action(section, action) + retry_block do + click_on_section_menu(section) + page.find(".Overlay") + end + + page.within(".Overlay") do + click_on action + end + end + + def click_on_section_menu(section) + page.within_test_selector("meeting-section-header-container-#{section.id}") do + page.find_test_selector("meeting-section-action-menu").click + end + end + def edit_agenda_item(item, &) select_action item, "Edit" expect_item_edit_form(item) @@ -158,11 +192,11 @@ def clear_item_edit_work_package_title def open_participant_form page.find_test_selector("manage-participants-button").click - expect(page).to have_css("#meetings-sidebar-participants-form-component") + expect(page).to have_css("#edit-participants-dialog") end def in_participant_form(&) - page.within("#meetings-sidebar-participants-form-component form", &) + page.within("#edit-participants-dialog", &) end def expect_participant(participant, invited: false, attended: false, editable: true) @@ -196,5 +230,46 @@ def close_dialog def meeting_details_container find_by_id("meetings-sidebar-details-component") end + + def in_latest_section_form(&) + page.within(all(".op-meeting-section-container").last, &) + end + + def add_section(&) + page.within("#meeting-agenda-items-new-button-component") do + click_on I18n.t(:button_add) + click_on "Section" + # wait for the disabled button, indicating the turbo streams are applied + expect(page).to have_css("#meeting-agenda-items-new-button-component button[disabled='disabled']") + end + + in_latest_section_form(&) + end + + def expect_section(title:) + expect(page).to have_css(".op-meeting-section-container", text: title) + end + + def expect_no_section(title:) + expect(page).to have_no_css(".op-meeting-section-container", text: title) + end + + def expect_section_duration(section:, duration_text:) + page.within_test_selector("meeting-section-header-container-#{section.id}") do + expect(page).to have_text(duration_text) + end + end + + def edit_section(section, &) + select_section_action(section, "Edit") + + page.within_test_selector("meeting-section-header-container-#{section.id}", &) + end + + def remove_section(section) + accept_confirm do + select_section_action(section, "Delete") + end + end end end diff --git a/modules/meeting/spec/support/pages/work_package_meetings_tab.rb b/modules/meeting/spec/support/pages/work_package_meetings_tab.rb index 37c95e8339bd..5e71e4928a8f 100644 --- a/modules/meeting/spec/support/pages/work_package_meetings_tab.rb +++ b/modules/meeting/spec/support/pages/work_package_meetings_tab.rb @@ -79,7 +79,7 @@ def expect_add_to_meeting_button_not_present end def expect_add_to_meeting_dialog_shown - expect(page).to have_test_selector("op-add-work-package-to-meeting-dialog-body") + expect(page).to have_css("#add-work-package-to-meeting-dialog") end def switch_to_upcoming_meetings_section diff --git a/modules/my_page/lib/my_page/grid_registration.rb b/modules/my_page/lib/my_page/grid_registration.rb index 6e0085812dcd..fca2a6304586 100644 --- a/modules/my_page/lib/my_page/grid_registration.rb +++ b/modules/my_page/lib/my_page/grid_registration.rb @@ -12,6 +12,7 @@ class GridRegistration < ::Grids::Configuration::Registration "work_packages_calendar", "work_packages_table", "time_entries_current_user", + "project_favorites", "news" wp_table_strategy_proc = Proc.new do diff --git a/modules/my_page/spec/features/my/my_spent_time_widget_with_a_negative_time_zone_spec.rb b/modules/my_page/spec/features/my/my_spent_time_widget_with_a_negative_time_zone_spec.rb index 7c4fa6476b7d..a743621ee332 100644 --- a/modules/my_page/spec/features/my/my_spent_time_widget_with_a_negative_time_zone_spec.rb +++ b/modules/my_page/spec/features/my/my_spent_time_widget_with_a_negative_time_zone_spec.rb @@ -31,7 +31,6 @@ require_relative "../../support/pages/my/page" RSpec.describe "My spent time widget with a negative time zone", :js, - driver: :chrome_headless_new, with_settings: { start_of_week: 1 } do let(:beginning_of_week) { monday } let(:end_of_week) { sunday } @@ -39,7 +38,7 @@ let(:tuesday) { beginning_of_week + 1.day } let(:thursday) { beginning_of_week + 3.days } let(:sunday) { beginning_of_week + 6.days } - let(:time_zone) { "America/Phoenix" } + let(:time_zone) { "America/New_York" } let!(:type) { create(:type) } let!(:project) { create(:project, types: [type]) } @@ -68,32 +67,29 @@ let!(:week_days) { week_with_saturday_and_sunday_as_weekend } let!(:non_working_day) { create(:non_working_day, date: tuesday) } - # Configure the time zone of the browser - # @param [String] time_zone The time zone to set, for instance 'Europe/Paris' - def set_browser_time_zone(time_zone) - page.driver.browser.execute_cdp("Emulation.setTimezoneOverride", timezoneId: time_zone) - end - before do login_as user - set_browser_time_zone(time_zone) my_page.visit! end - it "correctly displays non-working days and prefills day when logging time [fix #49779]" do + it "correctly displays non-working days and prefills day when logging time [fix #49779]", + driver: :chrome_new_york_time_zone do my_page.add_widget(1, 1, :within, "My spent time") my_page.expect_and_dismiss_toaster message: I18n.t(:notice_successful_update) + expect(page) + .to have_content time_entry.spent_on.strftime("%-m/%-d") + aggregate_failures("non-working days are displayed properly") do expect(page).to have_button("Today", disabled: true) - expect(page).to have_no_css(".fc-day-mon.fc-non-working-day", wait: 0) - expect(page).to have_css(".fc-day-tue.fc-non-working-day", wait: 0) - expect(page).to have_no_css(".fc-day-wed.fc-non-working-day", wait: 0) - expect(page).to have_no_css(".fc-day-thu.fc-non-working-day", wait: 0) - expect(page).to have_no_css(".fc-day-fri.fc-non-working-day", wait: 0) - expect(page).to have_css(".fc-day-sat.fc-non-working-day", wait: 0) - expect(page).to have_css(".fc-day-sun.fc-non-working-day", wait: 0) + expect(page).to have_no_css(".fc-day-mon.fc-non-working-day") + expect(page).to have_css(".fc-day-tue.fc-non-working-day") + expect(page).to have_no_css(".fc-day-wed.fc-non-working-day") + expect(page).to have_no_css(".fc-day-thu.fc-non-working-day") + expect(page).to have_no_css(".fc-day-fri.fc-non-working-day") + expect(page).to have_css(".fc-day-sat.fc-non-working-day") + expect(page).to have_css(".fc-day-sun.fc-non-working-day") end aggregate_failures("when clicking a day, time entry day is set to the day clicked (Thursday)") do diff --git a/modules/openid_connect/config/locales/crowdin/af.yml b/modules/openid_connect/config/locales/crowdin/af.yml index 0d53f3916fbd..b165f6484cd2 100644 --- a/modules/openid_connect/config/locales/crowdin/af.yml +++ b/modules/openid_connect/config/locales/crowdin/af.yml @@ -1,7 +1,7 @@ af: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/ar.yml b/modules/openid_connect/config/locales/crowdin/ar.yml index 327286f1d071..7ad37fa0866f 100644 --- a/modules/openid_connect/config/locales/crowdin/ar.yml +++ b/modules/openid_connect/config/locales/crowdin/ar.yml @@ -1,7 +1,7 @@ ar: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/az.yml b/modules/openid_connect/config/locales/crowdin/az.yml index e42a9e7dab40..260545376be2 100644 --- a/modules/openid_connect/config/locales/crowdin/az.yml +++ b/modules/openid_connect/config/locales/crowdin/az.yml @@ -1,7 +1,7 @@ az: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/be.yml b/modules/openid_connect/config/locales/crowdin/be.yml index fa94f6effa4e..fdfb2d8bb4a3 100644 --- a/modules/openid_connect/config/locales/crowdin/be.yml +++ b/modules/openid_connect/config/locales/crowdin/be.yml @@ -1,7 +1,7 @@ be: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/bg.yml b/modules/openid_connect/config/locales/crowdin/bg.yml index c296a6f5eecd..03104944c350 100644 --- a/modules/openid_connect/config/locales/crowdin/bg.yml +++ b/modules/openid_connect/config/locales/crowdin/bg.yml @@ -1,7 +1,7 @@ bg: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/ca.yml b/modules/openid_connect/config/locales/crowdin/ca.yml index 2eff667b043e..0e32a19593fe 100644 --- a/modules/openid_connect/config/locales/crowdin/ca.yml +++ b/modules/openid_connect/config/locales/crowdin/ca.yml @@ -1,7 +1,7 @@ ca: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Afegeix proveïdors d'estratègia OmniAuth OpenID Connect a OpenProject." logout_warning: > S'ha tancat la teva sessió. Es poden haver perdut els continguts de qualsevol formulari sotmès. Si us plau, [inicia sessió]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/ckb-IR.yml b/modules/openid_connect/config/locales/crowdin/ckb-IR.yml index 3b8d913fd8a1..b8c21ef7d4b8 100644 --- a/modules/openid_connect/config/locales/crowdin/ckb-IR.yml +++ b/modules/openid_connect/config/locales/crowdin/ckb-IR.yml @@ -1,7 +1,7 @@ ckb-IR: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/cs.yml b/modules/openid_connect/config/locales/crowdin/cs.yml index 972792159571..48c62def176f 100644 --- a/modules/openid_connect/config/locales/crowdin/cs.yml +++ b/modules/openid_connect/config/locales/crowdin/cs.yml @@ -1,7 +1,7 @@ cs: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Přidá poskytovatele strategie OmniAuth OpenID připojení do Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > Byli jste odhlášeni. Obsah formuláře může být ztracen. Prosím, [přihlaste se]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/da.yml b/modules/openid_connect/config/locales/crowdin/da.yml index e8aa06cc24c5..8dd9d913c9aa 100644 --- a/modules/openid_connect/config/locales/crowdin/da.yml +++ b/modules/openid_connect/config/locales/crowdin/da.yml @@ -1,7 +1,7 @@ da: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/de.yml b/modules/openid_connect/config/locales/crowdin/de.yml index 2de011b42db3..20d622cc3704 100644 --- a/modules/openid_connect/config/locales/crowdin/de.yml +++ b/modules/openid_connect/config/locales/crowdin/de.yml @@ -1,7 +1,7 @@ de: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Fügt OmniAuth OpenID Connect Strategieanbieter zu Openproject hinzu." + description: "Fügt OmniAuth OpenID Connect Strategieanbieter zu OpenProject hinzu." logout_warning: > Sie wurden abgemeldet. Der Inhalt eines Formulars, das Sie uns übermitteln, kann verloren gehen. Bitte [einloggen]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/el.yml b/modules/openid_connect/config/locales/crowdin/el.yml index ab24b24f28d5..a8a3cc2d040c 100644 --- a/modules/openid_connect/config/locales/crowdin/el.yml +++ b/modules/openid_connect/config/locales/crowdin/el.yml @@ -1,7 +1,7 @@ el: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > Έχετε αποσυνδεθεί. Τα περιεχόμενα οποιασδήποτε φόρμας που υποβάλετε ενδέχεται να χαθούν. Παρακαλούμε [συνδεθείτε]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/eo.yml b/modules/openid_connect/config/locales/crowdin/eo.yml index abf1e3dff2ab..d83e1c57e0a6 100644 --- a/modules/openid_connect/config/locales/crowdin/eo.yml +++ b/modules/openid_connect/config/locales/crowdin/eo.yml @@ -1,7 +1,7 @@ eo: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/es.yml b/modules/openid_connect/config/locales/crowdin/es.yml index af399fe24d43..d69a99f13c2e 100644 --- a/modules/openid_connect/config/locales/crowdin/es.yml +++ b/modules/openid_connect/config/locales/crowdin/es.yml @@ -1,7 +1,7 @@ es: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Añade proveedores de estrategia OmniAuth OpenID Connect a Openproject." + description: "Añade proveedores de estrategia OmniAuth OpenID Connect a OpenProject." logout_warning: > Se ha cerrado la sesión. Puede que se haya perdido el contenido de cualquier formulario que haya enviado. [Inicie la sesión]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/et.yml b/modules/openid_connect/config/locales/crowdin/et.yml index 41c1632f7572..a08b8a8b3148 100644 --- a/modules/openid_connect/config/locales/crowdin/et.yml +++ b/modules/openid_connect/config/locales/crowdin/et.yml @@ -1,7 +1,7 @@ et: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/eu.yml b/modules/openid_connect/config/locales/crowdin/eu.yml index f1006e960a13..c978451f9d27 100644 --- a/modules/openid_connect/config/locales/crowdin/eu.yml +++ b/modules/openid_connect/config/locales/crowdin/eu.yml @@ -1,7 +1,7 @@ eu: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/fa.yml b/modules/openid_connect/config/locales/crowdin/fa.yml index ad03bf626a2a..38f5d4c99f05 100644 --- a/modules/openid_connect/config/locales/crowdin/fa.yml +++ b/modules/openid_connect/config/locales/crowdin/fa.yml @@ -1,7 +1,7 @@ fa: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/fi.yml b/modules/openid_connect/config/locales/crowdin/fi.yml index 56d6bd605992..25c94ad58ebe 100644 --- a/modules/openid_connect/config/locales/crowdin/fi.yml +++ b/modules/openid_connect/config/locales/crowdin/fi.yml @@ -1,7 +1,7 @@ fi: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/fil.yml b/modules/openid_connect/config/locales/crowdin/fil.yml index 29f023994dd9..72738fce7f50 100644 --- a/modules/openid_connect/config/locales/crowdin/fil.yml +++ b/modules/openid_connect/config/locales/crowdin/fil.yml @@ -1,7 +1,7 @@ fil: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/fr.yml b/modules/openid_connect/config/locales/crowdin/fr.yml index 3f5b1a706bc3..7042ee01c3c4 100644 --- a/modules/openid_connect/config/locales/crowdin/fr.yml +++ b/modules/openid_connect/config/locales/crowdin/fr.yml @@ -1,7 +1,7 @@ fr: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Ajoute des fournisseurs de stratégie OmniAuth OpenID Connect à OpenProject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > Vous avez été déconnecté. Le contenu de tout formulaire que vous soumettez peut être perdu. Veuillez [vous connecter]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/he.yml b/modules/openid_connect/config/locales/crowdin/he.yml index fc3fa0969463..cbdcacd552ab 100644 --- a/modules/openid_connect/config/locales/crowdin/he.yml +++ b/modules/openid_connect/config/locales/crowdin/he.yml @@ -1,7 +1,7 @@ he: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/hi.yml b/modules/openid_connect/config/locales/crowdin/hi.yml index fa8d1422d68e..3c80ec95e3d7 100644 --- a/modules/openid_connect/config/locales/crowdin/hi.yml +++ b/modules/openid_connect/config/locales/crowdin/hi.yml @@ -1,7 +1,7 @@ hi: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/hr.yml b/modules/openid_connect/config/locales/crowdin/hr.yml index a09f226dc7e9..032696a069c1 100644 --- a/modules/openid_connect/config/locales/crowdin/hr.yml +++ b/modules/openid_connect/config/locales/crowdin/hr.yml @@ -1,7 +1,7 @@ hr: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/hu.yml b/modules/openid_connect/config/locales/crowdin/hu.yml index 05d3d8760841..505048e93c8e 100644 --- a/modules/openid_connect/config/locales/crowdin/hu.yml +++ b/modules/openid_connect/config/locales/crowdin/hu.yml @@ -1,7 +1,7 @@ hu: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > Kijelentkeztél. A benyújtott űrlap tartalma elveszhet. Kérjük jelentkezz be. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/id.yml b/modules/openid_connect/config/locales/crowdin/id.yml index b72c30cff0ac..5c099be609e2 100644 --- a/modules/openid_connect/config/locales/crowdin/id.yml +++ b/modules/openid_connect/config/locales/crowdin/id.yml @@ -1,7 +1,7 @@ id: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > Anda telah keluar. Isi formulir apa pun yang Anda kirim mungkin akan hilang. Silahkan [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/it.yml b/modules/openid_connect/config/locales/crowdin/it.yml index 5602fcebfd9f..e53ff4995986 100644 --- a/modules/openid_connect/config/locales/crowdin/it.yml +++ b/modules/openid_connect/config/locales/crowdin/it.yml @@ -1,7 +1,7 @@ it: plugin_openproject_openid_connect: name: "OpenID Connect OpenProject" - description: "Aggiunge i provider di strategia OmniAuth OpenID Connect a Openproject." + description: "Aggiunge i provider di strategia OmniAuth OpenID Connect a OpenProject." logout_warning: > Sei stato disconnesso. Il contenuto di qualsiasi modulo che invii potrebbe essere perso. Per favore [accedi]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/ja.yml b/modules/openid_connect/config/locales/crowdin/ja.yml index 37f0399346f1..71813f18fe2f 100644 --- a/modules/openid_connect/config/locales/crowdin/ja.yml +++ b/modules/openid_connect/config/locales/crowdin/ja.yml @@ -1,7 +1,7 @@ ja: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > ログアウトしています。送信したフォームの内容は失われる可能性があります。 [ログイン] してください。 activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/ka.yml b/modules/openid_connect/config/locales/crowdin/ka.yml index ec0c512a25d5..87f7be50c364 100644 --- a/modules/openid_connect/config/locales/crowdin/ka.yml +++ b/modules/openid_connect/config/locales/crowdin/ka.yml @@ -1,7 +1,7 @@ ka: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/kk.yml b/modules/openid_connect/config/locales/crowdin/kk.yml index 7167497cfcf9..c5034e349b22 100644 --- a/modules/openid_connect/config/locales/crowdin/kk.yml +++ b/modules/openid_connect/config/locales/crowdin/kk.yml @@ -1,7 +1,7 @@ kk: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/ko.yml b/modules/openid_connect/config/locales/crowdin/ko.yml index f37487ab6c1a..bfe3c893c23e 100644 --- a/modules/openid_connect/config/locales/crowdin/ko.yml +++ b/modules/openid_connect/config/locales/crowdin/ko.yml @@ -1,7 +1,7 @@ ko: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Openproject에 OmniAuth OpenID Connect 전략 공급자를 추가합니다." + description: "OpenProject에 OmniAuth OpenID Connect 전략 공급자를 추가합니다." logout_warning: > 로그아웃되었습니다. 제출한 양식의 내용이 손실될 수 있습니다. [로그인]하십시오. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/lt.yml b/modules/openid_connect/config/locales/crowdin/lt.yml index d6eae7d9a0f3..3131a5302c7d 100644 --- a/modules/openid_connect/config/locales/crowdin/lt.yml +++ b/modules/openid_connect/config/locales/crowdin/lt.yml @@ -1,7 +1,7 @@ lt: plugin_openproject_openid_connect: name: "OpenProject OpenID prisijungimas" - description: "Prideda OpenProject OmniAuth OpenID prisijungimo strategijos teikėjus." + description: "Pridėti OmniAuth OpenID Connect strategijos tiekėjus į OpenProject." logout_warning: > Jūs atsijungėte. Bet kurios siunčiamos formos turinys gali būti prarastas. Prašome [prisijungti]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/lv.yml b/modules/openid_connect/config/locales/crowdin/lv.yml index f1adab4fb798..f2be46e803e0 100644 --- a/modules/openid_connect/config/locales/crowdin/lv.yml +++ b/modules/openid_connect/config/locales/crowdin/lv.yml @@ -1,7 +1,7 @@ lv: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/mn.yml b/modules/openid_connect/config/locales/crowdin/mn.yml index ae939d52e6f4..0b4e880de14d 100644 --- a/modules/openid_connect/config/locales/crowdin/mn.yml +++ b/modules/openid_connect/config/locales/crowdin/mn.yml @@ -1,7 +1,7 @@ mn: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/ms.yml b/modules/openid_connect/config/locales/crowdin/ms.yml index 6c2643ffd2b3..b4ee3ef8219c 100644 --- a/modules/openid_connect/config/locales/crowdin/ms.yml +++ b/modules/openid_connect/config/locales/crowdin/ms.yml @@ -1,9 +1,9 @@ ms: plugin_openproject_openid_connect: - name: "Connect OpenID OpenProject" + name: "Sambungkan OpenID OpenProject" description: "Tambah penyedia strategi OmniAuth OpenID Connect ke OpenProject." logout_warning: > - Anda telah log keluar. Apa-apa bentuk kandungan yang anda hantar mungkin hilang. Sila [log masuk]. + Anda telah log keluar. Sebarang bentuk kandungan yang anda hantar mungkin hilang. Sila [log masuk]. activemodel: attributes: openid_connect/provider: @@ -12,21 +12,21 @@ ms: identifier: Pengenal secret: "Sulit\n" scope: Skop - limit_self_registration: Had pendaftaran sendiri + limit_self_registration: Hadkan pendaftaran sendiri openid_connect: - menu_title: Penyedia OpenID + menu_title: Pembekal OpenID providers: - label_add_new: Tambah penyedia OpenID baru - label_edit: Edit penyedia OpenID %{name} - no_results_table: Masih tiada penyedia yang ditetapkan lagi. - plural: Penyedia-penyedia OpenID - singular: Penyedia OpenID + label_add_new: Tambah pembekal OpenID baharu + label_edit: Edit pembekal OpenID %{name} + no_results_table: Belum ada pembekal yang ditetapkan lagi. + plural: Pembekal OpenID + singular: Pembekal OpenID setting_instructions: azure_deprecation_warning: > - Aplikasi Azure yang dikonfigurasikan menghala ke API yang ditamatkan daripada Azure. Sila buat aplikasi Azure baru untuk memastikan kefungsiannya pada masa akan datang. + Aplikasi Azure yang dikonfigurasikan menghala ke API yang ditamatkan daripada Azure. Sila buat aplikasi Azure baharu untuk memastikan kefungsiannya pada masa akan datang. azure_graph_api: > Gunakan titik akhir info pengguna graph.microsoft.com untuk meminta data pengguna. Ini sepatutnya default melainkan anda mempunyai aplikasi azure yang lama. azure_tenant_html: > - Tetapkan penyewa titik akhir Azure anda. Ini akan mengawal sesiapa yang mendapat akses kepada contoh OpenProject. Untuk maklumat lanjut, sila kunjungi panduan pengguna kami di connect OpenID Azure. + Tetapkan penyewa titik akhir Azure anda. Ini akan mengawal sesiapa yang mendapat akses kepada contoh OpenProject. Untuk maklumat lanjut, sila kunjungi panduan pengguna kami di sambungan OpenID Azure. limit_self_registration: > Jika pengguna yang dibenarkan hanya boleh mendaftar menggunakan penyediaan ini jika tetapan pendaftaran sendiri dibenarkan. diff --git a/modules/openid_connect/config/locales/crowdin/ne.yml b/modules/openid_connect/config/locales/crowdin/ne.yml index 580d012c98ce..2ff31439c1b0 100644 --- a/modules/openid_connect/config/locales/crowdin/ne.yml +++ b/modules/openid_connect/config/locales/crowdin/ne.yml @@ -1,7 +1,7 @@ ne: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/nl.yml b/modules/openid_connect/config/locales/crowdin/nl.yml index 2844afad39db..7ee57415767b 100644 --- a/modules/openid_connect/config/locales/crowdin/nl.yml +++ b/modules/openid_connect/config/locales/crowdin/nl.yml @@ -1,7 +1,7 @@ nl: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > U bent uitgelogd. De inhoud van uw formulier kan verloren gaan. Alstublieft [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/no.yml b/modules/openid_connect/config/locales/crowdin/no.yml index 52b2347c7298..76bba3b28e9a 100644 --- a/modules/openid_connect/config/locales/crowdin/no.yml +++ b/modules/openid_connect/config/locales/crowdin/no.yml @@ -1,7 +1,7 @@ "no": plugin_openproject_openid_connect: name: "OpenProject OpenID tilkobling" - description: "Legger til OmniAuth OpenID Koble strategileverandører til Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > Du har blitt logget ut. Innholdet kan gå tapt. Vennligst [logg in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/pt-BR.yml b/modules/openid_connect/config/locales/crowdin/pt-BR.yml index 74764dad5681..854b5be621c8 100644 --- a/modules/openid_connect/config/locales/crowdin/pt-BR.yml +++ b/modules/openid_connect/config/locales/crowdin/pt-BR.yml @@ -1,7 +1,7 @@ pt-BR: plugin_openproject_openid_connect: name: "Conectar OpenProject OpenID" - description: "Adiciona provedores de estratégia OmniAuth OpenID Connect ao Openproject." + description: "Adiciona provedores de estratégia OmniAuth OpenID Connect ao OpenProject." logout_warning: > Você foi desconectado. O conteúdo de qualquer formulário que você enviar poderá ser perdido. Por favor [faça login]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/pt-PT.yml b/modules/openid_connect/config/locales/crowdin/pt-PT.yml index 8ac260196e32..f9b1ce7d4aeb 100644 --- a/modules/openid_connect/config/locales/crowdin/pt-PT.yml +++ b/modules/openid_connect/config/locales/crowdin/pt-PT.yml @@ -1,7 +1,7 @@ pt-PT: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adiciona fornecedores da estratégia OmniAuth OpenID Connect ao Openproject." + description: "Adiciona fornecedores da estratégia OmniAuth OpenID Connect ao OpenProject." logout_warning: > A sua sessão foi terminada. O conteúdo de qualquer formulário que enviar poderá ser perdido. Por favor [inicie a sessão]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/ro.yml b/modules/openid_connect/config/locales/crowdin/ro.yml index b1405d150ca5..a121cf646e06 100644 --- a/modules/openid_connect/config/locales/crowdin/ro.yml +++ b/modules/openid_connect/config/locales/crowdin/ro.yml @@ -1,7 +1,7 @@ ro: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > Ați fost deconectat. Conținutul oricărui formular pe care îl trimiteți poate fi pierdut. Vă rugăm să [vă conectați]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/ru.yml b/modules/openid_connect/config/locales/crowdin/ru.yml index 35e69a9920cd..9ca12a55fbe2 100644 --- a/modules/openid_connect/config/locales/crowdin/ru.yml +++ b/modules/openid_connect/config/locales/crowdin/ru.yml @@ -1,7 +1,7 @@ ru: plugin_openproject_openid_connect: name: "OpenProject OpenID Подключение" - description: "Добавляет в Openproject стратегических провайдеров OmniAuth OpenID Connect." + description: "Добавлена стратегия OmniAuth OpenID Connect для OpenProject." logout_warning: > Вы вышли из системы. Содержимое любой формы, которую вы можете отправить, может быть потеряно. Пожалуйста [войдите в систему]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/rw.yml b/modules/openid_connect/config/locales/crowdin/rw.yml index 72987f6a0411..7e07002e7d87 100644 --- a/modules/openid_connect/config/locales/crowdin/rw.yml +++ b/modules/openid_connect/config/locales/crowdin/rw.yml @@ -1,7 +1,7 @@ rw: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/si.yml b/modules/openid_connect/config/locales/crowdin/si.yml index 6a266b981812..814eb969010f 100644 --- a/modules/openid_connect/config/locales/crowdin/si.yml +++ b/modules/openid_connect/config/locales/crowdin/si.yml @@ -1,7 +1,7 @@ si: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/sk.yml b/modules/openid_connect/config/locales/crowdin/sk.yml index ef18447ae4a7..7c9141c80a34 100644 --- a/modules/openid_connect/config/locales/crowdin/sk.yml +++ b/modules/openid_connect/config/locales/crowdin/sk.yml @@ -1,7 +1,7 @@ sk: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/sl.yml b/modules/openid_connect/config/locales/crowdin/sl.yml index e04a12b56d65..207c47c202a1 100644 --- a/modules/openid_connect/config/locales/crowdin/sl.yml +++ b/modules/openid_connect/config/locales/crowdin/sl.yml @@ -1,7 +1,7 @@ sl: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > Bili ste izpisani. Oddana vsebina katerekoli oblike se lahko izgubi. Prosim [prijavi se]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/sr.yml b/modules/openid_connect/config/locales/crowdin/sr.yml index ed1c2895c77a..5d07d904c9df 100644 --- a/modules/openid_connect/config/locales/crowdin/sr.yml +++ b/modules/openid_connect/config/locales/crowdin/sr.yml @@ -1,7 +1,7 @@ sr: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/sv.yml b/modules/openid_connect/config/locales/crowdin/sv.yml index cc3bfed34d3c..e0557ab32960 100644 --- a/modules/openid_connect/config/locales/crowdin/sv.yml +++ b/modules/openid_connect/config/locales/crowdin/sv.yml @@ -1,7 +1,7 @@ sv: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > Du har loggats ut. Innehållet i alla formulär du skickar kan försvinna. Vänligen [logga in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/th.yml b/modules/openid_connect/config/locales/crowdin/th.yml index 9f6b6e51e95c..81d8c5a1d8d5 100644 --- a/modules/openid_connect/config/locales/crowdin/th.yml +++ b/modules/openid_connect/config/locales/crowdin/th.yml @@ -1,7 +1,7 @@ th: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/tr.yml b/modules/openid_connect/config/locales/crowdin/tr.yml index 0546fac1f41b..d087817fd907 100644 --- a/modules/openid_connect/config/locales/crowdin/tr.yml +++ b/modules/openid_connect/config/locales/crowdin/tr.yml @@ -1,7 +1,7 @@ tr: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > Çıkış yaptınız. Gönderdiğiniz herhangi bir formun içeriği kaybolabilir. Lütfen giriş yapın]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/uk.yml b/modules/openid_connect/config/locales/crowdin/uk.yml index 371217c11d4f..db6a59e500bd 100644 --- a/modules/openid_connect/config/locales/crowdin/uk.yml +++ b/modules/openid_connect/config/locales/crowdin/uk.yml @@ -1,7 +1,7 @@ uk: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Додає постачальків стратегії OmniAuth OpenID Connect в OpenProject." + description: "Додає постачальників стратегії OmniAuth OpenID Connect в OpenProject." logout_warning: > Ви вийшли з системи. Вміст будь-якої форми, яку ви надішлете, може бути втрачено. Спробуйте, [увійти]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/uz.yml b/modules/openid_connect/config/locales/crowdin/uz.yml index 3f9227fca0a2..7d4fbb132907 100644 --- a/modules/openid_connect/config/locales/crowdin/uz.yml +++ b/modules/openid_connect/config/locales/crowdin/uz.yml @@ -1,7 +1,7 @@ uz: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/vi.yml b/modules/openid_connect/config/locales/crowdin/vi.yml index 2b21fe461371..d54e7bfb653c 100644 --- a/modules/openid_connect/config/locales/crowdin/vi.yml +++ b/modules/openid_connect/config/locales/crowdin/vi.yml @@ -1,7 +1,7 @@ vi: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. activemodel: diff --git a/modules/openid_connect/config/locales/crowdin/zh-TW.yml b/modules/openid_connect/config/locales/crowdin/zh-TW.yml index 116959c64b91..911714765034 100644 --- a/modules/openid_connect/config/locales/crowdin/zh-TW.yml +++ b/modules/openid_connect/config/locales/crowdin/zh-TW.yml @@ -1,7 +1,7 @@ zh-TW: plugin_openproject_openid_connect: name: "OpenProject OpenID 連接" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > 你已被登出,你嘗試送出的內容可能都會遺失。請登入。 activemodel: diff --git a/modules/openid_connect/config/locales/en.yml b/modules/openid_connect/config/locales/en.yml index 7c9185c3ef1d..affacbce8a4f 100644 --- a/modules/openid_connect/config/locales/en.yml +++ b/modules/openid_connect/config/locales/en.yml @@ -1,7 +1,7 @@ en: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to Openproject." + description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." logout_warning: > You have been logged out. The contents of any form you submit may be lost. Please [log in]. diff --git a/modules/openid_connect/openproject-openid_connect.gemspec b/modules/openid_connect/openproject-openid_connect.gemspec index 929e867192c6..390121d1c015 100644 --- a/modules/openid_connect/openproject-openid_connect.gemspec +++ b/modules/openid_connect/openproject-openid_connect.gemspec @@ -4,7 +4,7 @@ Gem::Specification.new do |s| s.authors = "OpenProject GmbH" s.email = "info@openproject.com" s.summary = "OpenProject OpenID Connect" - s.description = "Adds OmniAuth OpenID Connect strategy providers to Openproject." + s.description = "Adds OmniAuth OpenID Connect strategy providers to OpenProject." s.license = "GPLv3" s.files = Dir["{app,config,db,lib}/**/*"] + %w(CHANGELOG.md README.md) diff --git a/modules/overviews/app/components/project_custom_fields/sections/edit_component.html.erb b/modules/overviews/app/components/project_custom_fields/sections/edit_component.html.erb new file mode 100644 index 000000000000..9a8fb2480d65 --- /dev/null +++ b/modules/overviews/app/components/project_custom_fields/sections/edit_component.html.erb @@ -0,0 +1,18 @@ +<%= + component_wrapper do + primer_form_with( + id: "project-section-edit-form", + model: @project, + method: :put, + data: { turbo: true, turbo_stream: true, "test-selector": "async-dialog-content" }, + url: update_project_custom_values_path(project_id: @project.id, section_id: @project_custom_field_section.id), + ) do |f| + render(Projects::CustomFields::Form.new( + f, + project: @project, + custom_field_section: @project_custom_field_section, + wrapper_id: "#edit-project-custom-fields-dialog-#{@project_custom_field_section.id}" + )) + end + end +%> diff --git a/modules/overviews/app/components/project_custom_fields/sections/edit_component.rb b/modules/overviews/app/components/project_custom_fields/sections/edit_component.rb new file mode 100644 index 000000000000..f4a6068f589e --- /dev/null +++ b/modules/overviews/app/components/project_custom_fields/sections/edit_component.rb @@ -0,0 +1,49 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2023 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module ProjectCustomFields + module Sections + class EditComponent < ApplicationComponent + include ApplicationHelper + include OpTurbo::Streamable + include OpPrimer::ComponentHelpers + + def initialize(project:, + project_custom_field_section:) + super + + @project = project + @project_custom_field_section = project_custom_field_section + end + + def wrapper_uniq_by + @project_custom_field_section.id + end + end + end +end diff --git a/modules/overviews/app/components/project_custom_fields/sections/edit_dialog_component.html.erb b/modules/overviews/app/components/project_custom_fields/sections/edit_dialog_component.html.erb index ff98a0439d9b..dc4d4e8e8f9f 100644 --- a/modules/overviews/app/components/project_custom_fields/sections/edit_dialog_component.html.erb +++ b/modules/overviews/app/components/project_custom_fields/sections/edit_dialog_component.html.erb @@ -1,40 +1,30 @@ <%= - content_tag("turbo-frame", id: "edit-project-custom-fields-dialog-#{@project_custom_field_section.id}-frame") do - component_wrapper(data: { test_selector: 'async-dialog-content' }) do - primer_form_with( - model: @project, - method: :put, - url: update_project_custom_values_path(project_id: @project.id, section_id: @project_custom_field_section.id), - ) do |f| - component_collection do |collection| - collection.with_component(Primer::Alpha::Dialog::Body.new(my: 3, classes: "Overlay-body_autocomplete_height")) do - render(Projects::CustomFields::Form.new( - f, - project: @project, - custom_field_section: @project_custom_field_section, - wrapper_id: "#edit-project-custom-fields-dialog-#{@project_custom_field_section.id}" - )) - end - collection.with_component(Primer::Alpha::Dialog::Footer.new) do - component_collection do |footer_collection| - footer_collection.with_component(Primer::ButtonComponent.new( - data: { - 'close-dialog-id': "edit-project-custom-fields-dialog-#{@project_custom_field_section.id}" - } - )) do - t("button_cancel") - end - footer_collection.with_component(Primer::ButtonComponent.new( - scheme: :primary, - type: :submit, - data: { - test_selector: 'save-project-attributes-button' - } - )) do - t("button_save") - end - end - end + render(Primer::Alpha::Dialog.new(title: @project_custom_field_section.name, + size: :medium_portrait, + id: "edit-project-custom-fields-dialog-#{@project_custom_field_section.id}")) do |d| + d.with_header(variant: :large) + d.with_body(classes: "Overlay-body_autocomplete_height") do + render(::ProjectCustomFields::Sections::EditComponent.new(project_custom_field_section: @project_custom_field_section, project: @project)) + end + d.with_footer do + component_collection do |footer_collection| + footer_collection.with_component(Primer::ButtonComponent.new( + data: { + 'close-dialog-id': "edit-project-custom-fields-dialog-#{@project_custom_field_section.id}" + } + )) do + t("button_cancel") + end + footer_collection.with_component(Primer::ButtonComponent.new( + scheme: :primary, + type: :submit, + form: "project-section-edit-form", + data: { + test_selector: 'save-project-attributes-button', + turbo: true + } + )) do + t("button_save") end end end diff --git a/modules/overviews/app/components/project_custom_fields/sections/edit_dialog_component.rb b/modules/overviews/app/components/project_custom_fields/sections/edit_dialog_component.rb index 9e2d79744951..29d2f3d68fdc 100644 --- a/modules/overviews/app/components/project_custom_fields/sections/edit_dialog_component.rb +++ b/modules/overviews/app/components/project_custom_fields/sections/edit_dialog_component.rb @@ -40,10 +40,6 @@ def initialize(project:, @project = project @project_custom_field_section = project_custom_field_section end - - def wrapper_uniq_by - @project_custom_field_section.id - end end end end diff --git a/modules/overviews/app/components/project_custom_fields/sections/project_custom_fields/show_component.rb b/modules/overviews/app/components/project_custom_fields/sections/project_custom_fields/show_component.rb index 06c7c5147cb2..2faf8a508c74 100644 --- a/modules/overviews/app/components/project_custom_fields/sections/project_custom_fields/show_component.rb +++ b/modules/overviews/app/components/project_custom_fields/sections/project_custom_fields/show_component.rb @@ -49,6 +49,8 @@ def not_set? def render_value case @project_custom_field.field_format + when "link" + render_link when "text" render_long_text when "user" @@ -86,6 +88,17 @@ def render_user def render_avatar(user) render(Users::AvatarComponent.new(user:, size: :mini)) end + + def render_link + href = @project_custom_field_values&.first&.value + link = Addressable::URI.parse(href) + return href unless link + + target = link.host == Setting.host_without_protocol ? "_top" : "_blank" + render(Primer::Beta::Link.new(href:, rel: "noopener noreferrer", target:)) do + href + end + end end end end diff --git a/modules/overviews/app/components/project_custom_fields/sections/show_component.html.erb b/modules/overviews/app/components/project_custom_fields/sections/show_component.html.erb index d84f8f3b0139..f748b8e8b73d 100644 --- a/modules/overviews/app/components/project_custom_fields/sections/show_component.html.erb +++ b/modules/overviews/app/components/project_custom_fields/sections/show_component.html.erb @@ -10,16 +10,17 @@ end heading.with_column do - render(OpTurbo::OpPrimer::AsyncDialogComponent.new( - id: "edit-project-custom-fields-dialog-#{@project_custom_field_section.id}", - src: project_custom_field_section_dialog_path(project_id: @project.id, section_id: @project_custom_field_section.id), - size: :medium_portrait, - title: @project_custom_field_section.name, + render(Primer::Beta::IconButton.new( + icon: :pencil, + tag: :a, + href: project_custom_field_section_dialog_path(project_id: @project.id, section_id: @project_custom_field_section.id), + data: { + controller: 'async-dialog' + }, + scheme: :invisible, button_icon: :pencil, - button_icon_label: t(:label_edit), - button_attributes: { scheme: :invisible, data: { - test_selector: "project-custom-field-section-edit-button" - } } + test_selector: "project-custom-field-section-edit-button", + aria: { label: I18n.t(:label_edit) }, )) end if allowed_to_edit? end @@ -28,7 +29,7 @@ @project_custom_fields.each do |project_custom_field| details_container.with_row(mb: 3) do render(ProjectCustomFields::Sections::ProjectCustomFields::ShowComponent.new( - project_custom_field: , + project_custom_field:, project_custom_field_values: get_eager_loaded_project_custom_field_values_for(project_custom_field.id) )) end diff --git a/modules/overviews/app/controllers/overviews/overviews_controller.rb b/modules/overviews/app/controllers/overviews/overviews_controller.rb index af2eca9b9c25..e6c763a1c718 100644 --- a/modules/overviews/app/controllers/overviews/overviews_controller.rb +++ b/modules/overviews/app/controllers/overviews/overviews_controller.rb @@ -1,23 +1,27 @@ module ::Overviews class OverviewsController < ::Grids::BaseInProjectController include OpTurbo::ComponentStream + include OpTurbo::DialogStreamHelper before_action :jump_to_project_menu_item before_action :set_sidebar_enabled menu_item :overview + def show + render + end + def project_custom_fields_sidebar render :project_custom_fields_sidebar, layout: false end def project_custom_field_section_dialog - render( + respond_with_dialog( ProjectCustomFields::Sections::EditDialogComponent.new( project: @project, project_custom_field_section: find_project_custom_field_section - ), - layout: false + ) ) end @@ -63,7 +67,7 @@ def set_sidebar_enabled def handle_errors(project_with_errors, section) update_via_turbo_stream( - component: ProjectCustomFields::Sections::EditDialogComponent.new( + component: ProjectCustomFields::Sections::EditComponent.new( project: project_with_errors, project_custom_field_section: section ) diff --git a/modules/overviews/app/views/overviews/overviews/show.html.erb b/modules/overviews/app/views/overviews/overviews/show.html.erb index 9971a61bc209..bd1d6114ccb7 100644 --- a/modules/overviews/app/views/overviews/overviews/show.html.erb +++ b/modules/overviews/app/views/overviews/overviews/show.html.erb @@ -1,3 +1,63 @@ <% content_for :header_tags do %> <% end -%> + +<%= + render(Primer::OpenProject::PageHeader.new( + data: { + 'controller': 'overview-header', + 'application-target': 'dynamic', + turbo: true + } + )) do |header| + header.with_title(variant: :medium) { t("overviews.label") } + header.with_breadcrumbs( + [ + { href: project_path(@project), text: @project.name }, + t("overviews.label") + ] + ) + favored = @project.favored_by?(User.current) + header.with_action_icon_button( + icon: favored ? "star-fill" : "star", + mobile_icon: favored ? "star-fill" : "star", + size: :medium, + tag: :a, + href: build_favorite_path(@project, format: :html), + data: { method: favored ? :delete : :post }, + classes: favored ? "op-primer--star-icon" : "", + label: favored ? I18n.t(:button_unfavorite) : I18n.t(:button_favorite), + aria: { label: favored ? I18n.t(:button_unfavorite) : I18n.t(:button_favorite) }, + test_selector: 'project-favorite-button' + ) + + header.with_action_menu(menu_arguments: { anchor_align: :end }, + button_arguments: { icon: "op-kebab-vertical", "aria-label": t(:label_menu) }) do |menu| + + if User.current.allowed_in_project?(:select_project_custom_fields, @project) + menu.with_item( + label: t(:label_project_attribute_manage_link), + href: project_settings_project_custom_fields_path(@project), + data: { turbo: false } + ) do |item| + item.with_leading_visual_icon(icon: :pencil) + end + end + + if User.current.allowed_in_project?(:archive_project, @project) + menu.with_item( + label: t(:label_archive_project), + href: project_archive_path(@project, status: '', name: @project.name), + content_arguments: { + data: { method: :post, turbo: false, confirm: t('project.archive.are_you_sure', name: @project.name) }, + } + ) do |item| + item.with_leading_visual_icon(icon: :lock) + end + end + + end + end +%> + + diff --git a/modules/overviews/config/locales/crowdin/js-ms.yml b/modules/overviews/config/locales/crowdin/js-ms.yml index 351a2df46c34..0d881beea416 100644 --- a/modules/overviews/config/locales/crowdin/js-ms.yml +++ b/modules/overviews/config/locales/crowdin/js-ms.yml @@ -1,4 +1,4 @@ ms: js: overviews: - label: 'Ringkasan' + label: 'Gambaran Keseluruhan' diff --git a/modules/overviews/config/locales/crowdin/ms.yml b/modules/overviews/config/locales/crowdin/ms.yml index 0017c72bc4cb..9f20ccaa2d40 100644 --- a/modules/overviews/config/locales/crowdin/ms.yml +++ b/modules/overviews/config/locales/crowdin/ms.yml @@ -1,4 +1,4 @@ ms: overviews: - label: 'Ringkasan' - permission_manage_overview: 'Urus halaman ringkasan' + label: 'Gambaran Keseluruhan' + permission_manage_overview: 'Urus halaman gambaran keseluruhan' diff --git a/modules/overviews/spec/features/navigation_spec.rb b/modules/overviews/spec/features/navigation_spec.rb index ca23d402c4ac..e38a43185da0 100644 --- a/modules/overviews/spec/features/navigation_spec.rb +++ b/modules/overviews/spec/features/navigation_spec.rb @@ -52,4 +52,53 @@ .to have_content("Overview") end end + + context "as user with permissions" do + let(:project) { create(:project, enabled_module_names: %i[work_package_tracking]) } + let(:user) { create(:admin) } + let(:query) do + create(:query_with_view_work_packages_table, + project:, + user:, + name: "My important Query") + end + + before do + query + login_as user + end + + it "can navigate to other modules (regression #55024)" do + visit project_overview_path(project.id) + + # Expect page to be loaded + within "#content" do + expect(page).to have_content("Overview") + end + + # Navigate to the WP module + page.find_test_selector("main-menu-toggler--work_packages").click + + # Click on a saved query + page.find_test_selector("op-sidemenu--item-action--MyimportantQuery", wait: 10).click + + loading_indicator_saveguard + + within "#content" do + # Expect the query content to be shown + expect(page).to have_field("editable-toolbar-title", with: query.name) + + # Expect no page header of the Overview to be shown any more + expect(page).to have_no_content("Overview") + end + + # Navigate back to the Overview page + page.execute_script("window.history.back()") + + # Expect page to be loaded + within "#content" do + expect(page).to have_content("Overview") + end + end + end end diff --git a/modules/recaptcha/app/views/recaptcha/admin/show.html.erb b/modules/recaptcha/app/views/recaptcha/admin/show.html.erb index c67374539fb0..8884afbb64e2 100644 --- a/modules/recaptcha/app/views/recaptcha/admin/show.html.erb +++ b/modules/recaptcha/app/views/recaptcha/admin/show.html.erb @@ -17,7 +17,7 @@
    <%= I18n.t('recaptcha.settings.recaptcha_description_html', - hcaptcha_link: link_to('https://docs.hcaptcha.com/switch/', 'https://docs.hcaptcha.com/switch/', target: '_blan'), + hcaptcha_link: link_to('https://docs.hcaptcha.com/switch/', 'https://docs.hcaptcha.com/switch/', target: '_blank'), recaptcha_link: link_to('https://www.google.com/recaptcha', 'https://www.google.com/recaptcha', target: '_blank')).html_safe %>
    diff --git a/modules/recaptcha/config/locales/crowdin/ms.yml b/modules/recaptcha/config/locales/crowdin/ms.yml index 13430bd90944..45f96f15daa3 100644 --- a/modules/recaptcha/config/locales/crowdin/ms.yml +++ b/modules/recaptcha/config/locales/crowdin/ms.yml @@ -2,10 +2,10 @@ ms: plugin_openproject_recaptcha: name: "ReCaptcha OpenProject" - description: "Modul ini menyediakan semakan recaptcha semasa log masuk." + description: "Modul ini menyediakan pemeriksaan recaptcha semasa log masuk." recaptcha: label_recaptcha: "reCAPTCHA" - button_please_wait: 'Sila tunggu ...' + button_please_wait: 'Sila tunggu sebentar ...' verify_account: "Sahkan akaun anda" error_captcha: "Akaun anda tidak dapat disahkan. Sila hubungi pentadbir." settings: @@ -13,12 +13,12 @@ ms: response_limit: 'Had tindak balas untuk HCaptcha' response_limit_text: 'Bilangan maksimum aksara untuk menganggap tindak balas HCaptcha sebagai sah.' website_key_text: 'Masukkan kunci laman web yang anda telah buat pada konsol pentadbir untuk domain ini.' - secret_key: 'Kunci rahsia' - secret_key_text: 'Masukkan kunci rahsia yang anda telah buat pada konsol pentadbir reCAPTCHA.' + secret_key: 'Kunci sulit' + secret_key_text: 'Masukkan kunci sulit yang anda telah buat pada konsol pentadbir reCAPTCHA.' type: 'Gunakan reCAPTCHA' - type_disabled: 'Nyahaktifkan reCAPTCHA' + type_disabled: 'Nyahdayakan reCAPTCHA' type_v2: 'reCAPTCHA v2' type_v3: 'reCAPTCHA v3' type_hcaptcha: 'HCaptcha' recaptcha_description_html: > - reCAPTCHA ialah perkhidmatan percuma dari Google yang boleh diaktifkan untuk contoh OpenProject anda. Jika diaktifkan, borang captcha akan diberikan semasa log masuk semua pengguna yang masih belum mengesahkan captcha lagi.
    Sila lihat pautan berikut untuk butiran lebih tentang reCAPTCHA dan versi-versi yang tersedia, dan bagaimana untuk ciptakan laman web serta kunci rahsia: %{recaptcha_link}
    HCaptcha ialah alternatif percuma dari Google yang anda boleh gunakan jika anda tidak ingin menggunakan reCAPTCHA. Lihat pautan ini untuk maklumat lanjut: %{hcaptcha_link} + reCAPTCHA ialah perkhidmatan percuma dari Google yang boleh diaktifkan untuk contoh OpenProject anda. Jika diaktifkan, borang captcha akan diberikan semasa log masuk semua pengguna yang masih belum mengesahkan captcha lagi.
    Sila lihat pautan berikut untuk butiran lebih tentang reCAPTCHA dan versi-versi yang tersedia, dan bagaimana untuk ciptakan laman web serta kunci sulit: %{recaptcha_link}
    HCaptcha ialah alternatif percuma dari Google yang anda boleh gunakan jika anda tidak ingin menggunakan reCAPTCHA. Lihat pautan ini untuk maklumat lanjut: %{hcaptcha_link} diff --git a/modules/reporting/config/locales/crowdin/js-ms.yml b/modules/reporting/config/locales/crowdin/js-ms.yml index cb941b73531b..138bef858259 100644 --- a/modules/reporting/config/locales/crowdin/js-ms.yml +++ b/modules/reporting/config/locales/crowdin/js-ms.yml @@ -22,5 +22,5 @@ ms: js: reporting_engine: - label_remove: "Hapus" + label_remove: "Padamkan" label_response_error: "Terdapat ralat semasa mengendalikan pertanyaan." diff --git a/modules/reporting/config/locales/crowdin/ms.yml b/modules/reporting/config/locales/crowdin/ms.yml index 12b51711cdc0..032091408cd0 100644 --- a/modules/reporting/config/locales/crowdin/ms.yml +++ b/modules/reporting/config/locales/crowdin/ms.yml @@ -22,7 +22,7 @@ ms: plugin_openproject_reporting: name: "Pelaporan OpenProject" - description: "Plugin ini membenarkan mencipta laporan kos tersuai dengan menyaring dan pengelompokan yang dibuat oleh plugin Masa dan kos OpenProject." + description: "Plugin ini membenarkan mencipta laporan kos tersuai dengan menyaring dan pengumpulan yang dibuat oleh plugin Masa dan kos OpenProject." button_save_as: "Simpan laporan sebagai..." comments: "Komen" cost_reports_title: "Masa dan kos" @@ -30,16 +30,16 @@ ms: label_cost_report_plural: "Laporan kos" description_drill_down: "Papar butiran" description_filter_selection: "Pilihan" - description_multi_select: "Paparkan pilihan berganda" - description_remove_filter: "Padam penyaringan. " - information_restricted_depending_on_permission: "Halaman ini mengandungi informasi terhad, bergantung atas kebenaran anda." + description_multi_select: "Paparkan multiselect" + description_remove_filter: "Padam saringan. " + information_restricted_depending_on_permission: "Halaman ini mengandungi informasi terhad bergantung atas kebenaran anda." label_click_to_edit: "Klik untuk edit." label_closed: "ditutup" - label_columns: "Lajur" - label_cost_entry_attributes: "Atribut kemasukan kos" + label_columns: "Kolum" + label_cost_entry_attributes: "Atribut entri kos" label_days_ago: "pada hari-hari terakhir" - label_entry: "Kemasukan kos" - label_filter_text: "Saring teks" + label_entry: "Entri kos" + label_filter_text: "Penyaring teks" label_filter_value: "Nilai" label_filters: "Saring" label_greater: ">" @@ -50,9 +50,9 @@ ms: label_logged_by_reporting: "Dilog oleh" label_money: "Nilai tunai" label_month_reporting: "Bulan (Dihabiskan)" - label_new_report: "Laporan kos baru" + label_new_report: "Laporan kos baharu" label_open: "buka" - label_operator: "Pengendali" + label_operator: "Operator" label_private_report_plural: "Laporan kos peribadi" label_progress_bar_explanation: "Menjana laporan..." label_public_report_plural: "Laporan kos umum" @@ -67,7 +67,7 @@ ms: label_count: "Perhitungan" label_filter: "Saring" label_filter_add: "Tambah saringan" - label_filter_plural: "Saringan" + label_filter_plural: "Saring" label_group_by: "Kumpulkan mengikut" label_group_by_add: "Tambah Kumpulan-secara Atribut" label_inactive: "«tidak aktif»" @@ -81,7 +81,7 @@ ms: permission_save_private_cost_reports: "Simpan laporan kos peribadi" project_module_reporting_module: "Laporan kos" text_costs_are_rounded_note: "Nilai yang dipaparkan adalah dibundarkan. Semua kiraan adalah berdasarkan nilai yang tidak dibundarkan." - toggle_multiselect: "Aktifkan/nyahaktifkan pilihan berganda" + toggle_multiselect: "aktifkan/nyahaktifkan multiselect" units: "Unit" validation_failure_date: "bukan tarikh yang sah" validation_failure_integer: "bukan integer yang sah" @@ -90,5 +90,5 @@ ms: title: "Eksport Laporan Kos XLS anda" reporting: group_by: - selected_columns: "Lajur terpilih" + selected_columns: "Kolum terpilih" selected_rows: "Baris terpilih" diff --git a/modules/reporting/config/locales/crowdin/tr.yml b/modules/reporting/config/locales/crowdin/tr.yml index bb5e35b7c2a8..64aa2ec2d20f 100644 --- a/modules/reporting/config/locales/crowdin/tr.yml +++ b/modules/reporting/config/locales/crowdin/tr.yml @@ -47,7 +47,7 @@ tr: label_is_project_with_subprojects: "(alt projeler dahil)" label_work_package_attributes: "Çalışma paketi nitelikleri" label_less: "<" - label_logged_by_reporting: "Logged by" + label_logged_by_reporting: "Giriş yapan:" label_money: "Nakit değer" label_month_reporting: "Ay (harcanan)" label_new_report: "Yeni maliyet raporu" diff --git a/modules/reporting/lib/open_project/reporting/engine.rb b/modules/reporting/lib/open_project/reporting/engine.rb index 0a1e34e48bff..024020461241 100644 --- a/modules/reporting/lib/open_project/reporting/engine.rb +++ b/modules/reporting/lib/open_project/reporting/engine.rb @@ -32,8 +32,6 @@ class Engine < ::Rails::Engine include OpenProject::Plugins::ActsAsOpEngine - config.eager_load_paths += Dir["#{config.root}/lib/"] - register "openproject-reporting", author_url: "https://www.openproject.org", bundled: true do diff --git a/modules/storages/app/common/storages/peripherals/nextcloud_registry.rb b/modules/storages/app/common/storages/peripherals/nextcloud_registry.rb index 8e750cbb8be4..707ed76a0a53 100644 --- a/modules/storages/app/common/storages/peripherals/nextcloud_registry.rb +++ b/modules/storages/app/common/storages/peripherals/nextcloud_registry.rb @@ -38,7 +38,7 @@ module Peripherals register(:file_info, StorageInteraction::Nextcloud::FileInfoQuery) register(:files_info, StorageInteraction::Nextcloud::FilesInfoQuery) register(:files, StorageInteraction::Nextcloud::FilesQuery) - register(:folder_files_file_ids_deep_query, StorageInteraction::Nextcloud::FolderFilesFileIdsDeepQuery) + register(:file_path_to_id_map, StorageInteraction::Nextcloud::FilePathToIdMapQuery) register(:propfind, StorageInteraction::Nextcloud::Internal::PropfindQuery) register(:group_users, StorageInteraction::Nextcloud::GroupUsersQuery) register(:upload_link, StorageInteraction::Nextcloud::UploadLinkQuery) @@ -64,6 +64,11 @@ module Peripherals namespace("models") do register(:managed_folder_identifier, ManagedFolderIdentifier::Nextcloud) end + + namespace("authentication") do + register(:userless, StorageInteraction::AuthenticationStrategies::NextcloudStrategies::UserLess, call: false) + register(:userbound, StorageInteraction::AuthenticationStrategies::NextcloudStrategies::UserBound) + end end end end diff --git a/modules/storages/app/common/storages/peripherals/one_drive_registry.rb b/modules/storages/app/common/storages/peripherals/one_drive_registry.rb index fbf64bf41cfe..8e4674cb847a 100644 --- a/modules/storages/app/common/storages/peripherals/one_drive_registry.rb +++ b/modules/storages/app/common/storages/peripherals/one_drive_registry.rb @@ -38,7 +38,7 @@ module Peripherals register(:file_info, StorageInteraction::OneDrive::FileInfoQuery) register(:files_info, StorageInteraction::OneDrive::FilesInfoQuery) register(:open_file_link, StorageInteraction::OneDrive::OpenFileLinkQuery) - register(:folder_files_file_ids_deep_query, StorageInteraction::OneDrive::FolderFilesFileIdsDeepQuery) + register(:file_path_to_id_map, StorageInteraction::OneDrive::FilePathToIdMapQuery) register(:open_storage, StorageInteraction::OneDrive::OpenStorageQuery) register(:upload_link, StorageInteraction::OneDrive::UploadLinkQuery) end @@ -58,6 +58,11 @@ module Peripherals namespace("models") do register(:managed_folder_identifier, ManagedFolderIdentifier::OneDrive) end + + namespace("authentication") do + register(:userless, StorageInteraction::AuthenticationStrategies::OneDriveStrategies::UserLess, call: false) + register(:userbound, StorageInteraction::AuthenticationStrategies::OneDriveStrategies::UserBound) + end end end end diff --git a/modules/storages/app/common/storages/peripherals/service_result_refinements.rb b/modules/storages/app/common/storages/peripherals/service_result_refinements.rb index 3d3bb1a81144..c071701434c2 100644 --- a/modules/storages/app/common/storages/peripherals/service_result_refinements.rb +++ b/modules/storages/app/common/storages/peripherals/service_result_refinements.rb @@ -28,61 +28,65 @@ # See COPYRIGHT and LICENSE files for more details. #++ -module Storages::Peripherals - # rubocop:disable Lint/EmptyClass - class UnknownSource; end - - # rubocop:enable Lint/EmptyClass - - module ServiceResultRefinements - refine ServiceResult do - def match(on_success:, on_failure:) - if success? - on_success.call(result) - else - on_failure.call(errors) +module Storages + module Peripherals + # rubocop:disable Lint/EmptyClass + class UnknownSource; end + + # rubocop:enable Lint/EmptyClass + + module ServiceResultRefinements + refine ServiceResult do + def match(on_success:, on_failure:) + if success? + on_success.call(result) + else + on_failure.call(errors) + end end - end - def bind - return self if failure? + def bind + return self if failure? - yield result - end + yield result + end + + def >>(other) + unless other.respond_to?(:call) + raise TypeError, "Expected an object responding to 'call', got #{other.class.name}." + end - def >>(other) - unless other.respond_to?(:call) - raise TypeError, "Expected an object responding to 'call', got #{other.class.name}." + bind(&other) end - bind(&other) - end + def error_source + if errors.is_a?(::Storages::StorageError) && errors.data&.source.present? + errors.data.source + else + UnknownSource + end + end - def error_source - if errors.is_a?(::Storages::StorageError) && errors.data&.source.present? - errors.data.source - else - UnknownSource + def error_payload + errors.data&.payload end - end - def error_payload - errors.data&.payload - end + def result_or + return result if success? - def result_or - return result if success? + yield errors + end - yield errors - end - alias_method :error_and, :result_or + alias_method :error_and, :result_or + + def result_and + return errors if failure? - def result_and - return errors if failure? + yield result + end - yield result + alias_method :error_or, :result_and end - alias_method :error_or, :result_and end end end diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/failures.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/failures.rb index 575a5db3410a..ad2740f842bd 100644 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/failures.rb +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/failures.rb @@ -37,6 +37,20 @@ module Failures storage_error = ::Storages::StorageError.new(code:, log_message:, data:) ServiceResult.failure(result: code, errors: storage_error) end + + ErrorData = ->(response:, source:) do + payload = + case response + in { content_type: { mime_type: "application/json" } } + response.json + in { content_type: { mime_type: "text/xml" } } + response.xml + else + response.body.to_s + end + + ::Storages::StorageErrorData.new(source:, payload:) + end end end end diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/folder_files_file_ids_deep_query.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/nextcloud_strategies.rb similarity index 67% rename from modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/folder_files_file_ids_deep_query.rb rename to modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/nextcloud_strategies.rb index 21c2b7c901b7..7c59ad34f1e4 100644 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/folder_files_file_ids_deep_query.rb +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/nextcloud_strategies.rb @@ -1,4 +1,4 @@ -# frozen_string_literal: true +# frozen_string_literal:true #-- copyright # OpenProject is an open source project management software. @@ -28,19 +28,21 @@ # See COPYRIGHT and LICENSE files for more details. #++ -module Storages::Peripherals::StorageInteraction::Nextcloud - class FolderFilesFileIdsDeepQuery - def self.call(storage:, folder:) - ::Storages::Peripherals::Registry - .resolve("nextcloud.queries.propfind") - .call( - storage:, - depth: "infinity", - path: folder.path, - # nc:acl-list is only required to avoid https://community.openproject.org/wp/49628. See comment #4. - props: %w[oc:fileid nc:acl-list] - ).map do |obj| - obj.transform_values { |value| Storages::StorageFileInfo.from_id(value["fileid"]) } +module Storages + module Peripherals + module StorageInteraction + module AuthenticationStrategies + module NextcloudStrategies + UserLess = -> do + ::Storages::Peripherals::StorageInteraction::AuthenticationStrategies::BasicAuth.strategy + end + + UserBound = ->(user:) do + ::Storages::Peripherals::StorageInteraction::AuthenticationStrategies::OAuthUserToken + .strategy + .with_user(user) + end + end end end end diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/o_auth_client_credentials.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/o_auth_client_credentials.rb deleted file mode 100644 index ed482c92d757..000000000000 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/o_auth_client_credentials.rb +++ /dev/null @@ -1,84 +0,0 @@ -# frozen_string_literal:true - -#-- copyright -# OpenProject is an open source project management software. -# Copyright (C) 2012-2024 the OpenProject GmbH -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License version 3. -# -# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: -# Copyright (C) 2006-2013 Jean-Philippe Lang -# Copyright (C) 2010-2013 the ChiliProject Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# See COPYRIGHT and LICENSE files for more details. -#++ - -module Storages - module Peripherals - module StorageInteraction - module AuthenticationStrategies - class OAuthClientCredentials - def self.strategy - Strategy.new(:oauth_client_credentials) - end - - def call(storage:, http_options: {}, &) - config = storage.oauth_configuration.to_httpx_oauth_config - - return build_failure(storage) unless config.valid? - - create_http_and_yield(issuer: config.issuer, - client_id: config.client_id, - client_secret: config.client_secret, - scope: config.scope, - http_options:, - &) - end - - private - - def create_http_and_yield(issuer:, client_id:, client_secret:, scope:, http_options:) - begin - http = OpenProject.httpx - .oauth_auth(issuer:, - client_id:, - client_secret:, - scope:, - token_endpoint_auth_method: "client_secret_post") - .with_access_token - .with(http_options) - rescue HTTPX::HTTPError => e - data = ::Storages::StorageErrorData.new(source: self.class, payload: e.response.json) - return Failures::Builder.call(code: :unauthorized, - log_message: "Error while fetching OAuth access token.", - data:) - end - - yield http - end - - def build_failure(storage) - log_message = "Cannot authenticate storage with client credential oauth flow. Storage not configured." - data = ::Storages::StorageErrorData.new(source: self.class, payload: storage) - Failures::Builder.call(code: :error, log_message:, data:) - end - end - end - end - end -end diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/oauth_client_credentials.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/oauth_client_credentials.rb new file mode 100644 index 000000000000..0c231d273cd8 --- /dev/null +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/oauth_client_credentials.rb @@ -0,0 +1,104 @@ +# frozen_string_literal:true + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module Storages + module Peripherals + module StorageInteraction + module AuthenticationStrategies + class OAuthClientCredentials + def self.strategy + Strategy.new(:oauth_client_credentials) + end + + # rubocop:disable Metrics/AbcSize + def call(storage:, http_options: {}) + config = storage.oauth_configuration.to_httpx_oauth_config + + return build_failure(storage) unless config.valid? + + access_token = Rails.cache.read("storage.#{storage.id}.httpx_access_token") + + http_result = if access_token.present? + http_with_current_token(access_token:, http_options:) + else + http_with_new_token(issuer: config.issuer, + client_id: config.client_id, + client_secret: config.client_secret, + scope: config.scope, + http_options:) + end + + return http_result if http_result.failure? + + http = http_result.result + + if access_token.nil? + token = http.instance_variable_get(:@options).oauth_session.access_token + Rails.cache.write("storage.#{storage.id}.httpx_access_token", token, expires_in: 50.minutes) + end + + yield http + end + + # rubocop:enable Metrics/AbcSize + + private + + def http_with_current_token(access_token:, http_options:) + opts = http_options.deep_merge({ headers: { "Authorization" => "Bearer #{access_token}" } }) + ServiceResult.success(result: OpenProject.httpx.with(opts)) + end + + def http_with_new_token(issuer:, client_id:, client_secret:, scope:, http_options:) + http = OpenProject.httpx + .oauth_auth(issuer:, + client_id:, + client_secret:, + scope:, + token_endpoint_auth_method: "client_secret_post") + .with_access_token + .with(http_options) + ServiceResult.success(result: http) + rescue HTTPX::HTTPError => e + Failures::Builder.call(code: :unauthorized, + log_message: "Error while fetching OAuth access token.", + data: Failures::ErrorData.call(response: e.response, source: self.class)) + end + + def build_failure(storage) + log_message = "Cannot authenticate storage with client credential oauth flow. Storage not configured." + data = ::Storages::StorageErrorData.new(source: self.class, payload: storage) + Failures::Builder.call(code: :error, log_message:, data:) + end + end + end + end + end +end diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/o_auth_configuration.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/oauth_configuration.rb similarity index 100% rename from modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/o_auth_configuration.rb rename to modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/oauth_configuration.rb diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/o_auth_user_token.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/oauth_user_token.rb similarity index 91% rename from modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/o_auth_user_token.rb rename to modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/oauth_user_token.rb index 1ff70eb573c6..a88f64e36d71 100644 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/o_auth_user_token.rb +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/oauth_user_token.rb @@ -96,7 +96,7 @@ def refresh_and_retry(config, http_options, token, &) rescue HTTPX::HTTPError => e return Failures::Builder.call(code: :unauthorized, log_message: "Error while refreshing OAuth token.", - data: error_data_from_response(e.response)) + data: Failures::ErrorData.call(response: e.response, source: self.class)) end response = yield http_session @@ -116,20 +116,6 @@ def refresh_and_retry(config, http_options, token, &) # rubocop:enable Metrics/AbcSize - def error_data_from_response(response) - payload = - case response - in { content_type: { mime_type: "application/json" } } - response.json - in { content_type: { mime_type: "text/xml" } } - response.xml - else - response.body.to_s - end - - ::Storages::StorageErrorData.new(source: self.class, payload:) - end - def update_refreshed_token(token, http_session) oauth = http_session.instance_variable_get(:@options).oauth_session access_token = oauth.access_token diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/one_drive_strategies.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/one_drive_strategies.rb new file mode 100644 index 000000000000..2bdb369cfee5 --- /dev/null +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/authentication_strategies/one_drive_strategies.rb @@ -0,0 +1,49 @@ +# frozen_string_literal:true + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module Storages + module Peripherals + module StorageInteraction + module AuthenticationStrategies + module OneDriveStrategies + UserLess = -> do + ::Storages::Peripherals::StorageInteraction::AuthenticationStrategies::OAuthClientCredentials.strategy + end + + UserBound = ->(user:) do + ::Storages::Peripherals::StorageInteraction::AuthenticationStrategies::OAuthUserToken + .strategy + .with_user(user) + end + end + end + end + end +end diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/create_folder_command.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/create_folder_command.rb index 103e537c1e76..340b7e1008ed 100644 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/create_folder_command.rb +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/create_folder_command.rb @@ -28,56 +28,114 @@ # See COPYRIGHT and LICENSE files for more details. #++ -module Storages::Peripherals::StorageInteraction::Nextcloud - class CreateFolderCommand - using Storages::Peripherals::ServiceResultRefinements - - def initialize(storage) - @uri = storage.uri - @username = storage.username - @password = storage.password - end +module Storages + module Peripherals + module StorageInteraction + module Nextcloud + class CreateFolderCommand + using ServiceResultRefinements - def self.call(storage:, folder_path:) - new(storage).call(folder_path:) - end + def self.call(storage:, auth_strategy:, folder_name:, parent_location:) + new(storage).call(auth_strategy:, folder_name:, parent_location:) + end + + def initialize(storage) + @storage = storage + end + + def call(auth_strategy:, folder_name:, parent_location:) + origin_user_id = Util.origin_user_id(caller: self.class, storage: @storage, auth_strategy:) + if origin_user_id.failure? + return origin_user_id + end + + folder_path = Util.join_uri_path(parent_location, folder_name) + path_prefix = URI.parse(Util.join_uri_path(base_uri, CGI.escapeURIComponent(origin_user_id.result))).path + request_url = Util.join_uri_path(base_uri, + CGI.escapeURIComponent(origin_user_id.result), + Util.escape_path(folder_path)) + + create_folder_request(auth_strategy, request_url, path_prefix) + end + + private + + def create_folder_request(auth_strategy, request_url, path_prefix) + Authentication[auth_strategy].call(storage: @storage) do |http| + result = handle_response(http.mkcol(request_url)) + return result if result.failure? - # rubocop:disable Metrics/AbcSize - def call(folder_path:) - response = OpenProject - .httpx - .basic_auth(@username, @password) - .mkcol( - Util.join_uri_path( - @uri, - "remote.php/dav/files", - CGI.escapeURIComponent(@username), - Util.escape_path(folder_path) - ) - ) - - error_data = Storages::StorageErrorData.new(source: self.class, payload: response) - - case response - in { status: 200..299 } - ServiceResult.success(message: "Folder was successfully created.") - in { status: 405 } - if Util.error_text_from_response(response) == "The resource you tried to create already exists" - ServiceResult.success(message: "Folder already exists.") - else - Util.error(:not_allowed, "Outbound request method not allowed", error_data) + handle_response(http.propfind(request_url, requested_properties)).map do |response| + storage_file(path_prefix, response) + end + end + end + + def handle_response(response) + case response + in { status: 200..299 } + ServiceResult.success(result: response) + in { status: 401 } + Util.failure(code: :unauthorized, + data: Util.error_data_from_response(caller: self.class, response:), + log_message: "Outbound request not authorized!") + in { status: 404 | 409 } # webDAV endpoint returns 409 if path does not exist + Util.failure(code: :not_found, + data: Util.error_data_from_response(caller: self.class, response:), + log_message: "Outbound request destination not found!") + in { status: 405 } # webDAV endpoint returns 405 if folder already exists + Util.failure(code: :conflict, + data: Util.error_data_from_response(caller: self.class, response:), + log_message: "Folder already exists") + else + Util.failure(code: :error, + data: Util.error_data_from_response(caller: self.class, response:), + log_message: "Outbound request failed with unknown error!") + end + end + + def requested_properties + Nokogiri::XML::Builder.new do |xml| + xml["d"].propfind( + "xmlns:d" => "DAV:", + "xmlns:oc" => "http://owncloud.org/ns" + ) do + xml["d"].prop do + xml["oc"].fileid + xml["oc"].size + xml["d"].getlastmodified + xml["oc"].send(:"owner-display-name") + end + end + end.to_xml + end + + # rubocop:disable Metrics/AbcSize + def storage_file(path_prefix, response) + xml = response.xml + path = xml.xpath("//d:response/d:href/text()").to_s + timestamp = xml.xpath("//d:response/d:propstat/d:prop/d:getlastmodified/text()").to_s + creator = xml.xpath("//d:response/d:propstat/d:prop/oc:owner-display-name/text()").to_s + location = CGI.unescapeURIComponent(path.gsub(path_prefix, "")).delete_suffix("/") + + StorageFile.new( + id: xml.xpath("//d:response/d:propstat/d:prop/oc:fileid/text()").to_s, + name: location.split("/").last, + size: xml.xpath("//d:response/d:propstat/d:prop/oc:size/text()").to_s, + mime_type: "application/x-op-directory", + created_at: Time.zone.parse(timestamp), + last_modified_at: Time.zone.parse(timestamp), + created_by_name: creator, + last_modified_by_name: creator, + location: + ) + end + + # rubocop:enable Metrics/AbcSize + + def base_uri = Util.join_uri_path(@storage.uri, "remote.php", "dav", "files") end - in { status: 401 } - Util.error(:unauthorized, "Outbound request not authorized", error_data) - in { status: 404 } - Util.error(:not_found, "Outbound request destination not found", error_data) - in { status: 409 } - Util.error(:conflict, Util.error_text_from_response(response), error_data) - else - Util.error(:error, "Outbound request failed", error_data) end end - - # rubocop:enable Metrics/AbcSize end end diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/delete_folder_command.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/delete_folder_command.rb index 80258309c1fe..30718b938977 100644 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/delete_folder_command.rb +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/delete_folder_command.rb @@ -28,16 +28,16 @@ module Storages::Peripherals::StorageInteraction::Nextcloud class DeleteFolderCommand - def initialize(storage) - @delegate = Internal::DeleteEntityCommand.new(storage) + def self.call(storage:, auth_strategy:, location:) + new(storage).call(auth_strategy:, location:) end - def self.call(storage:, location:) - new(storage).call(location:) + def initialize(storage) + @delegate = Internal::DeleteEntityCommand.new(storage) end - def call(location:) - @delegate.call(location:) + def call(auth_strategy:, location:) + @delegate.call(auth_strategy:, location:) end end end diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/download_link_query.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/download_link_query.rb index 7d5723749126..b578af94fbd3 100644 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/download_link_query.rb +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/download_link_query.rb @@ -32,18 +32,38 @@ module Storages::Peripherals::StorageInteraction::Nextcloud class DownloadLinkQuery using Storages::Peripherals::ServiceResultRefinements + Auth = ::Storages::Peripherals::StorageInteraction::Authentication + + def self.call(storage:, auth_strategy:, file_link:) + new(storage).call(auth_strategy:, file_link:) + end + def initialize(storage) - @uri = storage.uri - @configuration = storage.oauth_configuration + @storage = storage end - def self.call(storage:, user:, file_link:) - new(storage).call(user:, file_link:) + def call(auth_strategy:, file_link:) + if file_link.nil? + return failure(code: :error, payload: nil, log_message: "File link can not be nil.") + end + + direct_download_request(auth_strategy:, file_link:) + .bind { |response_body| direct_download_token(body: response_body) } + .map { |download_token| download_link(download_token, file_link.origin_name) } end - def call(user:, file_link:) - result = Util.token(user:, configuration: @configuration) do |token| - direct_download_request(token, file_link).bind do |resp| + private + + def http_options + Util.ocs_api_request.deep_merge(Util.accept_json) + end + + def direct_download_request(auth_strategy:, file_link:) + Auth[auth_strategy].call(storage: @storage, http_options:) do |http| + result = handle_response http.post(Util.join_uri_path(@storage.uri, "/ocs/v2.php/apps/dav/api/v1/direct"), + json: { fileId: file_link.origin_id }) + + result.bind do |resp| # The nextcloud API returns a successful response with empty body if the authorization is missing or expired if resp.body.blank? Util.error(:unauthorized, "Outbound request not authorized!") @@ -52,41 +72,29 @@ def call(user:, file_link:) end end end - - result - .bind { |response_body| direct_download_token(body: response_body) } - .map { |download_token| download_link(download_token, file_link.origin_name) } end - private - - def direct_download_request(token, file_link) - response = OpenProject - .httpx - .post( - Util.join_uri_path(@uri, "/ocs/v2.php/apps/dav/api/v1/direct"), - json: { fileId: file_link.origin_id }, - headers: { - "Authorization" => "Bearer #{token.access_token}", - "OCS-APIRequest" => "true", - "Accept" => "application/json", - "Content-Type" => "application/json" - } - ) + def handle_response(response) case response in { status: 200..299 } ServiceResult.success(result: response) in { status: 404 } - Util.error(:not_found, "Outbound request destination not found!", response) + failure(code: :not_found, + payload: response.json(symbolize_keys: true), + log_message: "Outbound request destination not found!") in { status: 401 } - Util.error(:unauthorized, "Outbound request not authorized!", response) + failure(code: :unauthorized, + payload: response.json(symbolize_keys: true), + log_message: "Outbound request not authorized!") else - Util.error(:error, "Outbound request failed!") + failure(code: :error, + payload: response.json(symbolize_keys: true), + log_message: "Outbound request failed with unknown error!") end end def download_link(token, origin_name) - Util.join_uri_path(@uri, "index.php/apps/integration_openproject/direct", token, CGI.escape(origin_name)) + Util.join_uri_path(@storage.uri, "index.php/apps/integration_openproject/direct", token, CGI.escape(origin_name)) end def direct_download_token(body:) @@ -113,5 +121,14 @@ def parse_direct_download_token(body:) path.split("/").last end + + def failure(code:, payload:, log_message:) + ServiceResult.failure( + result: code, + errors: ::Storages::StorageError.new(code:, + data: ::Storages::StorageErrorData.new(source: self.class, payload:), + log_message:) + ) + end end end diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/file_ids_query.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/file_ids_query.rb index 65eece537c05..0335b6b61263 100644 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/file_ids_query.rb +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/file_ids_query.rb @@ -29,7 +29,7 @@ module Storages::Peripherals::StorageInteraction::Nextcloud class FileIdsQuery def initialize(storage) - @query = ::Storages::Peripherals::StorageInteraction::Nextcloud::Internal::PropfindQuery.new(storage) + @query = ::Storages::Peripherals::StorageInteraction::Nextcloud::Internal::PropfindQueryLegacy.new(storage) end def self.call(storage:, path:) diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/file_path_to_id_map_query.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/file_path_to_id_map_query.rb new file mode 100644 index 000000000000..545ee750f1a3 --- /dev/null +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/file_path_to_id_map_query.rb @@ -0,0 +1,72 @@ +# frozen_string_literal: true + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module Storages + module Peripherals + module StorageInteraction + module Nextcloud + class FilePathToIdMapQuery + def self.call(storage:, auth_strategy:, folder:) + new(storage).call(auth_strategy:, folder:) + end + + def initialize(storage) + @storage = storage + @propfind_query = Internal::PropfindQuery.new(storage) + end + + def call(auth_strategy:, folder:) + origin_user_id = Util.origin_user_id(caller: self.class, storage: @storage, auth_strategy:) + .on_failure do |result| + return result + end + + Authentication[auth_strategy].call(storage: @storage, http_options:) do |http| + # nc:acl-list is only required to avoid https://community.openproject.org/wp/49628. See comment #4. + @propfind_query.call(http:, + username: origin_user_id.result, + path: folder.path, + props: %w[oc:fileid nc:acl-list]) + .map do |obj| + obj.transform_values { |value| StorageFileId.new(id: value["fileid"]) } + end + end + end + + private + + def http_options + Util.webdav_request_with_depth("infinity") + end + end + end + end + end +end diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/internal/delete_entity_command.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/internal/delete_entity_command.rb index 161db81f78e2..85b5df7ad9ab 100644 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/internal/delete_entity_command.rb +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/internal/delete_entity_command.rb @@ -28,36 +28,49 @@ module Storages::Peripherals::StorageInteraction::Nextcloud::Internal class DeleteEntityCommand - UTIL = ::Storages::Peripherals::StorageInteraction::Nextcloud::Util + Util = ::Storages::Peripherals::StorageInteraction::Nextcloud::Util + Auth = ::Storages::Peripherals::StorageInteraction::Authentication + + def self.call(storage:, auth_strategy:, location:) + new(storage).call(auth_strategy:, location:) + end def initialize(storage) - @uri = storage.uri - @username = storage.username - @password = storage.password + @storage = storage end - def self.call(storage:, location:) - new(storage).call(location:) + def call(auth_strategy:, location:) + origin_user_id = Util.origin_user_id(caller: self.class, storage: @storage, auth_strategy:) + if origin_user_id.failure? + return origin_user_id + end + + Auth[auth_strategy].call(storage: @storage) do |http| + handle_response http.delete(Util.join_uri_path(@storage.uri, + "remote.php/dav/files", + CGI.escapeURIComponent(origin_user_id.result), + Util.escape_path(location))) + end end - def call(location:) - response = OpenProject - .httpx - .basic_auth(@username, @password) - .delete(UTIL.join_uri_path(@uri, - "remote.php/dav/files", - CGI.escapeURIComponent(@username), - UTIL.escape_path(location))) + private + def handle_response(response) case response in { status: 200..299 } ServiceResult.success in { status: 404 } - UTIL.error(:not_found) + Util.failure(code: :not_found, + data: Util.error_data_from_response(caller: self.class, response:), + log_message: "Outbound request destination not found!") in { status: 401 } - UTIL.error(:unauthorized) + Util.failure(code: :unauthorized, + data: Util.error_data_from_response(caller: self.class, response:), + log_message: "Outbound request not authorized!") else - UTIL.error(:error) + Util.failure(code: :error, + data: Util.error_data_from_response(caller: self.class, response:), + log_message: "Outbound request failed with unknown error!") end end end diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/internal/propfind_query.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/internal/propfind_query.rb index 876ab27f04f8..445342bc46fe 100644 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/internal/propfind_query.rb +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/internal/propfind_query.rb @@ -28,114 +28,131 @@ # See COPYRIGHT and LICENSE files for more details. #++ -module Storages::Peripherals::StorageInteraction::Nextcloud::Internal - class PropfindQuery - UTIL = ::Storages::Peripherals::StorageInteraction::Nextcloud::Util - - # Only for information purposes currently. - # Probably a bit later we could validate `#call` parameters. - # - # DEPTH = %w[0 1 infinity].freeze - # POSSIBLE_PROPS = %w[ - # d:getlastmodified - # d:getetag - # d:getcontenttype - # d:resourcetype - # d:getcontentlength - # d:permissions - # d:size - # oc:id - # oc:fileid - # oc:favorite - # oc:comments-href - # oc:comments-count - # oc:comments-unread - # oc:owner-id - # oc:owner-display-name - # oc:share-types - # oc:checksums - # oc:size - # nc:has-preview - # nc:rich-workspace - # nc:contained-folder-count - # nc:contained-file-count - # nc:acl-list - # ].freeze - - def initialize(storage) - @uri = storage.uri - @username = storage.username - @password = storage.password - @group = storage.group - end +module Storages + module Peripherals + module StorageInteraction + module Nextcloud + module Internal + class PropfindQuery + # Only for information purposes currently. + # Probably a bit later we could validate `#call` parameters. + # + # DEPTH = %w[0 1 infinity].freeze + # POSSIBLE_PROPS = %w[ + # d:getlastmodified + # d:getetag + # d:getcontenttype + # d:resourcetype + # d:getcontentlength + # d:permissions + # d:size + # oc:id + # oc:fileid + # oc:favorite + # oc:comments-href + # oc:comments-count + # oc:comments-unread + # oc:owner-id + # oc:owner-display-name + # oc:share-types + # oc:checksums + # oc:size + # nc:has-preview + # nc:rich-workspace + # nc:contained-folder-count + # nc:contained-file-count + # nc:acl-list + # ].freeze - def self.call(storage:, depth:, path:, props:) - new(storage).call(depth:, path:, props:) - end + def self.call(storage:, http:, username:, path:, props:) + new(storage).call(http:, username:, path:, props:) + end - # rubocop:disable Metrics/AbcSize - def call(depth:, path:, props:) - body = Nokogiri::XML::Builder.new do |xml| - xml["d"].propfind( - "xmlns:d" => "DAV:", - "xmlns:oc" => "http://owncloud.org/ns", - "xmlns:nc" => "http://nextcloud.org/ns" - ) do - xml["d"].prop do - props.each do |prop| - namespace, property = prop.split(":") - xml[namespace].send(property) + def initialize(storage) + @storage = storage + end + + def call(http:, username:, path:, props:) + request_uri = Util.join_uri_path(base_uri, CGI.escapeURIComponent(username), Util.escape_path(path)) + response = http.request(:propfind, request_uri, xml: request_body(props)) + + handle_response(response, username) + end + + private + + def handle_response(response, username) + case response + in { status: 200..299 } + success_result(response, username) + in { status: 401 } + Util.failure(code: :unauthorized, + data: Util.error_data_from_response(caller: self.class, response:), + log_message: "Outbound request not authorized!") + in { status: 404 } + Util.failure(code: :not_found, + data: Util.error_data_from_response(caller: self.class, response:), + log_message: "Outbound request destination not found!") + in { status: 405 } + Util.failure(code: :not_allowed, + data: Util.error_data_from_response(caller: self.class, response:), + log_message: "Outbound request method not allowed!") + + else + Util.failure(code: :error, + data: Util.error_data_from_response(caller: self.class, response:), + log_message: "Outbound request failed with unknown error!") + end + end + + # rubocop:disable Metrics/AbcSize + def success_result(response, username) + doc = Nokogiri::XML(response.body.to_s) + result = {} + doc.xpath("/d:multistatus/d:response").each do |resource_section| + resource = resource_path(resource_section, username) + result[resource] = {} + + # In future it could be useful to respond not only with found, but not found props as well + # resource_section.xpath("d:propstat[d:status[text() = 'HTTP/1.1 404 Not Found']]/d:prop/*") + resource_section.xpath("d:propstat[d:status[text() = 'HTTP/1.1 200 OK']]/d:prop/*").each do |node| + result[resource][node.name.to_s] = node.text.strip + end + end + + ServiceResult.success(result:) + end + + # rubocop:enable Metrics/AbcSize + + def base_uri = "#{@storage.uri}remote.php/dav/files" + + def resource_path(section, username) + path = CGI.unescape(section.xpath("d:href").text.strip) + .gsub!(Util.join_uri_path(URI(base_uri).path, username), "") + + path.end_with?("/") && path.length > 1 ? path.chop : path + end + + def request_body(props) + Nokogiri::XML::Builder.new do |xml| + xml["d"].propfind( + "xmlns:d" => "DAV:", + "xmlns:oc" => "http://owncloud.org/ns", + "xmlns:nc" => "http://nextcloud.org/ns" + ) do + xml["d"].prop do + props.each do |prop| + namespace, property = prop.split(":") + xml[namespace].send(property) + end + end + end + end.to_xml end end end - end.to_xml - - response = OpenProject - .httpx - .basic_auth(@username, @password) - .with(headers: { "Depth" => depth }) - .request( - "PROPFIND", - UTIL.join_uri_path( - @uri, - "remote.php/dav/files", - CGI.escapeURIComponent(@username), - UTIL.escape_path(path) - ), - xml: body - ) - - error_data = Storages::StorageErrorData.new(source: self.class, payload: response) - - case response - in { status: 200..299 } - doc = Nokogiri::XML(response.body.to_s) - result = {} - doc.xpath("/d:multistatus/d:response").each do |resource_section| - resource = CGI.unescape(resource_section.xpath("d:href").text.strip) - .gsub!(UTIL.join_uri_path(@uri.path, "/remote.php/dav/files/#{@username}/"), "") - - result[resource] = {} - - # In future it could be useful to respond not only with found, but not found props as well - # resource_section.xpath("d:propstat[d:status[text() = 'HTTP/1.1 404 Not Found']]/d:prop/*") - resource_section.xpath("d:propstat[d:status[text() = 'HTTP/1.1 200 OK']]/d:prop/*").each do |node| - result[resource][node.name.to_s] = node.text.strip - end - end - - ServiceResult.success(result:) - in { status: 405 } - UTIL.error(:not_allowed, "Outbound request method not allowed", error_data) - in { status: 401 } - UTIL.error(:unauthorized, "Outbound request not authorized", error_data) - in { status: 404 } - UTIL.error(:not_found, "Outbound request destination not found", error_data) - else - UTIL.error(:error, "Outbound request failed", error_data) end end - - # rubocop:enable Metrics/AbcSize end end diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/internal/propfind_query_legacy.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/internal/propfind_query_legacy.rb new file mode 100644 index 000000000000..cb8043a6d907 --- /dev/null +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/internal/propfind_query_legacy.rb @@ -0,0 +1,141 @@ +# frozen_string_literal: true + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module Storages::Peripherals::StorageInteraction::Nextcloud::Internal + class PropfindQueryLegacy + UTIL = ::Storages::Peripherals::StorageInteraction::Nextcloud::Util + + # Only for information purposes currently. + # Probably a bit later we could validate `#call` parameters. + # + # DEPTH = %w[0 1 infinity].freeze + # POSSIBLE_PROPS = %w[ + # d:getlastmodified + # d:getetag + # d:getcontenttype + # d:resourcetype + # d:getcontentlength + # d:permissions + # d:size + # oc:id + # oc:fileid + # oc:favorite + # oc:comments-href + # oc:comments-count + # oc:comments-unread + # oc:owner-id + # oc:owner-display-name + # oc:share-types + # oc:checksums + # oc:size + # nc:has-preview + # nc:rich-workspace + # nc:contained-folder-count + # nc:contained-file-count + # nc:acl-list + # ].freeze + + def initialize(storage) + @uri = storage.uri + @username = storage.username + @password = storage.password + @group = storage.group + end + + def self.call(storage:, depth:, path:, props:) + new(storage).call(depth:, path:, props:) + end + + # rubocop:disable Metrics/AbcSize + def call(depth:, path:, props:) + body = Nokogiri::XML::Builder.new do |xml| + xml["d"].propfind( + "xmlns:d" => "DAV:", + "xmlns:oc" => "http://owncloud.org/ns", + "xmlns:nc" => "http://nextcloud.org/ns" + ) do + xml["d"].prop do + props.each do |prop| + namespace, property = prop.split(":") + xml[namespace].send(property) + end + end + end + end.to_xml + + response = OpenProject + .httpx + .basic_auth(@username, @password) + .with(headers: { "Depth" => depth }) + .request( + "PROPFIND", + UTIL.join_uri_path( + @uri, + "remote.php/dav/files", + CGI.escapeURIComponent(@username), + UTIL.escape_path(path) + ), + xml: body + ) + + error_data = Storages::StorageErrorData.new(source: self.class, payload: response) + + case response + in { status: 200..299 } + doc = Nokogiri::XML(response.body.to_s) + result = {} + doc.xpath("/d:multistatus/d:response").each do |resource_section| + resource = CGI.unescape(resource_section.xpath("d:href").text.strip) + .gsub!(UTIL.join_uri_path(@uri.path, "/remote.php/dav/files/#{@username}/"), "") + + result[resource] = {} + + # In future it could be useful to respond not only with found, but not found props as well + # resource_section.xpath("d:propstat[d:status[text() = 'HTTP/1.1 404 Not Found']]/d:prop/*") + resource_section.xpath("d:propstat[d:status[text() = 'HTTP/1.1 200 OK']]/d:prop/*").each do |node| + result[resource][node.name.to_s] = node.text.strip + end + end + + ServiceResult.success(result:) + in { status: 405 } + UTIL.error(:not_allowed, "Outbound request method not allowed", error_data) + in { status: 401 } + UTIL.error(:unauthorized, "Outbound request not authorized", error_data) + in { status: 404 } + UTIL.error(:not_found, "Outbound request destination not found", error_data) + else + UTIL.error(:error, "Outbound request failed", error_data) + end + end + + # rubocop:enable Metrics/AbcSize + end +end diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/util.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/util.rb index f8e091d393c4..67a386162558 100644 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/util.rb +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/util.rb @@ -80,7 +80,47 @@ def token(user:, configuration:, &) end def error_text_from_response(response) - Nokogiri::XML(response.body).xpath("//s:message").text + response.xml.xpath("//s:message").text + end + + def origin_user_id(caller:, storage:, auth_strategy:) + case auth_strategy.key + when :basic_auth + ServiceResult.success(result: storage.username) + when :oauth_user_token + origin_user_id = OAuthClientToken.where(user_id: auth_strategy.user, oauth_client: storage.oauth_client) + .pick(:origin_user_id) + if origin_user_id.present? + ServiceResult.success(result: origin_user_id) + else + failure(code: :error, + data: ::Storages::StorageErrorData.new(source: caller), + log_message: "No origin user ID or user token found. Cannot execute query without user context.") + end + else + failure(code: :error, + data: ::Storages::StorageErrorData.new(source: caller), + log_message: "No authentication strategy with user context found. " \ + "Cannot execute query without user context.") + end + end + + def error_data_from_response(caller:, response:) + payload = + case response.content_type.mime_type + when "application/json" + response.json + when "text/xml", "application/xml" + response.xml + else + response.body.to_s + end + + ::Storages::StorageErrorData.new(source: caller, payload:) + end + + def failure(code:, data:, log_message:) + ServiceResult.failure(result: code, errors: ::Storages::StorageError.new(code:, data:, log_message:)) end end end diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/create_folder_command.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/create_folder_command.rb index 436b40364fa2..a190bca43ab2 100644 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/create_folder_command.rb +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/create_folder_command.rb @@ -35,31 +35,32 @@ module OneDrive class CreateFolderCommand using ServiceResultRefinements - def self.call(storage:, folder_path:) - new(storage).call(folder_path:) + def self.call(storage:, auth_strategy:, folder_name:, parent_location:) + new(storage).call(auth_strategy:, folder_name:, parent_location:) end def initialize(storage) @storage = storage - @uri = storage.uri end - def call(folder_path:, parent_location: nil) - Util.using_admin_token(@storage) do |http| - response = http.post(uri_for(parent_location), body: payload(folder_path)) - - handle_response(response) + def call(auth_strategy:, folder_name:, parent_location:) + Authentication[auth_strategy].call(storage: @storage, http_options:) do |http| + handle_response http.post(uri_for(parent_location), body: payload(folder_name)) end end + private + + def http_options + Util.json_content_type + end + def uri_for(parent_location) - return "#{base_uri}/root/children" if parent_location.nil? + return "#{base_uri}/root/children" if parent_location.root? "#{base_uri}/items/#{parent_location}/children" end - private - def handle_response(response) data = ::Storages::StorageErrorData.new(source: self.class, payload: response) @@ -97,15 +98,15 @@ def file_info_for(json_file) ) end - def payload(folder_path) + def payload(folder_name) { - name: folder_path, + name: folder_name, folder: {}, "@microsoft.graph.conflictBehavior" => "fail" }.to_json end - def base_uri = "/v1.0/drives/#{@storage.drive_id}" + def base_uri = "#{@storage.uri}v1.0/drives/#{@storage.drive_id}" end end end diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/delete_folder_command.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/delete_folder_command.rb index d56e475c06c8..787ad49efac0 100644 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/delete_folder_command.rb +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/delete_folder_command.rb @@ -33,18 +33,20 @@ module Peripherals module StorageInteraction module OneDrive class DeleteFolderCommand - def self.call(storage:, location:) - new(storage).call(location:) + Auth = ::Storages::Peripherals::StorageInteraction::Authentication + + def self.call(storage:, auth_strategy:, location:) + new(storage).call(auth_strategy:, location:) end def initialize(storage) @storage = storage - @uri = storage.uri end - def call(location:) - Util.using_admin_token(@storage) do |http| - response = http.delete("/v1.0/drives/#{@storage.drive_id}/items/#{location}") + def call(auth_strategy:, location:) + Auth[auth_strategy].call(storage: @storage) do |http| + response = http.delete( + Util.join_uri_path(@storage.uri, "/v1.0/drives/#{@storage.drive_id}/items/#{location}")) data = ::Storages::StorageErrorData.new(source: self.class, payload: response) diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/download_link_query.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/download_link_query.rb index 8a6f3a091b8b..67786974dc5a 100644 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/download_link_query.rb +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/download_link_query.rb @@ -33,26 +33,23 @@ module Peripherals module StorageInteraction module OneDrive class DownloadLinkQuery - def initialize(storage) - @storage = storage - @uri = storage.uri + Auth = ::Storages::Peripherals::StorageInteraction::Authentication + + def self.call(storage:, auth_strategy:, file_link:) + new(storage).call(auth_strategy:, file_link:) end - def self.call(storage:, user:, file_link:) - new(storage).call(user:, file_link:) + def initialize(storage) + @storage = storage end - def call(user:, file_link:) - Util.using_user_token(@storage, user) do |token| - response = OpenProject.httpx.get( - Util.join_uri_path( - @uri, - uri_path_for(file_link.origin_id) - ), - headers: { "Authorization" => "Bearer #{token.access_token}" } - ) + def call(auth_strategy:, file_link:) + if file_link.nil? + return failure(code: :error, payload: nil, log_message: "File link can not be nil.") + end - handle_errors(response) + Auth[auth_strategy].call(storage: @storage) do |http| + handle_errors http.get(Util.join_uri_path(@storage.uri, uri_path_for(file_link.origin_id))) end end @@ -63,23 +60,36 @@ def handle_errors(response) in { status: 300..399 } ServiceResult.success(result: response.headers["Location"]) in { status: 404 } - ServiceResult.failure(result: :not_found, - errors: ::Storages::StorageError.new(code: :not_found, data: response)) + failure(code: :not_found, + payload: response.json(symbolize_keys: true), + log_message: "Outbound request destination not found!") in { status: 403 } - ServiceResult.failure(result: :forbidden, - errors: ::Storages::StorageError.new(code: :forbidden, data: response)) + failure(code: :forbidden, + payload: response.json(symbolize_keys: true), + log_message: "Outbound request forbidden!") in { status: 401 } - ServiceResult.failure(result: :unauthorized, - errors: ::Storages::StorageError.new(code: :unauthorized, data: response)) + failure(code: :unauthorized, + payload: response.json(symbolize_keys: true), + log_message: "Outbound request not authorized!") else - ServiceResult.failure(result: :error, - errors: ::Storages::StorageError.new(code: :error, data: response)) + failure(code: :error, + payload: response.json(symbolize_keys: true), + log_message: "Outbound request failed with unknown error!") end end def uri_path_for(file_id) "/v1.0/drives/#{@storage.drive_id}/items/#{file_id}/content" end + + def failure(code:, payload:, log_message:) + ServiceResult.failure( + result: code, + errors: ::Storages::StorageError.new(code:, + data: StorageErrorData.new(source: self.class, payload:), + log_message:) + ) + end end end end diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/file_info_query.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/file_info_query.rb index 4d110509cc65..7861b45a9132 100644 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/file_info_query.rb +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/file_info_query.rb @@ -34,7 +34,6 @@ module StorageInteraction module OneDrive class FileInfoQuery FIELDS = %w[id name fileSystemInfo file folder size createdBy lastModifiedBy parentReference].freeze - Auth = ::Storages::Peripherals::StorageInteraction::Authentication def self.call(storage:, auth_strategy:, file_id:) new(storage).call(auth_strategy:, file_id:) @@ -42,50 +41,66 @@ def self.call(storage:, auth_strategy:, file_id:) def initialize(storage) @storage = storage - @delegate = Internal::DriveItemQuery.new(storage) + @drive_item_query = Internal::DriveItemQuery.new(storage) + @error_data = StorageErrorData.new(source: self.class) end def call(auth_strategy:, file_id:) if file_id.nil? return ServiceResult.failure( result: :error, - errors: ::Storages::StorageError.new(code: :error, - data: StorageErrorData.new(source: self.class), - log_message: "File ID can not be nil") + errors: StorageError.new(code: :error, + data: @error_data, log_message: "File ID can not be nil") ) end - Auth[auth_strategy].call(storage: @storage) do |http| - @delegate.call(http:, drive_item_id: file_id, fields: FIELDS).map(&storage_file_infos) + requested_result = Authentication[auth_strategy].call(storage: @storage) do |http| + @drive_item_query.call(http:, drive_item_id: file_id, fields: FIELDS) + end + + requested_result.on_success { |sr| return ServiceResult.success(result: storage_file_infos(sr.result)) } + requested_result.on_failure do |sr| + return sr unless sr.result == :not_found && auth_strategy.user.present? + + return admin_query(file_id) end end private - # rubocop:disable Metrics/AbcSize - def storage_file_infos - ->(json) do - StorageFileInfo.new( - status: "ok", - status_code: 200, - id: json[:id], - name: json[:name], - last_modified_at: Time.zone.parse(json.dig(:fileSystemInfo, :lastModifiedDateTime)), - created_at: Time.zone.parse(json.dig(:fileSystemInfo, :createdDateTime)), - mime_type: Util.mime_type(json), - size: json[:size], - owner_name: json.dig(:createdBy, :user, :displayName), - owner_id: json.dig(:createdBy, :user, :id), - trashed: false, - last_modified_by_name: json.dig(:lastModifiedBy, :user, :displayName), - last_modified_by_id: json.dig(:lastModifiedBy, :user, :id), - permissions: nil, - location: Util.extract_location(json[:parentReference], json[:name]) + def admin_query(file_id) + admin_result = Authentication[userless_strategy].call(storage: @storage) do |http| + @drive_item_query.call(http:, drive_item_id: file_id, fields: FIELDS) + end + + admin_result.on_success do |admin_query| + return ServiceResult.success( + result: storage_file_infos(admin_query.result, status: "forbidden", status_code: 403) ) end end - # rubocop:enable Metrics/AbcSize + def userless_strategy = Registry.resolve("one_drive.authentication.userless").call + + def storage_file_infos(json, status: "ok", status_code: 200) + StorageFileInfo.new( + status:, + status_code:, + id: json[:id], + name: json[:name], + mime_type: Util.mime_type(json), + size: json[:size], + owner_name: json.dig(:createdBy, :user, :displayName), + owner_id: json.dig(:createdBy, :user, :id), + trashed: false, + permissions: nil, + location: Util.extract_location(json[:parentReference], json[:name]), + last_modified_at: Time.zone.parse(json.dig(:fileSystemInfo, :lastModifiedDateTime)), + created_at: Time.zone.parse(json.dig(:fileSystemInfo, :createdDateTime)), + last_modified_by_name: json.dig(:lastModifiedBy, :user, :displayName), + last_modified_by_id: json.dig(:lastModifiedBy, :user, :id) + ) + end end end end diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/file_path_to_id_map_query.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/file_path_to_id_map_query.rb new file mode 100644 index 000000000000..e370adfcda2c --- /dev/null +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/file_path_to_id_map_query.rb @@ -0,0 +1,117 @@ +# frozen_string_literal: true + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module Storages + module Peripherals + module StorageInteraction + module OneDrive + class FilePathToIdMapQuery + CHILDREN_FIELDS = %w[id name file folder parentReference].freeze + FOLDER_FIELDS = %w[id name parentReference].freeze + + def self.call(storage:, auth_strategy:, folder:) + new(storage).call(auth_strategy:, folder:) + end + + def initialize(storage) + @storage = storage + @children_query = Internal::ChildrenQuery.new(storage) + @drive_item_query = Internal::DriveItemQuery.new(storage) + end + + def call(auth_strategy:, folder:) + Authentication[auth_strategy].call(storage: @storage) do |http| + fetch_result = fetch_folder(http, folder) + return fetch_result if fetch_result.failure? + + file_ids_dictionary = fetch_result.result + queue = [folder] + + while queue.any? + dir = queue.shift + + visit = visit(http, dir) + return visit if visit.failure? + + entry, to_queue = visit.result.values_at(:entry, :to_queue) + file_ids_dictionary = file_ids_dictionary.merge(entry) + queue.concat(to_queue) + end + + ServiceResult.success(result: file_ids_dictionary) + end + end + + private + + def visit(http, folder) + call = @children_query.call(http:, folder:, fields: CHILDREN_FIELDS) + return call if call.failure? + + entry = {} + to_queue = [] + + call.result[:value].each do |json| + new_entry, folder = parse_drive_item_info(json).values_at(:entry, :folder) + + entry = entry.merge(new_entry) + if folder.present? + to_queue.append(folder) + end + end + + ServiceResult.success(result: { entry:, to_queue: }) + end + + def parse_drive_item_info(json) + drive_item_id = json[:id] + location = Util.extract_location(json[:parentReference], json[:name]) + + entry = { location => StorageFileId.new(id: drive_item_id) } + folder = json[:folder].present? ? ParentFolder.new(drive_item_id) : nil + + { entry:, folder: } + end + + def fetch_folder(http, folder) + result = @drive_item_query.call(http:, drive_item_id: folder.path, fields: FOLDER_FIELDS) + result.map do |json| + if folder.root? + { "/" => StorageFileId.new(id: json[:id]) } + else + parse_drive_item_info(json)[:entry] + end + end + end + end + end + end + end +end diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/files_info_query.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/files_info_query.rb index 59e95c45720d..a28c51027e21 100644 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/files_info_query.rb +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/files_info_query.rb @@ -51,12 +51,11 @@ def call(auth_strategy:, file_ids:) ) end - result = file_ids.map do |file_id| + result = Array(file_ids).map do |file_id| file_info_result = FileInfoQuery.call(storage: @storage, auth_strategy:, file_id:) - if file_info_result.failure? && - file_info_result.error_source.module_parent == AuthenticationStrategies - # errors in the authentication strategies must short circuit the query and return the error - return file_info_result + + file_info_result.on_failure do |failed_result| + return failed_result if failed_result.error_source.module_parent == AuthenticationStrategies end wrap_storage_file_error(file_id, file_info_result) @@ -68,21 +67,19 @@ def call(auth_strategy:, file_ids:) private def wrap_storage_file_error(file_id, query_result) - if query_result.success? - query_result.result - else - status = if query_result.error_payload.instance_of?(HTTPX::ErrorResponse) - query_result.error_payload.error - else - query_result.error_payload.dig(:error, :code) - end + return query_result.result if query_result.success? - StorageFileInfo.new( - id: file_id, - status:, - status_code: Rack::Utils::SYMBOL_TO_STATUS_CODE[query_result.errors.code] || 500 - ) - end + status = if query_result.error_payload.instance_of?(HTTPX::ErrorResponse) + query_result.error_payload.error + else + query_result.error_payload.dig(:error, :code) + end + + StorageFileInfo.new( + id: file_id, + status:, + status_code: Rack::Utils::SYMBOL_TO_STATUS_CODE[query_result.errors.code] || 500 + ) end end end diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/files_query.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/files_query.rb index 5aad9c649276..91088a4cda25 100644 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/files_query.rb +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/files_query.rb @@ -48,7 +48,7 @@ def initialize(storage) end def call(auth_strategy:, folder:) - Auth[auth_strategy].call(storage: @storage) do |http| + Auth[auth_strategy].call(storage: @storage, http_options: { headers: { "OCS-APIRequest" => "true" } }) do |http| call = http.get(Util.join_uri_path(@uri, children_uri_path_for(folder) + FIELDS)) response = handle_response(call, :value) diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/folder_files_file_ids_deep_query.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/folder_files_file_ids_deep_query.rb deleted file mode 100644 index efce5928626b..000000000000 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/folder_files_file_ids_deep_query.rb +++ /dev/null @@ -1,137 +0,0 @@ -# frozen_string_literal: true - -#-- copyright -# OpenProject is an open source project management software. -# Copyright (C) 2012-2024 the OpenProject GmbH -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License version 3. -# -# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: -# Copyright (C) 2006-2013 Jean-Philippe Lang -# Copyright (C) 2010-2013 the ChiliProject Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# See COPYRIGHT and LICENSE files for more details. -#++ - -module Storages::Peripherals::StorageInteraction::OneDrive - class FolderFilesFileIdsDeepQuery - FIELDS = %w[id name file folder parentReference].freeze - - def self.call(storage:, folder:) - new(storage).call(folder:) - end - - def initialize(storage) - @storage = storage - @delegate = Internal::ChildrenQuery.new(storage) - end - - def call(folder:) - Util.using_admin_token(@storage) do |http| - fetch_result = fetch_folder(http, folder) - return fetch_result if fetch_result.failure? - - file_ids_dictionary = fetch_result.result - queue = [folder] - - while queue.any? - dir = queue.shift - - visit = visit(http, dir) - return visit if visit.failure? - - entry, to_queue = visit.result.values_at(:entry, :to_queue) - file_ids_dictionary = file_ids_dictionary.merge(entry) - queue.concat(to_queue) - end - - ServiceResult.success(result: file_ids_dictionary) - end - end - - private - - def visit(http, folder) - call = @delegate.call(http:, folder:, fields: FIELDS) - return call if call.failure? - - entry = {} - to_queue = [] - - call.result[:value].each do |json| - new_entry, folder = parse_drive_item_info(json).values_at(:entry, :folder) - - entry = entry.merge(new_entry) - if folder.present? - to_queue.append(folder) - end - end - - ServiceResult.success(result: { entry:, to_queue: }) - end - - def parse_drive_item_info(json) - drive_item_id = json[:id] - location = Util.extract_location(json[:parentReference], json[:name]) - - entry = { location => Storages::StorageFileInfo.from_id(drive_item_id) } - folder = json[:folder].present? ? Storages::Peripherals::ParentFolder.new(drive_item_id) : nil - - { entry:, folder: } - end - - # TODO: REMOVE WITH #51713, as this should be replaced by internal drive item query - # with harmonized interface for authentication - - def fetch_folder(http, folder) - uri_path = if folder.root? - "/v1.0/drives/#{@storage.drive_id}/root" - else - "/v1.0/drives/#{@storage.drive_id}/items/#{folder}" - end - - response = http.get(Util.join_uri_path(@storage.uri, "#{uri_path}?$select=id,name,parentReference")) - handle_responses(response).map do |json| - if folder.root? - { "/" => Storages::StorageFileInfo.from_id(json[:id]) } - else - parse_drive_item_info(json)[:entry] - end - end - end - - def handle_responses(response) - case response - in { status: 200..299 } - ServiceResult.success(result: response.json(symbolize_keys: true)) - in { status: 404 } - ServiceResult.failure(result: :not_found, - errors: Util.storage_error(response:, code: :not_found, source: self)) - in { status: 403 } - ServiceResult.failure(result: :forbidden, - errors: Util.storage_error(response:, code: :forbidden, source: self)) - in { status: 401 } - ServiceResult.failure(result: :unauthorized, - errors: Util.storage_error(response:, code: :unauthorized, source: self)) - else - data = ::Storages::StorageErrorData.new(source: self.class, payload: response) - ServiceResult.failure(result: :error, errors: ::Storages::StorageError.new(code: :error, data:)) - end - end - end -end diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/internal/drive_item_query.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/internal/drive_item_query.rb index 7179d09597bc..1c7ae445296d 100644 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/internal/drive_item_query.rb +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/internal/drive_item_query.rb @@ -34,8 +34,6 @@ module StorageInteraction module OneDrive module Internal class DriveItemQuery - Util = ::Storages::Peripherals::StorageInteraction::OneDrive::Util - def initialize(storage) @storage = storage end @@ -53,11 +51,10 @@ def call(http:, drive_item_id:, fields: []) private def make_file_request(drive_item_id, http, select_url_query) - response = http.get(Util.join_uri_path(@storage.uri, uri_path_for(drive_item_id) + select_url_query)) - handle_responses(response) + handle_response http.get("#{@storage.uri}#{uri_path_for(drive_item_id)}#{select_url_query}") end - def handle_responses(response) + def handle_response(response) case response in { status: 200..299 } ServiceResult.success(result: response.json(symbolize_keys: true)) @@ -71,16 +68,16 @@ def handle_responses(response) ServiceResult.failure(result: :unauthorized, errors: Util.storage_error(response:, code: :unauthorized, source: self.class)) else - data = ::Storages::StorageErrorData.new(source: self.class, payload: response) - ServiceResult.failure(result: :error, errors: ::Storages::StorageError.new(code: :error, data:)) + data = StorageErrorData.new(source: self.class, payload: response) + ServiceResult.failure(result: :error, errors: StorageError.new(code: :error, data:)) end end def uri_path_for(file_id) if file_id == "/" - "/v1.0/drives/#{@storage.drive_id}/root" + "v1.0/drives/#{@storage.drive_id}/root" else - "/v1.0/drives/#{@storage.drive_id}/items/#{file_id}" + "v1.0/drives/#{@storage.drive_id}/items/#{file_id}" end end end diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/util.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/util.rb index 93529fcba799..c10c71c4f06d 100644 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/util.rb +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/one_drive/util.rb @@ -28,82 +28,98 @@ # See COPYRIGHT and LICENSE files for more details. #++ -module Storages::Peripherals::StorageInteraction::OneDrive::Util - using Storages::Peripherals::ServiceResultRefinements +module Storages + module Peripherals + module StorageInteraction + module OneDrive + module Util + using ServiceResultRefinements - class << self - def mime_type(json) - json.dig(:file, :mimeType) || (json.key?(:folder) ? "application/x-op-directory" : nil) - end + class << self + def mime_type(json) + json.dig(:file, :mimeType) || (json.key?(:folder) ? "application/x-op-directory" : nil) + end - def using_user_token(storage, user, &) - connection_manager = ::OAuthClients::ConnectionManager - .new(user:, configuration: storage.oauth_configuration) + def using_user_token(storage, user, &) + connection_manager = ::OAuthClients::ConnectionManager + .new(user:, configuration: storage.oauth_configuration) - connection_manager - .get_access_token - .match( - on_success: ->(token) do - connection_manager.request_with_token_refresh(token) { yield token } - end, - on_failure: ->(_) do - ServiceResult.failure( - result: :unauthorized, - errors: ::Storages::StorageError.new( - code: :unauthorized, - data: ::Storages::StorageErrorData.new(source: connection_manager), - log_message: "Query could not be created! No access token found!" - ) - ) - end - ) - end + connection_manager + .get_access_token + .match( + on_success: ->(token) do + connection_manager.request_with_token_refresh(token) { yield token } + end, + on_failure: ->(_) do + ServiceResult.failure( + result: :unauthorized, + errors: StorageError.new( + code: :unauthorized, + data: StorageErrorData.new(source: connection_manager), + log_message: "Query could not be created! No access token found!" + ) + ) + end + ) + end - def storage_error(response:, code:, source:) - data = ::Storages::StorageErrorData.new(source:, payload: response.json(symbolize_keys: true)) + def storage_error(response:, code:, source:) + data = StorageErrorData.new(source:, payload: response.json(symbolize_keys: true)) - ::Storages::StorageError.new(code:, data:) - end + StorageError.new(code:, data:) + end - def join_uri_path(uri, *) - # We use `File.join` to ensure single `/` in between every part. This API will break if executed on a - # Windows context, as it used `\` as file separators. But we anticipate that OpenProject - # Server is not run on a Windows context. - # URI::join cannot be used, as it behaves very different for the path parts depending on trailing slashes. - File.join(uri.to_s, *) - end + def join_uri_path(uri, *) + # We use `File.join` to ensure single `/` in between every part. This API will break if executed on a + # Windows context, as it used `\` as file separators. But we anticipate that OpenProject + # Server is not run on a Windows context. + # URI::join cannot be used, as it behaves very different for the path parts depending on trailing slashes. + File.join(uri.to_s, *) + end - def using_admin_token(storage) - oauth_client = storage.oauth_configuration.basic_rack_oauth_client + def json_content_type + { headers: { "Content-Type" => "application/json" } } + end - token_result = begin - Rails.cache.fetch("storage.#{storage.id}.access_token", expires_in: 50.minutes) do - ServiceResult.success(result: oauth_client.access_token!(scope: "https://graph.microsoft.com/.default")) - end - rescue Rack::OAuth2::Client::Error => e - ServiceResult.failure(errors: ::Storages::StorageError.new( - code: :unauthorized, - data: ::Storages::StorageErrorData.new(source: self.class), - log_message: e.message - )) - end + # rubocop:disable Metrics/AbcSize + def using_admin_token(storage) + oauth_client = storage.oauth_configuration.basic_rack_oauth_client - token_result.match( - on_success: ->(token) do - yield OpenProject.httpx.with(origin: storage.uri, - headers: { authorization: "Bearer #{token.access_token}", - accept: "application/json", - "content-type": "application/json" }) - end, - on_failure: ->(errors) { ServiceResult.failure(result: :unauthorized, errors:) } - ) - end + token_result = + begin + Rails.cache.fetch("storage.#{storage.id}.access_token", expires_in: 50.minutes) do + ServiceResult.success(result: oauth_client.access_token!(scope: "https://graph.microsoft.com/.default")) + end + rescue Rack::OAuth2::Client::Error => e + ServiceResult.failure(errors: ::Storages::StorageError.new( + code: :unauthorized, + data: StorageErrorData.new(source: self.class), + log_message: e.message + )) + end + + token_result.match( + on_success: ->(token) do + yield OpenProject.httpx.with(origin: storage.uri, + headers: { authorization: "Bearer #{token.access_token}", + accept: "application/json", + "content-type": "application/json" }) + end, + on_failure: ->(errors) { ServiceResult.failure(result: :unauthorized, errors:) } + ) + end + + # rubocop:enable Metrics/AbcSize - def extract_location(parent_reference, file_name = "") - location = parent_reference[:path].gsub(/.*root:/, "") + def extract_location(parent_reference, file_name = "") + location = parent_reference[:path].gsub(/.*root:/, "") - appendix = file_name.blank? ? "" : "/#{file_name}" - location.empty? ? "/#{file_name}" : "#{location}#{appendix}" + appendix = file_name.blank? ? "" : "/#{file_name}" + location.empty? ? "/#{file_name}" : "#{location}#{appendix}" + end + end + end + end end end end diff --git a/modules/storages/app/common/storages/peripherals/storage_parent_folder_extractor.rb b/modules/storages/app/common/storages/peripherals/storage_parent_folder_extractor.rb index 5a38f9e8ac60..c139fc16ef0f 100644 --- a/modules/storages/app/common/storages/peripherals/storage_parent_folder_extractor.rb +++ b/modules/storages/app/common/storages/peripherals/storage_parent_folder_extractor.rb @@ -26,26 +26,28 @@ # See COPYRIGHT and LICENSE files for more details. #++ -module Storages::Peripherals - class ParentFolder - attr_reader :path +module Storages + module Peripherals + class ParentFolder + attr_reader :path - def initialize(path) - @path = path - end + def initialize(path) + @path = path + end - def root? - @path == "/" - end + def root? + @path == "/" + end - def to_s - @path + def to_s + @path + end end - end - module StorageParentFolderExtractor - def extract_parent_folder(params) - ParentFolder.new(params[:parent].presence || "/") + module StorageParentFolderExtractor + def extract_parent_folder(params) + ParentFolder.new(params[:parent].presence || "/") + end end end end diff --git a/modules/storages/app/controllers/storages/admin/project_storages_controller.rb b/modules/storages/app/controllers/storages/admin/project_storages_controller.rb index 4ad274a0412a..17e9edaee424 100644 --- a/modules/storages/app/controllers/storages/admin/project_storages_controller.rb +++ b/modules/storages/app/controllers/storages/admin/project_storages_controller.rb @@ -26,40 +26,21 @@ # See COPYRIGHT and LICENSE files for more details. #++ -# This controller manages the creation and deletion of ProjectStorage objects. -# ProjectStorages belong to projects and indicate that the respective -# Storage (i.e. a Nextcloud server) is enabled in the project. -# Please see the standard Rails documentation on controllers: -# https://guides.rubyonrails.org/action_controller_overview.html -# Called by: Calls to the controller methods are initiated by user Web GUI -# actions and mapped to this controller by storages/config/routes.rb. class Storages::Admin::ProjectStoragesController < Projects::SettingsController - # This is the resource handled in this controller. - # So the controller knows that the ID in params (URl) refer to instances of this model. - # This defines @object as the model instance. model_object Storages::ProjectStorage before_action :find_model_object, only: %i[oauth_access_grant edit update destroy destroy_info] - # No need to before_action :find_project_by_project_id as SettingsController already checks - # No need to check for before_action :authorize, as the SettingsController already checks this. - - # This MenuController method defines the default menu item to be used (highlighted) - # when rendering the main menu in the left (part of the base layout). - # The menu item itself is registered in modules/storages/lib/open_project/storages/engine.rb menu_item :settings_project_storages - # Show a HTML page with the list of ProjectStorages - # Called by: Project -> Settings -> File Storages - def index - # Just get the list of ProjectStorages associated with the project + def external_file_storages @project_storages = Storages::ProjectStorage.where(project: @project).includes(:storage) - # Render the list storages using ViewComponents in the /app/components folder which defines - # the ways rows are rendered in a table layout. - render "/storages/project_settings/index" + render "/storages/project_settings/external_file_storages" + end + + def attachments + render "/storages/project_settings/attachments" end - # Show a HTML page with a form in order to create a new ProjectStorage - # Called by: When a user clicks on the "+New" button in Project -> Settings -> File Storages def new @available_storages = available_storages project_folder_mode = project_folder_mode_from_params @@ -74,8 +55,6 @@ def new render template: "/storages/project_settings/new" end - # Create a new ProjectStorage object. - # Called by: The new page above with form-data from that form. def create service_result = ::Storages::ProjectStorages::CreateService .new(user: current_user) @@ -98,11 +77,11 @@ def oauth_access_grant # rubocop:disable Metrics/AbcSize .authorization_state(storage:, user: current_user) if auth_state == :connected - redirect_to(project_settings_project_storages_path) + redirect_to(external_file_storages_project_settings_project_storages_path) else nonce = SecureRandom.uuid cookies["oauth_state_#{nonce}"] = { - value: { href: project_settings_project_storages_url(project_id: @project_storage.project_id), + value: { href: external_file_storages_project_settings_project_storages_url(project_id: @project_storage.project_id), storageId: @project_storage.storage_id }.to_json, expires: 1.hour } @@ -111,13 +90,7 @@ def oauth_access_grant # rubocop:disable Metrics/AbcSize end end - # Edit page is very similar to new page, except that we don't need to set - # default attribute values because the object already exists - # Called by: Global app/config/routes.rb to serve Web page def edit - # Render existing ProjectStorage object - # @object was calculated in before_action :find_model_object (see comments above). - # @project_storage is used in the view in order to render the form for a new object @project_storage = @object @project_storage.project_folder_mode = project_folder_mode_from_params if project_folder_mode_from_params.present? @@ -129,10 +102,6 @@ def edit render "/storages/project_settings/edit" end - # Update is similar to create above - # See also: create above - # See also: https://www.openproject.org/docs/development/concepts/contracted-services/ - # Called by: Global app/config/routes.rb to serve Web page def update service_result = ::Storages::ProjectStorages::UpdateService .new(user: current_user, model: @object) @@ -148,19 +117,13 @@ def update end end - # Purpose: Destroy a ProjectStorage object - # Called by: By pressing a "Delete" icon in the Project's settings ProjectStorages page - # It redirects back to the list of ProjectStorages in the project def destroy - # The complex logic for deleting associated objects was moved into a service: - # https://dev.to/joker666/ruby-on-rails-pattern-service-objects-b19 Storages::ProjectStorages::DeleteService .new(user: current_user, model: @object) .call .on_failure { |service_result| flash[:error] = service_result.errors.full_messages } - # Redirect the user to the URL of Projects -> Settings -> File Storages - redirect_to project_settings_project_storages_path + redirect_to external_file_storages_project_settings_project_storages_path end def destroy_info @@ -171,10 +134,7 @@ def destroy_info private - # Define the list of permitted parameters for creating/updating a ProjectStorage. - # Called by create and update actions above. def permitted_storage_settings_params - # "params" is an instance of ActionController::Parameters params .require(:storages_project_storage) .permit("storage_id", "project_folder_mode", "project_folder_id") @@ -197,7 +157,7 @@ def available_storages def redirect_to_project_storages_path_with_oauth_access_grant_confirmation if storage_oauth_access_granted? - redirect_to project_settings_project_storages_path + redirect_to external_file_storages_project_settings_project_storages_path else redirect_to_project_storages_path_with_nudge_modal end @@ -210,7 +170,7 @@ def storage_oauth_access_granted? def redirect_to_project_storages_path_with_nudge_modal redirect_to( - project_settings_project_storages_path, + external_file_storages_project_settings_project_storages_path, flash: { modal: oauth_access_grant_nudge_modal } ) end diff --git a/modules/storages/app/controllers/storages/admin/storages_controller.rb b/modules/storages/app/controllers/storages/admin/storages_controller.rb index 4ad8567e81ed..7c7983b3d81b 100644 --- a/modules/storages/app/controllers/storages/admin/storages_controller.rb +++ b/modules/storages/app/controllers/storages/admin/storages_controller.rb @@ -50,13 +50,8 @@ class Storages::Admin::StoragesController < ApplicationController before_action :ensure_valid_provider_type_selected, only: %i[select_provider] before_action :require_ee_token_for_one_drive, only: %i[select_provider] - # menu_item is defined in the Redmine::MenuManager::MenuController - # module, included from ApplicationController. - # The menu item is defined in the engine.rb - menu_item :storages_admin_settings + menu_item :external_file_storages - # Index page with a list of Storages objects - # Called by: Global app/config/routes.rb to serve Web page def index @storages = Storages::Storage.all end diff --git a/modules/storages/app/models/storages/storage_error_data.rb b/modules/storages/app/models/storages/storage_error_data.rb index e6e4d5f2f547..d087efd0025f 100644 --- a/modules/storages/app/models/storages/storage_error_data.rb +++ b/modules/storages/app/models/storages/storage_error_data.rb @@ -29,12 +29,7 @@ #++ module Storages - class StorageErrorData - attr_reader :source, :payload - - def initialize(source:, payload: nil) - @source = source - @payload = payload - end + StorageErrorData = Data.define(:source, :payload) do + def initialize(source:, payload: nil) = super end end diff --git a/modules/storages/app/models/storages/storage_file_id.rb b/modules/storages/app/models/storages/storage_file_id.rb new file mode 100644 index 000000000000..43efc0221487 --- /dev/null +++ b/modules/storages/app/models/storages/storage_file_id.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module Storages + StorageFileId = Data.define(:id) +end diff --git a/modules/storages/app/models/storages/storage_file_info.rb b/modules/storages/app/models/storages/storage_file_info.rb index e34ec0bab9a6..7020ee3a921b 100644 --- a/modules/storages/app/models/storages/storage_file_info.rb +++ b/modules/storages/app/models/storages/storage_file_info.rb @@ -61,23 +61,7 @@ def initialize( permissions: nil, location: nil ) - super( - status:, - status_code:, - id:, - name:, - last_modified_at:, - created_at:, - mime_type:, - size:, - owner_name:, - owner_id:, - trashed:, - last_modified_by_name:, - last_modified_by_id:, - permissions:, - location: - ) + super end def clean_location diff --git a/modules/storages/app/services/storages/file_links/copy_file_links_service.rb b/modules/storages/app/services/storages/file_links/copy_file_links_service.rb index 4be3db694cea..1c37edad527c 100644 --- a/modules/storages/app/services/storages/file_links/copy_file_links_service.rb +++ b/modules/storages/app/services/storages/file_links/copy_file_links_service.rb @@ -46,10 +46,10 @@ def initialize(source:, target:, user:, work_packages_map:) def call source_file_links = FileLink - .includes(:creator) - .where(storage: @source.storage, - container_id: @work_packages_map.keys, - container_type: "WorkPackage") + .includes(:creator) + .where(storage: @source.storage, + container_id: @work_packages_map.keys, + container_type: "WorkPackage") with_locale_for(@user) do if @source.project_folder_automatic? @@ -62,11 +62,19 @@ def call private + # rubocop:disable Metrics/AbcSize def create_managed_file_links(source_file_links) - location_map = build_location_map( - source_files_info(source_file_links).result, - target_files_map.result - ) + source_info = source_files_info(source_file_links).on_failure do |failed| + log_errors(failed) + return failed + end + + target_map = target_files_map.on_failure do |failed| + log_errors(failed) + return failed + end + + location_map = build_location_map(source_info.result, target_map.result) source_file_links.find_each do |source_link| next unless location_map.has_key?(source_link.origin_id) @@ -82,7 +90,9 @@ def create_managed_file_links(source_file_links) .call(attributes).on_failure { |failed| log_errors(failed) } end end + # rubocop:enable Metrics/AbcSize + # rubocop:disable Metrics/AbcSize def build_location_map(source_files, target_location_map) # We need this due to inconsistencies of how we represent the File Path target_location_map.transform_keys! { |key| key.starts_with?("/") ? key : "/#{key}" } @@ -98,14 +108,12 @@ def build_location_map(source_files, target_location_map) output[id] = target_location_map[target]&.id || id end end + # rubocop:enable Metrics/AbcSize def auth_strategy - Peripherals::StorageInteraction::AuthenticationStrategies::OAuthUserToken - .strategy - .with_user(@user) + Peripherals::Registry.resolve("#{@source.storage.short_provider_type}.authentication.userless").call end - # Known issue, this can lead to 403s. def source_files_info(source_file_links) Peripherals::Registry .resolve("#{@source.storage.short_provider_type}.queries.files_info") @@ -114,8 +122,8 @@ def source_files_info(source_file_links) def target_files_map Peripherals::Registry - .resolve("#{@source.storage.short_provider_type}.queries.folder_files_file_ids_deep_query") - .call(storage: @source.storage, folder: Peripherals::ParentFolder.new(@target.project_folder_location)) + .resolve("#{@source.storage.short_provider_type}.queries.file_path_to_id_map") + .call(storage: @source.storage, auth_strategy:, folder: Peripherals::ParentFolder.new(@target.project_folder_location)) end def create_unmanaged_file_links(source_file_links) diff --git a/modules/storages/app/services/storages/nextcloud_group_folder_properties_sync_service.rb b/modules/storages/app/services/storages/nextcloud_group_folder_properties_sync_service.rb index 9b59079297ab..db20f46f6102 100644 --- a/modules/storages/app/services/storages/nextcloud_group_folder_properties_sync_service.rb +++ b/modules/storages/app/services/storages/nextcloud_group_folder_properties_sync_service.rb @@ -209,26 +209,19 @@ def rename_folder(project_storage, current_name) end def create_folder(project_storage) - folder_path = project_storage.managed_project_folder_path - Peripherals::Registry - .resolve("nextcloud.commands.create_folder") - .call(storage: @storage, folder_path:) - .result_or do |error| - format_and_log_error(error, folder: folder_path) + folder_name = project_storage.managed_project_folder_path + parent_location = Peripherals::ParentFolder.new("/") - return ServiceResult.failure(errors: error) - end - - folder_id_result = Peripherals::Registry - .resolve("nextcloud.queries.file_ids") - .call(storage: @storage, path: folder_path) - .result_or do |error| - format_and_log_error(error, path:) + created_folder = Peripherals::Registry + .resolve("nextcloud.commands.create_folder") + .call(storage: @storage, auth_strategy:, folder_name:, parent_location:) + .result_or do |error| + format_and_log_error(error, folder: folder_name) return ServiceResult.failure(errors: error) end - project_folder_id = folder_id_result.dig(folder_path, "fileid") + project_folder_id = created_folder.id last_project_folder = ::Storages::LastProjectFolder .find_by( project_storage_id: project_storage.id, @@ -278,7 +271,7 @@ def format_and_log_error(error, context = {}) in { status: Integer } { status: payload.status, body: payload.body.to_s } else - payload.error.to_s + payload.to_s end error_message = context.merge({ command: error.data.source, message: error.log_message, data: }) @@ -295,6 +288,10 @@ def client_tokens_scope OAuthClientToken.where(oauth_client: @storage.oauth_client) end + def auth_strategy + Peripherals::StorageInteraction::AuthenticationStrategies::BasicAuth.strategy + end + def admin_client_tokens_scope OAuthClientToken.where(oauth_client: @storage.oauth_client, user: User.admin.active) end diff --git a/modules/storages/app/services/storages/one_drive_managed_folder_sync_service.rb b/modules/storages/app/services/storages/one_drive_managed_folder_sync_service.rb index f459e5c056b7..956abdefe9a1 100644 --- a/modules/storages/app/services/storages/one_drive_managed_folder_sync_service.rb +++ b/modules/storages/app/services/storages/one_drive_managed_folder_sync_service.rb @@ -114,10 +114,14 @@ def rename_folder(source, target) .result_or { |error| format_and_log_error(error, source:, target:) } end + # rubocop:disable Metrics/AbcSize def create_folder(project_storage) + folder_name = project_storage.managed_project_folder_path + parent_location = Peripherals::ParentFolder.new("/") + Peripherals::Registry .resolve("one_drive.commands.create_folder") - .call(storage: @storage, folder_path: project_storage.managed_project_folder_path) + .call(storage: @storage, auth_strategy:, folder_name:, parent_location:) .match(on_failure: ->(error) { format_and_log_error(error, folder_path: project_storage.managed_project_folder_path) }, on_success: ->(folder_info) do last_project_folder = ::Storages::LastProjectFolder @@ -132,6 +136,8 @@ def create_folder(project_storage) end) end + # rubocop:enable Metrics/AbcSize + def remote_folders_map using_admin_token do |http| response = http.get("/v1.0/drives/#{@storage.drive_id}/root/children") @@ -183,6 +189,10 @@ def client_tokens_scope OAuthClientToken.where(oauth_client: @storage.oauth_client) end + def auth_strategy + Peripherals::Registry.resolve("one_drive.authentication.userless").call + end + def admin_client_tokens_scope OAuthClientToken.where(oauth_client: @storage.oauth_client, user: User.admin.active) end diff --git a/modules/storages/app/services/storages/project_storages/delete_service.rb b/modules/storages/app/services/storages/project_storages/delete_service.rb index f00e06b890c5..c1de8da7c704 100644 --- a/modules/storages/app/services/storages/project_storages/delete_service.rb +++ b/modules/storages/app/services/storages/project_storages/delete_service.rb @@ -58,9 +58,16 @@ def persist(service_result) private + def auth_strategy + ::Storages::Peripherals::Registry + .resolve("#{model.storage.short_provider_type}.authentication.userless") + .call + end + def delete_project_folder - ::Storages::Peripherals::Registry.resolve("#{model.storage.short_provider_type}.commands.delete_folder") - .call(storage: model.storage, location: model.project_folder_location) + ::Storages::Peripherals::Registry + .resolve("#{model.storage.short_provider_type}.commands.delete_folder") + .call(storage: model.storage, auth_strategy:, location: model.project_folder_location) end # Delete FileLinks with the same Storage as the ProjectStorage. diff --git a/modules/storages/app/views/storages/admin/storages/index.html.erb b/modules/storages/app/views/storages/admin/storages/index.html.erb index 11f1b1192132..b2c6cd63a985 100644 --- a/modules/storages/app/views/storages/admin/storages/index.html.erb +++ b/modules/storages/app/views/storages/admin/storages/index.html.erb @@ -1,4 +1,3 @@ - <% html_title t(:label_administration), t("project_module_storages") %> <% button_block = lambda do |button| @@ -7,11 +6,12 @@ I18n.t("storages.label_storage") end %> -<%= render(Primer::OpenProject::PageHeader.new) do |header| %> - <% header.with_title { t("project_module_storages") } %> +<%= render(Primer::OpenProject::PageHeader.new(border_bottom: 0)) do |header| %> + <% header.with_title { t("external_file_storages") } %> <% header.with_description { t("storages.page_titles.file_storages.subtitle") } %> <% header.with_breadcrumbs([{ href: admin_index_path, text: t("label_administration") }, - t("project_module_storages")]) %> + { href: admin_settings_storages_path, text: t("project_module_storages") }, + t("external_file_storages")]) %> <%= header.with_action_menu(menu_arguments: { test_selector: 'storages-select-provider-action-menu', anchor_align: :end }, diff --git a/modules/storages/app/views/storages/project_settings/_project_folder_form.html.erb b/modules/storages/app/views/storages/project_settings/_project_folder_form.html.erb index 871598437d5d..c136a0db048b 100644 --- a/modules/storages/app/views/storages/project_settings/_project_folder_form.html.erb +++ b/modules/storages/app/views/storages/project_settings/_project_folder_form.html.erb @@ -158,7 +158,7 @@ See COPYRIGHT and LICENSE files for more details. <%= spot_icon('checkmark') %> <%= content_tag :span, submit_button_label %> <% end %> - <%= link_to project_settings_project_storages_path(@project), class: 'button' do %> + <%= link_to external_file_storages_project_settings_project_storages_path(@project), class: 'button' do %> <%= spot_icon('cancel') %> <%= content_tag :span, t(:button_cancel) %> <% end %> diff --git a/modules/storages/app/views/storages/project_settings/_storage_select_form.html.erb b/modules/storages/app/views/storages/project_settings/_storage_select_form.html.erb index a723e22d40d1..853b886e7776 100644 --- a/modules/storages/app/views/storages/project_settings/_storage_select_form.html.erb +++ b/modules/storages/app/views/storages/project_settings/_storage_select_form.html.erb @@ -48,7 +48,7 @@ See COPYRIGHT and LICENSE files for more details. <%= spot_icon('checkmark') %> <%= content_tag :span, submit_button_label %> <% end %> - <%= link_to project_settings_project_storages_path(@project), class: 'button' do %> + <%= link_to external_file_storages_project_settings_project_storages_path(@project), class: 'button' do %> <%= spot_icon('cancel') %> <%= content_tag :span, t(:button_cancel) %> <% end %> diff --git a/modules/storages/app/views/storages/project_settings/attachments.html.erb b/modules/storages/app/views/storages/project_settings/attachments.html.erb new file mode 100644 index 000000000000..27290a91a05c --- /dev/null +++ b/modules/storages/app/views/storages/project_settings/attachments.html.erb @@ -0,0 +1,85 @@ +<%#-- copyright +OpenProject is an open source project management software. +Copyright (C) 2012-2024 the OpenProject GmbH + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License version 3. + +OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +Copyright (C) 2006-2013 Jean-Philippe Lang +Copyright (C) 2010-2013 the ChiliProject Team + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +See COPYRIGHT and LICENSE files for more details. + +++#%> + +<% html_title t(:label_administration), t("project_module_storages") %> + +<%= render(Primer::OpenProject::PageHeader.new(border_bottom: 0)) do |header| + header.with_title { t("project_module_storages") } + header.with_breadcrumbs([{ href: project_settings_general_path, text: t("label_project_settings") }, + t("project_module_storages")]) + header.with_action_button(tag: :a, + href: new_project_settings_project_storage_path, + scheme: :primary, + mobile_icon: :plus, + mobile_label: t(:'storages.label_storage'), + size: :medium, + aria: { label: t(:'storages.label_new_storage') }, + title: t(:'storages.label_new_storage')) do |button| + button.with_leading_visual_icon(icon: :plus) + t(:'storages.label_storage') + end +end +%> + +<%= render(Primer::Alpha::TabNav.new(label: nil)) do |component| + component.with_tab(selected: false, href: external_file_storages_project_settings_project_storages_path) do |tab| + tab.with_text { t(:"external_file_storages") } + end + component.with_tab(selected: true, href: attachments_project_settings_project_storages_path) do |tab| + tab.with_text { t(:"attributes.attachments") } + end +end +%> + +<%= render(Primer::OpenProject::FlexLayout.new(p: 3)) do |l| + l.with_row(flex_layout: true, align_items: :center, justify_content: :space_between) do |row| + row.with_column do + render(Primer::Beta::Text.new(font_weight: :bold)) do + t("storages.show_attachments_toggle.label") + end + end + row.with_column do + checked = if @project.deactivate_work_package_attachments.nil? + Setting.show_work_package_attachments + else + !@project.deactivate_work_package_attachments + end + render(Primer::Alpha::ToggleSwitch.new(src: deactivate_work_package_attachments_project_path(@project), + csrf_token: form_authenticity_token, + status_label_position: :start, + checked:)) + end + end + l.with_row do + render(Primer::Beta::Text.new(color: :muted)) do + t("storages.show_attachments_toggle.description") + end + end + end +%> diff --git a/modules/storages/app/views/storages/project_settings/destroy_info.html.erb b/modules/storages/app/views/storages/project_settings/destroy_info.html.erb index 9da3cc13f4b6..2a8a8d866991 100644 --- a/modules/storages/app/views/storages/project_settings/destroy_info.html.erb +++ b/modules/storages/app/views/storages/project_settings/destroy_info.html.erb @@ -53,7 +53,7 @@ See COPYRIGHT and LICENSE files for more details. concat content_tag :i, '', class: 'button--icon icon-delete' concat content_tag :span, t(:button_delete), class: 'button--text' end %> - <%= link_to project_settings_project_storages_path(@project_storage_to_destroy.project), + <%= link_to external_file_storages_project_settings_project_storages_path(@project_storage_to_destroy.project), title: t(:button_cancel), class: 'button -with-icon icon-cancel' do %> <%= t(:button_cancel) %> diff --git a/modules/storages/app/views/storages/project_settings/external_file_storages.html.erb b/modules/storages/app/views/storages/project_settings/external_file_storages.html.erb new file mode 100644 index 000000000000..b98050d4f73e --- /dev/null +++ b/modules/storages/app/views/storages/project_settings/external_file_storages.html.erb @@ -0,0 +1,60 @@ +<%#-- copyright +OpenProject is an open source project management software. +Copyright (C) 2012-2024 the OpenProject GmbH + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License version 3. + +OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +Copyright (C) 2006-2013 Jean-Philippe Lang +Copyright (C) 2010-2013 the ChiliProject Team + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +See COPYRIGHT and LICENSE files for more details. + +++#%> + +<% html_title t(:label_administration), t("project_module_storages") %> + +<%= render(Primer::OpenProject::PageHeader.new(border_bottom: 0)) do |header| + header.with_title { t("project_module_storages") } + header.with_breadcrumbs([{ href: project_settings_general_path, text: t("label_project_settings") }, + t("project_module_storages")]) + header.with_action_button(tag: :a, + href: new_project_settings_project_storage_path, + scheme: :primary, + mobile_icon: :plus, + mobile_label: t(:'storages.label_storage'), + size: :medium, + aria: { label: t(:'storages.label_new_storage') }, + title: t(:'storages.label_new_storage')) do |button| + button.with_leading_visual_icon(icon: :plus) + t(:'storages.label_storage') + end +end +%> + +<%= render(Primer::Alpha::TabNav.new(label: nil)) do |component| + component.with_tab(selected: true, href: external_file_storages_project_settings_project_storages_path) do |tab| + tab.with_text { t(:"external_file_storages") } + end + component.with_tab(selected: false, href: attachments_project_settings_project_storages_path) do |tab| + tab.with_text { t(:"attributes.attachments") } + end +end +%> + +<%= render(::Storages::ProjectStorages::TableComponent.new(rows: @project_storages)) %> diff --git a/modules/storages/app/views/storages/project_settings/index.html.erb b/modules/storages/app/views/storages/project_settings/index.html.erb deleted file mode 100644 index ab04939601b6..000000000000 --- a/modules/storages/app/views/storages/project_settings/index.html.erb +++ /dev/null @@ -1,49 +0,0 @@ -<%#-- copyright -OpenProject is an open source project management software. -Copyright (C) 2012-2024 the OpenProject GmbH - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 3. - -OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: -Copyright (C) 2006-2013 Jean-Philippe Lang -Copyright (C) 2010-2013 the ChiliProject Team - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -See COPYRIGHT and LICENSE files for more details. - -++#%> - -<% html_title t(:label_administration), t("project_module_storages") %> - -<% if ::Storages::Storage.any? %> - <%= toolbar title: t("storages.page_titles.project_settings.index") do %> - -
  • - <%= link_to new_project_settings_project_storage_path, - { class: 'button -primary', - aria: { label: t(:'storages.label_new_storage') }, - title: t(:'storages.label_new_storage') } do %> - <%= op_icon('button--icon icon-add') %> - <%= ::Storages::Storage.model_name.human %> - <% end %> -
  • - <% end %> - - <%= render(::Storages::ProjectStorages::TableComponent.new(rows: @project_storages)) %> -<% else %> - <%= render partial: '/storages/project_settings/toast_no_storage_set_up' %> -<% end %> diff --git a/modules/storages/app/views/storages/project_settings/project_storage_members/index.html.erb b/modules/storages/app/views/storages/project_settings/project_storage_members/index.html.erb index 84b7686031f6..84ff6c317a05 100644 --- a/modules/storages/app/views/storages/project_settings/project_storage_members/index.html.erb +++ b/modules/storages/app/views/storages/project_settings/project_storage_members/index.html.erb @@ -31,7 +31,7 @@ See COPYRIGHT and LICENSE files for more details. <% breadcrumb_paths( ActionController::Base.helpers - .link_to(t("project_module_storages"), project_settings_project_storages_path(@project)), + .link_to(t("project_module_storages"), external_file_storages_project_settings_project_storages_path(@project)), default_breadcrumb ) %> diff --git a/modules/storages/app/workers/storages/copy_project_folders_job.rb b/modules/storages/app/workers/storages/copy_project_folders_job.rb index e26a39fa41ed..4d186d746f09 100644 --- a/modules/storages/app/workers/storages/copy_project_folders_job.rb +++ b/modules/storages/app/workers/storages/copy_project_folders_job.rb @@ -48,7 +48,7 @@ def perform(source:, target:, work_packages_map:) project_folder_mode: source.project_folder_mode) .on_failure { |failed| log_failure(failed) and return failed } - FileLinks::CopyFileLinksService.call(source: @source, target:, user:, work_packages_map:) + FileLinks::CopyFileLinksService.call(source: @source, target: target.reload, user:, work_packages_map:) end private diff --git a/modules/storages/config/locales/crowdin/af.yml b/modules/storages/config/locales/crowdin/af.yml index d24624b5b0e0..1338685a5946 100644 --- a/modules/storages/config/locales/crowdin/af.yml +++ b/modules/storages/config/locales/crowdin/af.yml @@ -39,15 +39,20 @@ af: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ af: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ af: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/ar.yml b/modules/storages/config/locales/crowdin/ar.yml index 678df02192b2..3743e4f574e2 100644 --- a/modules/storages/config/locales/crowdin/ar.yml +++ b/modules/storages/config/locales/crowdin/ar.yml @@ -39,15 +39,20 @@ ar: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ ar: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ ar: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/az.yml b/modules/storages/config/locales/crowdin/az.yml index cb8ba5b7e160..3df889516886 100644 --- a/modules/storages/config/locales/crowdin/az.yml +++ b/modules/storages/config/locales/crowdin/az.yml @@ -39,15 +39,20 @@ az: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ az: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ az: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/be.yml b/modules/storages/config/locales/crowdin/be.yml index 7f937c2953e5..54db2ad059ff 100644 --- a/modules/storages/config/locales/crowdin/be.yml +++ b/modules/storages/config/locales/crowdin/be.yml @@ -39,15 +39,20 @@ be: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Кіраваць спасылкамі на файлы permission_manage_storages_in_project: Кіраваць файлавымі сховішчамі ў праекце - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: Праглядаць спасылкі на файлы - permission_write_files: 'External Storage: Write files' - project_module_storages: Файлавыя сховішча + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ be: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ be: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/bg.yml b/modules/storages/config/locales/crowdin/bg.yml index d1c4a0757a9b..c98239bb203c 100644 --- a/modules/storages/config/locales/crowdin/bg.yml +++ b/modules/storages/config/locales/crowdin/bg.yml @@ -39,15 +39,20 @@ bg: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ bg: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ bg: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/ca.yml b/modules/storages/config/locales/crowdin/ca.yml index dde268e9ffe6..37e2f33daf22 100644 --- a/modules/storages/config/locales/crowdin/ca.yml +++ b/modules/storages/config/locales/crowdin/ca.yml @@ -39,15 +39,20 @@ ca: api_v3: errors: too_many_elements_created_at_once: Masses elements creats alhora. S'esperen %{max} com a màxim, i s'han obtingut %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Administra els enllaços del fitxer permission_manage_storages_in_project: Administra els emmagatzematges de fitxers en el projecte - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: Veure els enllaços del fitxer - permission_write_files: 'External Storage: Write files' - project_module_storages: Emmagatzematges de fitxers + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ ca: project_settings: delete: Delete file storage edit: Editar l'emmagatzematge de fitxers a aquest projecte - index: Emmagatzematges de fitxers no disponibles en aquest projecte members_connection_status: Members connection status new: Afegeix un emmagatzematge de fitxers a aquest projecte project_storage_members: @@ -243,6 +247,9 @@ ca: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/ckb-IR.yml b/modules/storages/config/locales/crowdin/ckb-IR.yml index 11334c9438e7..69a8958536c3 100644 --- a/modules/storages/config/locales/crowdin/ckb-IR.yml +++ b/modules/storages/config/locales/crowdin/ckb-IR.yml @@ -39,15 +39,20 @@ ckb-IR: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ ckb-IR: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ ckb-IR: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/cs.yml b/modules/storages/config/locales/crowdin/cs.yml index f75af3b1d552..51c6ab9be50b 100644 --- a/modules/storages/config/locales/crowdin/cs.yml +++ b/modules/storages/config/locales/crowdin/cs.yml @@ -39,15 +39,20 @@ cs: api_v3: errors: too_many_elements_created_at_once: Příliš mnoho prvků vytvořených najednou. Očekáváno nanejvýš %{max} , získáno %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: Externí úložiště souborů + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automaticky spravované projektové složky permission_manage_file_links: Správa odkazů souborů permission_manage_storages_in_project: Spravovat úložiště souborů v projektu - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: Zobrazit odkazy na soubor - permission_write_files: 'External Storage: Write files' - project_module_storages: Úložiště souborů + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Soubory storages: buttons: complete_without_setup: Dokončit bez něj @@ -109,7 +114,7 @@ cs: error_could_not_be_saved: Email notification settings could not be saved. Please try again. subscribe: Přihlásit k odběru title: E-mailová upozornění - unsubscribe: Unsubscribe + unsubscribe: Odhlásit se z odběru help_texts: project_folder: Složka projektu je výchozí složka pro nahrávání souborů pro tento projekt. Uživatelé přesto mohou nahrávat soubory do jiných umístění. instructions: @@ -126,11 +131,11 @@ cs: application_link_text: aplikace „Integration OpenProject“ integration: Nextcloud Administrace / OpenProject oauth_configuration: Zkopírujte tyto hodnoty z %{application_link_text}. - provider_configuration: 'Ujistěte se prosím, že máte oprávnění administrace v Nextcloud instanci a máte nainstalovanou následující aplikaci:' + provider_configuration: 'Ujistěte se prosím, že máte oprávnění administrace v Nextcloud instanci a máte nainstalovanou následující aplikaci: %{application_link_text}.' no_specific_folder: Ve výchozím nastavení bude každý uživatel ve své vlastní domovské složce, když nahrajou soubor. no_storage_set_up: Dosud nejsou nastaveny žádné úložiště souborů. not_logged_into_storage: Pro výběr složky projektu se prosím nejprve přihlaste - oauth_application_details: 'Tajná hodnota klienta nebude po zavření tohoto okna přístupná. Zkopírujte tyto hodnoty do Nextcloud OpenProject Integration nastavení:' + oauth_application_details: Tajná hodnota klienta nebude po zavření tohoto okna přístupná. Zkopírujte prosím tyto hodnoty do %{oauth_application_details_link}. oauth_application_details_link_text: Nastavení Nextcloud OpenProject integrace one_drive: application_link_text: Azure portal @@ -222,7 +227,6 @@ cs: project_settings: delete: Odstranit úložiště souborů edit: Upravit úložiště souborů pro tento projekt - index: Úložiště souborů v tomto projektu members_connection_status: Stav připojení členů new: Přidat úložiště souborů k tomuto projektu project_storage_members: @@ -241,6 +245,9 @@ cs: label_oauth_client_secret: ' utajená Hodnota klienta Azure OAuth' name: OneDrive/SharePoint name_placeholder: např. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Přidejte úložiště, abyste je viděli zde. heading: Zatím nemáte žádné úložiště. diff --git a/modules/storages/config/locales/crowdin/da.yml b/modules/storages/config/locales/crowdin/da.yml index 33c8edf518f3..a85f2a20180d 100644 --- a/modules/storages/config/locales/crowdin/da.yml +++ b/modules/storages/config/locales/crowdin/da.yml @@ -39,15 +39,20 @@ da: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ da: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ da: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/de.yml b/modules/storages/config/locales/crowdin/de.yml index 626e843f5bdb..a67c0719e70f 100644 --- a/modules/storages/config/locales/crowdin/de.yml +++ b/modules/storages/config/locales/crowdin/de.yml @@ -39,15 +39,20 @@ de: api_v3: errors: too_many_elements_created_at_once: Zu viele Elemente gleichzeitig erstellt. Maximal %{max} erwartet, %{actual} bekommen. - permission_create_files: 'Externe Speicherung: Dateien erstellen' - permission_delete_files: 'Externe Speicherung: Dateien löschen' + external_file_storages: Externe Dateispeicher + permission_create_files: 'Automatisch verwaltete Projektordner: Dateien erstellen' + permission_create_files_explanation: Diese Berechtigung ist nur für Nextcloud-Speicher verfügbar + permission_delete_files: 'Automatisch verwaltete Projektordner: Dateien löschen' + permission_delete_files_explanation: Diese Berechtigung ist nur für Nextcloud-Speicher verfügbar + permission_header_for_project_module_storages: Automatisch verwaltete Projektordner permission_manage_file_links: Datei-Links verwalten permission_manage_storages_in_project: Dateispeicher im Projekt verwalten - permission_read_files: 'Externe Speicherung: Dateien lesen' - permission_share_files: 'Externe Speicherung: Dateien teilen' + permission_read_files: 'Automatisch verwaltete Projektordner: Dateien lesen' + permission_share_files: 'Automatisch verwaltete Projektordner: Dateien freigeben' + permission_share_files_explanation: Diese Berechtigung ist nur für Nextcloud-Speicher verfügbar permission_view_file_links: Datei-Links anzeigen - permission_write_files: 'Externe Speicherung: Dateien schreiben' - project_module_storages: Dateispeicher + permission_write_files: 'Automatisch verwaltete Projektordner: Dateien schreiben' + project_module_storages: Dateien storages: buttons: complete_without_setup: Ohne fortfahren @@ -222,7 +227,6 @@ de: project_settings: delete: Dateispeicher löschen edit: Dateispeicher in diesem Projekt bearbeiten - index: Dateispeicher in diesem Projekt verfügbar members_connection_status: Verbindungsstatus der Mitglieder new: Einen Dateispeicher zum Projekt hinzufügen project_storage_members: @@ -241,6 +245,9 @@ de: label_oauth_client_secret: Azure OAuth geheimer Clientschlüssel Wert name: OneDrive/SharePoint name_placeholder: z.B. OneDrive + show_attachments_toggle: + description: 'Wenn Sie diese Option deaktivieren, wird die Liste der Anhänge auf dem Dateien Tab von Arbeitspaketen für neue Projekte ausgeblendet. Die Dateien, die in der Beschreibung eines Arbeitspakets angehängt sind, werden weiterhin in den internen Speicher für Anhänge hochgeladen.' + label: Anhänge auf dem Dateien-Tab der Arbeitspakete anzeigen storage_list_blank_slate: description: Fügen Sie einen Dateispeicher hinzu, um ihn hier zu sehen. heading: Sie haben noch keine Dateispeicher. diff --git a/modules/storages/config/locales/crowdin/el.yml b/modules/storages/config/locales/crowdin/el.yml index 5291fea1c500..ce247fe34126 100644 --- a/modules/storages/config/locales/crowdin/el.yml +++ b/modules/storages/config/locales/crowdin/el.yml @@ -39,15 +39,20 @@ el: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ el: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ el: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/eo.yml b/modules/storages/config/locales/crowdin/eo.yml index a8a36e6b9b19..8dd603a3063f 100644 --- a/modules/storages/config/locales/crowdin/eo.yml +++ b/modules/storages/config/locales/crowdin/eo.yml @@ -39,15 +39,20 @@ eo: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ eo: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ eo: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/es.yml b/modules/storages/config/locales/crowdin/es.yml index 99fefaaeb085..ac8e3a887e4a 100644 --- a/modules/storages/config/locales/crowdin/es.yml +++ b/modules/storages/config/locales/crowdin/es.yml @@ -39,15 +39,20 @@ es: api_v3: errors: too_many_elements_created_at_once: Se intentaron crear demasiados elementos a la vez. Se esperaban como máximo %{max}, pero se recibieron %{actual}. - permission_create_files: 'Almacenamiento externo: Crear archivos' - permission_delete_files: 'Almacenamiento externo: Eliminar archivos' + external_file_storages: Almacenamientos de archivos externos + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Carpetas de proyecto gestionadas automáticamente permission_manage_file_links: Administrar enlaces de archivos permission_manage_storages_in_project: Administrar almacenes de archivos en el proyecto - permission_read_files: 'Almacenamiento externo: Leer archivos' - permission_share_files: 'Almacenamiento externo: Compartir archivos' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: Ver enlaces de archivos - permission_write_files: 'Almacenamiento externo: Escribir archivos' - project_module_storages: Almacenes de archivos + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Archivos storages: buttons: complete_without_setup: Completar sin usar @@ -222,7 +227,6 @@ es: project_settings: delete: Eliminar el almacenamiento de archivos edit: Edite el archivo de almacenamiento a este proyecto - index: Hay almacenes de archivos disponibles en este proyecto members_connection_status: Estado de conexión de los miembros new: Añadir un almacenamiento de archivos a este proyecto project_storage_members: @@ -241,6 +245,9 @@ es: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/Sharepoint name_placeholder: ej. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Mostrar archivos adjuntos en la pestaña de archivos de los paquetes de trabajo storage_list_blank_slate: description: Añade un almacenamiento para verlos aquí. heading: Aún no tiene ningún almacenamiento. diff --git a/modules/storages/config/locales/crowdin/et.yml b/modules/storages/config/locales/crowdin/et.yml index 7525ad2b9dce..85de814ec4c2 100644 --- a/modules/storages/config/locales/crowdin/et.yml +++ b/modules/storages/config/locales/crowdin/et.yml @@ -39,15 +39,20 @@ et: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ et: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ et: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/eu.yml b/modules/storages/config/locales/crowdin/eu.yml index 6b05a293903b..56d7f20b14ed 100644 --- a/modules/storages/config/locales/crowdin/eu.yml +++ b/modules/storages/config/locales/crowdin/eu.yml @@ -39,15 +39,20 @@ eu: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ eu: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ eu: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/fa.yml b/modules/storages/config/locales/crowdin/fa.yml index bdc8e9617c4f..d70af1ce2af0 100644 --- a/modules/storages/config/locales/crowdin/fa.yml +++ b/modules/storages/config/locales/crowdin/fa.yml @@ -39,15 +39,20 @@ fa: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ fa: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ fa: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/fi.yml b/modules/storages/config/locales/crowdin/fi.yml index 7a3add2d6bec..49185b911530 100644 --- a/modules/storages/config/locales/crowdin/fi.yml +++ b/modules/storages/config/locales/crowdin/fi.yml @@ -39,15 +39,20 @@ fi: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ fi: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ fi: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/fil.yml b/modules/storages/config/locales/crowdin/fil.yml index 4616061b3b66..d28f97f978d9 100644 --- a/modules/storages/config/locales/crowdin/fil.yml +++ b/modules/storages/config/locales/crowdin/fil.yml @@ -39,15 +39,20 @@ fil: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ fil: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ fil: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/fr.yml b/modules/storages/config/locales/crowdin/fr.yml index 2d028210ca05..f7af16a74247 100644 --- a/modules/storages/config/locales/crowdin/fr.yml +++ b/modules/storages/config/locales/crowdin/fr.yml @@ -39,15 +39,20 @@ fr: api_v3: errors: too_many_elements_created_at_once: Trop d'éléments créés à la fois. %{max} attendu au maximum, obtenu %{actual}. - permission_create_files: 'Espace de stockage externe : Créer des fichiers' - permission_delete_files: 'Espace de stockage externe : Supprimer des fichiers' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Dossiers de projets gérés automatiquement permission_manage_file_links: Gérer les liens de fichiers permission_manage_storages_in_project: Gérer les stockages de fichiers dans le projet - permission_read_files: 'Espace de stockage externe : Lire des fichiers' - permission_share_files: 'Espace de stockage externe : Partager des fichiers' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: Voir les liens des fichiers - permission_write_files: 'Espace de stockage externe : Écrire des fichiers' - project_module_storages: Stockages de fichiers + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Compléter sans @@ -222,7 +227,6 @@ fr: project_settings: delete: Supprimer l'espace de stockage de fichiers edit: Modifier l'espace de stockage de fichiers pour ce projet - index: Stockages de fichiers disponibles dans ce projet members_connection_status: Statut de connexion des membres new: Ajouter un stockage de fichiers à ce projet project_storage_members: @@ -241,6 +245,9 @@ fr: label_oauth_client_secret: Valeur secrète du client OAuth Azure name: OneDrive/SharePoint name_placeholder: par exemple OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Ajoutez un stockage pour les voir ici. heading: Vous n'avez pas encore d'espace de stockage. diff --git a/modules/storages/config/locales/crowdin/he.yml b/modules/storages/config/locales/crowdin/he.yml index edc679335f7d..83959c0cc0e7 100644 --- a/modules/storages/config/locales/crowdin/he.yml +++ b/modules/storages/config/locales/crowdin/he.yml @@ -39,15 +39,20 @@ he: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ he: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ he: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/hi.yml b/modules/storages/config/locales/crowdin/hi.yml index 024572f6d07b..c1c0bac95e76 100644 --- a/modules/storages/config/locales/crowdin/hi.yml +++ b/modules/storages/config/locales/crowdin/hi.yml @@ -39,15 +39,20 @@ hi: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ hi: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ hi: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/hr.yml b/modules/storages/config/locales/crowdin/hr.yml index 0b3973c6bed5..23d75bcdef60 100644 --- a/modules/storages/config/locales/crowdin/hr.yml +++ b/modules/storages/config/locales/crowdin/hr.yml @@ -39,15 +39,20 @@ hr: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ hr: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ hr: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/hu.yml b/modules/storages/config/locales/crowdin/hu.yml index 7ba88dd617b4..e7c992a02ae6 100644 --- a/modules/storages/config/locales/crowdin/hu.yml +++ b/modules/storages/config/locales/crowdin/hu.yml @@ -39,15 +39,20 @@ hu: api_v3: errors: too_many_elements_created_at_once: Egyszerre túl sok elem létrehozása történt. Legfejlebb %{max} lehet, ténylegesen %{actual} volt. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Fájl hivatkozások kezelése permission_manage_storages_in_project: Tárterületek kezelése a projektben - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: Fájl hivatkozások megtekintése - permission_write_files: 'External Storage: Write files' - project_module_storages: Tárterületek + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ hu: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ hu: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/id.yml b/modules/storages/config/locales/crowdin/id.yml index 0ba0f00ca023..070ee05874be 100644 --- a/modules/storages/config/locales/crowdin/id.yml +++ b/modules/storages/config/locales/crowdin/id.yml @@ -39,15 +39,20 @@ id: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Kelola tautan berkas permission_manage_storages_in_project: Kelola penyimpanan berkas di proyek - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: Lihat tautan berkas - permission_write_files: 'External Storage: Write files' - project_module_storages: Penyimpanan berkas + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ id: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ id: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/it.yml b/modules/storages/config/locales/crowdin/it.yml index c81ee9410d7f..64e5237d6a4f 100644 --- a/modules/storages/config/locales/crowdin/it.yml +++ b/modules/storages/config/locales/crowdin/it.yml @@ -39,15 +39,20 @@ it: api_v3: errors: too_many_elements_created_at_once: 'Troppi elementi creati contemporaneamente. Massimo atteso: %{max}, effettivi: %{actual}.' - permission_create_files: 'Archiviazione esterna: Creare file' - permission_delete_files: 'Archiviazione esterna: Cancellare file' + external_file_storages: Archivi di file esterni + permission_create_files: 'Cartelle di progetto gestite automaticamente: Creare file' + permission_create_files_explanation: Questa autorizzazione è disponibile solo per gli archivi Nextcloud. + permission_delete_files: 'Cartelle di progetto gestite automaticamente: Eliminare file' + permission_delete_files_explanation: Questa autorizzazione è disponibile solo per gli archivi Nextcloud. + permission_header_for_project_module_storages: Cartelle di progetto gestite automaticamente permission_manage_file_links: Gestire link ai file permission_manage_storages_in_project: Gestisci archivi di file nel progetto - permission_read_files: 'Archiviazione esterna: Leggere file' - permission_share_files: 'Archiviazione esterna: Condividere file' + permission_read_files: 'Cartelle di progetto gestite automaticamente: Leggere file' + permission_share_files: 'Cartelle di progetto gestite automaticamente: Condividere file' + permission_share_files_explanation: Questa autorizzazione è disponibile solo per gli archivi Nextcloud. permission_view_file_links: Visualizza link ai file - permission_write_files: 'Archiviazione esterna: Scrivere file' - project_module_storages: Archivi file + permission_write_files: 'Cartelle di progetto gestite automaticamente: Scrivere file' + project_module_storages: File storages: buttons: complete_without_setup: Completa senza @@ -224,13 +229,12 @@ it: project_settings: delete: Elimina archivio file edit: Modifica l'archiviazione dei file per questo progetto - index: File di archiviazione disponibili in questo progetto members_connection_status: Stato della connessione dei membri new: Aggiungi un archivio file al progetto project_storage_members: subtitle: Controlla lo stato della connessione per lo spazio di archiviazione %{storage_name_link} di tutti i membri del progetto. title: Stato della connessione dei membri - permission_header_explanation: 'File permissions on external storages are applied only to folders and files within automatically managed project folders. Note that not all file permissions are supported by all storage providers. Please check the documentation on file storage permissions for more information.' + permission_header_explanation: 'Le autorizzazioni dei file sugli archivi esterni vengono applicate solo alle cartelle e ai file all''interno delle cartelle di progetto gestite automaticamente. Tieni presente che non tutte le autorizzazioni sui file sono supportate da tutti i provider di archiviazione. Controlla la documentazione sulle autorizzazioni per gli archivi di file per ulteriori informazioni.' provider_types: label: Tipo di fonte nextcloud: @@ -243,6 +247,9 @@ it: label_oauth_client_secret: Valore segreto client Azure OAuth name: OneDrive/SharePoint name_placeholder: es. OneDrive + show_attachments_toggle: + description: 'La disattivazione di questa opzione nasconderà l''elenco degli allegati nella scheda dei file delle macro-attività. I file allegati nella descrizione di una macro-attività verranno comunque caricati nell''archivio interno degli allegati. ' + label: Mostra gli allegati nella scheda File delle macro-attività storage_list_blank_slate: description: Aggiungi un archivio per vederli qui. heading: Non hai ancora archivi. diff --git a/modules/storages/config/locales/crowdin/ja.yml b/modules/storages/config/locales/crowdin/ja.yml index 92dd28e79176..156d07a61e90 100644 --- a/modules/storages/config/locales/crowdin/ja.yml +++ b/modules/storages/config/locales/crowdin/ja.yml @@ -39,15 +39,20 @@ ja: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ ja: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ ja: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/js-ar.yml b/modules/storages/config/locales/crowdin/js-ar.yml index 5e4debb04d38..753712a78207 100644 --- a/modules/storages/config/locales/crowdin/js-ar.yml +++ b/modules/storages/config/locales/crowdin/js-ar.yml @@ -57,12 +57,12 @@ ar: select: "Select files" select_all: "اختر الجميع" selection: - zero: "Link %{count} files" - one: "Link 1 file" - two: "Link %{count} files" - few: "Link %{count} files" - many: "Link %{count} files" - other: "Link %{count} files" + zero: "حدد الملفات لربطها" + one: "رابط الملف 1" + two: "ربط %{count} من الملفات" + few: "ربط %{count} من الملفات" + many: "ربط %{count} من الملفات" + other: "ربط %{count} من الملفات" success_create: zero: "Successfully created %{count} file links." one: "Successfully created 1 file link." diff --git a/modules/storages/config/locales/crowdin/js-cs.yml b/modules/storages/config/locales/crowdin/js-cs.yml index a07b242b08a7..e3b9fde1bb1b 100644 --- a/modules/storages/config/locales/crowdin/js-cs.yml +++ b/modules/storages/config/locales/crowdin/js-cs.yml @@ -2,7 +2,7 @@ cs: js: storages: - link_files_in_storage: "Prolinkovat soubory v" + link_files_in_storage: "Prolinkovat soubory v %{storageType}" link_existing_files: "Odkaz na existující soubory" upload_files: "Nahrát soubory" drop_files: "Přetáhněte soubory pro jejich nahrání na %{name}." @@ -64,9 +64,9 @@ cs: other: "Propojit %{count} souborů" success_create: one: "Odkaz na soubor byl úspěšně vytvořen." - few: "Odkazů na soubor byl úspěšně vytvořen." - many: "Odkazů na soubor byl úspěšně vytvořen." - other: "Odkazů na soubor byl úspěšně vytvořen." + few: "%{count} odkazů na soubor byl úspěšně vytvořen." + many: "%{count} odkazů na soubor byl úspěšně vytvořen." + other: "%{count} odkazů na soubor byl úspěšně vytvořen." upload_error: default: > Váš soubor (%{fileName}) nelze nahrát. diff --git a/modules/storages/config/locales/crowdin/js-es.yml b/modules/storages/config/locales/crowdin/js-es.yml index 4d2e729ec795..f31309379cdd 100644 --- a/modules/storages/config/locales/crowdin/js-es.yml +++ b/modules/storages/config/locales/crowdin/js-es.yml @@ -5,8 +5,8 @@ es: link_files_in_storage: "Enlace archivos en %{storageType}" link_existing_files: "Enlazar archivos existentes" upload_files: "Subir archivos" - drop_files: "Arrastra archivos aquí para cargarlos a %{storageType}." - drop_or_click_files: "Arrastra archivos o haz clic aquí para cargarlos a %{storageType}." + drop_files: "Arrastra archivos aquí para cargarlos a %{name}." + drop_or_click_files: "Arrastra archivos o haz clic aquí para cargarlos a %{name}." login: "%{storageType} iniciar sesión" login_to: "Iniciar sesión en %{storageType}" no_connection: "No hay conexión para %{storageType}" diff --git a/modules/storages/config/locales/crowdin/js-lv.yml b/modules/storages/config/locales/crowdin/js-lv.yml index da3b3785ced4..0b460f3461a2 100644 --- a/modules/storages/config/locales/crowdin/js-lv.yml +++ b/modules/storages/config/locales/crowdin/js-lv.yml @@ -57,7 +57,7 @@ lv: select: "Select files" select_all: "Select all" selection: - zero: "Link %{count} files" + zero: "Select files to link" one: "Link 1 file" other: "Link %{count} files" success_create: diff --git a/modules/storages/config/locales/crowdin/js-ms.yml b/modules/storages/config/locales/crowdin/js-ms.yml index 6a1d58ff6e9b..3ffba229ab8a 100644 --- a/modules/storages/config/locales/crowdin/js-ms.yml +++ b/modules/storages/config/locales/crowdin/js-ms.yml @@ -5,8 +5,8 @@ ms: link_files_in_storage: "Pautkan fail dalam %{storageType}" link_existing_files: "Pautkan fail sedia ada" upload_files: "Muat naik fail" - drop_files: "Jatuhkan fail disini untuk memuat naiknya ke %{name}." - drop_or_click_files: "Jatuhkan fail disini atau klik untuk memuat naiknya ke %{name}." + drop_files: "Letakkan fail disini untuk dimuat naik ke %{name}." + drop_or_click_files: "Letakkan fail disini atau klik untuk dimuat naik ke %{name}." login: "log masuk %{storageType}" login_to: "Log masuk ke %{storageType}" no_connection: "Tiada sambungan %{storageType}" @@ -19,23 +19,23 @@ ms: default: "Storan" information: connection_error: > - Beberapa seting %{storageType} tidak berfungsi. Sila hubungi pentadbir anda %{storageType}. - live_data_error: "Masalah dalam mengambil butiran fail" + Beberapa tetapan %{storageType} tidak berfungsi. Sila hubungi pentadbir %{storageType} anda. + live_data_error: "Masalah memperoleh butiran fail" live_data_error_description: > Beberapa data %{storageType} tidak dapat diperolehi. Sila cuba untuk memuat semula halaman ini atau hubungi pentadbir %{storageType} anda. no_file_links: "Untuk mengaitkan fail-fail kepada pakej kerja ini, sila lakukan melalui %{storageType}." not_logged_in: > - Untuk tambah pautan, lihat atau muat naik fail berkaitan dengan pakej kerja ini, sila log masuk ke %{storageType}. + Untuk tambah pautan, lihat atau muat naik fail yang berkait dengan pakej kerja ini, sila log masuk ke %{storageType}. files: already_existing_header: "Fail ini telah wujud" already_existing_body: > - Fail dengan nama "%{fileName}" sudah wujud di lokasi di mana anda cuba untuk muat naik fail ini. Apakah yang anda ingin lakukan? + Fail dengan nama "%{fileName}" sudah wujud di lokasi di mana anda sedang cuba untuk memuat naik fail ini. Apakah yang anda ingin lakukan? directory_not_writeable: "Anda tidak mempunyai kebenaran untuk menambah fail ke dalam folder ini." - dragging_many_files: "Muat naik ke %{storageType} hanya menyokong satu fail pada satu masa." + dragging_many_files: "Muat naik ke %{storageType} menyokong hanya satu fail pada satu masa." dragging_folder: "Muat naik ke %{storageType} tidak menyokong folder." empty_folder: "Folder ini kosong." empty_folder_location_hint: "Klik butang di bawah untuk memuat naik fail di lokasi ini." - file_not_selectable_location: "Memilih fail tidak boleh dilakukan dalam proses memilih lokasi." + file_not_selectable_location: "Pemilihan fail tidak boleh dilakukan dalam proses pemilihan lokasi." project_folder_no_access: > Anda tidak mempunyai akses ke folder projek. Sila hubungi pentadbir anda untuk mendapatkan akses atau muat naik file ke lokasi yang berbeza. managed_project_folder_not_available: > @@ -50,34 +50,34 @@ ms: download: "Muat turun %{fileName}" open: "Buka fail dalam storan" open_location: "Buka fail dalam lokasi" - remove: "Hapuskan pautan file" + remove: "Padamkan pautan fail" remove_confirmation: > - Adakah anda pasti ingin memutuskan pautan fail daripada pakej kerja ini? Memutuskan pautan tidak mempengaruhi fail asli dan hanya menghapuskan sambungan ke pakej kerja ini. - remove_short: "Hapuskan pautan" + Adakah anda pasti ingin memutuskan pautan fail daripada pakej kerja ini? Memutuskan pautan tidak mempengaruhi fail asli dan hanya memadam sambungan ke pakej kerja ini. + remove_short: "Padamkan pautan" select: "Pilih fail" select_all: "Pilih semua" selection: - zero: "Pilih fail untuk pautkan" - other: "Pautkan 1 file" + zero: "Pilih fail untuk dipautkan" + other: "Pautkan %{count} fail" success_create: - other: "1 pautan fail berjaya dicipta." + other: "%{count} pautan fail berjaya dicipta." upload_error: default: > Fail anda (%{fileName}) tidak dapat dimuat naikkan. 403: > - Fail anda (%{fileName}) tidak dapat dimuat naik kerana sekatan sistem. Sila hubungi pengendali anda untuk maklumat lanjut. + Fail anda (%{fileName}) tidak dapat dimuat naik kerana sekatan sistem. Sila hubungi pentadbir anda untuk maklumat lanjut. 413: > Fail anda (%{fileName}) adalah lebih besar daripada yang OpenProject boleh muat naik ke %{storageType}. Anda boleh memuat naiknya terus ke %{storageType} dahulu kemudian pautkan fail tersebut. 507: > Fail anda (%{fileName}) adalah lebih besar dari kuota storan yang dibenarkan. Hubungi pentadbir anda untuk ubah suai kuota ini. detail: nextcloud: > - Sila semak versi terbaru aplikasi Nextcloud "OpenProject Integration" sudah di pasang dan hubungi pentadbir anda untuk info lebih lanjut. + Sila semak versi aplikasi Nextcloud "OpenProject Integration" terbaharu sudah dipasang dan hubungi pentadbir anda untuk maklumat lanjut. link_uploaded_file_error: > - Ralat berlaku semasa pemautan fail %{fileName} yang baru sahaja dimuat naik ke pakej kerja %{workPackageId}. + Ralat berlaku semasa memautkan fail %{fileName} yang baru sahaja dimuat naik ke pakej kerja %{workPackageId}. tooltip: not_logged_in: "Sila log masuk ke dalam storan untuk mengakses fail ini." view_not_allowed: "Anda tidak mempunyai kebenaran untuk melihat fail ini." - not_found: "Fail ini tidak dapat dijumpai." + not_found: "Fail ini tidak dapat ditemui." already_linked_file: "Fail ini sudah terpaut dengan pakej kerja ini." already_linked_directory: "Direktori ini sudah dipautkan dengan pakej kerja ini." diff --git a/modules/storages/config/locales/crowdin/js-pl.yml b/modules/storages/config/locales/crowdin/js-pl.yml index 8c6bdac5c47b..9afae4e8245f 100644 --- a/modules/storages/config/locales/crowdin/js-pl.yml +++ b/modules/storages/config/locales/crowdin/js-pl.yml @@ -58,12 +58,12 @@ pl: select_all: "Zaznacz wszystkie" selection: zero: "Wybierz pliki do połączenia" - one: "Połącz %{count} plik" + one: "Połącz 1 plik" few: "Połącz %{count} pliki" many: "Połącz %{count} plików" other: "Połącz %{count} plików" success_create: - one: "Pomyślnie utworzono %{count} połączenie plików." + one: "Pomyślnie utworzono 1 połączenie plików." few: "Pomyślnie utworzono %{count} połączenia plików." many: "Pomyślnie utworzono %{count} połączeń plików." other: "Pomyślnie utworzono %{count} połączeń plików." diff --git a/modules/storages/config/locales/crowdin/js-zh-TW.yml b/modules/storages/config/locales/crowdin/js-zh-TW.yml index 594e8e2295aa..8560fd8c4ed5 100644 --- a/modules/storages/config/locales/crowdin/js-zh-TW.yml +++ b/modules/storages/config/locales/crowdin/js-zh-TW.yml @@ -8,7 +8,7 @@ zh-TW: drop_files: "將檔案拖至此處或上傳至%{name}。" drop_or_click_files: "將檔案拖至此處或點選上傳至%{name}。" login: "%{storageType} 登入" - login_to: "登入到 %{storage}" + login_to: "登入到 %{storageType}" no_connection: "沒有 %{storageType} 連線" open_storage: "開啟 %{storageType}" select_location: "選擇位置" diff --git a/modules/storages/config/locales/crowdin/ka.yml b/modules/storages/config/locales/crowdin/ka.yml index 968158323c7e..ec7a1cc9fff3 100644 --- a/modules/storages/config/locales/crowdin/ka.yml +++ b/modules/storages/config/locales/crowdin/ka.yml @@ -39,15 +39,20 @@ ka: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: ფაილების საცავი + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ ka: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ ka: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: მაგ. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/kk.yml b/modules/storages/config/locales/crowdin/kk.yml index 43c78b175bf5..e26f4ada0c14 100644 --- a/modules/storages/config/locales/crowdin/kk.yml +++ b/modules/storages/config/locales/crowdin/kk.yml @@ -39,15 +39,20 @@ kk: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ kk: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ kk: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/ko.yml b/modules/storages/config/locales/crowdin/ko.yml index c78720abb32f..e8dc53e9716f 100644 --- a/modules/storages/config/locales/crowdin/ko.yml +++ b/modules/storages/config/locales/crowdin/ko.yml @@ -39,15 +39,20 @@ ko: api_v3: errors: too_many_elements_created_at_once: 한 번에 너무 많은 요소가 생성되었습니다. 최대 개수는 %{max}개이지만 %{actual}개가 있습니다. - permission_create_files: '외부 저장소: 파일 만들기' - permission_delete_files: '외부 저장소: 파일 삭제' + external_file_storages: 외부 파일 저장소 + permission_create_files: '자동으로 관리되는 프로젝트 폴더: 파일 만들기' + permission_create_files_explanation: 이 권한은 Nextcloud 저장소에만 사용할 수 있습니다 + permission_delete_files: '자동으로 관리되는 프로젝트 폴더: 파일 삭제' + permission_delete_files_explanation: 이 권한은 Nextcloud 저장소에만 사용할 수 있습니다 + permission_header_for_project_module_storages: 자동으로 관리되는 프로젝트 폴더 permission_manage_file_links: 파일 링크 관리 permission_manage_storages_in_project: 프로젝트의 파일 저장소 관리 - permission_read_files: '외부 저장소: 파일 읽기' - permission_share_files: '외부 저장소: 파일 공유' + permission_read_files: '자동으로 관리되는 프로젝트 폴더: 파일 읽기' + permission_share_files: '자동으로 관리되는 프로젝트 폴더: 파일 공유' + permission_share_files_explanation: 이 권한은 Nextcloud 저장소에만 사용할 수 있습니다 permission_view_file_links: 파일 링크 보기 - permission_write_files: '외부 저장소: 파일 쓰기' - project_module_storages: 파일 저장소 + permission_write_files: '자동으로 관리되는 프로젝트 폴더: 파일 쓰기' + project_module_storages: 파일 storages: buttons: complete_without_setup: 이것 없이 완료 @@ -222,13 +227,12 @@ ko: project_settings: delete: 파일 저장소 삭제 edit: 이 프로젝트에 대한 파일 저장소 편집 - index: 이 프로젝트에서 사용 가능한 파일 저장소 members_connection_status: 멤버 연결 상태 new: 이 프로젝트에 파일 저장소 추가 project_storage_members: subtitle: 모든 프로젝트 멤버의 저장소 %{storage_name_link}에 대한 연결 상태를 확인하세요. title: 멤버 연결 상태 - permission_header_explanation: 'File permissions on external storages are applied only to folders and files within automatically managed project folders. Note that not all file permissions are supported by all storage providers. Please check the documentation on file storage permissions for more information.' + permission_header_explanation: '외부 저장소에 대한 파일 권한은 자동으로 관리되는 프로젝트 폴더 내의 폴더와 파일에만 적용됩니다. 모든 저장소 공급자가 모든 파일 권한을 지원하는 것은 아닙니다. 자세한 내용은 파일 저장소 권한에 대한 설명서를 참조하세요.' provider_types: label: 공급자 유형 nextcloud: @@ -241,6 +245,9 @@ ko: label_oauth_client_secret: Azure OAuth 클라이언트 비밀번호 값 name: OneDrive/SharePoint name_placeholder: '예: OneDrive' + show_attachments_toggle: + description: '이 옵션을 비활성화하면 작업 패키지 파일 탭에서 첨부 파일 목록이 숨겨집니다. 작업 패키지 설명에 첨부된 파일은 내부 첨부 파일 저장소에 계속 업로드됩니다. ' + label: 작업 패키지 파일 탭에 첨부 파일 표시 storage_list_blank_slate: description: 여기에서 보려면 저장소를 추가합니다. heading: 아직 저장소가 없습니다. diff --git a/modules/storages/config/locales/crowdin/lt.yml b/modules/storages/config/locales/crowdin/lt.yml index e40bf2a05aab..c11fb68a88fc 100644 --- a/modules/storages/config/locales/crowdin/lt.yml +++ b/modules/storages/config/locales/crowdin/lt.yml @@ -39,15 +39,20 @@ lt: api_v3: errors: too_many_elements_created_at_once: Per daug elementu vienu metu. Tikėtasi daugiausia %{max}, gauta %{actual}. - permission_create_files: 'Išorinė saugykla: kurti failus' - permission_delete_files: 'Išorinė saugykla: trinti failus' + external_file_storages: Išorinės failų saugyklos + permission_create_files: 'Automatiškai valdomi projekto aplankai: Kurti failus' + permission_create_files_explanation: Šis teisė galima tik Nextcloud saugykloms + permission_delete_files: 'Automatiškai valdomi projekto aplankai: Trinti failus' + permission_delete_files_explanation: Šis teisė galima tik Nextcloud saugykloms + permission_header_for_project_module_storages: Automatiškai valdomi projekto aplankai permission_manage_file_links: Tvarkyti failo nuorodas permission_manage_storages_in_project: Tvarkyti failų saugyklas projekte - permission_read_files: 'Išorinė saugykla: skaityti failus' - permission_share_files: 'Išorinė saugykla: bendrinti failus' + permission_read_files: 'Automatiškai valdomi projekto aplankai: Skaityti failus' + permission_share_files: 'Automatiškai valdomi projekto aplankai: Bendrinti failus' + permission_share_files_explanation: Šis teisė galima tik Nextcloud saugykloms permission_view_file_links: Žiūrėti failo nuorodas - permission_write_files: 'Išorinė saugykla: rašyti failus' - project_module_storages: Failų saugyklos + permission_write_files: 'Automatiškai valdomi projekto aplankai: Rašyti failus' + project_module_storages: Failai storages: buttons: complete_without_setup: Baigti be jo @@ -222,7 +227,6 @@ lt: project_settings: delete: Trinti failų saugyklą edit: Keisti šio projekto failų saugyklą - index: Šiame projekte prieinamos failų saugyklos. members_connection_status: Narių jungties būsena new: Pridėti failų saugyklą šiam projektui project_storage_members: @@ -241,6 +245,9 @@ lt: label_oauth_client_secret: Azure OAuth kliento slapta reikšmė name: OneDrive/SharePoint name_placeholder: pvz. OneDrive + show_attachments_toggle: + description: 'Išjungus šią parinktį darbo paketų failų kortelėje bus paslėptas priedų sąrašas. Darbo paketų aprašyme prisegti failai bus įkeliami į vidinę priedų saugyklą. ' + label: Rodyti priedus darbo paketų failų kortelėje storage_list_blank_slate: description: Pridėkite saugyklą, kad matytumėte ją čia. heading: Jūs dar neturite jokių saugyklų. diff --git a/modules/storages/config/locales/crowdin/lv.yml b/modules/storages/config/locales/crowdin/lv.yml index afe5b2c8ee57..5b419280edab 100644 --- a/modules/storages/config/locales/crowdin/lv.yml +++ b/modules/storages/config/locales/crowdin/lv.yml @@ -39,15 +39,20 @@ lv: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ lv: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ lv: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/mn.yml b/modules/storages/config/locales/crowdin/mn.yml index f24e066b6066..0a0be57f56c4 100644 --- a/modules/storages/config/locales/crowdin/mn.yml +++ b/modules/storages/config/locales/crowdin/mn.yml @@ -39,15 +39,20 @@ mn: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ mn: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ mn: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/ms.yml b/modules/storages/config/locales/crowdin/ms.yml index 46685078f6c1..afc850a19299 100644 --- a/modules/storages/config/locales/crowdin/ms.yml +++ b/modules/storages/config/locales/crowdin/ms.yml @@ -8,50 +8,55 @@ ms: drive: ID Pemacu host: Hos name: Nama - provider_type: Jenis provider + provider_type: Jenis pembekal tenant: ID Direktori (penyewa) errors: messages: - not_linked_to_project: tidak terpaut dengan projek. + not_linked_to_project: tidak berpaut dengan projek. models: storages/file_link: attributes: origin_id: - only_numeric_or_uuid: boleh menjadi dalam format angka atau uuid. + only_numeric_or_uuid: hanya boleh menjadi dalam format angka atau uuid. storages/project_storage: attributes: project_folder_mode: - mode_unavailable: tidak tersedia untuk simpanan ini. + mode_unavailable: tidak tersedia untuk storan ini. storages/storage: attributes: host: - authorization_header_missing: belum disediakan sepenuhnya. Contoh Nextcloud tidak menerima pengepala "Dibenarkan" yang diperlukan untuk token Bearer, berdasarkan kebenaran permintaan API. Sila memeriksa server konfigurasi HTTP anda dengan teliti. + authorization_header_missing: belum disediakan sepenuhnya. Contoh Nextcloud tidak menerima pengepala "Dibenarkan" yang diperlukan untuk token Bearer, berdasarkan kebenaran permintaan API. Sila periksa dua kali server konfigurasi HTTP anda dengan teliti. cannot_be_connected_to: tidak boleh disambungkan. - minimal_nextcloud_version_unmet: tidak memenuhi keperluan versi minimum (mesti Nextcloud 23 atau lebih tinggi) - not_nextcloud_server: adalah bukan server Nextcloud - op_application_not_installed: kelihatan tidak mempunyai aplikasi "Integrasi OpenProject" dipasang. Sila pasang terlebih dahulu dan cuba sekali lagi. + minimal_nextcloud_version_unmet: tidak memenuhi keperluan versi minimum (haruslah Nextcloud 23 atau lebih tinggi) + not_nextcloud_server: ialah bukan server Nextcloud + op_application_not_installed: kelihatan tidak mempunyai aplikasi "Integrasi OpenProject" yang terpasang. Sila pasang terlebih dahulu dan cuba sekali lagi. password: invalid_password: tidak sah. unknown_error: tidak dapat disahkan. Sila periksa sambungan storan anda dan cuba lagi. models: file_link: Fail - storages/storage: Simpanan + storages/storage: Storan api_v3: errors: - too_many_elements_created_at_once: Terlalu banyak unsur dicipta dalam satu masa. Dijangka %{max} paling banyak, mendapat %{actual}. - permission_create_files: 'External Storage: Cipta fail' - permission_delete_files: 'External Storage: Padam fail' + too_many_elements_created_at_once: Terlalu banyak elemen dicipta dalam satu masa. Dijangka %{max} paling banyak, mendapat %{actual}. + external_file_storages: Storan fail luaran + permission_create_files: 'Folder projek yang dikendalikan secara automatik: Cipta fail' + permission_create_files_explanation: Kebenaran ini hanya tersedia untuk storan Nextcloud + permission_delete_files: 'Folder projek yang dikendalikan secara automatik: Padam fail' + permission_delete_files_explanation: Kebenaran ini hanya tersedia untuk storan Nextcloud + permission_header_for_project_module_storages: Folder projek yang dikendalikan secara automatik permission_manage_file_links: Urus pautan fail - permission_manage_storages_in_project: Urus fail storan dalam projek - permission_read_files: 'External Storage: Baca fail' - permission_share_files: 'External Storage: Kongsi fail' - permission_view_file_links: Papar pautan fail - permission_write_files: 'External Storage: Tulis fail' - project_module_storages: Storan fail + permission_manage_storages_in_project: Urus storan fail dalam projek + permission_read_files: 'Folder projek yang dikendalikan secara automatik: Baca fail' + permission_share_files: 'Folder projek yang dikendalikan secara automatik: Kongsi fail' + permission_share_files_explanation: Kebenaran ini hanya tersedia untuk storan Nextcloud + permission_view_file_links: Lihat pautan fail + permission_write_files: 'Folder projek yang dikendalikan secara automatik: Tulis fail' + project_module_storages: Fail-fail storages: buttons: complete_without_setup: Lengkap tanpanya - done_complete_setup: Selesai, penyediaan lengkap + done_complete_setup: Selesai, pemasangan lengkap done_continue: Selesai, teruskan replace_oauth_application: Ganti OpenProject OAuth replace_oauth_client: Ganti %{provider_type} OAuth @@ -60,31 +65,31 @@ ms: configuration_checks: oauth_client_incomplete: nextcloud: Benarkan OpenProject untuk mengakses data Nextcloud menggunakan OAuth. - one_drive: Benarkan OpenProject untuk mengakses data Azure menggunakan OAuth untuk menyambung OneDrive/Sharepoint. + one_drive: Benarkan OpenProject untuk mengakses data Azure menggunakan OAuth untuk menyambung ke OneDrive/Sharepoint. redirect_uri_incomplete: - one_drive: Lengkapkan setup dengan pengalihan URI yang betul. - confirm_replace_oauth_application: Tindakan ini akan menetapkan semula kelayakan OAuth semasa. Selepas mengesahkan, anda perlu memasukkan semula kelayakan di pembekal simpanan dan semua pengguna jauh perlu membenarkan OpenProject sekali lagi. Adakah anda pasti anda mahu teruskan? - confirm_replace_oauth_client: Tindakan ini akan menetapkan semula kelayakan OAuth semasa. Selepas mengesahkan, anda perlu memasukkan semula kelayakan di pembekal simpanan dan semua pengguna jauh perlu membenarkan %{provider_type} sekali lagi. Adakah anda pasti anda mahu teruskan? + one_drive: Lengkapkan pemasangan dengan pengalihan semula URI yang betul. + confirm_replace_oauth_application: Tindakan ini akan menetapkan semula kelayakan OAuth semasa. Selepas mengesahkan, anda perlu memasukkan semula kelayakan di pembekal storan dan semua pengguna jauh perlu membenarkan OpenProject sekali lagi. Adakah anda pasti anda mahu teruskan? + confirm_replace_oauth_client: Tindakan ini akan menetapkan semula kelayakan OAuth semasa. Selepas mengesahkan, anda perlu memasukkan semula kelayakan di pembekal storan dan semua pengguna jauh perlu membenarkan %{provider_type} sekali lagi. Adakah anda pasti anda mahu teruskan? delete_warning: - input_delete_confirmation: Masukkan nama fail penyimpanan %{file_storage} untuk mengesahkan pembuangan. - irreversible_notice: Mengapus fail penyimpanan adalah tindakan yang tidak dapat dipulihkan. - project_storage: 'Adakah anda pasti anda ingin menghapuskan %{file_storage} dari projek ini? Untuk mengesahkan tindakan ini sila perkenalkan nama penyimpanan di dalam medan di bawah, ini akan:' - project_storage_delete_result_1: Padam semua pautan dari pakej kerja projek ini ke fail dan folder penyimpanan tersebut. - project_storage_delete_result_2: Sekiranya penyimpanan ini mempunyai folder projek yang dikendalikan secara automatik, folder ini beserta failnya akan dipadamkan selamanya. - storage: 'Adakah anda pasti anda ingin menghapuskan %{file_storage}? Untuk mengesahkan tindakan ini sila perkenalkan nama penyimpanan di dalam ruang di bawah, ini akan:' - storage_delete_result_1: Padam semua setup penyimpanan untuk semua projek yang menggunakan penyimpanan ini. - storage_delete_result_2: Padam semua pautan dari pakej kerja semua projek ke fail dan folder penyimpanan tersebut. - storage_delete_result_3: Sekiranya penyimpanan ini mempunyai folder projek yang dikendalikan secara automatik, folder tersebut beserta fail dalam kandungannya akan dipadamkan selamanya. - error_invalid_provider_type: Sila pilih pembekal penyimpanan yang sah. + input_delete_confirmation: Masukkan nama fail storan %{file_storage} untuk mengesahkan pembuangan. + irreversible_notice: Memadam fail storan ialah tindakan yang tidak dapat dipulihkan. + project_storage: 'Adakah anda pasti anda ingin memadamkan %{file_storage} dari projek ini? Untuk mengesahkan tindakan ini sila perkenalkan nama storan di dalam ruangan di bawah, ini akan:' + project_storage_delete_result_1: Padam semua pautan dari pakej kerja projek ini ke fail dan folder storan tersebut. + project_storage_delete_result_2: Sekiranya storan ini mempunyai folder projek yang dikendalikan secara automatik, folder ini beserta failnya akan dipadamkan selamanya. + storage: 'Adakah anda pasti anda ingin memadamkan %{file_storage}? Untuk mengesahkan tindakan ini sila perkenalkan nama storan di dalam ruang di bawah, ini akan:' + storage_delete_result_1: Padam semua pemasangan storan untuk semua projek yang menggunakan storan ini. + storage_delete_result_2: Padam semua pautan dari pakej kerja semua projek ke fail dan folder storan tersebut. + storage_delete_result_3: Sekiranya storan ini mempunyai folder projek yang dikendalikan secara automatik, folder tersebut beserta fail dalam kandungannya akan dipadamkan selamanya. + error_invalid_provider_type: Sila pilih pembekal storan yang sah. file_storage_view: access_management: - automatic_management: Akses dan folder yang diuruskan secara automatik - automatic_management_description: Benarkan OpenProject cipta folder mengikut projek secara automatik dan mengendalikan akses pengguna. Ini dicadangkan kerana ia memastikan setiap ahli pasukan mempunyai akses kebenaran yang betul. - description: Pilih jenis pengurusan akses pengguna dan ciptaan folder. Kami cadangkan menggunakan akses yang dikendalikan secara automatik untuk mengadakan struktur yang lebih tersusun, dan menjaminkan akses kepada semua pengguna yang berkaitan. + automatic_management: Akses dan folder yang dikendalikan secara automatik + automatic_management_description: Benarkan OpenProject cipta folder mengikut projek secara automatik dan mengendalikan akses pengguna. Ini disarankan kerana ia memastikan setiap ahli pasukan mempunyai akses kebenaran yang betul. + description: Pilih jenis pengurusan akses pengguna dan ciptaan folder. Kami sarankan menggunakan akses yang dikendalikan secara automatik untuk mengadakan struktur yang lebih tersusun, dan menjaminkan akses kepada semua pengguna yang berkaitan. manual_management: Akses dan folder yang dikendalikan secara manual - manual_management_description: Cipta dan kendalikan folder mengikut projek sendiri secara manual. Anda perlu memastikan pengguna-pengguna berkaitan mempunyai akses secara manual. - setup_incomplete: Pilih jenis pengurusan akses pengguna dan ciptaan folder - subtitle: Akses pengurusan + manual_management_description: Cipta dan uruskan folder mengikut projek sendiri secara manual. Anda perlu memastikan pengguna-pengguna berkaitan mempunyai akses secara manual. + setup_incomplete: Pilih jenis pengurusan akses pengguna dan ciptaan folder. + subtitle: Pengurusan akses title: Akses dan folder projek automatically_managed_folders: Folder yang dikendalikan secara automatik general_information: Maklumat umum @@ -93,7 +98,7 @@ ms: one_drive_oauth: OAuth Azure openproject_oauth: OAuth OpenProject project_folders: Folder projek - redirect_uri: Ubah hala URI + redirect_uri: ' Pengubah hala URI' storage_provider: Pembekal storan health: checked: Terakhir disemak %{datetime} @@ -104,75 +109,75 @@ ms: subtitle: Folder projek yang dikendalikan secara automatik title: Status kesihatan health_email_notifications: - description_subscribed: Semua pentadbir menerima pemberitahuan e-mel status kesihatan untuk simpanan ini. - description_unsubscribed: Pemberitahuan e-mel status kesihatan untuk simpanan ini telah ditutup untuk semua pentadbir. + description_subscribed: Semua pentadbir menerima pemberitahuan e-mel status kesihatan untuk storan ini. + description_unsubscribed: Pemberitahuan e-mel status kesihatan untuk storan ini telah ditutup untuk semua pentadbir. error_could_not_be_saved: Tetapan pemberitahuan e-mel tidak dapat disimpan. Sila cuba lagi. subscribe: Langgan title: Pemberitahuan e-mel - unsubscribe: Batalkan langganan + unsubscribe: Berhenti langganan help_texts: - project_folder: Folder projek adalah folder default untuk muat naik fail bagi projek ini. Pengguna masih boleh muat naik fail ke lokasi lain. + project_folder: Folder projek adalah folder asal untuk muat naik fail bagi projek ini. Pengguna masih boleh muat naik fail ke lokasi lain. instructions: - all_available_storages_already_added: Semua simpanan yang tersedia sudah ditambah ke projek ini. - automatic_folder: Ini akan ciptakan folder pangkal untuk projek ini dan kendalikan akses kebenaran kepada setiap ahli projek secara automatik. + all_available_storages_already_added: Semua storan yang tersedia sudah ditambah ke projek ini. + automatic_folder: Ini akan mencipta folder pangkal untuk projek ini dan kendalikan akses kebenaran kepada setiap ahli projek secara automatik. copy_from: Salin nilai ini dari - empty_project_folder_validation: Memilih folder adalah wajib untuk meneruskan. + empty_project_folder_validation: Memilih folder ialah wajib untuk meneruskan. existing_manual_folder: Anda boleh menetapkan folder sedia ada sebagai folder pangkal untuk projek ini. Walau bagaimanapun, kebenarannya bukan dikendalikan secara automatik, ia perlukan pentadbir untuk pastikan pengguna yang berkaitan mempunyai akses secara manual. Folder yang dipilih boleh digunakan oleh pelbagai projek. - host: Sila tambah alamat hos simpanan anda, termasuklah https://. Ia perlulah mengandungi kurang daripada 255 patah perkataan. + host: Sila tambah alamat hos storan anda, termasuklah https://. Ia perlulah mengandungi tidak lebih daripada 255 patah perkataan. managed_project_folders_application_password_caption: 'Benarkan folder yang dikendalikan secara automatic dengan menyalin nilai ini daripada: %{provider_type_link}.' - name: Berikan nama kepada simpanan anda, supaya pengguna boleh membezakan dengan beberapa simpanan yang lain. - new_storage: Baca dokumentasi di menetapkan sebuah%{provider_name}simpanan failintegrasi untuk maklumat selanjutnya. + name: Berikan nama kepada storan anda supaya pengguna boleh membezakan dengan beberapa storan yang lain. + new_storage: Baca dokumentasi kami tentang menyediakan sebuah%{provider_name}storan failintegrasi untuk maklumat selanjutnya. nextcloud: application_link_text: aplikasi "Intergrasi OpenProject" - integration: Administrasi Nextcloud / OpenProject - oauth_configuration: Salin nilai-nilai ini daripada %{application_link_text} - provider_configuration: Sila pastikan anda mempunyai kelebihan pentadbiran di contoh Nextcloud anda, dan %{application_link_text} telah dimuat naik sebelum penyediaan. - no_specific_folder: Secara tetapan asal, setiap pengguna akan bermula di folder utama mereka apabila ingin memuat naik fail. - no_storage_set_up: Tiada fail simpanan yang disediakan lagi. + integration: Pentadbiran Nextcloud / OpenProject + oauth_configuration: Salin nilai-nilai ini daripada %{application_link_text}. + provider_configuration: 'Sila pastikan anda mempunyai hak keistimewaan pentadbir di, contohnya, Nextcloud, dan mempunyai aplikasi berikut dipasang sebelum membuat penyediaan: %{application_link_text}' + no_specific_folder: Secara default, setiap pengguna akan bermula di folder utama mereka apabila ingin memuat naik fail. + no_storage_set_up: Tiada file storan yang disediakan lagi. not_logged_into_storage: Untuk pilih folder projek, sila log masuk dahulu oauth_application_details: Nilai rahsia pelanggan tidak akan dapat untuk diakses semula setelah menutup laman ini. Sila salin nilai-nilai ini ke %{oauth_application_details_link}. - oauth_application_details_link_text: Setting Intergrasi Nextcloud OpenProject + oauth_application_details_link_text: Tetapan Integrasi Nextcloud OpenProject one_drive: application_link_text: Portal Azure - copy_redirect_uri: Salin alih semula URI - documentation_link_text: Dokumentasi simpanan fail OneDrive/SharePoint - drive_id: Sila salin ID daripada pemacu yang dikehendaki dengan mengikuti langkah-langkah di %{drive_id_link_text} + copy_redirect_uri: Salin ubah hala URI + documentation_link_text: Dokumentasi storan fail OneDrive/SharePoint + drive_id: Sila salin ID daripada pemacu yang diingini dengan mengikuti langkah-langkah di %{drive_id_link_text}. integration: OneDrive/SharePoint missing_client_id_for_redirect_uri: Sila isikan nilai-nilai OAuth untuk menjana URI - oauth_client_redirect_uri: Sila salin nilai ini ke URI pelencongan Web baru di bawah URI Redirect. - oauth_client_secret: Sekiranya tiada rahsia klien aplikasi di bawah kelayakan Pelanggan, sila cipta yang baharu. - oauth_configuration: Salin nilai-nilai ini dari aplikasi yang diingini dalam %{application_link_text} + oauth_client_redirect_uri: Sila salin nilai ini ke URI ubah hala Web baharu di bawah URI Redirect. + oauth_client_secret: Sekiranya tiada aplikasi rahsia pelanggan di bawah kelayakan Pelanggan, sila cipta yang baharu. + oauth_configuration: Salin nilai-nilai ini dari aplikasi yang diingini di %{application_link_text}. provider_configuration: Sila pastikan anda mempunyai hak pentadbiran dalam %{application_link_text} atau hubungi pentadbir Microsoft anda sebelum membuat penyediaan. Anda juga perlu mendaftar aplikasi Azure atau menggunakan yang sedia ada untuk pengesahan di portal. - tenant_id: Sila salin ID Direktori (penyewa) dari aplikasi yang diingini dan pendaftaran aplikasi di %{application_link_text}. + tenant_id: Sila salin ID Direktori (penyewa) dari aplikasi yang diingini dan pendaftaran Aplikasi di %{application_link_text}. tenant_id_placeholder: Nama atau UUID - setting_up_additional_storages: Untuk menyediakan penyimpanan fail tambahan, sila kunjungi - setting_up_additional_storages_non_admin: Para pentadbir boleh menyediakan penyimpanan fail tambahan di Administration / File Storages. - setting_up_storages: Untuk menyediakan penyimpanan fail, sila kunjungi - setting_up_storages_non_admin: Para pentadbir boleh menyediakan penyimpanan fail di Administration / File Storages. + setting_up_additional_storages: Untuk menyediakan storan fail tambahan, sila kunjungi + setting_up_additional_storages_non_admin: Para pentadbir boleh menetapkan storan fail tambahan di Pentadbiran / Storan Fail. + setting_up_storages: Untuk penyediaan storan fail, sila kunjungi + setting_up_storages_non_admin: Para pentadbir boleh menyediakan penyimpanan fail di Pentadbiran / Storan Fail. type: 'Sila pastikan anda mempunyai hak keistimewaan pentadbir di, contohnya, Nextcloud, dan mempunyai aplikasi berikut dipasang sebelum membuat penyediaan:' type_link_text: "\"Integrasi OpenProject\"" label_active: Aktif - label_add_new_storage: Tambah simpanan baru - label_automatic_folder: Folder baru dengan kebenaran yang dikendalikan secara automatik + label_add_new_storage: Tambah storan baharu + label_automatic_folder: Folder baharu dengan kebenaran yang dikendalikan secara automatik label_completed: Selesai label_creation_time: Masa penciptaan label_creator: Pencipta - label_delete_storage: Padam simpanan - label_edit_storage: Edit simpanan - label_edit_storage_access_management: Edit pengurusan akses simpanan - label_edit_storage_automatically_managed_folders: Edit simpanan folder yang dikendalikan secara automatik - label_edit_storage_host: Edit hos penyimpanan + label_delete_storage: Padam storan + label_edit_storage: Edit storan + label_edit_storage_access_management: Edit pengurusan akses storan + label_edit_storage_automatically_managed_folders: Edit storan folder yang dikendalikan secara automatik + label_edit_storage_host: Edit hos storan label_existing_manual_folder: Folder sedia ada dengan kebenaran yang dikendalikan secara manual - label_file_storage: Penyimpanan fail - label_host: Hos URL + label_file_storage: Storan fail + label_host: URL Hos label_inactive: Tidak aktif label_incomplete: Tidak lengkap label_managed_project_folders: application_password: Kata laluan aplikasi automatically_managed_folders: Folder yang dikendalikan secara automatik label_name: Nama - label_new_file_storage: Penyimpanan %{provider} baru - label_new_storage: Simpanan baru + label_new_file_storage: Storan %{provider} baharu + label_new_storage: Storan baharu label_no_selected_folder: Tiada folder yang dipilih label_no_specific_folder: Tiada folder spesifik label_oauth_client_id: OAuth ID Pelanggan @@ -180,19 +185,19 @@ ms: label_openproject_oauth_application_secret: Rahsia Pelanggan OAuth OpenProject label_project_folder: Folder projek label_provider: Pembekal - label_redirect_uri: URI Alih Semula - label_show_storage_redirect_uri: Paparkan URI alih semula + label_redirect_uri: URI Ubah Hala + label_show_storage_redirect_uri: Paparkan URI ubah hala label_status: Status - label_storage: Penyimpanan + label_storage: Storan label_uri: URI member_connection_status: connected: Disambungkan - connected_no_permissions: Peranan pengguna tidak mempunyai kebenaran simpanan - not_connected: Tidak bersambung. Pengguna perlu log masuk ke dalam simpanan melalui %{link} berikut. + connected_no_permissions: Peranan pengguna tidak mempunyai kebenaran storan + not_connected: Tidak bersambung. Pengguna perlu log masuk ke dalam storan melalui %{link} berikut. members_no_results: Tiada ahli untuk dipaparkan. - no_results: Masih tiada lagi simpanan yang disediakan. + no_results: Masih belum ada storan yang disediakan lagi. notice_successful_storage_connection: |- - Penyimpanan berjaya disambungkan! Ingat untuk mengaktifkan modul dan penyimpanan spesifik dalam tetapan projek + Storan berjaya disambungkan! Ingat untuk mengaktifkan modul dan storan spesifik dalam tetapan projek setiap projek yang hendak digunakan. oauth_grant_nudge_modal: access_granted: Akses diberikan @@ -201,20 +206,20 @@ ms: cancel_button_label: Saya akan lakukan nanti confirm_button_aria_label: Log masuk ke %{storage} confirm_button_label: Log masuk - requesting_access_to: Meminta akses ke %{storage} + requesting_access_to: Sedang meminta akses ke %{storage} storage_ready: Anda kini bersedia untuk menggunakan %{storage} title: Satu langkah lagi... open_project_storage_modal: success: - subtitle: Anda sedang dialihkan - title: Integrasi penyediaan selesai + subtitle: Anda sedang diubahkan hala + title: Penyediaan integrasi selesai waiting: - subtitle: Sebentar ya, ini mungkin akan memerlukan sedikit masa... + subtitle: Sila tunggu sebentar, ini mungkin akan memerlukan sedikit masa... title: Kami sedang menyediakan kebenaran anda di folder projek. page_titles: file_storages: - delete: Padamkan simpanan fail - subtitle: Tambah simpanan fail luar untuk memuat naik, pautkan dan kendalikan fail di pakej kerja. + delete: Padamkan storan fail + subtitle: Tambah storan fail luaran untuk memuat naik, pautkan dan kendalikan fail di pakej kerja. managed_project_folders: subtitle: |- Biarkan OpenProject mencipta folder mengikut projek secara automatik. Ini dicadangkan kerana ia memastikan setiap ahli @@ -222,31 +227,33 @@ ms: subtitle_short: Biarkan OpenProject mencipta folder mengikut projek secara automatik. title: Folder projek yang dikendalikan secara automatik project_settings: - delete: Padamkan simpanan fail - edit: Edit simpanan fail ke projek ini - index: Simpanan fail tersedia dalam projek ini + delete: Padamkan storan fail + edit: Edit storan fail ke projek ini members_connection_status: Status sambungan ahli - new: Tambah simpanan fail ke projek ini + new: Tambah storan fail ke projek ini project_storage_members: subtitle: Semak status sambungan untuk simpanan %{storage_name_link} bagi semua ahli projek. title: Status sambungan ahli - permission_header_explanation: 'Kebenaran fail di simpanan luar hanya digunakan pada folder dan fail dalam folder projek yang dikendalikan secara automatik. Perhatikan bahawa bukan semua kebenaran fail disokong oleh semua penyedia simpanan. Sila semak dokumentasi di kebenaran simpanan failuntuk maklumat lanjut.' + permission_header_explanation: 'Kebenaran fail di storan luaran hanya digunakan pada folder dan fail dalam folder projek yang dikendalikan secara automatik. Perhatikan bahawa bukan semua kebenaran fail disokong oleh semua penyedia storan. Sila semak dokumentasi di kebenaran storan failuntuk maklumat lanjut.' provider_types: - label: Jenis provider + label: Jenis pembekal nextcloud: label_oauth_client_id: ID Pelanggan OAuth Nextcloud - label_oauth_client_secret: Pelanggan Rahsia OAuth Nextcloud + label_oauth_client_secret: Rahsia Klien OAuth Nextcloud name: Nextcloud - name_placeholder: seperti Nextcloud + name_placeholder: cth. Nextcloud one_drive: label_oauth_client_id: ID Aplikasi (pelanggan) OAuth Azure label_oauth_client_secret: Nilai Pelanggan Rahsia OAuth Azure name: OneDrive/SharePoint - name_placeholder: seperti OneDrive + name_placeholder: cth. OneDrive + show_attachments_toggle: + description: 'Menyahaktifkan pilihan ini akan sorokkan senarai lampiran di tab fail pakej kerja. Fail yang dilampirkan di deskripsi pakej kerja masih akan dimuat naik di storan lampiran dalaman.' + label: Paparkan lampiran di tab fail pakej kerja storage_list_blank_slate: - description: Tambah simpanan untuk melihatnya di sini. - heading: Anda masih belum ada sebarang simpanan. + description: Tambah storan untuk melihatnya di sini. + heading: Anda masih belum ada sebarang storan. upsale: description: |- - Mengintegrasikan OneDrive/SharePoint anda sebagai simpanan fail dengan OpenProject. Muat naik fail dan pautkan terus ke pakej kerja dalam projek. + Mengintegrasikan OneDrive/SharePoint anda sebagai storan fail dengan OpenProject. Muat naik fail dan pautkan terus ke pakej kerja dalam projek. title: Integrasi OneDrive/SharePoint diff --git a/modules/storages/config/locales/crowdin/ne.yml b/modules/storages/config/locales/crowdin/ne.yml index 6a6180a0a933..0221e1aafbb7 100644 --- a/modules/storages/config/locales/crowdin/ne.yml +++ b/modules/storages/config/locales/crowdin/ne.yml @@ -39,15 +39,20 @@ ne: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ ne: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ ne: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/nl.yml b/modules/storages/config/locales/crowdin/nl.yml index 90c1c9147c51..6bc9eedb016f 100644 --- a/modules/storages/config/locales/crowdin/nl.yml +++ b/modules/storages/config/locales/crowdin/nl.yml @@ -39,15 +39,20 @@ nl: api_v3: errors: too_many_elements_created_at_once: Te veel elementen gemaakt tegelijk. %{max} verwacht hoogstens %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatisch beheerde projectmappen permission_manage_file_links: Bestandslinks beheren permission_manage_storages_in_project: Beheer bestandsopslag in het project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: Bekijk bestandslinks - permission_write_files: 'External Storage: Write files' - project_module_storages: Bestandsopslag + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ nl: project_settings: delete: Verwijder bestandsopslag edit: Bewerk de bestandsopslag voor dit project - index: Bestandsopslag beschikbaar in dit project members_connection_status: Verbindingsstatus leden new: Voeg een bestandsopslag toe aan dit project project_storage_members: @@ -243,6 +247,9 @@ nl: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/no.yml b/modules/storages/config/locales/crowdin/no.yml index c2d2da2769a4..ea8b45cd91bf 100644 --- a/modules/storages/config/locales/crowdin/no.yml +++ b/modules/storages/config/locales/crowdin/no.yml @@ -39,15 +39,20 @@ api_v3: errors: too_many_elements_created_at_once: For mange elementer opprettet samtidig. Forventet %{max} som høyeste, fikk %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatisk administrerte prosjektmapper permission_manage_file_links: Administrer fil-linker permission_manage_storages_in_project: Administrer fillagring i prosjektet - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: Vis fil-linker - permission_write_files: 'External Storage: Write files' - project_module_storages: Fillagringer + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Fullfør uten @@ -224,7 +229,6 @@ project_settings: delete: Slett fillagring edit: Rediger fillagringen i dette prosjektet - index: Fillagringer er tilgjengelig i dette prosjektet members_connection_status: Medlemmers tilkoblingsstatus new: Legg til fillagring i dette prosjektet project_storage_members: @@ -243,6 +247,9 @@ label_oauth_client_secret: Azure OAuth klient hemmelig verdi name: OneDrive/SharePoint name_placeholder: f.eks OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Legg til lagringsplass for å se dem her. heading: Du har ingen lagringssted enda. diff --git a/modules/storages/config/locales/crowdin/pl.yml b/modules/storages/config/locales/crowdin/pl.yml index 37cb62296341..e57bc56a696f 100644 --- a/modules/storages/config/locales/crowdin/pl.yml +++ b/modules/storages/config/locales/crowdin/pl.yml @@ -39,15 +39,20 @@ pl: api_v3: errors: too_many_elements_created_at_once: Zbyt wiele elementów utworzonych jednocześnie. Oczekiwano co najwyżej %{max} , otrzymano %{actual}. - permission_create_files: 'Magazyn zewnętrzny: tworzenie plików' - permission_delete_files: 'Magazyn zewnętrzny: usuwanie plików' + external_file_storages: Zewnętrzne magazyny plików + permission_create_files: 'Automatycznie zarządzane foldery projektu: tworzenie plików' + permission_create_files_explanation: To uprawnienie jest dostępne tylko dla magazynów Nextcloud + permission_delete_files: 'Automatycznie zarządzane foldery projektu: usuwanie plików' + permission_delete_files_explanation: To uprawnienie jest dostępne tylko dla magazynów Nextcloud + permission_header_for_project_module_storages: Automatycznie zarządzane foldery projektu permission_manage_file_links: Zarządzaj linkami do plików permission_manage_storages_in_project: Zarządzaj magazynami plików w projekcie - permission_read_files: 'Magazyn zewnętrzny: odczyt plików' - permission_share_files: 'Magazyn zewnętrzny: udostępnianie plików' + permission_read_files: 'Automatycznie zarządzane foldery projektu: odczyt plików' + permission_share_files: 'Automatycznie zarządzane foldery projektu: udostępnianie plików' + permission_share_files_explanation: To uprawnienie jest dostępne tylko dla magazynów Nextcloud permission_view_file_links: Wyświetl linki do plików - permission_write_files: 'Magazyn zewnętrzny: zapis plików' - project_module_storages: Magazyny plików + permission_write_files: 'Automatycznie zarządzane foldery projektu: zapis plików' + project_module_storages: Pliki storages: buttons: complete_without_setup: Ukończ bez tego @@ -198,7 +203,7 @@ pl: access_granted_screen_reader: Dostęp przyznany. Jesteś teraz gotowy do użycia %{storage}. body: Aby uzyskać dostęp do folderu projektu, musisz zalogować się do %{storage}. cancel_button_label: Zrobię to później - confirm_button_aria_label: Zaloguj się do %{storageType} + confirm_button_aria_label: Zaloguj się do %{storage} confirm_button_label: Zaloguj się requesting_access_to: Żądanie dostępu do %{storage} storage_ready: Możesz już używać %{storage} @@ -222,13 +227,12 @@ pl: project_settings: delete: Usuń magazyn plików edit: Edytuj magazyn plików tego projektu - index: Magazyny plików dostępne w tym projekcie members_connection_status: Status połączenia członków new: Dodaj magazyn plików do tego projektu project_storage_members: subtitle: Sprawdź status połączenia magazynu %{storage_name_link} wszystkich członków projektu. title: Status połączenia członków - permission_header_explanation: 'File permissions on external storages are applied only to folders and files within automatically managed project folders. Note that not all file permissions are supported by all storage providers. Please check the documentation on file storage permissions for more information.' + permission_header_explanation: 'Uprawnienia do plików w magazynach zewnętrznych są stosowane tylko do folderów i plików w automatycznie zarządzanych folderach projektu. Pamiętaj, że niektóre uprawnienia do plików nie są obsługiwane przez niektóych dostawców magazynu. Aby uzyskać więcej informacji, zapoznaj się z dokumentacją uprawnień do przechowywania plików.' provider_types: label: Typ dostawcy nextcloud: @@ -241,6 +245,9 @@ pl: label_oauth_client_secret: Tajny klucz klienta OAuth Azure name: OneDrive/SharePoint name_placeholder: np. OneDrive + show_attachments_toggle: + description: 'Wyłączenie tej opcji spowoduje ukrycie listy załączników na karcie plików pakietów roboczych. Pliki załączone w opisie pakietu roboczego będą nadal przesyłane do wewnętrznego magazynu załączników.' + label: Pokaż załączniki na karcie plików pakietów roboczych storage_list_blank_slate: description: Dodaj magazyn, aby zobaczyć go tutaj. heading: Nie masz jeszcze żadnych magazynów. diff --git a/modules/storages/config/locales/crowdin/pt-BR.yml b/modules/storages/config/locales/crowdin/pt-BR.yml index cf67832b79fc..a75616232d5d 100644 --- a/modules/storages/config/locales/crowdin/pt-BR.yml +++ b/modules/storages/config/locales/crowdin/pt-BR.yml @@ -39,15 +39,20 @@ pt-BR: api_v3: errors: too_many_elements_created_at_once: Muitos elementos criados ao mesmo tempo. Esperado %{max} no máximo, obteve %{actual}. - permission_create_files: 'Armazenamento externo: Criar arquivos' - permission_delete_files: 'Armazenamento externo: Excluir arquivos' + external_file_storages: Armazenamentos de arquivos externos + permission_create_files: 'Pastas do projeto gerenciadas automaticamente: Criar arquivos' + permission_create_files_explanation: Esta permissão está disponível apenas para armazenamentos Nextcloud + permission_delete_files: 'Pastas do projeto gerenciadas automaticamente: Excluir arquivos' + permission_delete_files_explanation: Esta permissão está disponível apenas para armazenamentos Nextcloud + permission_header_for_project_module_storages: Pastas do projeto gerenciadas automaticamente permission_manage_file_links: Gerenciar vínculos de arquivos permission_manage_storages_in_project: Gerenciar armazenamentos de arquivos no projeto - permission_read_files: 'Armazenamento externo: Ler arquivos' - permission_share_files: 'Armazenamento externo: Compartilhar arquivos' + permission_read_files: 'Pastas do projeto gerenciadas automaticamente: Ler arquivos' + permission_share_files: 'Pastas do projeto gerenciadas automaticamente: Compartilhar arquivos' + permission_share_files_explanation: Esta permissão está disponível apenas para armazenamentos Nextcloud permission_view_file_links: Exibir vínculos de arquivos - permission_write_files: 'Armazenamento externo: Gravar arquivos' - project_module_storages: Armazenamento de arquivos + permission_write_files: 'Pastas do projeto gerenciadas automaticamente: Gravar arquivos' + project_module_storages: Arquivos storages: buttons: complete_without_setup: Concluir sem isso @@ -222,13 +227,12 @@ pt-BR: project_settings: delete: Excluir armazenamento de arquivos edit: Editar o armazenamento de arquivos para este projeto - index: Armazenamento de arquivos disponíveis neste projeto members_connection_status: Status da conexão dos membros new: Adicionar um armazenamento de arquivos a este projeto project_storage_members: subtitle: Verifique o status da conexão para o armazenamento %{storage_name_link} de todos os membros do projeto title: Status da conexão dos membros - permission_header_explanation: 'File permissions on external storages are applied only to folders and files within automatically managed project folders. Note that not all file permissions are supported by all storage providers. Please check the documentation on file storage permissions for more information.' + permission_header_explanation: 'As permissões de arquivos em armazenamentos externos são aplicadas apenas a pastas e arquivos dentro das pastas de projetos gerenciadas automaticamente. Observe que nem todas as permissões de arquivos são compatíveis com todos os provedores de armazenamento. Consulte a documentação sobre permissões de armazenamento de arquivos para mais informações.' provider_types: label: Tipo de provedor nextcloud: @@ -241,6 +245,9 @@ pt-BR: label_oauth_client_secret: Valor secreto do cliente Azure OAuth name: OneDrive/SharePoint name_placeholder: 'por ex.: OneDrive' + show_attachments_toggle: + description: 'Desativar esta opção ocultará a lista de anexos na aba Arquivos dos pacotes de trabalho. Os arquivos anexados na descrição de um pacote de trabalho ainda serão carregados no armazenamento interno de anexos. ' + label: Exibir anexos na aba arquivos de pacotes de trabalho storage_list_blank_slate: description: Adicione um armazenamento para vê-lo aqui. heading: Ainda não tem nenhum armazenamento. diff --git a/modules/storages/config/locales/crowdin/pt-PT.yml b/modules/storages/config/locales/crowdin/pt-PT.yml index 67865332b80b..d74d048a5650 100644 --- a/modules/storages/config/locales/crowdin/pt-PT.yml +++ b/modules/storages/config/locales/crowdin/pt-PT.yml @@ -39,15 +39,20 @@ pt-PT: api_v3: errors: too_many_elements_created_at_once: Demasiados elementos criados de uma só vez. Esperados %{max} no máximo, obtidos %{actual}. - permission_create_files: 'Armazenamento externo: criar ficheiros' - permission_delete_files: 'Armazenamento externo: eliminar ficheiros' + external_file_storages: Armazenamentos externos de ficheiros + permission_create_files: 'Pastas do projeto geridas automaticamente: Criar ficheiros' + permission_create_files_explanation: Esta permissão só está disponível para os armazenamentos Nextcloud + permission_delete_files: 'Pastas do projeto geridas automaticamente: Eliminar ficheiros' + permission_delete_files_explanation: Esta permissão só está disponível para os armazenamentos Nextcloud + permission_header_for_project_module_storages: Pastas do projeto geridas automaticamente permission_manage_file_links: Gerir hiperligações de ficheiro permission_manage_storages_in_project: Gerir armazenamentos de ficheiros no projeto - permission_read_files: 'Armazenamento externo: ler ficheiros' - permission_share_files: 'Armazenamento externo: partilhar ficheiros' + permission_read_files: 'Pastas do projeto geridas automaticamente: Ler ficheiros' + permission_share_files: 'Pastas do projeto geridas automaticamente: Partilhar ficheiros' + permission_share_files_explanation: Esta permissão só está disponível para os armazenamentos Nextcloud permission_view_file_links: Mostrar hiperligações de ficheiros - permission_write_files: 'Armazenamento externo: escrever ficheiros' - project_module_storages: Armazenamentos de ficheiros + permission_write_files: 'Pastas do projeto geridas automaticamente: Escrever ficheiros' + project_module_storages: Ficheiros storages: buttons: complete_without_setup: Concluir sem isso @@ -198,7 +203,7 @@ pt-PT: access_granted_screen_reader: Acesso concedido. Está agora pronto para utilizar %{storage}. body: Para ter acesso à pasta do projeto, tem de iniciar sessão em %{storage}. cancel_button_label: Farei isso mais tarde - confirm_button_aria_label: Iniciar sessão em %{storageType} + confirm_button_aria_label: Iniciar sessão em %{storage} confirm_button_label: Iniciar sessão requesting_access_to: Solicitando acesso a %{storage} storage_ready: Está pronto para utilizar %{storage} @@ -222,13 +227,12 @@ pt-PT: project_settings: delete: Eliminar armazenamento de ficheiros edit: Edite o armazenamento de ficheiros para este projeto - index: Armazenamentos de ficheiros disponíveis neste projeto members_connection_status: Estado da ligação dos membros new: Adicionar um armazenamento de ficheiros a este projeto project_storage_members: subtitle: Verifique o estado da ligação para o armazenamento %{storage_name_link} de todos os membros do projeto. title: Estado da ligação dos membros - permission_header_explanation: 'File permissions on external storages are applied only to folders and files within automatically managed project folders. Note that not all file permissions are supported by all storage providers. Please check the documentation on file storage permissions for more information.' + permission_header_explanation: 'As permissões de ficheiros em armazenamentos externos são aplicadas apenas a pastas e ficheiros dentro de pastas de projetos geridas automaticamente. Tenha em conta que nem todas as permissões de ficheiros são suportadas por todos os fornecedores de armazenamento. Para mais informações, consulte a documentação sobre permissões de armazenamento de ficheiros.' provider_types: label: Tipo de fornecedor nextcloud: @@ -241,6 +245,9 @@ pt-PT: label_oauth_client_secret: Valor Secreto do Cliente Azure OAuth name: OneDrive/SharePoint name_placeholder: p. ex., OneDrive + show_attachments_toggle: + description: 'Se desativar esta opção, irá ocultar a lista de anexos no separador de ficheiros dos pacotes de trabalho. Os ficheiros anexados na descrição de um pacote de trabalho irão continuar a ser carregados no armazenamento interno de anexos.' + label: Mostrar anexos no separador dos ficheiros dos pacotes de trabalho storage_list_blank_slate: description: Adicione um armazenamento para vê-lo aqui. heading: Ainda não tem nenhum armazenamento. diff --git a/modules/storages/config/locales/crowdin/ro.yml b/modules/storages/config/locales/crowdin/ro.yml index 0b9410cd08f5..14a9cc723e4d 100644 --- a/modules/storages/config/locales/crowdin/ro.yml +++ b/modules/storages/config/locales/crowdin/ro.yml @@ -39,15 +39,20 @@ ro: api_v3: errors: too_many_elements_created_at_once: Prea multe elemente create simultan. Se așteaptă cel mult %{max} , a luat %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Gestionează link-urile fișierelor permission_manage_storages_in_project: Gestionați stocarea fișierelor în proiect - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: Vizualizați link-urile fișierului - permission_write_files: 'External Storage: Write files' - project_module_storages: Stocuri de fișiere + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ ro: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: Stocare de fișiere disponibile în acest proiect members_connection_status: Members connection status new: Adaugă un fișier de stocare în acest proiect project_storage_members: @@ -243,6 +247,9 @@ ro: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/ru.yml b/modules/storages/config/locales/crowdin/ru.yml index f57558da10d9..7b06d896108f 100644 --- a/modules/storages/config/locales/crowdin/ru.yml +++ b/modules/storages/config/locales/crowdin/ru.yml @@ -39,15 +39,20 @@ ru: api_v3: errors: too_many_elements_created_at_once: Слишком много элементов, созданных сразу. Ожидалось %{max} максимум - получено %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: Внешние хранилища файлов + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Автоматически управляемые папки проектов permission_manage_file_links: Управление ссылками файлов permission_manage_storages_in_project: Управление файловыми хранилищами в проекте - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: Просмотр ссылок на файл - permission_write_files: 'External Storage: Write files' - project_module_storages: Файловые хранилища + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Файлы storages: buttons: complete_without_setup: Обходитесь без этого @@ -78,14 +83,14 @@ ru: error_invalid_provider_type: Пожалуйста, выберите допустимого поставщика хранилища. file_storage_view: access_management: - automatic_management: Automatically managed access and folders + automatic_management: Автоматически управляемый доступ и папки automatic_management_description: Let OpenProject create folders per project automatically and manage its user access. This is recommended as it ensures that every team member has always the correct access permissions. description: Select the type of management of user access and folder creation. We recommend to use the Automatically managed access to have a more organised structure and guarantee access to all relevant users. - manual_management: Manually managed access and folders + manual_management: Вручную управляемый доступ и папки manual_management_description: Create and manage folders per project manually on your own. You will need to manually ensure relevant users have access. - setup_incomplete: Select the type of management of user access and folder creation. - subtitle: Access management - title: Access and project folders + setup_incomplete: Выберите тип управления доступом пользователя и созданием папок. + subtitle: Управление доступом + title: Доступ и папки проекта automatically_managed_folders: Автоматически управляемые папки general_information: Информация общего характера nextcloud_oauth: Nextcloud OAuth @@ -104,12 +109,12 @@ ru: subtitle: Автоматически управляемые папки проектов title: Состояние здоровья health_email_notifications: - description_subscribed: All administrators receive health status email notifications for this storage. - description_unsubscribed: Health status email notifications for this storage have been turned off for all administrators. - error_could_not_be_saved: Email notification settings could not be saved. Please try again. + description_subscribed: Все администраторы получают уведомления о состоянии здоровья этого хранилища. + description_unsubscribed: Уведомления о состоянии здоровья этого хранилища были отключены для всех администраторов. + error_could_not_be_saved: Не удалось сохранить настройки уведомления по электронной почте. Пожалуйста, попробуйте еще раз. subscribe: Подписаться title: Уведомления по электронной почте - unsubscribe: Unsubscribe + unsubscribe: Отписаться help_texts: project_folder: Папка проекта является папкой по умолчанию для загрузки файлов для этого проекта. Тем не менее, пользователи по-прежнему могут загружать файлы в другие места. instructions: @@ -159,7 +164,7 @@ ru: label_creator: Создатель label_delete_storage: Удалить хранилище label_edit_storage: Редактировать хранилище - label_edit_storage_access_management: Edit storage access management + label_edit_storage_access_management: Редактировать управление доступом к хранилищу label_edit_storage_automatically_managed_folders: Редактирование хранилища автоматически управляемых папок label_edit_storage_host: Изменить узел хранения label_existing_manual_folder: Существующая папка с разрешениями, управляемыми вручную @@ -195,14 +200,14 @@ ru: Хранилище подключено успешно! Не забудьте активировать модуль и конкретное хранилище в настройках проекта для его дальнейшего использования. oauth_grant_nudge_modal: access_granted: Доступ предоставлен - access_granted_screen_reader: Access granted. You are now ready to use %{storage}. - body: To get access to the project folder you need to login to %{storage}. + access_granted_screen_reader: Доступ разрешен. Хранилище %{storage} готово к использованию. + body: Чтобы получить доступ к папке проекта, вам нужно войти в %{storage}. cancel_button_label: Я сделаю это позже - confirm_button_aria_label: Login to %{storage} + confirm_button_aria_label: Войти в %{storage} confirm_button_label: Входное имя - requesting_access_to: Requesting access to %{storage} + requesting_access_to: Запрос доступа к %{storage} storage_ready: Теперь вы готовы к использованию %{storage} - title: One more step... + title: Еще один шаг... open_project_storage_modal: success: subtitle: Вы будете перенаправлены @@ -222,7 +227,6 @@ ru: project_settings: delete: Удалить хранилище файлов edit: Редактировать хранилище файлов для этого проекта - index: Файловые хранилища, доступные в этом проекте members_connection_status: Статус подключения участников new: Добавить хранилище файлов в этот проект project_storage_members: @@ -241,6 +245,9 @@ ru: label_oauth_client_secret: Секретное значение клиента Azure OAuth name: OneDrive/SharePoint name_placeholder: напр. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Показывать вложения во вкладке "Файлы" пакетов работ storage_list_blank_slate: description: Добавьте хранилище, чтобы увидеть его здесь. heading: У вас пока нет хранилищ. diff --git a/modules/storages/config/locales/crowdin/rw.yml b/modules/storages/config/locales/crowdin/rw.yml index 99bf854e16b1..3e9bbde36fd2 100644 --- a/modules/storages/config/locales/crowdin/rw.yml +++ b/modules/storages/config/locales/crowdin/rw.yml @@ -39,15 +39,20 @@ rw: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ rw: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ rw: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/si.yml b/modules/storages/config/locales/crowdin/si.yml index 5fda6689ebdc..f2192e263514 100644 --- a/modules/storages/config/locales/crowdin/si.yml +++ b/modules/storages/config/locales/crowdin/si.yml @@ -39,15 +39,20 @@ si: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ si: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ si: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/sk.yml b/modules/storages/config/locales/crowdin/sk.yml index 3493b3c97e5a..322b7d18bdba 100644 --- a/modules/storages/config/locales/crowdin/sk.yml +++ b/modules/storages/config/locales/crowdin/sk.yml @@ -39,15 +39,20 @@ sk: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ sk: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ sk: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/sl.yml b/modules/storages/config/locales/crowdin/sl.yml index 0c9bee6c0189..540db1a23ff1 100644 --- a/modules/storages/config/locales/crowdin/sl.yml +++ b/modules/storages/config/locales/crowdin/sl.yml @@ -39,15 +39,20 @@ sl: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ sl: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ sl: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/sr.yml b/modules/storages/config/locales/crowdin/sr.yml index 16c6ea59e050..6e31b68ae25c 100644 --- a/modules/storages/config/locales/crowdin/sr.yml +++ b/modules/storages/config/locales/crowdin/sr.yml @@ -39,15 +39,20 @@ sr: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ sr: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ sr: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/sv.yml b/modules/storages/config/locales/crowdin/sv.yml index 4b95b0e80204..9afd43de699d 100644 --- a/modules/storages/config/locales/crowdin/sv.yml +++ b/modules/storages/config/locales/crowdin/sv.yml @@ -39,15 +39,20 @@ sv: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ sv: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ sv: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: t. ex. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/th.yml b/modules/storages/config/locales/crowdin/th.yml index 9d03030d9165..fda31e058cc4 100644 --- a/modules/storages/config/locales/crowdin/th.yml +++ b/modules/storages/config/locales/crowdin/th.yml @@ -39,15 +39,20 @@ th: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ th: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ th: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/tr.yml b/modules/storages/config/locales/crowdin/tr.yml index ec4275f396d1..ec24ffd63573 100644 --- a/modules/storages/config/locales/crowdin/tr.yml +++ b/modules/storages/config/locales/crowdin/tr.yml @@ -39,15 +39,20 @@ tr: api_v3: errors: too_many_elements_created_at_once: Aynı anda çok fazla öğe oluşturuldu. En fazla %{max} bekleniyordu, %{actual} alındı. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Dosya bağlantılarını yönet permission_manage_storages_in_project: Projedeki dosya depolarını yönetin - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: Dosya bağlantılarını görüntüle - permission_write_files: 'External Storage: Write files' - project_module_storages: Dosya depoları + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ tr: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: Bu projedeki mevcut dosya depoları members_connection_status: Members connection status new: Bu projeye bir dosya deposu ekle project_storage_members: @@ -243,6 +247,9 @@ tr: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/uk.yml b/modules/storages/config/locales/crowdin/uk.yml index fe58a3e45b7f..51957e4de92b 100644 --- a/modules/storages/config/locales/crowdin/uk.yml +++ b/modules/storages/config/locales/crowdin/uk.yml @@ -39,15 +39,20 @@ uk: api_v3: errors: too_many_elements_created_at_once: Забагато елементів, створених за раз. Очікувалося щонайбільше %{max}; отримано %{actual}. - permission_create_files: 'Зовнішнє сховище: створення файлів' - permission_delete_files: 'Зовнішнє сховище: видалення файлів' + external_file_storages: Зовнішні файлові сховища + permission_create_files: 'Папки проєкту з автоматичним керуванням: створення файлів' + permission_create_files_explanation: Цей дозвіл доступний лише для сховищ Nextcloud + permission_delete_files: 'Папки проєкту з автоматичним керуванням: видалення файлів' + permission_delete_files_explanation: Цей дозвіл доступний лише для сховищ Nextcloud + permission_header_for_project_module_storages: Папки проєкту з автоматичним керуванням permission_manage_file_links: Керування посиланнями на файл permission_manage_storages_in_project: Керування файловими сховищами в проєкті - permission_read_files: 'Зовнішнє сховище: читання файлів' - permission_share_files: 'Зовнішнє сховище: надання доступу до файлів' + permission_read_files: 'Папки проєкту з автоматичним керуванням: читання файлів' + permission_share_files: 'Папки проєкту з автоматичним керуванням: надання доступу до файлів' + permission_share_files_explanation: Цей дозвіл доступний лише для сховищ Nextcloud permission_view_file_links: Перегляд посилань на файл - permission_write_files: 'Зовнішнє сховище: записування файлів' - project_module_storages: Файлові сховища + permission_write_files: 'Папки проєкту з автоматичним керуванням: записування файлів' + project_module_storages: Файли storages: buttons: complete_without_setup: Завершити без налаштування @@ -224,13 +229,12 @@ uk: project_settings: delete: Видалити файлове сховище edit: Редагувати файлове сховище для цього проєкту - index: Файлові сховища доступні в цьому проєкті members_connection_status: Стан підключення учасників new: Додайте сховище файлів до цього проєкту project_storage_members: subtitle: Перевірте стан підключення до сховища %{storage_name_link} для всіх учасників проєкту. title: Стан підключення учасників - permission_header_explanation: 'File permissions on external storages are applied only to folders and files within automatically managed project folders. Note that not all file permissions are supported by all storage providers. Please check the documentation on file storage permissions for more information.' + permission_header_explanation: 'Дозволи на доступ до файлів у зовнішніх сховищах застосовуються лише до папок і файлів у межах папок проєкту з автоматичним керуванням. Зауважте, що деякі постачальники сховищ не підтримують дозволи на доступ до файлів. Щоб дізнатися більше, ознайомтеся з документацією щодо дозволів для файлових сховищ.' provider_types: label: Тип постачальника nextcloud: @@ -243,6 +247,9 @@ uk: label_oauth_client_secret: Значення секрету клієнта Azure OAuth name: OneDrive / SharePoint name_placeholder: напр. OneDrive + show_attachments_toggle: + description: 'Якщо вимкнути цей параметр, список вкладень буде приховано на вкладці «Файли» пакетів робіт. Файли, вкладені в опис пакета робіт, усе одно буде додано у внутрішнє сховище вкладень. ' + label: Показувати вкладення на вкладці «Файли» пакетів робіт storage_list_blank_slate: description: Додайте сховище, щоб воно з’явилося тут. heading: У вас ще немає жодного сховища. diff --git a/modules/storages/config/locales/crowdin/uz.yml b/modules/storages/config/locales/crowdin/uz.yml index f236c6b27eb2..672b50052a49 100644 --- a/modules/storages/config/locales/crowdin/uz.yml +++ b/modules/storages/config/locales/crowdin/uz.yml @@ -39,15 +39,20 @@ uz: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ uz: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ uz: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/vi.yml b/modules/storages/config/locales/crowdin/vi.yml index cd4c988511ff..3d4bc3f83d7a 100644 --- a/modules/storages/config/locales/crowdin/vi.yml +++ b/modules/storages/config/locales/crowdin/vi.yml @@ -39,15 +39,20 @@ vi: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -224,7 +229,6 @@ vi: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -243,6 +247,9 @@ vi: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/locales/crowdin/zh-CN.yml b/modules/storages/config/locales/crowdin/zh-CN.yml index 5b103df513eb..b9209f785e26 100644 --- a/modules/storages/config/locales/crowdin/zh-CN.yml +++ b/modules/storages/config/locales/crowdin/zh-CN.yml @@ -39,15 +39,20 @@ zh-CN: api_v3: errors: too_many_elements_created_at_once: 一次创建的元素过多。最多应为 %{max} 个,实际为 %{actual} 个。 - permission_create_files: '外部存储: 创建文件' - permission_delete_files: '外部存储:删除文件' + external_file_storages: 外部文件存储 + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: 自动托管项目文件夹 permission_manage_file_links: 管理文件链接 permission_manage_storages_in_project: 管理项目中的文件存储 - permission_read_files: '外部存储:读取文件' - permission_share_files: '外部存储:共享文件' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: 查看文件链接 - permission_write_files: '外部存储:写入文件' - project_module_storages: 文件存储 + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: 文件 storages: buttons: complete_without_setup: 没有它就完成 @@ -222,7 +227,6 @@ zh-CN: project_settings: delete: 删除文件存储区 edit: 编辑文件存储到此项目 - index: 文件存储在此项目中可用 members_connection_status: 成员连接状态 new: 将文件存储添加到此项目 project_storage_members: @@ -241,6 +245,9 @@ zh-CN: label_oauth_client_secret: Azure OAuth 客户端密钥值 name: OneDrive/SharePoint name_placeholder: 例如OneDrive + show_attachments_toggle: + description: '禁用此选项将会为新项目隐藏工作包文件标签上的附件列表。 工作包描述中的文件仍将上传到内部附件存储。' + label: 在工作包文件选项卡中显示附件 storage_list_blank_slate: description: 在这里添加一个存储以查看它们。 heading: 您还没有任何存储。 diff --git a/modules/storages/config/locales/crowdin/zh-TW.yml b/modules/storages/config/locales/crowdin/zh-TW.yml index e3cc9e78efa7..0c0549d45067 100644 --- a/modules/storages/config/locales/crowdin/zh-TW.yml +++ b/modules/storages/config/locales/crowdin/zh-TW.yml @@ -39,15 +39,20 @@ zh-TW: api_v3: errors: too_many_elements_created_at_once: 一次創建的元素過多。最多應為 %{max} 個,實際為 %{actual} 個。 - permission_create_files: '外部儲存空間:建立文件' - permission_delete_files: '外部儲存空間:刪除文件' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: 自動管理的專案文件夾 permission_manage_file_links: 管理文件鏈接 permission_manage_storages_in_project: 管理專案中的文件儲存 - permission_read_files: '外部儲存空間:讀取文件' - permission_share_files: '外部儲存空間:分享文件' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: 查看文件鏈接 - permission_write_files: '外部儲存空間:存取文件' - project_module_storages: 文件儲存空間 + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: 排除它完成 @@ -224,7 +229,6 @@ zh-TW: project_settings: delete: 刪除儲存區 edit: 編輯此專案中的儲存區 - index: 此專案中可用的儲存區 members_connection_status: 成員連接狀態 new: 增加一個儲存區至此專案 project_storage_members: @@ -243,6 +247,9 @@ zh-TW: label_oauth_client_secret: Azure OAuth 客戶端密鑰值 name: OneDrive/SharePoint name_placeholder: 例如 OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: 新增的儲存空間將在此顯示 heading: 目前沒有任何儲存空間 diff --git a/modules/storages/config/locales/en.yml b/modules/storages/config/locales/en.yml index b46f58e2069a..55633291aed1 100644 --- a/modules/storages/config/locales/en.yml +++ b/modules/storages/config/locales/en.yml @@ -40,15 +40,20 @@ en: api_v3: errors: too_many_elements_created_at_once: Too many elements created at once. Expected %{max} at most, got %{actual}. - permission_create_files: 'External Storage: Create files' - permission_delete_files: 'External Storage: Delete files' + external_file_storages: External file storages + permission_create_files: 'Automatically managed project folders: Create files' + permission_create_files_explanation: This permission is only available for Nextcloud storages + permission_delete_files: 'Automatically managed project folders: Delete files' + permission_delete_files_explanation: This permission is only available for Nextcloud storages + permission_header_for_project_module_storages: Automatically managed project folders permission_manage_file_links: Manage file links permission_manage_storages_in_project: Manage file storages in project - permission_read_files: 'External Storage: Read files' - permission_share_files: 'External Storage: Share files' + permission_read_files: 'Automatically managed project folders: Read files' + permission_share_files: 'Automatically managed project folders: Share files' + permission_share_files_explanation: This permission is only available for Nextcloud storages permission_view_file_links: View file links - permission_write_files: 'External Storage: Write files' - project_module_storages: File storages + permission_write_files: 'Automatically managed project folders: Write files' + project_module_storages: Files storages: buttons: complete_without_setup: Complete without it @@ -225,7 +230,6 @@ en: project_settings: delete: Delete file storage edit: Edit the file storage to this project - index: File storages available in this project members_connection_status: Members connection status new: Add a file storage to this project project_storage_members: @@ -244,6 +248,11 @@ en: label_oauth_client_secret: Azure OAuth Client Secret Value name: OneDrive/SharePoint name_placeholder: e.g. OneDrive + show_attachments_toggle: + description: 'Deactivating this option will hide the attachments list on the work packages files tab. The files attached in the description of a work package will still be uploaded in the internal attachments storage. + + ' + label: Show attachments in the work packages files tab storage_list_blank_slate: description: Add a storage to see them here. heading: You don't have any storages yet. diff --git a/modules/storages/config/routes.rb b/modules/storages/config/routes.rb index 1d4786c30fe2..30617b2ca52b 100644 --- a/modules/storages/config/routes.rb +++ b/modules/storages/config/routes.rb @@ -65,7 +65,11 @@ scope "projects/:project_id", as: "project" do namespace "settings" do - resources :project_storages, controller: "/storages/admin/project_storages", except: %i[show] do + resources :project_storages, controller: "/storages/admin/project_storages", except: %i[index show] do + collection do + get :external_file_storages + get :attachments + end member do get :oauth_access_grant # Destroy uses a get request to prompt the user before the actual DELETE request diff --git a/modules/storages/lib/api/v3/file_links/file_links_download_api.rb b/modules/storages/lib/api/v3/file_links/file_links_download_api.rb index a1a38ff38f9a..41b996b1e7b9 100644 --- a/modules/storages/lib/api/v3/file_links/file_links_download_api.rb +++ b/modules/storages/lib/api/v3/file_links/file_links_download_api.rb @@ -32,11 +32,19 @@ class API::V3::FileLinks::FileLinksDownloadAPI < API::OpenProjectAPI using Storages::Peripherals::ServiceResultRefinements helpers Storages::Peripherals::StorageErrorHelper + helpers do + def auth_strategy + Storages::Peripherals::StorageInteraction::AuthenticationStrategies::OAuthUserToken + .strategy + .with_user(User.current) + end + end + resources :download do get do Storages::Peripherals::Registry .resolve("#{@file_link.storage.short_provider_type}.queries.download_link") - .call(storage: @file_link.storage, user: User.current, file_link: @file_link) + .call(storage: @file_link.storage, auth_strategy:, file_link: @file_link) .match( on_success: ->(url) do redirect(url, body: "The requested resource can be downloaded from #{url}") diff --git a/modules/storages/lib/api/v3/storage_files/storage_files_api.rb b/modules/storages/lib/api/v3/storage_files/storage_files_api.rb index 3378e5e9f08e..e2e8689a65d3 100644 --- a/modules/storages/lib/api/v3/storage_files/storage_files_api.rb +++ b/modules/storages/lib/api/v3/storage_files/storage_files_api.rb @@ -61,9 +61,9 @@ def fetch_upload_link end def auth_strategy - Storages::Peripherals::StorageInteraction::AuthenticationStrategies::OAuthUserToken - .strategy - .with_user(current_user) + Storages::Peripherals::Registry + .resolve("#{@storage.short_provider_type}.authentication.userbound") + .call(user: current_user) end end diff --git a/modules/storages/lib/open_project/storages/engine.rb b/modules/storages/lib/open_project/storages/engine.rb index fe961c49422f..911bed0e07f3 100644 --- a/modules/storages/lib/open_project/storages/engine.rb +++ b/modules/storages/lib/open_project/storages/engine.rb @@ -126,8 +126,31 @@ def self.permissions settings: {} do # Defines permission constraints used in the module (controller, etc.) # Permissions documentation: https://www.openproject.org/docs/development/concepts/permissions/#definition-of-permissions - project_module :storages, - dependencies: :work_package_tracking do + # Independent of storages module (Disabling storages module does not revoke enabled permissions). + project_module nil, order: 100 do + permission :manage_storages_in_project, + { "storages/admin/project_storages": %i[external_file_storages + attachments + members + index + new + edit + update + create + oauth_access_grant + destroy + destroy_info + set_permissions], + "storages/project_settings/project_storage_members": %i[index] }, + permissible_on: :project, + dependencies: %i[] + OpenProject::Storages::Engine.permissions.each do |p| + permission(p, {}, permissible_on: :project, dependencies: %i[]) + end + end + + # Dependent on work_package_tracking module + project_module :work_package_tracking do permission :view_file_links, {}, permissible_on: :project, @@ -138,32 +161,33 @@ def self.permissions permissible_on: :project, dependencies: %i[view_file_links], contract_actions: { file_links: %i[manage] } - permission :manage_storages_in_project, - { "storages/admin/project_storages": %i[index members new - edit update create oauth_access_grant - destroy destroy_info set_permissions], - "storages/project_settings/project_storage_members": %i[index] }, - permissible_on: :project, - dependencies: %i[] - - OpenProject::Storages::Engine.permissions.each do |p| - permission(p, {}, permissible_on: :project, dependencies: %i[]) - end end - # Menu extensions - # Add a "storages_admin_settings" to the admin_menu with the specified link, - # condition ("if:"), caption and icon. menu :admin_menu, - :storages_admin_settings, + :files, { controller: "/storages/admin/storages", action: :index }, if: Proc.new { User.current.admin? }, caption: :project_module_storages, icon: "hosting" + menu :admin_menu, + :external_file_storages, + { controller: "/storages/admin/storages", action: :index }, + if: Proc.new { User.current.admin? }, + caption: :external_file_storages, + parent: :files + + menu :admin_menu, + :attachments, + { controller: "/admin/settings/attachments_settings", action: :show }, + if: Proc.new { User.current.admin? }, + caption: :"attributes.attachments", + parent: :files + menu :project_menu, :settings_project_storages, - { controller: "/storages/admin/project_storages", action: "index" }, + { controller: "/storages/admin/project_storages", action: "external_file_storages" }, + if: lambda { |project| User.current.allowed_in_project?(:manage_storages_in_project, project) }, caption: :project_module_storages, parent: :settings diff --git a/modules/storages/spec/common/storages/peripherals/registry_spec.rb b/modules/storages/spec/common/storages/peripherals/registry_spec.rb index 5fff3d2f780a..1c88d9aa85f4 100644 --- a/modules/storages/spec/common/storages/peripherals/registry_spec.rb +++ b/modules/storages/spec/common/storages/peripherals/registry_spec.rb @@ -209,91 +209,9 @@ it "responds with a failure and parses message from the xml response" do result = registry.resolve("nextcloud.commands.remove_user_from_group").call(storage:, user: origin_user_id) expect(result).to be_failure - expect(result.errors.log_message).to eq( - "Failed to remove user #{origin_user_id} from group OpenProject: " \ - "Not viable to remove user from the last group you are SubAdmin of" - ) - end - end - end - - describe "#create_folder_command" do - let(:folder_path) { "OpenProject/JediProject" } - - before do - stub_request(:mkcol, "https://example.com/remote.php/dav/files/OpenProject/OpenProject/JediProject") - .with( - headers: { - "Authorization" => "Basic T3BlblByb2plY3Q6T3BlblByb2plY3RTZWN1cmVQYXNzd29yZA==" - } - ) - .to_return(expected_response) - end - - context "when folder does not exist yet" do - let(:expected_response) do - { - status: 201, - body: "", - headers: {} - } - end - - it "creates a folder and responds with a success" do - result = registry.resolve("nextcloud.commands.create_folder").call(storage:, folder_path:) - expect(result).to be_success - expect(result.message).to eq("Folder was successfully created.") - end - end - - context "when folder exists already" do - let(:expected_response_body) do - <<~XML - - - Sabre\\DAV\\Exception\\MethodNotAllowed - The resource you tried to create already exists - - XML - end - let(:expected_response) do - { - status: 405, - body: expected_response_body, - headers: {} - } - end - - it "does not create a folder and responds with a success" do - result = registry.resolve("nextcloud.commands.create_folder").call(storage:, folder_path:) - expect(result).to be_success - expect(result.message).to eq("Folder already exists.") - end - end - - context "when parent folder is missing for any reason" do - let(:expected_response_body) do - <<~XML - - - Sabre\\DAV\\Exception\\Conflict - Parent node does not exist - - XML - end - let(:expected_response) do - { - status: 409, - body: expected_response_body, - headers: {} - } - end - - it "does not create a folder and responds with a failure" do - result = registry.resolve("nextcloud.commands.create_folder").call(storage:, folder_path:) - expect(result).to be_failure - expect(result.result).to eq(:conflict) - expect(result.errors.log_message).to eq("Parent node does not exist") + expect(result.errors.log_message) + .to eq("Failed to remove user #{origin_user_id} from group OpenProject: " \ + "Not viable to remove user from the last group you are SubAdmin of") end end end @@ -568,8 +486,9 @@ shared_examples "a file_ids_query response" do it "responds with a list of paths and attributes for each of them" do - result = registry.resolve("nextcloud.queries.file_ids").call(storage:, path: "OpenProject") - .result + result = registry.resolve("nextcloud.queries.file_ids") + .call(storage:, path: "OpenProject") + .result expect(result).to eq({ "OpenProject/" => { "fileid" => "349" }, "OpenProject/Project #2/" => { "fileid" => "381" }, "OpenProject/Project#1/" => { "fileid" => "773" }, @@ -610,6 +529,8 @@ end describe "#delete_folder_command" do + let(:auth_strategy) { Storages::Peripherals::StorageInteraction::AuthenticationStrategies::BasicAuth.strategy } + before do stub_request(:delete, "https://example.com/remote.php/dav/files/OpenProject/OpenProject/Folder%201") .with(headers: { "Authorization" => "Basic T3BlblByb2plY3Q6T3BlblByb2plY3RTZWN1cmVQYXNzd29yZA==" }) @@ -618,7 +539,8 @@ describe "with Nextcloud storage type selected" do it "deletes the folder" do - result = registry.resolve("nextcloud.commands.delete_folder").call(storage:, location: "OpenProject/Folder 1") + result = registry.resolve("nextcloud.commands.delete_folder") + .call(storage:, auth_strategy:, location: "OpenProject/Folder 1") expect(result).to be_success end end diff --git a/modules/storages/spec/common/storages/peripherals/storage_interaction/nextcloud/copy_template_folder_command_spec.rb b/modules/storages/spec/common/storages/peripherals/storage_interaction/nextcloud/copy_template_folder_command_spec.rb index eae9d44e0a41..ae17be709bcf 100644 --- a/modules/storages/spec/common/storages/peripherals/storage_interaction/nextcloud/copy_template_folder_command_spec.rb +++ b/modules/storages/spec/common/storages/peripherals/storage_interaction/nextcloud/copy_template_folder_command_spec.rb @@ -28,54 +28,54 @@ # See COPYRIGHT and LICENSE files for more details. #++ -require 'spec_helper' +require "spec_helper" require_module_spec_helper RSpec.describe Storages::Peripherals::StorageInteraction::Nextcloud::CopyTemplateFolderCommand, :webmock do using Storages::Peripherals::ServiceResultRefinements let(:user) { create(:user) } - let(:url) { 'https://example.com' } - let(:origin_user_id) { 'OpenProject' } - let(:storage) { build(:nextcloud_storage, :as_automatically_managed, host: url, password: 'OpenProjectSecurePassword') } + let(:url) { "https://example.com" } + let(:origin_user_id) { "OpenProject" } + let(:storage) { build(:nextcloud_storage, :as_automatically_managed, host: url, password: "OpenProjectSecurePassword") } - let(:source_path) { 'source-of-fun' } - let(:destination_path) { 'boring-destination' } + let(:source_path) { "source-of-fun" } + let(:destination_path) { "boring-destination" } let(:source_url) { "#{url}/remote.php/dav/files/#{CGI.escape(origin_user_id)}/#{source_path}" } let(:destination_url) { "#{url}/remote.php/dav/files/#{CGI.escape(origin_user_id)}/#{destination_path}" } subject { described_class.new(storage) } - describe '#call' do + describe "#call" do before { stub_request(:head, destination_url).to_return(status: 404) } - describe 'parameter validation' do - it 'source_path cannot be blank' do - result = subject.call(source_path: '', destination_path: 'destination') + describe "parameter validation" do + it "source_path cannot be blank" do + result = subject.call(source_path: "", destination_path: "destination") expect(result).to be_failure - expect(result.errors.log_message).to eq('Source and destination paths must be present.') + expect(result.errors.log_message).to eq("Source and destination paths must be present.") end - it 'destination_path cannot blank' do - result = subject.call(source_path: 'source', destination_path: '') + it "destination_path cannot blank" do + result = subject.call(source_path: "source", destination_path: "") expect(result).to be_failure - expect(result.errors.log_message).to eq('Source and destination paths must be present.') + expect(result.errors.log_message).to eq("Source and destination paths must be present.") end end - describe 'remote server overwrite protection' do - it 'destination_path must not exist on the remote server' do + describe "remote server overwrite protection" do + it "destination_path must not exist on the remote server" do stub_request(:head, destination_url).to_return(status: 200) result = subject.call(source_path:, destination_path:) expect(result).to be_failure - expect(result.errors.log_message).to eq('Destination folder already exists.') + expect(result.errors.log_message).to eq("Destination folder already exists.") end end - context 'when the folder is copied successfully' do + context "when the folder is copied successfully" do let(:successful_propfind) do <<~XML @@ -111,15 +111,15 @@ stub_request(:propfind, destination_url).to_return(status: 200, body: successful_propfind) end - it 'must be successful' do + it "must be successful" do result = subject.call(source_path:, destination_path:) expect(result).to be_success - expect(result.result.id).to eq('349') + expect(result.result.id).to eq("349") end end - describe 'error handling' do + describe "error handling" do before do body = <<~XML @@ -130,10 +130,10 @@ The destination node is not found XML - stub_request(:copy, source_url).to_return(status: 409, body:) + stub_request(:copy, source_url).to_return(status: 409, body:, headers: { "Content-Type" => "application/xml" }) end - it 'returns a :conflict failure if the copy fails' do + it "returns a :conflict failure if the copy fails" do result = subject.call(source_path:, destination_path:) expect(result).to be_failure diff --git a/modules/storages/spec/common/storages/peripherals/storage_interaction/nextcloud/create_folder_command_spec.rb b/modules/storages/spec/common/storages/peripherals/storage_interaction/nextcloud/create_folder_command_spec.rb new file mode 100644 index 000000000000..f656881dc248 --- /dev/null +++ b/modules/storages/spec/common/storages/peripherals/storage_interaction/nextcloud/create_folder_command_spec.rb @@ -0,0 +1,84 @@ +# frozen_string_literal: true + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +require "spec_helper" +require_module_spec_helper + +RSpec.describe Storages::Peripherals::StorageInteraction::Nextcloud::CreateFolderCommand, :webmock do + let(:user) { create(:user) } + let(:storage) do + create(:nextcloud_storage_with_local_connection, :as_not_automatically_managed, oauth_client_token_user: user) + end + let(:auth_strategy) do + Storages::Peripherals::StorageInteraction::AuthenticationStrategies::OAuthUserToken.strategy.with_user(user) + end + + it_behaves_like "create_folder_command: basic command setup" + + context "when creating a folder in the root", vcr: "nextcloud/create_folder_root" do + let(:folder_name) { "Földer CreatedBy Çommand" } + let(:parent_location) { Storages::Peripherals::ParentFolder.new("/") } + let(:path) { "/#{folder_name}" } + + it_behaves_like "create_folder_command: successful folder creation" + end + + context "when creating a folder in a parent folder", vcr: "nextcloud/create_folder_parent" do + let(:folder_name) { "Földer CreatedBy Çommand" } + let(:parent_location) { Storages::Peripherals::ParentFolder.new("/Folder") } + let(:path) { "/Folder/#{folder_name}" } + + it_behaves_like "create_folder_command: successful folder creation" + end + + context "when creating a folder in a non-existing parent folder", vcr: "nextcloud/create_folder_parent_not_found" do + let(:folder_name) { "New Folder" } + let(:parent_location) { Storages::Peripherals::ParentFolder.new("/DeathStar3") } + let(:error_source) { described_class } + + it_behaves_like "create_folder_command: parent not found" + end + + context "when folder already exists", vcr: "nextcloud/create_folder_already_exists" do + let(:folder_name) { "Folder" } + let(:parent_location) { Storages::Peripherals::ParentFolder.new("/") } + let(:error_source) { described_class } + + it_behaves_like "create_folder_command: folder already exists" + end + + private + + def delete_created_folder(folder) + Storages::Peripherals::Registry + .resolve("nextcloud.commands.delete_folder") + .call(storage:, auth_strategy:, location: folder.location) + end +end diff --git a/modules/storages/spec/common/storages/peripherals/storage_interaction/nextcloud/delete_folder_command_spec.rb b/modules/storages/spec/common/storages/peripherals/storage_interaction/nextcloud/delete_folder_command_spec.rb new file mode 100644 index 000000000000..3627209dcf9a --- /dev/null +++ b/modules/storages/spec/common/storages/peripherals/storage_interaction/nextcloud/delete_folder_command_spec.rb @@ -0,0 +1,86 @@ +# frozen_string_literal: true + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +require "spec_helper" +require_module_spec_helper + +RSpec.describe Storages::Peripherals::StorageInteraction::Nextcloud::DeleteFolderCommand, :vcr, :webmock do + using Storages::Peripherals::ServiceResultRefinements + + let(:user) { create(:user) } + let(:storage) do + create(:nextcloud_storage_with_local_connection, :as_not_automatically_managed, oauth_client_token_user: user) + end + let(:auth_strategy) do + Storages::Peripherals::StorageInteraction::AuthenticationStrategies::OAuthUserToken.strategy.with_user(user) + end + + it "is registered as commands.nextcloud.delete_folder" do + expect(Storages::Peripherals::Registry.resolve("nextcloud.commands.delete_folder")).to eq(described_class) + end + + describe "#call" do + it "responds with correct parameters" do + expect(described_class).to respond_to(:call) + + method = described_class.method(:call) + expect(method.parameters).to contain_exactly(%i[keyreq storage], + %i[keyreq auth_strategy], + %i[keyreq location]) + end + + it "deletes a folder", vcr: "nextcloud/delete_folder" do + parent_location = Storages::Peripherals::ParentFolder.new("/") + + Storages::Peripherals::Registry + .resolve("nextcloud.commands.create_folder") + .call(storage:, auth_strategy:, folder_name: "To Be Deleted Soon", parent_location:) + + result = described_class.call(storage:, auth_strategy:, location: "/To Be Deleted Soon") + + expect(result).to be_success + end + + context "if folder does not exist" do + it "returns a failure", vcr: "nextcloud/delete_folder_not_found" do + result = described_class.call(storage:, auth_strategy:, location: "/IDoNotExist") + + expect(result).to be_failure + expect(result.error_source) + .to be(Storages::Peripherals::StorageInteraction::Nextcloud::Internal::DeleteEntityCommand) + + result.match( + on_failure: ->(error) { expect(error.code).to eq(:not_found) }, + on_success: ->(response) { fail "Expected failure, got #{response}" } + ) + end + end + end +end diff --git a/modules/storages/spec/common/storages/peripherals/storage_interaction/nextcloud/download_link_query_spec.rb b/modules/storages/spec/common/storages/peripherals/storage_interaction/nextcloud/download_link_query_spec.rb index 54483ce61856..8caa36d8bf2c 100644 --- a/modules/storages/spec/common/storages/peripherals/storage_interaction/nextcloud/download_link_query_spec.rb +++ b/modules/storages/spec/common/storages/peripherals/storage_interaction/nextcloud/download_link_query_spec.rb @@ -31,82 +31,74 @@ require "spec_helper" require_module_spec_helper -RSpec.describe Storages::Peripherals::StorageInteraction::Nextcloud::DownloadLinkQuery, :webmock, - skip: "TODO: disabled because it's flaky on dev currently. Needs to be reenabled before merging" do - let(:file_link) { create(:file_link) } - let(:download_token) { "8dM3dC9iy1N74F5AJ0ClnjSF4dWTxfymVy1HTXBh8rbZVM81CpcBJaIYZvmR" } - let(:uri) do - "#{url}/index.php/apps/integration_openproject/direct/#{download_token}/#{CGI.escape(file_link.origin_name)}" +RSpec.describe Storages::Peripherals::StorageInteraction::Nextcloud::DownloadLinkQuery, :webmock do + using Storages::Peripherals::ServiceResultRefinements + + let(:user) { create(:user) } + let(:storage) do + create(:nextcloud_storage_with_local_connection, :as_not_automatically_managed, oauth_client_token_user: user) end - let(:json) do - { - ocs: { - meta: { - status: "ok", - statuscode: 200, - message: "OK" - }, - data: { - url: "https://example.com/remote.php/direct/#{download_token}" - } - } - }.to_json + let(:auth_strategy) do + Storages::Peripherals::StorageInteraction::AuthenticationStrategies::OAuthUserToken.strategy.with_user(user) end - let(:url) { storage.host } - let(:storage) { create(:nextcloud_storage, :with_oauth_client) } - let(:user) { create(:user) } - let(:token) { create(:oauth_client_token, user:, oauth_client: storage.oauth_client) } + let(:file_link) { create(:file_link, origin_id: "182") } + let(:not_existent_file_link) { create(:file_link, origin_id: "DeathStarNumberThree") } - before do - allow(Storages::Peripherals::StorageInteraction::Nextcloud::Util).to receive(:token).and_yield(token) + subject { described_class.new(storage) } - stub_request(:post, "#{url}/ocs/v2.php/apps/dav/api/v1/direct").to_return(status: 200, body: json, headers: {}) - end + describe "#call" do + it "responds with correct parameters" do + expect(described_class).to respond_to(:call) - it "must return a download link URL" do - result = described_class.call(storage:, user:, file_link:) - expect(result).to be_success - expect(result.result).to eql(uri) - end + method = described_class.method(:call) + expect(method.parameters).to contain_exactly(%i[keyreq storage], %i[keyreq auth_strategy], %i[keyreq file_link]) + end - context "if Nextcloud is running on a sub path" do - let(:storage) { create(:nextcloud_storage, :with_oauth_client, host: "https://example.com/html") } + context "without outbound request involved" do + context "with nil" do + it "returns an error" do + result = subject.call(auth_strategy:, file_link: nil) - it "must return a download link URL" do - result = described_class.call(storage:, user:, file_link:) - expect(result).to be_success - expect(result.result).to eql(uri) + expect(result).to be_failure + expect(result.error_source).to eq(described_class) + expect(result.result).to eq(:error) + end + end end - end - describe "with outbound request returning 200 and an empty body" do - before do - stub_request(:post, "#{url}/ocs/v2.php/apps/dav/api/v1/direct").to_return(status: 200, body: "") - end + context "with outbound request successful" do + it "returns a result with a download url", vcr: "nextcloud/download_link_query_success" do + download_link = subject.call(auth_strategy:, file_link:) - it "must return :unauthorized ServiceResult" do - result = described_class.call(user:, file_link:, storage:) - expect(result).to be_failure - expect(result.errors.code).to be(:unauthorized) - end - end + expect(download_link).to be_success - shared_examples_for "outbound is failing" do |code = 500, symbol = :error| - describe "with outbound request returning #{code}" do - before do - stub_request(:post, "#{url}/ocs/v2.php/apps/dav/api/v1/direct").to_return(status: code) + uri = URI(download_link.result) + expect(uri.host).to eq("nextcloud.local") + expect(uri.path) + .to match(/index.php\/apps\/integration_openproject\/direct\/[0-9a-zA-Z]+\/#{file_link.origin_name}/) end - it "must return :#{symbol} ServiceResult" do - result = described_class.call(user:, file_link:, storage:) - expect(result).to be_failure - expect(result.errors.code).to eq(symbol) + it "returns an error if the file is not found", vcr: "nextcloud/download_link_query_not_found" do + download_link = subject.call(auth_strategy:, file_link: not_existent_file_link) + + expect(download_link).to be_failure + expect(download_link.error_source).to eq(described_class) + expect(download_link.result).to eq(:not_found) end end - end - include_examples "outbound is failing", 404, :not_found - include_examples "outbound is failing", 401, :unauthorized - include_examples "outbound is failing", 500, :error + context "with outbound request returning 200 and an empty body" do + it "refreshes the token and returns success", vcr: "nextcloud/download_link_query_unauthorized" do + download_link = subject.call(auth_strategy:, file_link:) + + expect(download_link).to be_success + + uri = URI(download_link.result) + expect(uri.host).to eq("nextcloud.local") + expect(uri.path) + .to match(/index.php\/apps\/integration_openproject\/direct\/[0-9a-zA-Z]+\/#{file_link.origin_name}/) + end + end + end end diff --git a/modules/storages/spec/common/storages/peripherals/storage_interaction/nextcloud/file_path_to_id_map_query_spec.rb b/modules/storages/spec/common/storages/peripherals/storage_interaction/nextcloud/file_path_to_id_map_query_spec.rb new file mode 100644 index 000000000000..e0a5ad64fd5c --- /dev/null +++ b/modules/storages/spec/common/storages/peripherals/storage_interaction/nextcloud/file_path_to_id_map_query_spec.rb @@ -0,0 +1,88 @@ +# frozen_string_literal: true + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +require "spec_helper" +require_module_spec_helper + +RSpec.describe Storages::Peripherals::StorageInteraction::Nextcloud::FilePathToIdMapQuery, :webmock do + let(:user) { create(:user) } + let(:storage) do + create(:nextcloud_storage_with_local_connection, :as_not_automatically_managed, oauth_client_token_user: user) + end + let(:auth_strategy) do + Storages::Peripherals::StorageInteraction::AuthenticationStrategies::OAuthUserToken.strategy.with_user(user) + end + + it_behaves_like "file_path_to_id_map_query: basic query setup" + + context "with parent folder being root", vcr: "nextcloud/file_path_to_id_map_query_root" do + let(:folder) { Storages::Peripherals::ParentFolder.new("/") } + let(:expected_ids) do + { + "/" => "2", + "/Folder with spaces" => "165", + "/Folder with spaces/New Requests" => "166", + "/Folder with spaces/New Requests/request_001.md" => "167", + "/Folder with spaces/New Requests/request_002.md" => "168", + "/Folder" => "169", + "/Folder/android-studio-2021.3.1.17-linux.tar.gz" => "267", + "/Folder/empty" => "172", + "/Folder/Ümlæûts" => "350", + "/Folder/Ümlæûts/Anrüchiges deutsches Dokument.docx" => "351", + "/Practical_guide_to_BAGGM_Digital.pdf" => "295", + "/Readme.md" => "268" + } + end + + it_behaves_like "file_path_to_id_map_query: successful query" + end + + context "with a given parent folder", vcr: "nextcloud/file_path_to_id_map_query_parent_folder" do + let(:folder) { Storages::Peripherals::ParentFolder.new("/Folder") } + let(:expected_ids) do + { + "/Folder" => "169", + "/Folder/android-studio-2021.3.1.17-linux.tar.gz" => "267", + "/Folder/empty" => "172", + "/Folder/Ümlæûts" => "350", + "/Folder/Ümlæûts/Anrüchiges deutsches Dokument.docx" => "351" + } + end + + it_behaves_like "file_path_to_id_map_query: successful query" + end + + context "with not existent parent folder", vcr: "nextcloud/file_path_to_id_map_query_invalid_parent" do + let(:folder) { Storages::Peripherals::ParentFolder.new("/I/just/made/that/up") } + let(:error_source) { Storages::Peripherals::StorageInteraction::Nextcloud::Internal::PropfindQuery } + + it_behaves_like "file_path_to_id_map_query: not found" + end +end diff --git a/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/copy_template_folder_command_spec.rb b/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/copy_template_folder_command_spec.rb index ad0739670017..a05ec40e2b4a 100644 --- a/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/copy_template_folder_command_spec.rb +++ b/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/copy_template_folder_command_spec.rb @@ -28,7 +28,7 @@ # See COPYRIGHT and LICENSE files for more details. #++ -require 'spec_helper' +require "spec_helper" require_module_spec_helper RSpec.describe Storages::Peripherals::StorageInteraction::OneDrive::CopyTemplateFolderCommand, :webmock do @@ -36,63 +36,63 @@ shared_let(:original_folders) do WebMock.enable! && VCR.turn_on! - VCR.use_cassette('one_drive/copy_template_folder_existing_folders') { existing_folder_tuples } + VCR.use_cassette("one_drive/copy_template_folder_existing_folders") { existing_folder_tuples } ensure VCR.turn_off! && WebMock.disable! end shared_let(:base_template_folder) do WebMock.enable! && VCR.turn_on! - VCR.use_cassette('one_drive/copy_template_folder_base_folder') { create_base_folder } + VCR.use_cassette("one_drive/copy_template_folder_base_folder") { create_base_folder } ensure VCR.turn_off! && WebMock.disable! end shared_let(:source_path) { base_template_folder.id } - it 'is registered under commands.one_drive.copy_template_folder', - skip: 'Skipped while we decide on what to do with the copy project folder' do - expect(Storages::Peripherals::Registry.resolve('one_drive.commands.copy_template_folder')).to eq(described_class) + it "is registered under commands.one_drive.copy_template_folder", + skip: "Skipped while we decide on what to do with the copy project folder" do + expect(Storages::Peripherals::Registry.resolve("one_drive.commands.copy_template_folder")).to eq(described_class) end - it 'responds to .call' do + it "responds to .call" do expect(described_class).to respond_to(:call) end - it '.call takes 3 required parameters: storage, source_path, destination_path' do + it ".call takes 3 required parameters: storage, source_path, destination_path" do method = described_class.method(:call) expect(method.parameters).to contain_exactly(%i[keyreq storage], %i[keyreq source_path], %i[keyreq destination_path]) end it "destination_path and source_path can't be empty" do - missing_source = described_class.call(storage:, source_path: '', destination_path: 'Path') - missing_path = described_class.call(storage:, source_path: 'Path', destination_path: nil) - missing_both = described_class.call(storage:, source_path: nil, destination_path: '') + missing_source = described_class.call(storage:, source_path: "", destination_path: "Path") + missing_path = described_class.call(storage:, source_path: "Path", destination_path: nil) + missing_both = described_class.call(storage:, source_path: nil, destination_path: "") expect([missing_both, missing_path, missing_source]).to all(be_failure) end - describe '#call' do + describe "#call" do # rubocop:disable RSpec/BeforeAfterAll before(:all) do WebMock.enable! && VCR.turn_on! - VCR.use_cassette('one_drive/copy_template_folder_setup') { setup_template_folder } + VCR.use_cassette("one_drive/copy_template_folder_setup") { setup_template_folder } ensure VCR.turn_off! && WebMock.disable! end after(:all) do WebMock.enable! && VCR.turn_on! - VCR.use_cassette('one_drive/copy_template_folder_teardown') { delete_template_folder } + VCR.use_cassette("one_drive/copy_template_folder_teardown") { delete_template_folder } ensure VCR.turn_off! && WebMock.disable! end # rubocop:enable RSpec/BeforeAfterAll - it 'copies origin folder and all underlying files and folders to the destination_path', - vcr: 'one_drive/copy_template_folder_copy_successful' do - command_result = described_class.call(storage:, source_path:, destination_path: 'My New Folder') + it "copies origin folder and all underlying files and folders to the destination_path", + vcr: "one_drive/copy_template_folder_copy_successful" do + command_result = described_class.call(storage:, source_path:, destination_path: "My New Folder") expect(command_result).to be_success expect(command_result.result.requires_polling?).to be_truthy @@ -101,39 +101,39 @@ delete_copied_folder(command_result.result.polling_url) end - describe 'error handling' do - context 'when the source_path does not exist' do - it 'fails', vcr: 'one_drive/copy_template_source_not_found' do - result = described_class.call(storage:, source_path: 'TheCakeIsALie', destination_path: 'Not Happening') + describe "error handling" do + context "when the source_path does not exist" do + it "fails", vcr: "one_drive/copy_template_source_not_found" do + result = described_class.call(storage:, source_path: "TheCakeIsALie", destination_path: "Not Happening") expect(result).to be_failure end - it 'explains the nature of the error', vcr: 'one_drive/copy_template_source_not_found' do - result = described_class.call(storage:, source_path: 'TheCakeIsALie', destination_path: 'Not Happening') + it "explains the nature of the error", vcr: "one_drive/copy_template_source_not_found" do + result = described_class.call(storage:, source_path: "TheCakeIsALie", destination_path: "Not Happening") - expect(result.message).to eq('Template folder not found') + expect(result.message).to eq("Template folder not found") end - it 'logs the occurrence' + it "logs the occurrence" end - context 'when it would overwrite an already existing folder' do - it 'fails', vcr: 'one_drive/copy_template_folder_no_overwrite' do + context "when it would overwrite an already existing folder" do + it "fails", vcr: "one_drive/copy_template_folder_no_overwrite" do existing_folder = original_folders.first[:name] result = described_class.call(storage:, source_path:, destination_path: existing_folder) expect(result).to be_failure end - it 'explains the nature of the error', vcr: 'one_drive/copy_template_folder_no_overwrite' do + it "explains the nature of the error", vcr: "one_drive/copy_template_folder_no_overwrite" do existing_folder = original_folders.first[:name] result = described_class.call(storage:, source_path:, destination_path: existing_folder) - expect(result.message).to eq('The copy would overwrite an already existing folder') + expect(result.message).to eq("The copy would overwrite an already existing folder") end - it 'logs the occurrence' + it "logs the occurrence" end end end @@ -142,41 +142,44 @@ def create_base_folder Storages::Peripherals::Registry - .resolve('one_drive.commands.create_folder') - .call(storage:, folder_path: 'Test Template Folder') + .resolve("one_drive.commands.create_folder") + .call(storage:, + auth_strategy:, + folder_name: "Test Template Folder", + parent_location: Storages::Peripherals::ParentFolder.new("/")) .result end def setup_template_folder raise if source_path.nil? + parent_location = Storages::Peripherals::ParentFolder.new(source_path) + command = Storages::Peripherals::Registry - .resolve('one_drive.commands.create_folder').new(storage) - command.call(folder_path: 'Empty Subfolder', parent_location: source_path) + .resolve("one_drive.commands.create_folder").new(storage) + command.call(auth_strategy:, folder_name: "Empty Subfolder", parent_location:) - subfolder = command.call(folder_path: 'Subfolder with File', parent_location: source_path).result - file_name = 'files_query_root.yml' + subfolder = command.call(auth_strategy:, folder_name: "Subfolder with File", parent_location:).result + file_name = "files_query_root.yml" token = OAuthClientToken.last upload_link = Storages::Peripherals::Registry - .resolve('one_drive.queries.upload_link') - .call(storage:, user: token.user, data: { 'parent' => subfolder.id, 'file_name' => file_name }) - .result - - path = Rails.root.join('modules/storages/spec/support/fixtures/vcr_cassettes/one_drive', file_name) - File.open(path, 'rb') do |file_handle| - HTTPX.with(headers: { - content_length: file_handle.size, - 'Content-Range' => "bytes 0-#{file_handle.size - 1}/#{file_handle.size}" - }) + .resolve("one_drive.queries.upload_link") + .call(storage:, user: token.user, data: { "parent" => subfolder.id, "file_name" => file_name }) + .result + + path = Rails.root.join("modules/storages/spec/support/fixtures/vcr_cassettes/one_drive", file_name) + File.open(path, "rb") do |file_handle| + HTTPX.with(headers: { content_length: file_handle.size, + "Content-Range" => "bytes 0-#{file_handle.size - 1}/#{file_handle.size}" }) .put(upload_link.destination, body: file_handle.read).raise_for_status end end def delete_template_folder Storages::Peripherals::Registry - .resolve('one_drive.commands.delete_folder') - .call(storage:, location: base_template_folder.id) + .resolve("one_drive.commands.delete_folder") + .call(storage:, auth_strategy:, location: base_template_folder.id) end def existing_folder_tuples @@ -197,7 +200,11 @@ def delete_copied_folder(url) location = match_data[:item_id] Storages::Peripherals::Registry - .resolve('one_drive.commands.delete_folder') - .call(storage:, location:) + .resolve("one_drive.commands.delete_folder") + .call(storage:, auth_strategy:, location:) + end + + def auth_strategy + Storages::Peripherals::StorageInteraction::AuthenticationStrategies::OAuthClientCredentials.strategy end end diff --git a/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/create_folder_command_spec.rb b/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/create_folder_command_spec.rb index 3fd3486cbdb4..d96b8e27b2ad 100644 --- a/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/create_folder_command_spec.rb +++ b/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/create_folder_command_spec.rb @@ -31,97 +31,51 @@ require "spec_helper" require_module_spec_helper -RSpec.describe Storages::Peripherals::StorageInteraction::OneDrive::CreateFolderCommand, :vcr, :webmock, - skip: "TODO: disabled because it's flaky on dev currently. Needs to be reenabled before merging" do - shared_let(:storage) { create(:sharepoint_dev_drive_storage) } - - let(:delete_command) { Storages::Peripherals::Registry.resolve("one_drive.commands.delete_folder") } - let(:folder_path) { "Földer CreatedBy Çommand" } - - shared_let(:original_ids) do - WebMock.enable! && VCR.turn_on! - VCR.use_cassette("one_drive/create_folder_setup") { original_files } - ensure - VCR.turn_off! && WebMock.disable! +RSpec.describe Storages::Peripherals::StorageInteraction::OneDrive::CreateFolderCommand, :webmock do + let(:storage) { create(:sharepoint_dev_drive_storage) } + let(:auth_strategy) do + Storages::Peripherals::StorageInteraction::AuthenticationStrategies::OAuthClientCredentials.strategy end - it "responds to .call with correct parameters" do - expect(described_class).to respond_to(:call) + it_behaves_like "create_folder_command: basic command setup" - method = described_class.method(:call) - expect(method.parameters).to contain_exactly(%i[keyreq storage], %i[keyreq folder_path]) - end + context "when creating a folder in the root", vcr: "one_drive/create_folder_root" do + let(:folder_name) { "Földer CreatedBy Çommand" } + let(:parent_location) { Storages::Peripherals::ParentFolder.new("/") } + let(:path) { "/#{folder_name}" } - it "is registered as create_folder" do - expect(Storages::Peripherals::Registry.resolve("one_drive.commands.create_folder")).to eq(described_class) + it_behaves_like "create_folder_command: successful folder creation" end - it "creates a folder and responds with a success", vcr: "one_drive/create_folder_base" do - result = described_class.call(storage:, folder_path:) - expect(result).to be_success - expect(result.message).to eq("Folder was successfully created.") + context "when creating a folder in a parent folder", vcr: "one_drive/create_folder_parent" do + let(:folder_name) { "Földer CreatedBy Çommand" } + let(:parent_location) { Storages::Peripherals::ParentFolder.new("01AZJL5PKU2WV3U3RKKFF2A7ZCWVBXRTEU") } + let(:path) { "/Folder with spaces/#{folder_name}" } - expect(result.result.name).to eq(folder_path) - ensure - delete_created_files + it_behaves_like "create_folder_command: successful folder creation" end - it "creates a sub folder", vcr: "one_drive/create_folder_sub_folder" do - folder = described_class.call(storage:, folder_path:).result - sub_folder = described_class.new(storage).call(folder_path: "Another Folder", parent_location: folder.id).result + context "when creating a folder in a non-existing parent folder", vcr: "one_drive/create_folder_parent_not_found" do + let(:folder_name) { "Földer CreatedBy Çommand" } + let(:parent_location) { Storages::Peripherals::ParentFolder.new("01AZJL5PKU2WV3U3RKKFF4A7ZCWVBXRTEU") } + let(:error_source) { described_class } - expect(sub_folder.name).to eq("Another Folder") - expect(sub_folder.location).to eq("/#{folder_path}/Another Folder") - ensure - delete_created_files + it_behaves_like "create_folder_command: parent not found" end - context "when the folder already exists", vcr: "one_drive/create_folder_already_exists" do - it "returns a failure" do - described_class.call(storage:, folder_path:) + context "when folder already exists", vcr: "one_drive/create_folder_already_exists" do + let(:folder_name) { "Folder" } + let(:parent_location) { Storages::Peripherals::ParentFolder.new("/") } + let(:error_source) { described_class } - result = described_class.call(storage:, folder_path:) - expect(result).to be_failure - expect(result.errors.code).to eq(:conflict) - - error_data = result.errors.data - expect(error_data.payload.status).to eq(409) - expect(error_data.payload.json.dig("error", "code")).to match /nameAlreadyExists/ - ensure - delete_created_files - end + it_behaves_like "create_folder_command: folder already exists" end private - def find_folder(folder_name, parent = nil) - Storages::Peripherals::StorageInteraction::OneDrive::Util.using_admin_token(storage) do |http| - uri = if parent.nil? - "/v1.0/drives/#{storage.drive_id}/root/children" - else - "/v1.0/drives/#{storage.drive_id}/items/#{parent[:id]}/children" - end - - response = http.get(uri) - - response.json(symbolize_keys: true).fetch(:value, []).find { |item| item[:name] == folder_name } - end - end - - def original_files - Storages::Peripherals::StorageInteraction::OneDrive::Util.using_admin_token(storage) do |http| - response = http.get("/v1.0/drives/#{storage.drive_id}/root/children") - - response.json(symbolize_keys: true).fetch(:value, []).pluck(:id) - end - end - - def delete_created_files - Storages::Peripherals::StorageInteraction::OneDrive::Util.using_admin_token(storage) do |http| - response = http.get("/v1.0/drives/#{storage.drive_id}/root/children") - files = response.json(symbolize_keys: true).fetch(:value, []).pluck(:id) - - (files - original_ids).each { |location| delete_command.call(storage:, location:) } - end + def delete_created_folder(folder) + Storages::Peripherals::Registry + .resolve("one_drive.commands.delete_folder") + .call(storage:, auth_strategy:, location: folder.id) end end diff --git a/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/delete_folder_command_spec.rb b/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/delete_folder_command_spec.rb index d03e471382e2..f2975fa724a4 100644 --- a/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/delete_folder_command_spec.rb +++ b/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/delete_folder_command_spec.rb @@ -33,6 +33,9 @@ RSpec.describe Storages::Peripherals::StorageInteraction::OneDrive::DeleteFolderCommand, :vcr, :webmock do let(:storage) { create(:sharepoint_dev_drive_storage) } + let(:auth_strategy) do + Storages::Peripherals::StorageInteraction::AuthenticationStrategies::OAuthClientCredentials.strategy + end it "is registered as commands.one_drive.delete_folder" do expect(Storages::Peripherals::Registry.resolve("one_drive.commands.delete_folder")).to eq(described_class) @@ -42,21 +45,23 @@ expect(described_class).to respond_to(:call) method = described_class.method(:call) - expect(method.parameters).to contain_exactly(%i[keyreq storage], %i[keyreq location]) + expect(method.parameters).to contain_exactly(%i[keyreq storage], %i[keyreq auth_strategy], %i[keyreq location]) end it "deletes a folder", vcr: "one_drive/delete_folder" do + parent_location = Storages::Peripherals::ParentFolder.new("/") + create_result = Storages::Peripherals::Registry - .resolve("one_drive.commands.create_folder") - .call(storage:, folder_path: "To Be Deleted Soon") + .resolve("one_drive.commands.create_folder") + .call(storage:, auth_strategy:, folder_name: "To Be Deleted Soon", parent_location:) folder = create_result.result - expect(described_class.call(storage:, location: folder.id)).to be_success + expect(described_class.call(storage:, auth_strategy:, location: folder.id)).to be_success end it "when the folder is not found, returns a failure", vcr: "one_drive/delete_folder_not_found" do - result = described_class.call(storage:, location: "NOT_HERE") + result = described_class.call(storage:, auth_strategy:, location: "NOT_HERE") expect(result).to be_failure expect(result.result).to eq(:not_found) end diff --git a/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/download_link_query_spec.rb b/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/download_link_query_spec.rb index c46e1a5cae3e..734627636816 100644 --- a/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/download_link_query_spec.rb +++ b/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/download_link_query_spec.rb @@ -31,36 +31,58 @@ require "spec_helper" require_module_spec_helper -RSpec.describe Storages::Peripherals::StorageInteraction::OneDrive::DownloadLinkQuery, :webmock do - let(:storage) { create(:one_drive_storage, :with_oauth_client, drive_id: "JUMBLEOFLETTERSANDNUMB3R5") } +RSpec.describe Storages::Peripherals::StorageInteraction::OneDrive::DownloadLinkQuery, :vcr, :webmock do + using Storages::Peripherals::ServiceResultRefinements + let(:user) { create(:user) } - let(:file_link) { create(:file_link) } - let(:token) { create(:oauth_client_token, oauth_client: storage.oauth_client, user:) } + let(:storage) { create(:sharepoint_dev_drive_storage, oauth_client_token_user: user) } + let(:auth_strategy) do + Storages::Peripherals::StorageInteraction::AuthenticationStrategies::OAuthUserToken.strategy.with_user(user) + end - subject(:download_link_query) { described_class.new(storage) } + let(:file_link) { create(:file_link, origin_id: "01AZJL5PNDURPQGKUSGFCJQJMNNWXKTHSE") } + let(:not_existent_file_link) { create(:file_link, origin_id: "DeathStarNumberThree") } - before do - allow(Storages::Peripherals::StorageInteraction::OneDrive).to receive(:token).and_yield(token) - stub_request(:get, "https://graph.microsoft.com/v1.0/drives/#{storage.drive_id}/items/#{file_link.origin_id}/content") - .with(headers: { "Authorization" => "Bearer #{token.access_token}" }) - .and_return(status: 302, body: nil, headers: { "Location" => "https://somecool.link/from/microsoft" }) - end + subject { described_class.new(storage) } - it "returns a result with a download url" do - download_link = download_link_query.call(user:, file_link:) + describe "#call" do + it "responds with correct parameters" do + expect(described_class).to respond_to(:call) - expect(download_link).to be_success - expect(download_link.result).to eq("https://somecool.link/from/microsoft") - end + method = described_class.method(:call) + expect(method.parameters).to contain_exactly(%i[keyreq storage], %i[keyreq auth_strategy], %i[keyreq file_link]) + end + + context "without outbound request involved" do + context "with nil" do + it "returns an error" do + result = subject.call(auth_strategy:, file_link: nil) + + expect(result).to be_failure + expect(result.error_source).to eq(described_class) + expect(result.result).to eq(:error) + end + end + end + + context "with outbound request successful" do + it "returns a result with a download url", vcr: "one_drive/download_link_query_success" do + download_link = subject.call(auth_strategy:, file_link:) + + expect(download_link).to be_success - it "return an error if any other response is received" do - stub_request(:get, "https://graph.microsoft.com/v1.0/drives/#{storage.drive_id}/items/#{file_link.origin_id}/content") - .with(headers: { "Authorization" => "Bearer #{token.access_token}" }) - .and_return(status: 200, body: "") + uri = URI(download_link.result) + expect(uri.host).to eq("finn.sharepoint.com") + expect(uri.path).to eq("/sites/openprojectfilestoragetests/_layouts/15/download.aspx") + end - download_link = download_link_query.call(user:, file_link:) + it "returns an error if the file is not found", vcr: "one_drive/download_link_query_not_found" do + download_link = subject.call(auth_strategy:, file_link: not_existent_file_link) - expect(download_link).to be_failure - expect(download_link.result).to eq :error + expect(download_link).to be_failure + expect(download_link.error_source).to eq(described_class) + expect(download_link.result).to eq(:not_found) + end + end end end diff --git a/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/file_info_query_spec.rb b/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/file_info_query_spec.rb index 14085dea0def..13921f861aeb 100644 --- a/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/file_info_query_spec.rb +++ b/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/file_info_query_spec.rb @@ -32,15 +32,14 @@ require_module_spec_helper RSpec.describe Storages::Peripherals::StorageInteraction::OneDrive::FileInfoQuery, :vcr, :webmock do - using Storages::Peripherals::ServiceResultRefinements - let(:user) { create(:user) } let(:storage) { create(:sharepoint_dev_drive_storage, oauth_client_token_user: user) } + let(:auth_strategy) do - Storages::Peripherals::StorageInteraction::AuthenticationStrategies::OAuthUserToken.strategy.with_user(user) + Storages::Peripherals::Registry["one_drive.authentication.userbound"].call(user:) end - subject { described_class.new(storage) } + subject(:file_info_query) { described_class.new(storage) } describe "#call" do it "responds with correct parameters" do @@ -53,10 +52,10 @@ context "without outbound request involved" do context "with nil" do it "returns an error" do - result = subject.call(auth_strategy:, file_id: nil) + result = file_info_query.call(auth_strategy:, file_id: nil) expect(result).to be_failure - expect(result.error_source).to eq(described_class) + expect(result.errors.data.source).to eq(described_class) expect(result.result).to eq(:error) end end @@ -67,88 +66,104 @@ context "with a file id requested", vcr: "one_drive/file_info_query_success_file" do let(:file_id) { "01AZJL5PNCQCEBFI3N7JGZSX5AOX32Z3LA" } - # rubocop:disable RSpec/ExampleLength it "must return the file information when called" do - result = subject.call(auth_strategy:, file_id:) + result = file_info_query.call(auth_strategy:, file_id:) expect(result).to be_success - result.match( - on_success: ->(file_info) do - expect(file_info).to be_a(Storages::StorageFileInfo) - expect(file_info.to_h) - .to eq({ - status: "ok", - status_code: 200, - id: "01AZJL5PNCQCEBFI3N7JGZSX5AOX32Z3LA", - name: "NextcloudHub.md", - size: 1095, - mime_type: "application/octet-stream", - created_at: Time.parse("2023-09-26T14:45:25Z"), - last_modified_at: Time.parse("2023-09-26T14:46:13Z"), - owner_name: "Eric Schubert", - owner_id: "0a0d38a9-a59b-4245-93fa-0d2cf727f17a", - last_modified_by_name: "Eric Schubert", - last_modified_by_id: "0a0d38a9-a59b-4245-93fa-0d2cf727f17a", - permissions: nil, - trashed: false, - location: "/Folder/Subfolder/NextcloudHub.md" - }) - end, - on_failure: ->(error) { fail "Expected success, got #{error}" } - ) + file_info = result.result + + expect(file_info).to be_a(Storages::StorageFileInfo) + expect(file_info.to_h) + .to eq({ + status: "ok", + status_code: 200, + id: "01AZJL5PNCQCEBFI3N7JGZSX5AOX32Z3LA", + name: "NextcloudHub.md", + size: 1095, + mime_type: "application/octet-stream", + created_at: Time.parse("2023-09-26T14:45:25Z"), + last_modified_at: Time.parse("2023-09-26T14:46:13Z"), + owner_name: "Eric Schubert", + owner_id: "0a0d38a9-a59b-4245-93fa-0d2cf727f17a", + last_modified_by_name: "Eric Schubert", + last_modified_by_id: "0a0d38a9-a59b-4245-93fa-0d2cf727f17a", + permissions: nil, + trashed: false, + location: "/Folder/Subfolder/NextcloudHub.md" + }) end - # rubocop:enable RSpec/ExampleLength end context "with a folder id requested", vcr: "one_drive/file_info_query_success_folder" do let(:file_id) { "01AZJL5PNQYF5NM3KWYNA3RJHJIB2XMMMB" } - # rubocop:disable RSpec/ExampleLength it "must return the file information when called" do - result = subject.call(auth_strategy:, file_id:) + result = file_info_query.call(auth_strategy:, file_id:) expect(result).to be_success - result.match( - on_success: ->(file_info) do - expect(file_info).to be_a(Storages::StorageFileInfo) - expect(file_info.to_h) - .to eq({ - status: "ok", - status_code: 200, - id: "01AZJL5PNQYF5NM3KWYNA3RJHJIB2XMMMB", - name: "Ümlæûts", - size: 18007, - mime_type: "application/x-op-directory", - created_at: Time.parse("2023-10-09T15:26:32Z"), - last_modified_at: Time.parse("2023-10-09T15:26:32Z"), - owner_name: "Eric Schubert", - owner_id: "0a0d38a9-a59b-4245-93fa-0d2cf727f17a", - last_modified_by_name: "Eric Schubert", - last_modified_by_id: "0a0d38a9-a59b-4245-93fa-0d2cf727f17a", - permissions: nil, - trashed: false, - location: "/Folder/Ümlæûts" - }) - end, - on_failure: ->(error) { fail "Expected success, got #{error}" } - ) + file_info = result.result + + expect(file_info).to be_a(Storages::StorageFileInfo) + expect(file_info.to_h) + .to eq({ + status: "ok", + status_code: 200, + id: "01AZJL5PNQYF5NM3KWYNA3RJHJIB2XMMMB", + name: "Ümlæûts", + size: 20789, + mime_type: "application/x-op-directory", + created_at: Time.parse("2023-10-09T15:26:32Z"), + last_modified_at: Time.parse("2023-10-09T15:26:32Z"), + owner_name: "Eric Schubert", + owner_id: "0a0d38a9-a59b-4245-93fa-0d2cf727f17a", + last_modified_by_name: "Eric Schubert", + last_modified_by_id: "0a0d38a9-a59b-4245-93fa-0d2cf727f17a", + permissions: nil, + trashed: false, + location: "/Folder/Ümlæûts" + }) end - # rubocop:enable RSpec/ExampleLength end end - context "with outbound request returning not found", vcr: "one_drive/file_info_query_one_not_found" do + context "when the user does not have access to the file", vcr: "one_drive/file_info_query_forbidden" do + let(:drive_id) { "b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy" } + let(:permission_storage) { create(:sharepoint_dev_drive_storage, oauth_client_token_user: user, drive_id:) } + + let(:admin_auth) { Storages::Peripherals::Registry["one_drive.authentication.userless"].call } + + let(:folder) do + Storages::Peripherals::Registry["one_drive.commands.create_folder"] + .call(storage: permission_storage, auth_strategy: admin_auth, + folder_name: "Forbidden Folder", + parent_location: Storages::Peripherals::ParentFolder.new("/")) + .result + end + + after do + Storages::Peripherals::Registry["one_drive.commands.delete_folder"] + .call(storage: permission_storage, location: folder.id, auth_strategy: admin_auth) + end + + it "returns the file information but with a forbidden status" do + result = described_class.call(storage: permission_storage, auth_strategy:, file_id: folder.id) + expect(result).to be_success + + file_info = result.result + expect(file_info.status_code).to eq(403) + expect(file_info.status).to eq("forbidden") + end + end + + context "with outbound request returning not found", vcr: "one_drive/file_info_query_not_found" do let(:file_id) { "not_existent" } it "must return not found" do - result = subject.call(auth_strategy:, file_id:) - expect(result).to be_failure - expect(result.error_source).to be(Storages::Peripherals::StorageInteraction::OneDrive::Internal::DriveItemQuery) + result = file_info_query.call(auth_strategy:, file_id:) - result.match( - on_failure: ->(error) { expect(error.code).to eq(:not_found) }, - on_success: ->(file_info) { fail "Expected failure, got #{file_info}" } - ) + expect(result).to be_failure + expect(result.errors.data.source).to be(Storages::Peripherals::StorageInteraction::OneDrive::Internal::DriveItemQuery) + expect(result.errors.code).to eq(:not_found) end end end diff --git a/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/file_path_to_id_map_query_spec.rb b/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/file_path_to_id_map_query_spec.rb new file mode 100644 index 000000000000..0c9aa84b3e73 --- /dev/null +++ b/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/file_path_to_id_map_query_spec.rb @@ -0,0 +1,97 @@ +# frozen_string_literal: true + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +require "spec_helper" +require_module_spec_helper + +RSpec.describe Storages::Peripherals::StorageInteraction::OneDrive::FilePathToIdMapQuery, :webmock do + let(:storage) { create(:sharepoint_dev_drive_storage) } + let(:auth_strategy) do + Storages::Peripherals::StorageInteraction::AuthenticationStrategies::OAuthClientCredentials.strategy + end + + it_behaves_like "file_path_to_id_map_query: basic query setup" + + context "with parent folder being root", vcr: "one_drive/file_path_to_id_map_query_root" do + let(:folder) { Storages::Peripherals::ParentFolder.new("/") } + let(:expected_ids) do + { + "/" => "01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ", + "/Folder with spaces" => "01AZJL5PKU2WV3U3RKKFF2A7ZCWVBXRTEU", + "/Folder with spaces/very empty folder" => "01AZJL5PMGEIRPHZPHRRH2NM3D734VIR7H", + "/Folder with spaces/wordle1.png" => "01AZJL5PPMSBBO3R2BIZHJFCELSW3RP7GN", + "/Folder with spaces/wordle2.png" => "01AZJL5PIIFUD6A765KBAIAEMYACAFB2WP", + "/Folder with spaces/wordle3.png" => "01AZJL5PL4AUJEU43CQZFJKN7BQPRP3BLF", + "/Folder" => "01AZJL5PMAXGDWAAKMEBALX4Q6GSN5BSBR", + "/Folder/Images" => "01AZJL5PMIF7ND3KH6FVDLZYP3E36ERFGI", + "/Folder/Subfolder" => "01AZJL5PPWP5UOATNRJJBYJG5TACDHEUAG", + "/Folder/Ümlæûts" => "01AZJL5PNQYF5NM3KWYNA3RJHJIB2XMMMB", + "/Folder/Document.docx" => "01AZJL5PJTICED3C5YSVAY6NWTBNA2XERU", + "/Folder/Sheet.xlsx" => "01AZJL5PLB7SH7633RMBHIH6KVMQRU4RJS", + "/Folder/Images/der_laufende.jpeg" => "01AZJL5PLZFCARRQIDFJF36UL2WTLXTNSY", + "/Folder/Images/written_in_stone.webp" => "01AZJL5PLNCKWYI752YBHYYJ6RBFZWOZ46", + "/Folder/Subfolder/NextcloudHub.md" => "01AZJL5PNCQCEBFI3N7JGZSX5AOX32Z3LA", + "/Folder/Subfolder/test.txt" => "01AZJL5PLOL2KZTJNVFBCJWFXYGYVBQVMZ", + "/Folder/Ümlæûts/Anrüchiges deutsches Dokument.docx" => "01AZJL5PNDURPQGKUSGFCJQJMNNWXKTHSE", + "/Permissions Folder" => "01AZJL5PN3LVLHH2RSZZDJ6ZFAD3OWSGYB" + } + end + + it_behaves_like "file_path_to_id_map_query: successful query" + end + + context "with a given parent folder", vcr: "one_drive/file_path_to_id_map_query_parent_folder" do + let(:folder) { Storages::Peripherals::ParentFolder.new("01AZJL5PMAXGDWAAKMEBALX4Q6GSN5BSBR") } + let(:expected_ids) do + { + "/Folder" => "01AZJL5PMAXGDWAAKMEBALX4Q6GSN5BSBR", + "/Folder/Images" => "01AZJL5PMIF7ND3KH6FVDLZYP3E36ERFGI", + "/Folder/Subfolder" => "01AZJL5PPWP5UOATNRJJBYJG5TACDHEUAG", + "/Folder/Ümlæûts" => "01AZJL5PNQYF5NM3KWYNA3RJHJIB2XMMMB", + "/Folder/Document.docx" => "01AZJL5PJTICED3C5YSVAY6NWTBNA2XERU", + "/Folder/Sheet.xlsx" => "01AZJL5PLB7SH7633RMBHIH6KVMQRU4RJS", + "/Folder/Images/der_laufende.jpeg" => "01AZJL5PLZFCARRQIDFJF36UL2WTLXTNSY", + "/Folder/Images/written_in_stone.webp" => "01AZJL5PLNCKWYI752YBHYYJ6RBFZWOZ46", + "/Folder/Subfolder/NextcloudHub.md" => "01AZJL5PNCQCEBFI3N7JGZSX5AOX32Z3LA", + "/Folder/Subfolder/test.txt" => "01AZJL5PLOL2KZTJNVFBCJWFXYGYVBQVMZ", + "/Folder/Ümlæûts/Anrüchiges deutsches Dokument.docx" => "01AZJL5PNDURPQGKUSGFCJQJMNNWXKTHSE" + } + end + + it_behaves_like "file_path_to_id_map_query: successful query" + end + + context "with not existent parent folder", vcr: "one_drive/file_path_to_id_map_query_invalid_parent" do + let(:folder) { Storages::Peripherals::ParentFolder.new("/I/just/made/that/up") } + let(:error_source) { Storages::Peripherals::StorageInteraction::OneDrive::Internal::DriveItemQuery } + + it_behaves_like "file_path_to_id_map_query: not found" + end +end diff --git a/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/files_info_query_spec.rb b/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/files_info_query_spec.rb index 2ec58c727af0..6d1bc9802e0b 100644 --- a/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/files_info_query_spec.rb +++ b/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/files_info_query_spec.rb @@ -40,7 +40,7 @@ Storages::Peripherals::StorageInteraction::AuthenticationStrategies::OAuthUserToken.strategy.with_user(user) end - subject { described_class.new(storage) } + subject(:query) { described_class.new(storage) } describe "#call" do it "responds with correct parameters" do @@ -53,7 +53,7 @@ context "without outbound request involved" do context "with an empty array of file ids" do it "returns an empty array" do - result = subject.call(auth_strategy:, file_ids: []) + result = query.call(auth_strategy:, file_ids: []) expect(result).to be_success expect(result.result).to eq([]) @@ -62,7 +62,7 @@ context "with nil" do it "returns an error" do - result = subject.call(auth_strategy:, file_ids: nil) + result = query.call(auth_strategy:, file_ids: nil) expect(result).to be_failure expect(result.result).to eq(:error) @@ -82,7 +82,7 @@ # rubocop:disable RSpec/ExampleLength it "must return an array of file information when called" do - result = subject.call(auth_strategy:, file_ids:) + result = query.call(auth_strategy:, file_ids:) expect(result).to be_success result.match( @@ -156,7 +156,7 @@ let(:file_ids) { %w[01AZJL5PJTICED3C5YSVAY6NWTBNA2XERU not_existent] } it "must return an array of file information when called" do - result = subject.call(auth_strategy:, file_ids:) + result = query.call(auth_strategy:, file_ids:) expect(result).to be_success result.match( diff --git a/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/folder_files_file_ids_deep_query_spec.rb b/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/folder_files_file_ids_deep_query_spec.rb deleted file mode 100644 index a19b62284691..000000000000 --- a/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/folder_files_file_ids_deep_query_spec.rb +++ /dev/null @@ -1,157 +0,0 @@ -# frozen_string_literal: true - -#-- copyright -# OpenProject is an open source project management software. -# Copyright (C) 2012-2024 the OpenProject GmbH -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License version 3. -# -# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: -# Copyright (C) 2006-2013 Jean-Philippe Lang -# Copyright (C) 2010-2013 the ChiliProject Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# See COPYRIGHT and LICENSE files for more details. -#++ - -require "spec_helper" -require_module_spec_helper - -RSpec.describe Storages::Peripherals::StorageInteraction::OneDrive::FolderFilesFileIdsDeepQuery, :webmock do - using Storages::Peripherals::ServiceResultRefinements - - let(:user) { create(:user) } - let(:storage) { create(:sharepoint_dev_drive_storage, oauth_client_token_user: user) } - let(:folder) { Storages::Peripherals::ParentFolder.new("/") } - - describe "#call" do - it "responds with correct parameters" do - expect(described_class).to respond_to(:call) - - method = described_class.method(:call) - expect(method.parameters).to contain_exactly(%i[keyreq storage], %i[keyreq folder]) - end - - context "with outbound requests successful" do - subject do - described_class.call(storage:, folder:).result - end - - context "with parent folder being root", vcr: "one_drive/folder_files_file_ids_deep_query_root" do - it "returns the file id dictionary" do - expect(subject.transform_values(&:id)) - .to eq({ - "/" => "01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ", - "/Folder with spaces" => "01AZJL5PKU2WV3U3RKKFF2A7ZCWVBXRTEU", - "/Folder with spaces/very empty folder" => "01AZJL5PMGEIRPHZPHRRH2NM3D734VIR7H", - "/Folder with spaces/wordle1.png" => "01AZJL5PPMSBBO3R2BIZHJFCELSW3RP7GN", - "/Folder with spaces/wordle2.png" => "01AZJL5PIIFUD6A765KBAIAEMYACAFB2WP", - "/Folder with spaces/wordle3.png" => "01AZJL5PL4AUJEU43CQZFJKN7BQPRP3BLF", - "/Folder" => "01AZJL5PMAXGDWAAKMEBALX4Q6GSN5BSBR", - "/Folder/Images" => "01AZJL5PMIF7ND3KH6FVDLZYP3E36ERFGI", - "/Folder/Subfolder" => "01AZJL5PPWP5UOATNRJJBYJG5TACDHEUAG", - "/Folder/Ümlæûts" => "01AZJL5PNQYF5NM3KWYNA3RJHJIB2XMMMB", - "/Folder/Document.docx" => "01AZJL5PJTICED3C5YSVAY6NWTBNA2XERU", - "/Folder/Sheet.xlsx" => "01AZJL5PLB7SH7633RMBHIH6KVMQRU4RJS", - "/Folder/Images/der_laufende.jpeg" => "01AZJL5PLZFCARRQIDFJF36UL2WTLXTNSY", - "/Folder/Images/written_in_stone.webp" => "01AZJL5PLNCKWYI752YBHYYJ6RBFZWOZ46", - "/Folder/Subfolder/NextcloudHub.md" => "01AZJL5PNCQCEBFI3N7JGZSX5AOX32Z3LA", - "/Folder/Subfolder/test.txt" => "01AZJL5PLOL2KZTJNVFBCJWFXYGYVBQVMZ", - "/Folder/Ümlæûts/Anrüchiges deutsches Dokument.docx" => "01AZJL5PNDURPQGKUSGFCJQJMNNWXKTHSE", - "/Permissions Folder" => "01AZJL5PN3LVLHH2RSZZDJ6ZFAD3OWSGYB" - }) - end - end - - context "with a given parent folder", vcr: "one_drive/folder_files_file_ids_deep_query_parent_folder" do - let(:folder) { Storages::Peripherals::ParentFolder.new("01AZJL5PMAXGDWAAKMEBALX4Q6GSN5BSBR") } - - it "returns the file id dictionary" do - expect(subject.transform_values(&:id)) - .to eq({ - "/Folder" => "01AZJL5PMAXGDWAAKMEBALX4Q6GSN5BSBR", - "/Folder/Images" => "01AZJL5PMIF7ND3KH6FVDLZYP3E36ERFGI", - "/Folder/Subfolder" => "01AZJL5PPWP5UOATNRJJBYJG5TACDHEUAG", - "/Folder/Ümlæûts" => "01AZJL5PNQYF5NM3KWYNA3RJHJIB2XMMMB", - "/Folder/Document.docx" => "01AZJL5PJTICED3C5YSVAY6NWTBNA2XERU", - "/Folder/Sheet.xlsx" => "01AZJL5PLB7SH7633RMBHIH6KVMQRU4RJS", - "/Folder/Images/der_laufende.jpeg" => "01AZJL5PLZFCARRQIDFJF36UL2WTLXTNSY", - "/Folder/Images/written_in_stone.webp" => "01AZJL5PLNCKWYI752YBHYYJ6RBFZWOZ46", - "/Folder/Subfolder/NextcloudHub.md" => "01AZJL5PNCQCEBFI3N7JGZSX5AOX32Z3LA", - "/Folder/Subfolder/test.txt" => "01AZJL5PLOL2KZTJNVFBCJWFXYGYVBQVMZ", - "/Folder/Ümlæûts/Anrüchiges deutsches Dokument.docx" => "01AZJL5PNDURPQGKUSGFCJQJMNNWXKTHSE" - }) - end - end - end - - context "with not existent parent folder", vcr: "one_drive/folder_files_file_ids_deep_query_invalid_parent" do - let(:folder) { Storages::Peripherals::ParentFolder.new("/I/just/made/that/up") } - - it "must return not found" do - result = described_class.call(storage:, folder:) - expect(result).to be_failure - expect(result.error_source).to be_a(described_class) - - result.match( - on_failure: ->(error) { expect(error.code).to eq(:not_found) }, - on_success: ->(file_infos) { fail "Expected failure, got #{file_infos}" } - ) - end - end - - context "with invalid oauth credentials", vcr: "one_drive/folder_files_file_ids_deep_query_invalid_credentials" do - before do - unauthorized_http = OpenProject.httpx.with(origin: storage.uri, - headers: { authorization: "Bearer YouShallNotPass", - accept: "application/json", - "content-type": "application/json" }) - allow(Storages::Peripherals::StorageInteraction::OneDrive::Util) - .to receive(:using_admin_token) - .and_yield(unauthorized_http) - end - - it "must return unauthorized" do - result = described_class.call(storage:, folder:) - expect(result).to be_failure - expect(result.error_source).to be_a(described_class) - - result.match( - on_failure: ->(error) { expect(error.code).to eq(:unauthorized) }, - on_success: ->(file_infos) { fail "Expected failure, got #{file_infos}" } - ) - end - end - - context "with network errors" do - before do - request = HTTPX::Request.new(:get, "https://my.timeout.org/") - httpx_double = class_double(HTTPX, get: HTTPX::ErrorResponse.new(request, "Timeout happens", {})) - allow(Storages::Peripherals::StorageInteraction::OneDrive::Util) - .to receive(:using_admin_token) - .and_yield(httpx_double) - end - - it "must return an error with wrapped network error response" do - error = described_class.call(storage:, folder:) - expect(error).to be_failure - expect(error.result).to eq(:error) - expect(error.error_payload).to be_a(HTTPX::ErrorResponse) - end - end - end -end diff --git a/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/set_permissions_command_spec.rb b/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/set_permissions_command_spec.rb index 646fa5ebf271..88408e2f40a4 100644 --- a/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/set_permissions_command_spec.rb +++ b/modules/storages/spec/common/storages/peripherals/storage_interaction/one_drive/set_permissions_command_spec.rb @@ -42,7 +42,10 @@ let(:folder) do Storages::Peripherals::Registry .resolve("one_drive.commands.create_folder") - .call(storage:, folder_path: "Permission Test Folder") + .call(storage:, + auth_strategy:, + folder_name: "Permission Test Folder", + parent_location: Storages::Peripherals::ParentFolder.new("/")) .result end @@ -63,7 +66,7 @@ after do Storages::Peripherals::Registry .resolve("one_drive.commands.delete_folder") - .call(storage:, location: path) + .call(storage:, auth_strategy:, location: path) end context "when trying to access a non-existing driveItem" do @@ -142,7 +145,7 @@ end context "when there is a timeout" do - it "logs a warnig and does not raise NoMethodError", vcr: "one_drive/set_permissions_delete_permission_read" do + it "logs a warning and does not raise NoMethodError", vcr: "one_drive/set_permissions_delete_permission_read" do stub_request_with_timeout(:post, /invite$/) allow(OpenProject.logger).to receive(:warn) @@ -152,7 +155,7 @@ .to have_received(:warn) .with(command: described_class, message: nil, - data: { body: "/usr/local/bundle/gems/httpx-1.2.3/lib/httpx/response.rb:260:in `full_message': timed out while waiting on select (HTTPX::ConnectTimeoutError)\n", + data: { body: match_regex(%r{/lib/httpx/response.rb:260:in `full_message': timed out while waiting on select \(HTTPX::ConnectTimeoutError\)\n$}), status: nil }).once end end @@ -174,4 +177,8 @@ def remote_permissions .fetch(:value) end end + + def auth_strategy + Storages::Peripherals::StorageInteraction::AuthenticationStrategies::OAuthClientCredentials.strategy + end end diff --git a/modules/storages/spec/contracts/storages/storages/nextcloud_contract_spec.rb b/modules/storages/spec/contracts/storages/storages/nextcloud_contract_spec.rb index 0fdf14b64eb4..b576fbf51f07 100644 --- a/modules/storages/spec/contracts/storages/storages/nextcloud_contract_spec.rb +++ b/modules/storages/spec/contracts/storages/storages/nextcloud_contract_spec.rb @@ -93,7 +93,8 @@ expect(subject.errors.to_hash) .to eq({ password: ["could not be validated. Please check your storage connection and try again."] }) - expect(credentials_request).to have_been_made.once + # twice due to HTTPX retry plugin being enabled. + expect(credentials_request).to have_been_made.twice end end diff --git a/modules/storages/spec/contracts/storages/storages/shared_contract_examples.rb b/modules/storages/spec/contracts/storages/storages/shared_contract_examples.rb index d4c141e4849d..b157aea0fa0c 100644 --- a/modules/storages/spec/contracts/storages/storages/shared_contract_examples.rb +++ b/modules/storages/spec/contracts/storages/storages/shared_contract_examples.rb @@ -192,7 +192,8 @@ it "retries failed request once" do contract.validate - expect(stub_server_capabilities).to have_been_made.once + # twice due to HTTPX retry plugin being enabled. + expect(stub_server_capabilities).to have_been_made.twice end end @@ -203,8 +204,8 @@ it "retries failed request once" do contract.validate - - expect(stub_config_check).to have_been_made.once + # twice due to HTTPX retry plugin being enabled. + expect(stub_config_check).to have_been_made.twice end end end diff --git a/modules/storages/spec/features/delete_project_storage_and_file_links_spec.rb b/modules/storages/spec/features/delete_project_storage_and_file_links_spec.rb index c432d4dec0f6..10536d280c61 100644 --- a/modules/storages/spec/features/delete_project_storage_and_file_links_spec.rb +++ b/modules/storages/spec/features/delete_project_storage_and_file_links_spec.rb @@ -33,7 +33,7 @@ # Test if the deletion of a ProjectStorage actually deletes related FileLink # objects. -RSpec.describe "Delete ProjectStorage with FileLinks", :js, :webmock do +RSpec.describe "Delete ProjectStorage with FileLinks", :js, :with_cuprite, :webmock do let(:user) { create(:user) } let(:role) { create(:project_role, permissions: [:manage_storages_in_project]) } let(:project) do @@ -66,10 +66,10 @@ it "deletes ProjectStorage with dependent FileLinks" do # Go to Projects -> Settings -> File Storages - visit project_settings_project_storages_path(project) + visit external_file_storages_project_settings_project_storages_path(project) # The list of enabled file storages should now contain Storage 1 - expect(page).to have_text("File storages available in this project") + expect(page).to have_selector('h1', text: 'Files') expect(page).to have_text("Storage 1") # Press Delete icon to remove the storage from the project @@ -82,7 +82,7 @@ # Cancel Confirmation page.click_link("Cancel") - expect(page).to have_current_path project_settings_project_storages_path(project) + expect(page).to have_current_path external_file_storages_project_settings_project_storages_path(project) page.find(".icon.icon-delete").click @@ -91,7 +91,7 @@ page.click_button("Delete") # List of ProjectStorages empty again - expect(page).to have_current_path project_settings_project_storages_path(project) + expect(page).to have_current_path external_file_storages_project_settings_project_storages_path(project) expect(page).to have_text(I18n.t("storages.no_results")) # Also check in the database that ProjectStorage and dependent FileLinks are gone diff --git a/modules/storages/spec/features/hide_attachments_spec.rb b/modules/storages/spec/features/hide_attachments_spec.rb new file mode 100644 index 000000000000..44a219d2a444 --- /dev/null +++ b/modules/storages/spec/features/hide_attachments_spec.rb @@ -0,0 +1,161 @@ +# frozen_string_literal: true + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +require "spec_helper" +require_module_spec_helper + +RSpec.describe "Hide attachments", :js, :with_cuprite do + let(:permissions) do + %i(add_work_packages + manage_storages_in_project + edit_project + view_work_packages + edit_work_packages + view_file_links + manage_file_links) + end + let(:project) { create(:project, deactivate_work_package_attachments: true) } + let!(:current_user) { create(:user, member_with_permissions: { project => permissions }) } + let(:work_package) { create(:work_package, project:, description: "Initial description") } + let(:attachment) { create(:attachment, container: work_package) } + + let(:storage) { create(:nextcloud_storage_configured, name: "My storage") } + let!(:project_storage) { create(:project_storage, project:, storage:) } + let(:storage_title_xpath) { '//span[text()="My storage"]' } + + describe "Project setting" do + it "changes database value" do + login_as current_user + + visit external_file_storages_project_settings_project_storages_path(project) + click_on("Attachments") + + expect(page).to have_css("toggle-switch", text: "Off") + expect(project.reload).to be_deactivate_work_package_attachments + + click_on(class: "ToggleSwitch-track") + expect(page).to have_css("toggle-switch", text: "On") + wait_for(page).to have_css('svg[data-target="toggle-switch.loadingSpinner"][hidden="hidden"]', visible: :hidden) + expect(project.reload).not_to be_deactivate_work_package_attachments + + click_on(class: "ToggleSwitch-track") + expect(page).to have_css("toggle-switch", text: "Off") + wait_for(page).to have_css('svg[data-target="toggle-switch.loadingSpinner"][hidden="hidden"]', visible: :hidden) + expect(project.reload).to be_deactivate_work_package_attachments + end + + context "if Setting.show_work_package_attachments is false", with_settings: { show_work_package_attachments: false } do + let(:project) { create(:project) } + + it 'renders the toggle as off for project with not set deactivate_work_package_attachments' do + expect(project.deactivate_work_package_attachments).to be_nil + + login_as current_user + + visit external_file_storages_project_settings_project_storages_path(project) + click_on("Attachments") + + expect(page).to have_css("toggle-switch", text: "Off") + end + end + + context "if Setting.show_work_package_attachments is true", with_settings: { show_work_package_attachments: true } do + let(:project) { create(:project) } + + it 'renders the toggle as on for project with not set deactivate_work_package_attachments' do + expect(project.deactivate_work_package_attachments).to be_nil + + login_as current_user + + visit external_file_storages_project_settings_project_storages_path(project) + click_on("Attachments") + + expect(page).to have_css("toggle-switch", text: "On") + end + end + end + + describe "OpenProject setting" do + it "changes database value" do + checkbox_label = "Show attachments in the files tab by default" + + login_as create(:admin) + visit admin_settings_attachments_path + + expect(page).to have_checked_field(checkbox_label) + + uncheck(checkbox_label) + click_on("Save") + + # Check db directly to avoid cache being used. + expect(Setting.find_by(name: "show_work_package_attachments").value).to be_falsy + expect(page).to have_unchecked_field(checkbox_label) + + check(checkbox_label) + click_on("Save") + + expect(Setting.find_by(name: "show_work_package_attachments").value).to be_truthy + expect(page).to have_checked_field(checkbox_label) + end + end + + describe "Work package files tab" do + it "hides attachments section when required" do + work_package + attachment + login_as current_user + page = Pages::FullWorkPackage.new(work_package, project) + page.visit_tab!(:files) + + # wait for storage title to appear. it means Files tab has been loaded. + wait_for(page).to have_xpath(storage_title_xpath, wait: 35) + + expect(page).to have_no_css("op-attachments") + expect(page).to have_no_text("ATTACHMENTS") + expect(page).to have_no_text("Attach files") + expect(page).to have_no_text("FILES (1)") + end + end + + describe "Work package creation form" do + it "hides attachments section when required" do + login_as current_user + page = Pages::FullWorkPackageCreate.new(project:) + page.visit! + + # wait for storage title to appear(op-attachments is in the same section usually) + wait_for(page).to have_xpath(storage_title_xpath, wait: 35) + + expect(page).to have_no_css("op-attachments") + expect(page).to have_no_text("ATTACHMENTS") + expect(page).to have_no_text("Attach files") + end + end +end diff --git a/modules/storages/spec/features/manage_project_storage_spec.rb b/modules/storages/spec/features/manage_project_storage_spec.rb index 5a99a1b35a86..05fe84704969 100644 --- a/modules/storages/spec/features/manage_project_storage_spec.rb +++ b/modules/storages/spec/features/manage_project_storage_spec.rb @@ -37,7 +37,11 @@ # We decrease the notification polling interval because some portions of the JS code rely on something triggering # the Angular change detection. This is usually done by the notification polling, but we don't want to wait -RSpec.describe "Activation of storages in projects", :js, :webmock, with_settings: { notifications_polling_interval: 1_000 } do +RSpec.describe("Activation of storages in projects", + :js, + :with_cuprite, + :webmock, + with_settings: { notifications_polling_interval: 1_000 }) do let(:user) { create(:user) } # The first page is the Project -> Settings -> General page, so we need # to provide the user with the edit_project permission in the role. @@ -102,22 +106,22 @@ it "adds, edits and removes storages to projects" do # Go to Projects -> Settings -> File Storages visit project_settings_general_path(project) - page.click_link("File storages") + page.click_link("Files") # Check for an empty table in Project -> Settings -> File storages - expect(page).to have_title("File storages") - expect(page).to have_current_path project_settings_project_storages_path(project) + expect(page).to have_title("Files") + expect(page).to have_current_path external_file_storages_project_settings_project_storages_path(project) expect(page).to have_text(I18n.t("storages.no_results")) - page.find(".toolbar .button--icon.icon-add").click + page.first(:link, 'New storage').click # Can cancel the creation of a new file storage expect(page).to have_current_path new_project_settings_project_storage_path(project_id: project) expect(page).to have_text("Add a file storage") page.click_link("Cancel") - expect(page).to have_current_path project_settings_project_storages_path(project) + expect(page).to have_current_path external_file_storages_project_settings_project_storages_path(project) # Enable one file storage together with a project folder mode - page.find(".toolbar .button--icon.icon-add").click + page.first(:link, 'New storage').click expect(page).to have_current_path new_project_settings_project_storage_path(project_id: project) expect(page).to have_text("Add a file storage") expect(page).to have_select("storages_project_storage_storage_id", @@ -145,7 +149,7 @@ page.click_button("Add") # The list of enabled file storages should now contain Storage 1 - expect(page).to have_text("File storages available in this project") + expect(page).to have_selector('h1', text: 'Files') expect(page).to have_text(storage.name) # Press Edit icon to change the project folder mode to inactive @@ -165,7 +169,7 @@ page.click_button("Save") # The list of enabled file storages should still contain Storage 1 - expect(page).to have_text("File storages available in this project") + expect(page).to have_selector('h1', text: 'Files') expect(page).to have_text(storage.name) # Click Edit icon again but cancel the edit @@ -175,7 +179,7 @@ storages_project_storage: {project_folder_mode: "inactive"}) expect(page).to have_text("Edit the file storage to this project") page.click_link("Cancel") - expect(page).to have_current_path project_settings_project_storages_path(project) + expect(page).to have_current_path external_file_storages_project_settings_project_storages_path(project) # Press Delete icon to remove the storage from the project page.find(".icon.icon-delete").click @@ -187,7 +191,7 @@ # Cancel Confirmation page.click_link("Cancel") - expect(page).to have_current_path project_settings_project_storages_path(project) + expect(page).to have_current_path external_file_storages_project_settings_project_storages_path(project) page.find(".icon.icon-delete").click @@ -196,7 +200,7 @@ page.click_button("Delete") # List of ProjectStorages empty again - expect(page).to have_current_path project_settings_project_storages_path(project) + expect(page).to have_current_path external_file_storages_project_settings_project_storages_path(project) expect(page).to have_text(I18n.t("storages.no_results")) end @@ -231,9 +235,9 @@ let!(:unconfigured_storage) { create(:nextcloud_storage) } it "excludes storages that are not configured correctly" do - visit project_settings_project_storages_path(project) + visit external_file_storages_project_settings_project_storages_path(project) - page.find(".toolbar .button--icon.icon-add").click + page.first(:link, 'New storage').click aggregate_failures "select field options" do expect(page).to have_select("storages_project_storage_storage_id", diff --git a/modules/storages/spec/features/storages/admin/create_storage_spec.rb b/modules/storages/spec/features/storages/admin/create_storage_spec.rb index 9df57620b0ef..08434f5cd136 100644 --- a/modules/storages/spec/features/storages/admin/create_storage_spec.rb +++ b/modules/storages/spec/features/storages/admin/create_storage_spec.rb @@ -50,8 +50,10 @@ expect(page).to be_axe_clean.within "#content" - within(".PageHeader") { click_on("Storage") } - within_test_selector("storages-select-provider-action-menu") { click_on("Nextcloud") } + within(".PageHeader-titleBar") do + click_on("Storage") + within_test_selector("storages-select-provider-action-menu") { click_on("Nextcloud") } + end expect(page).to have_current_path(select_provider_admin_settings_storages_path(provider: "nextcloud")) @@ -190,11 +192,14 @@ context "with OneDrive Storage and enterprise token missing", with_ee: false do it "renders enterprise icon and redirects to upsale", :webmock do visit admin_settings_storages_path - within(".PageHeader") { click_on("Storage") } - within_test_selector("storages-select-provider-action-menu") do - expect(page).to have_css(".octicon-op-enterprise-addons") - click_on("OneDrive/SharePoint") + within(".PageHeader-titleBar") do + click_on("Storage") + + within_test_selector("storages-select-provider-action-menu") do + expect(page).to have_css(".octicon-op-enterprise-addons") + click_on("OneDrive/SharePoint") + end end expect(page).to have_current_path(upsale_admin_settings_storages_path) @@ -208,8 +213,11 @@ expect(page).to be_axe_clean.within "#content" - within(".PageHeader") { click_on("Storage") } - within_test_selector("storages-select-provider-action-menu") { click_on("OneDrive/SharePoint") } + within(".PageHeader-titleBar") do + click_on("Storage") + + within_test_selector("storages-select-provider-action-menu") { click_on("OneDrive/SharePoint") } + end expect(page).to have_current_path(select_provider_admin_settings_storages_path(provider: "one_drive")) diff --git a/modules/storages/spec/features/storages/admin/index_storages_spec.rb b/modules/storages/spec/features/storages/admin/index_storages_spec.rb index c2ba31580596..62229e5292d5 100644 --- a/modules/storages/spec/features/storages/admin/index_storages_spec.rb +++ b/modules/storages/spec/features/storages/admin/index_storages_spec.rb @@ -64,8 +64,8 @@ end it "renders a blank slate" do - expect(page).to have_title("File storages") - expect(page.find(".PageHeader-title")).to have_text("File storages") + expect(page).to have_title("Files") + expect(page.find(".PageHeader-title")).to have_text("External file storages") expect(page).to have_text("You don't have any storages yet.") end diff --git a/modules/storages/spec/features/storages/project_settings/oauth_access_grant_spec.rb b/modules/storages/spec/features/storages/project_settings/oauth_access_grant_spec.rb index b97dad68ff5f..2c07294ab8f0 100644 --- a/modules/storages/spec/features/storages/project_settings/oauth_access_grant_spec.rb +++ b/modules/storages/spec/features/storages/project_settings/oauth_access_grant_spec.rb @@ -65,7 +65,7 @@ end it "adds a storage, nudges the project admin to grant OAuth access" do - visit project_settings_project_storages_path(project_id: project) + visit external_file_storages_project_settings_project_storages_path(project_id: project) click_on("Storage") @@ -75,7 +75,7 @@ expect(page).to have_checked_field("New folder with automatically managed permissions") click_on("Add") - expect(page).to have_text("File storages available in this project") + expect(page).to have_selector('h1', text: 'Files') expect(page).to have_text(storage.name) within_test_selector("oauth-access-grant-nudge-modal") do diff --git a/modules/storages/spec/features/storages_menu_links_spec.rb b/modules/storages/spec/features/storages_menu_links_spec.rb index 74eb1d6589e0..6f9b317fa352 100644 --- a/modules/storages/spec/features/storages_menu_links_spec.rb +++ b/modules/storages/spec/features/storages_menu_links_spec.rb @@ -34,7 +34,7 @@ RSpec.describe "Storage links in project menu" do include EnsureConnectionPathHelper - shared_let(:project) { create(:project, enabled_module_names: %i[storages]) } + shared_let(:project) { create(:project, enabled_module_names: %i[work_package_tracking storages]) } shared_let(:storage_configured_linked1) { create(:nextcloud_storage_configured, :as_automatically_managed, name: "Storage 1") } shared_let(:project_storage1) do create(:project_storage, :as_automatically_managed, project:, storage: storage_configured_linked1) diff --git a/modules/storages/spec/features/storages_module_spec.rb b/modules/storages/spec/features/storages_module_spec.rb deleted file mode 100644 index 8d42f38ea494..000000000000 --- a/modules/storages/spec/features/storages_module_spec.rb +++ /dev/null @@ -1,145 +0,0 @@ -# frozen_string_literal: true - -#-- copyright -# OpenProject is an open source project management software. -# Copyright (C) 2012-2024 the OpenProject GmbH -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License version 3. -# -# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: -# Copyright (C) 2006-2013 Jean-Philippe Lang -# Copyright (C) 2010-2013 the ChiliProject Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# See COPYRIGHT and LICENSE files for more details. -#++ - -require "spec_helper" -require_module_spec_helper - -RSpec.describe "Storages module", :js do - current_user { create(:admin) } - - let(:role) { create(:project_role, permissions: %i[manage_storages_in_project select_project_modules edit_project]) } - let(:storage) { create(:nextcloud_storage, name: "Storage 1") } - let(:project) { create(:project, enabled_module_names: %i[storages work_package_tracking]) } - - shared_examples_for "content section has storages module" do |is_upcase = false| - it 'must show "storages" in content section' do - within "#content" do - text = I18n.t(:project_module_storages) - expect(page).to have_text(is_upcase ? text.upcase : text) - end - end - end - - shared_examples_for "sidebar has storages module" do - it 'must show "storages" in sidebar' do - within "#menu-sidebar" do - expect(page).to have_text(I18n.t(:project_module_storages)) - end - end - end - - shared_examples_for "has storages module" do |sections: %i[content sidebar], is_upcase: false| - before do - visit(path) - end - - include_examples "content section has storages module", is_upcase if sections.include?(:content) - include_examples "sidebar has storages module" if sections.include?(:sidebar) - end - - context "when in administration" do - context "when showing index page" do - it_behaves_like "has storages module" do - let(:path) { admin_index_path } - end - end - - context "when showing system project settings page" do - it_behaves_like "has storages module", sections: [:content] do - let(:path) { admin_settings_new_project_path } - end - end - - context "when showing system storage settings page" do - before do - visit admin_settings_storages_path - end - - it "must show the page" do - expect(page).to have_text(I18n.t(:project_module_storages)) - end - end - - context "when creating a new role" do - it_behaves_like "has storages module", sections: [:content], is_upcase: true do - let(:path) { new_role_path } - end - end - - context "when editing a role" do - it_behaves_like "has storages module", sections: [:content], is_upcase: true do - let(:path) { edit_role_path(role) } - end - end - - context "when showing the role permissions report" do - it_behaves_like "has storages module", sections: [:content], is_upcase: true do - let(:path) { report_roles_path(role) } - end - end - end - - context "when in project administration" do - before do - storage - project - end - - context "when showing the project module settings" do - it_behaves_like "has storages module" do - let(:path) { project_settings_modules_path(project) } - end - end - - context "when showing project storages settings page" do - context "with storages module is enabled" do - before do - visit project_settings_project_storages_path(project) - end - - it "must show the page" do - expect(page).to have_text(I18n.t("storages.page_titles.project_settings.index")) - end - end - - context "with storages module is disabled" do - let(:project) { create(:project, enabled_module_names: %i[work_package_tracking]) } - - before do - visit project_settings_project_storages_path(project) - end - - it "mustn't show the page" do - expect(page).to have_no_text(I18n.t("storages.page_titles.project_settings.index")) - end - end - end - end -end diff --git a/modules/storages/spec/features/view_project_storage_members_spec.rb b/modules/storages/spec/features/view_project_storage_members_spec.rb index 5a05e768a6de..62cf7b190511 100644 --- a/modules/storages/spec/features/view_project_storage_members_spec.rb +++ b/modules/storages/spec/features/view_project_storage_members_spec.rb @@ -60,9 +60,9 @@ login_as user # Go to Projects -> Settings -> File Storages - visit project_settings_project_storages_path(project) + visit external_file_storages_project_settings_project_storages_path(project) - expect(page).to have_title("File storages") + expect(page).to have_title("Files") expect(page).to have_text(storage.name) page.find(".icon.icon-group").click @@ -90,9 +90,9 @@ project_storage_no_members = create(:project_storage, :as_automatically_managed, project: project_no_members, storage:) # Go to Projects -> Settings -> File Storages - visit project_settings_project_storages_path(project_no_members) + visit external_file_storages_project_settings_project_storages_path(project_no_members) - expect(page).to have_title("File storages") + expect(page).to have_title("Files") expect(page).to have_text(storage.name) page.find(".icon.icon-group").click diff --git a/modules/storages/spec/requests/api/v3/file_links/file_links_api_spec.rb b/modules/storages/spec/requests/api/v3/file_links/file_links_api_spec.rb index 681b0ec25e4c..1fa11b3698b7 100644 --- a/modules/storages/spec/requests/api/v3/file_links/file_links_api_spec.rb +++ b/modules/storages/spec/requests/api/v3/file_links/file_links_api_spec.rb @@ -219,15 +219,6 @@ def disable_module(project, modul) end end - context "if storages module is deactivated for the work package's project" do - before(:all) { disable_module(project, "storages") } - after(:all) { enable_module(project, "storages") } - - it_behaves_like "API V3 collection response", 0, 0, "FileLink", "Collection" do - let(:elements) { [] } - end - end - describe "with filter by storage" do let!(:another_project_storage) { create(:project_storage, project:, storage: another_storage) } let(:path) { "#{api_v3_paths.file_links(work_package.id)}?filters=#{CGI.escape(filters.to_json)}" } @@ -517,9 +508,9 @@ def disable_module(project, modul) it_behaves_like "not found" end - context "if file link is in a work package, while the storages module is deactivated in its project." do - before(:all) { disable_module(project, "storages") } - after(:all) { enable_module(project, "storages") } + context "if file link is in a work package, while the work_package_tracking module is deactivated in its project." do + before(:all) { disable_module(project, "work_package_tracking") } + after(:all) { enable_module(project, "work_package_tracking") } it_behaves_like "not found" end diff --git a/modules/storages/spec/requests/api/v3/projects/projects_storages_filter_spec.rb b/modules/storages/spec/requests/api/v3/projects/projects_storages_filter_spec.rb index 50edb46fbe32..88bd26fa4403 100644 --- a/modules/storages/spec/requests/api/v3/projects/projects_storages_filter_spec.rb +++ b/modules/storages/spec/requests/api/v3/projects/projects_storages_filter_spec.rb @@ -76,9 +76,9 @@ def disable_module(project, modul) let(:elements) { [project3, project2, project1] } end - context "if a project has the storages module deactivated" do - before(:all) { disable_module(project1, "storages") } - after(:all) { enable_module(project1, "storages") } + context "if a project has the work_package_tracking module deactivated" do + before(:all) { disable_module(project1, "work_package_tracking") } + after(:all) { enable_module(project1, "work_package_tracking") } it_behaves_like "API V3 collection response", 2, 2, "Project", "Collection" do let(:elements) { [project3, project2] } @@ -102,9 +102,9 @@ def disable_module(project, modul) let(:elements) { [project3, project2, project1] } end - context "if a project has the storages module deactivated" do - before(:all) { disable_module(project1, "storages") } - after(:all) { enable_module(project1, "storages") } + context "if a project has the work_package_tracking module deactivated" do + before(:all) { disable_module(project1, "work_package_tracking") } + after(:all) { enable_module(project1, "work_package_tracking") } it_behaves_like "API V3 collection response", 2, 2, "Project", "Collection" do let(:elements) { [project3, project2] } diff --git a/modules/storages/spec/requests/api/v3/work_packages/work_packages_linkable_filter_spec.rb b/modules/storages/spec/requests/api/v3/work_packages/work_packages_linkable_filter_spec.rb index 429e011c219a..60a00e842e16 100644 --- a/modules/storages/spec/requests/api/v3/work_packages/work_packages_linkable_filter_spec.rb +++ b/modules/storages/spec/requests/api/v3/work_packages/work_packages_linkable_filter_spec.rb @@ -105,8 +105,8 @@ end end - context "if a project has the storages module deactivated" do - let(:project1) { create(:project, disable_modules: :storages, members: { current_user => role1 }) } + context "if a project has the work_package_tracking module deactivated" do + let(:project1) { create(:project, disable_modules: [:work_package_tracking], members: { current_user => role1 }) } it_behaves_like "API V3 collection response", 2, 2, "WorkPackage", "WorkPackageCollection" do let(:elements) { [work_package3, work_package4] } @@ -147,8 +147,8 @@ end end - context "if a project has the storages module deactivated" do - let(:project1) { create(:project, disable_modules: :storages, members: { current_user => role1 }) } + context "if a project has the work_package_tracking module deactivated" do + let(:project1) { create(:project, disable_modules: :work_package_tracking, members: { current_user => role1 }) } it_behaves_like "API V3 collection response", 2, 2, "WorkPackage", "WorkPackageCollection" do let(:elements) { [work_package3, work_package4] } diff --git a/modules/storages/spec/requests/api/v3/work_packages/work_packages_linked_filter_spec.rb b/modules/storages/spec/requests/api/v3/work_packages/work_packages_linked_filter_spec.rb index 35137b2abb69..964461e1fb13 100644 --- a/modules/storages/spec/requests/api/v3/work_packages/work_packages_linked_filter_spec.rb +++ b/modules/storages/spec/requests/api/v3/work_packages/work_packages_linked_filter_spec.rb @@ -113,8 +113,8 @@ end end - context "if a project has the storages module deactivated" do - let(:project1) { create(:project, disable_modules: :storages, members: { current_user => role1 }) } + context "if a project has the work_package_tracking module deactivated" do + let(:project1) { create(:project, disable_modules: :work_package_tracking, members: { current_user => role1 }) } it_behaves_like "API V3 collection response", 1, 1, "WorkPackage", "WorkPackageCollection" do let(:elements) { [work_package3] } diff --git a/modules/storages/spec/requests/storages/project_settings/oauth_access_grant_flow_spec.rb b/modules/storages/spec/requests/storages/project_settings/oauth_access_grant_flow_spec.rb index 41f5f901ede4..5578f632ee48 100644 --- a/modules/storages/spec/requests/storages/project_settings/oauth_access_grant_flow_spec.rb +++ b/modules/storages/spec/requests/storages/project_settings/oauth_access_grant_flow_spec.rb @@ -85,7 +85,7 @@ ) expect(last_response.cookies["oauth_state_#{nonce}"]) - .to eq([CGI.escape({ href: "http://example.org/projects/#{project.id}/settings/project_storages", + .to eq([CGI.escape({ href: "http://example.org/projects/#{project.id}/settings/project_storages/external_file_storages", storageId: project_storage.storage_id }.to_json)]) end end @@ -105,7 +105,7 @@ storage.oauth_client expect(last_response.status).to eq(302) - expect(last_response.location).to eq("http://example.org/projects/#{project.id}/settings/project_storages") + expect(last_response.location).to eq("http://example.org/projects/#{project.id}/settings/project_storages/external_file_storages") expect(last_response.cookies.keys).to eq(["_open_project_session"]) end end diff --git a/modules/storages/spec/services/storages/nextcloud_group_folder_properties_sync_service_spec.rb b/modules/storages/spec/services/storages/nextcloud_group_folder_properties_sync_service_spec.rb index 2541490f6f6c..9f1f0178c653 100644 --- a/modules/storages/spec/services/storages/nextcloud_group_folder_properties_sync_service_spec.rb +++ b/modules/storages/spec/services/storages/nextcloud_group_folder_properties_sync_service_spec.rb @@ -107,6 +107,19 @@ XML end + let(:propfind_folder_info_request_body) do + <<~XML + + + + + + + + + + XML + end let(:root_folder_propfind_response_body) do <<~XML @@ -185,6 +198,12 @@ 819 + 0 + Tue, 23 Apr 2024 08:28:58 GMT + + RGDNVCK + + OpenProject HTTP/1.1 200 OK @@ -515,26 +534,6 @@ XML end - let(:propfind_response_body3) do - <<~XML - - - - /remote.php/dav/files/OpenProject/OpenProject/Project3%20%28#{project3.id}%29/ - - - 2600003 - - HTTP/1.1 200 OK - - - - XML - end let(:request_stubs) { [] } @@ -595,7 +594,7 @@ project_folder_mode: "automatic", project: project3, storage:, - project_folder_id: nil) + project_folder_id: "2600003") end let!(:project_storage4) do create(:project_storage, @@ -629,11 +628,11 @@ it "sets project folders properties" do expect(project_storage1.project_folder_id).to be_nil expect(project_storage2.project_folder_id).to eq("123") - expect(project_storage3.project_folder_id).to be_nil + expect(project_storage3.project_folder_id).to eq("2600003") expect(project_storage1.last_project_folders.pluck(:origin_folder_id)).to eq([nil]) expect(project_storage2.last_project_folders.pluck(:origin_folder_id)).to eq(["123"]) - expect(project_storage3.last_project_folders.pluck(:origin_folder_id)).to eq([nil]) + expect(project_storage3.last_project_folders.pluck(:origin_folder_id)).to eq(["2600003"]) described_class.new(storage).call @@ -675,7 +674,7 @@ expect(OpenProject.logger) .to have_received(:warn) .with(folder: "OpenProject", - command: Storages::Peripherals::StorageInteraction::Nextcloud::Internal::PropfindQuery, + command: Storages::Peripherals::StorageInteraction::Nextcloud::Internal::PropfindQueryLegacy, message: "Outbound request destination not found", data: { status: 404, body: "" }) end @@ -754,7 +753,7 @@ headers: { "Authorization" => "Basic T3BlblByb2plY3Q6MTIzNDU2Nzg=" } - ).to_return(status: 404, body: "", headers: {}) + ).to_return(status: 404, body: "not found", headers: {}) end it "continues normally ignoring that folder" do @@ -773,8 +772,8 @@ .to have_received(:warn) .with(folder: "OpenProject/[Sample] Project Name | Ehuu (#{project1.id})/", command: Storages::Peripherals::StorageInteraction::Nextcloud::CreateFolderCommand, - message: "Outbound request destination not found", - data: { status: 404, body: "" }) + message: "Outbound request destination not found!", + data: "not found") end end @@ -953,7 +952,9 @@ def setup_request_stubs "Authorization" => "Basic T3BlblByb2plY3Q6MTIzNDU2Nzg=", "Depth" => "1" } - ).to_return(status: 207, body: root_folder_propfind_response_body, headers: {}) + ).to_return(status: 207, + body: root_folder_propfind_response_body, + headers: { "Content-Type" => "application/xml" }) # 1 - Root folder SetPermissions request_stubs << stub_request(:proppatch, "#{storage.host}/remote.php/dav/files/OpenProject/OpenProject") @@ -962,7 +963,9 @@ def setup_request_stubs headers: { "Authorization" => "Basic T3BlblByb2plY3Q6MTIzNDU2Nzg=" } - ).to_return(status: 207, body: root_folder_set_permissions_response_body, headers: {}) + ).to_return(status: 207, + body: root_folder_set_permissions_response_body, + headers: { "Content-Type" => "application/xml" }) # 2 - OpenProject Project Folder Creation request_stubs << stub_request( @@ -975,18 +978,20 @@ def setup_request_stubs } ).to_return(status: 201, body: "", headers: {}) - # 3 - OpenProject PropFind for folder ID + # 3 - OpenProject PropFind for created folder properties request_stubs << stub_request( :propfind, "#{storage.host}/remote.php/dav/files/OpenProject/OpenProject/" \ "%5BSample%5D%20Project%20Name%20%7C%20Ehuu%20(#{project1.id})/" ).with( - body: propfind_request_body, + body: propfind_folder_info_request_body, headers: { "Authorization" => "Basic T3BlblByb2plY3Q6MTIzNDU2Nzg=", "Depth" => "1" } - ).to_return(status: 207, body: created_folder_propfind_response_body, headers: {}) + ).to_return(status: 207, + body: created_folder_propfind_response_body, + headers: { "Content-Type" => "application/xml" }) # 4 - Move/Rename Folder request_stubs << stub_request( @@ -1010,7 +1015,9 @@ def setup_request_stubs headers: { "Authorization" => "Basic T3BlblByb2plY3Q6MTIzNDU2Nzg=" } - ).to_return(status: 207, body: created_folder_set_permissions_response_body, headers: {}) + ).to_return(status: 207, + body: created_folder_set_permissions_response_body, + headers: { "Content-Type" => "application/xml" }) # 6 - Hide Unknown Inactive Folder request_stubs << stub_request( @@ -1021,7 +1028,9 @@ def setup_request_stubs headers: { "Authorization" => "Basic T3BlblByb2plY3Q6MTIzNDU2Nzg=" } - ).to_return(status: 207, body: hide_folder_set_permissions_response_body, headers: {}) + ).to_return(status: 207, + body: hide_folder_set_permissions_response_body, + headers: { "Content-Type" => "application/xml" }) # 7 - Hide Inactive Project Folder request_stubs << stub_request( @@ -1032,7 +1041,7 @@ def setup_request_stubs headers: { "Authorization" => "Basic T3BlblByb2plY3Q6MTIzNDU2Nzg=" } - ).to_return(status: 207, body: set_permissions_response_body5, headers: {}) + ).to_return(status: 207, body: set_permissions_response_body5, headers: { "Content-Type" => "application/xml" }) # 8 - Set folder Permissions request_stubs << stub_request( @@ -1044,7 +1053,7 @@ def setup_request_stubs headers: { "Authorization" => "Basic T3BlblByb2plY3Q6MTIzNDU2Nzg=" } - ).to_return(status: 207, body: set_permissions_response_body, headers: {}) + ).to_return(status: 207, body: set_permissions_response_body, headers: { "Content-Type" => "application/xml" }) # 9 - Set public project folder permissions request_stubs << stub_request( @@ -1055,7 +1064,7 @@ def setup_request_stubs headers: { "Authorization" => "Basic T3BlblByb2plY3Q6MTIzNDU2Nzg=" } - ).to_return(status: 207, body: set_permissions_response_body6, headers: {}) + ).to_return(status: 207, body: set_permissions_response_body6, headers: { "Content-Type" => "application/xml" }) request_stubs << stub_request( :proppatch, @@ -1065,7 +1074,7 @@ def setup_request_stubs headers: { "Authorization" => "Basic T3BlblByb2plY3Q6MTIzNDU2Nzg=" } - ).to_return(status: 207, body: set_permissions_response_body7, headers: {}) + ).to_return(status: 207, body: set_permissions_response_body7, headers: { "Content-Type" => "application/xml" }) # 11 - Get all user in the remote group request_stubs << stub_request(:get, "#{storage.host}/ocs/v1.php/cloud/groups/#{storage.group}") @@ -1074,7 +1083,9 @@ def setup_request_stubs "Authorization" => "Basic T3BlblByb2plY3Q6MTIzNDU2Nzg=", "OCS-APIRequest" => "true" } - ).to_return(status: 200, body: group_users_response_body, headers: {}) + ).to_return(status: 200, + body: group_users_response_body, + headers: { "Content-Type" => "application/xml" }) # 12 - Add user to group request_stubs << stub_request(:post, "#{storage.host}/ocs/v1.php/cloud/users/Obi-Wan/groups") @@ -1084,7 +1095,9 @@ def setup_request_stubs "Authorization" => "Basic T3BlblByb2plY3Q6MTIzNDU2Nzg=", "Ocs-Apirequest" => "true" } - ).to_return(status: 200, body: add_user_to_group_response_body, headers: {}) + ).to_return(status: 200, + body: add_user_to_group_response_body, + headers: { "Content-Type" => "application/xml" }) request_stubs << stub_request(:post, "#{storage.host}/ocs/v1.php/cloud/users/Yoda/groups") .with( @@ -1093,7 +1106,9 @@ def setup_request_stubs "Authorization" => "Basic T3BlblByb2plY3Q6MTIzNDU2Nzg=", "Ocs-Apirequest" => "true" } - ).to_return(status: 200, body: add_user_to_group_response_body, headers: {}) + ).to_return(status: 200, + body: add_user_to_group_response_body, + headers: { "Content-Type" => "application/xml" }) request_stubs << stub_request(:post, "#{storage.host}/ocs/v1.php/cloud/users/Darth%20Vader/groups") .with( @@ -1102,7 +1117,9 @@ def setup_request_stubs "Authorization" => "Basic T3BlblByb2plY3Q6MTIzNDU2Nzg=", "Ocs-Apirequest" => "true" } - ).to_return(status: 200, body: add_user_to_group_response_body, headers: {}) + ).to_return(status: 200, + body: add_user_to_group_response_body, + headers: { "Content-Type" => "application/xml" }) # remove user from group request_stubs << stub_request( @@ -1113,32 +1130,7 @@ def setup_request_stubs "Authorization" => "Basic T3BlblByb2plY3Q6MTIzNDU2Nzg=", "Ocs-Apirequest" => "true" } - ).to_return(status: 200, body: remove_user_from_group_response, headers: {}) - - # Create an already existing folder - request_stubs << stub_request( - :mkcol, - "#{storage.host}/remote.php/dav/files/OpenProject/OpenProject/Project3%20(#{project3.id})/" - ).with( - headers: { - "Authorization" => "Basic T3BlblByb2plY3Q6MTIzNDU2Nzg=" - } - ).to_return(status: 405, body: <<~XML, headers: {}) - - - Sabre\\DAV\\Exception\\MethodNotAllowed - The resource you tried to create already exists - - XML - - # Get the already existing folder id - request_stubs << stub_request( - :propfind, - "#{storage.host}/remote.php/dav/files/OpenProject/OpenProject/Project3%20(#{project3.id})/" - ).with( - headers: { "Authorization" => "Basic T3BlblByb2plY3Q6MTIzNDU2Nzg=" }, - body: propfind_request_body - ).to_return(status: 200, body: propfind_response_body3, headers: {}) + ).to_return(status: 200, body: remove_user_from_group_response, headers: { "Content-Type" => "application/xml" }) end def parse_error_msg(msg) diff --git a/modules/storages/spec/services/storages/one_drive_managed_folder_sync_service_spec.rb b/modules/storages/spec/services/storages/one_drive_managed_folder_sync_service_spec.rb index 760dae4b2ff1..329fa2e3bade 100644 --- a/modules/storages/spec/services/storages/one_drive_managed_folder_sync_service_spec.rb +++ b/modules/storages/spec/services/storages/one_drive_managed_folder_sync_service_spec.rb @@ -145,7 +145,7 @@ scope = ->(project_storage) { Storages::LastProjectFolder.where(project_storage:).last } expect { service.call }.to not_change { scope[unmanaged_project_storage].reload.origin_folder_id } - .and(not_change { scope[inactive_project_storage].reload.origin_folder_id }) + .and(not_change { scope[inactive_project_storage].reload.origin_folder_id }) expect(scope[project_storage].origin_folder_id).to eq(project_storage.reload.project_folder_id) expect(scope[public_project_storage].origin_folder_id).to eq(public_project_storage.reload.project_folder_id) @@ -370,10 +370,14 @@ def project_folder_info(project_storage) end def create_folder_for(project_storage, folder_override = nil) - folder_path = folder_override || project_storage.managed_project_folder_path + folder_name = folder_override || project_storage.managed_project_folder_path + parent_location = Storages::Peripherals::ParentFolder.new("/") Storages::Peripherals::Registry.resolve("one_drive.commands.create_folder") - .call(storage: project_storage.storage, folder_path:) + .call(storage: project_storage.storage, + auth_strategy:, + folder_name:, + parent_location:) end def set_permissions_on(item_id, permissions) @@ -389,6 +393,11 @@ def delete_created_folders end def delete_folder(item_id) - Storages::Peripherals::Registry.resolve("one_drive.commands.delete_folder").call(storage:, location: item_id) + Storages::Peripherals::Registry.resolve("one_drive.commands.delete_folder") + .call(storage:, auth_strategy:, location: item_id) + end + + def auth_strategy + Storages::Peripherals::StorageInteraction::AuthenticationStrategies::OAuthClientCredentials.strategy end end diff --git a/modules/storages/spec/services/storages/project_storages/delete_service_spec.rb b/modules/storages/spec/services/storages/project_storages/delete_service_spec.rb index 00b9572f9353..6bbef03cc24d 100644 --- a/modules/storages/spec/services/storages/project_storages/delete_service_spec.rb +++ b/modules/storages/spec/services/storages/project_storages/delete_service_spec.rb @@ -35,11 +35,12 @@ RSpec.describe Storages::ProjectStorages::DeleteService, :webmock, type: :model do shared_examples_for "deleting project storages with project folders" do - let(:delete_folder_stub) do - stub_request(:delete, delete_folder_url).to_return(status: 204, body: nil, headers: {}) - end + let(:command_double) { double(:delete_folder_command, call: ServiceResult.success) } - before { delete_folder_stub } + before do + Storages::Peripherals::Registry + .stub("#{storage.short_provider_type}.commands.delete_folder", command_double) + end context "if project folder mode is set to automatic" do let(:project_storage) do @@ -48,17 +49,15 @@ it "tries to remove the project folder at the remote storage" do expect(described_class.new(model: project_storage, user:).call).to be_success - expect(delete_folder_stub).to have_been_requested + expect(command_double).to have_received(:call) end context "if project folder deletion request fails" do - let(:delete_folder_stub) do - stub_request(:delete, delete_folder_url).to_return(status: 404, body: nil, headers: {}) - end + let(:command_double) { double(:delete_folder_command, call: ServiceResult.failure(result: 404)) } it "tries to remove the project folder at the remote storage and still succeed with deletion" do expect(described_class.new(model: project_storage, user:).call).to be_success - expect(delete_folder_stub).to have_been_requested + expect(command_double).to have_received(:call) end end end @@ -70,7 +69,7 @@ it "must not try to delete manual project folders" do expect(described_class.new(model: project_storage, user:).call).to be_success - expect(delete_folder_stub).not_to have_been_requested + expect(command_double).not_to have_received(:call) end end end @@ -138,7 +137,10 @@ end before do - stub_request(:delete, delete_folder_url).to_return(status: 204, body: nil, headers: {}) + Storages::Peripherals::Registry.stub( + "#{model_instance.storage.short_provider_type}.commands.delete_folder", + ->(*) { ServiceResult.success } + ) end it_behaves_like("an event gun", OpenProject::Events::PROJECT_STORAGE_DESTROYED) diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/create_folder_already_exists.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/create_folder_already_exists.yml new file mode 100644 index 000000000000..5667112fc995 --- /dev/null +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/create_folder_already_exists.yml @@ -0,0 +1,79 @@ +--- +http_interactions: +- request: + method: mkcol + uri: https://nextcloud.local/remote.php/dav/files/admin/Folder + body: + encoding: US-ASCII + string: '' + headers: + Authorization: + - Bearer + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + response: + status: + code: 405 + message: Method Not Allowed + headers: + Allow: + - OPTIONS, GET, HEAD, DELETE, PROPFIND, PUT, PROPPATCH, COPY, MOVE, REPORT + Cache-Control: + - no-store, no-cache, must-revalidate + Content-Security-Policy: + - default-src 'none'; + Content-Type: + - application/xml; charset=utf-8 + Date: + - Mon, 22 Apr 2024 12:17:40 GMT + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.57 (Debian) + Set-Cookie: + - ocirabgzify6=1ebed9064c22c126227200ab983e00ae; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=KDpjEpSmQONYPBRxMGJwGpWu%2FTjGIExqEWRDJQRISwqk8ePUxRro7FGwNCVW%2FOEu%2FdUv5JEDbym9%2BMZtZhRKOntxL4GQQjmbXfoVX%2F6t2vS0cMy5YAAQA0iNVHznnvb4; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=1ebed9064c22c126227200ab983e00ae; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, ocirabgzify6=1ebed9064c22c126227200ab983e00ae; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=1ebed9064c22c126227200ab983e00ae; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=1ebed9064c22c126227200ab983e00ae; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=1ebed9064c22c126227200ab983e00ae; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=1ebed9064c22c126227200ab983e00ae; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=1ebed9064c22c126227200ab983e00ae; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=1ebed9064c22c126227200ab983e00ae; + path=/; secure; HttpOnly; SameSite=Lax + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.16 + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + Content-Length: + - '247' + body: + encoding: UTF-8 + string: | + + + Sabre\DAV\Exception\MethodNotAllowed + The resource you tried to create already exists + + recorded_at: Mon, 22 Apr 2024 12:17:40 GMT +recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/create_folder_parent.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/create_folder_parent.yml new file mode 100644 index 000000000000..0c26aa182613 --- /dev/null +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/create_folder_parent.yml @@ -0,0 +1,244 @@ +--- +http_interactions: +- request: + method: mkcol + uri: https://nextcloud.local/remote.php/dav/files/admin/Folder/F%C3%B6lder%20CreatedBy%20%C3%87ommand + body: + encoding: US-ASCII + string: '' + headers: + Authorization: + - Bearer + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + response: + status: + code: 201 + message: Created + headers: + Cache-Control: + - no-store, no-cache, must-revalidate + Content-Security-Policy: + - default-src 'none'; + Content-Type: + - text/html; charset=UTF-8 + Date: + - Tue, 23 Apr 2024 11:25:29 GMT + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Oc-Fileid: + - '00000378ocirabgzify6' + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.57 (Debian) + Set-Cookie: + - ocirabgzify6=ceecd9275f73688198643c9e7d3c635b; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=MYNJ%2FNWpfizNKGTTKaqLNDMolxg0EzHGAO5NDnCnf7FmU85Qo1qXAQNnlDcuqbf8YuYUrsiaBKLhxvA6RXXi5XoTIM7%2BRq0FAeMZzFcz0P0pipY%2BaYd2d8KsR8OIZstZ; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=ceecd9275f73688198643c9e7d3c635b; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, ocirabgzify6=ceecd9275f73688198643c9e7d3c635b; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=ceecd9275f73688198643c9e7d3c635b; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=ceecd9275f73688198643c9e7d3c635b; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=ceecd9275f73688198643c9e7d3c635b; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=ceecd9275f73688198643c9e7d3c635b; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=ceecd9275f73688198643c9e7d3c635b; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=ceecd9275f73688198643c9e7d3c635b; + path=/; secure; HttpOnly; SameSite=Lax + X-Content-Type-Options: + - nosniff + X-Debug-Token: + - 69HzuEoCX0t5sxLFKbkO + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.16 + X-Request-Id: + - 69HzuEoCX0t5sxLFKbkO + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + Content-Length: + - '0' + body: + encoding: UTF-8 + string: '' + recorded_at: Tue, 23 Apr 2024 11:25:29 GMT +- request: + method: propfind + uri: https://nextcloud.local/remote.php/dav/files/admin/Folder/F%C3%B6lder%20CreatedBy%20%C3%87ommand + body: + encoding: UTF-8 + string: | + + + + + + + + + + headers: + Authorization: + - Bearer + Depth: + - '1' + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/xml; charset=utf-8 + Content-Length: + - '207' + response: + status: + code: 207 + message: Multi-Status + headers: + Cache-Control: + - no-store, no-cache, must-revalidate + Content-Encoding: + - gzip + Content-Security-Policy: + - default-src 'none'; + Content-Type: + - application/xml; charset=utf-8 + Date: + - Tue, 23 Apr 2024 11:25:29 GMT + Dav: + - 1, 3, extended-mkcol, access-control, calendarserver-principal-property-search, + nextcloud-checksum-update, nc-calendar-search, nc-enable-birthday-calendar + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.57 (Debian) + Set-Cookie: + - ocirabgzify6=2c786e864dc31b23b829c1b38bc9fd3b; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=Sd1Rey6hsovDO61HS3F7nILY%2FDzQSyt9f9pXyOxN0Y6OrBtKqZH7ZwxBZoez8SCNYuH5wlwVlory6AMBSTU6%2BGOIRB%2F5AeLyh8ub8dZP%2BH8V5F4dMqhJ0zHl%2BgDVBjIk; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=2c786e864dc31b23b829c1b38bc9fd3b; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, ocirabgzify6=2c786e864dc31b23b829c1b38bc9fd3b; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=2c786e864dc31b23b829c1b38bc9fd3b; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=2c786e864dc31b23b829c1b38bc9fd3b; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=2c786e864dc31b23b829c1b38bc9fd3b; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=2c786e864dc31b23b829c1b38bc9fd3b; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=2c786e864dc31b23b829c1b38bc9fd3b; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=2c786e864dc31b23b829c1b38bc9fd3b; + path=/; secure; HttpOnly; SameSite=Lax + Vary: + - Brief,Prefer + X-Content-Type-Options: + - nosniff + X-Debug-Token: + - 5NZudMK9T7o3X1ExoTIJ + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.16 + X-Request-Id: + - 5NZudMK9T7o3X1ExoTIJ + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + Content-Length: + - '325' + body: + encoding: UTF-8 + string: | + + /remote.php/dav/files/admin/Folder/F%c3%b6lder%20CreatedBy%20%c3%87ommand/3780Tue, 23 Apr 2024 11:25:29 GMTadminHTTP/1.1 200 OK + recorded_at: Tue, 23 Apr 2024 11:25:29 GMT +- request: + method: delete + uri: https://nextcloud.local/remote.php/dav/files/admin/Folder/F%C3%B6lder%20CreatedBy%20%C3%87ommand + body: + encoding: US-ASCII + string: '' + headers: + Authorization: + - Bearer + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + response: + status: + code: 204 + message: No Content + headers: + Cache-Control: + - no-store, no-cache, must-revalidate + Content-Security-Policy: + - default-src 'none'; + Date: + - Tue, 23 Apr 2024 11:25:30 GMT + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.57 (Debian) + Set-Cookie: + - ocirabgzify6=2c85029be0cca081da53706b75dda99a; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=LeYZagFxHWyiImT4QgwC4B%2Fm2sb8t1lrZ1oOUoOWd2avBWyb0DWkWqS3MCaoltf8jHM%2FPwlo3zn1qShxy9eIEirY4PUijDyFznUiReyJRxIeBpWsPDxp12OI9QgJPVVp; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=2c85029be0cca081da53706b75dda99a; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, ocirabgzify6=2c85029be0cca081da53706b75dda99a; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=2c85029be0cca081da53706b75dda99a; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=2c85029be0cca081da53706b75dda99a; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=2c85029be0cca081da53706b75dda99a; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=2c85029be0cca081da53706b75dda99a; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=2c85029be0cca081da53706b75dda99a; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=2c85029be0cca081da53706b75dda99a; + path=/; secure; HttpOnly; SameSite=Lax + X-Content-Type-Options: + - nosniff + X-Debug-Token: + - 99dzZ6fuzmQ6OKqdiJTJ + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.16 + X-Request-Id: + - 99dzZ6fuzmQ6OKqdiJTJ + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + body: + encoding: UTF-8 + string: '' + recorded_at: Tue, 23 Apr 2024 11:25:30 GMT +recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/create_folder_parent_not_found.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/create_folder_parent_not_found.yml new file mode 100644 index 000000000000..4763ed992dc3 --- /dev/null +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/create_folder_parent_not_found.yml @@ -0,0 +1,77 @@ +--- +http_interactions: +- request: + method: mkcol + uri: https://nextcloud.local/remote.php/dav/files/admin/DeathStar3/New%20Folder + body: + encoding: US-ASCII + string: '' + headers: + Authorization: + - Bearer + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + response: + status: + code: 409 + message: Conflict + headers: + Cache-Control: + - no-store, no-cache, must-revalidate + Content-Security-Policy: + - default-src 'none'; + Content-Type: + - application/xml; charset=utf-8 + Date: + - Mon, 22 Apr 2024 09:41:52 GMT + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.57 (Debian) + Set-Cookie: + - ocirabgzify6=7c2e27d691e6c1d763ecbf32e028a74a; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=z8reMZxLaXjDi01xtRT3%2B6WEvbPmS1GZMsfNLd2%2B0sOlKCUGUV9%2BoKK2U7Cx%2Fjr%2B%2FtSYAXauHznH5g7TLKHoY7VHsQrwbHOh8z%2FNkRU76lOT03mCoB5CCfiSwJSE8lws; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=7c2e27d691e6c1d763ecbf32e028a74a; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, ocirabgzify6=7c2e27d691e6c1d763ecbf32e028a74a; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=7c2e27d691e6c1d763ecbf32e028a74a; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=7c2e27d691e6c1d763ecbf32e028a74a; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=7c2e27d691e6c1d763ecbf32e028a74a; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=7c2e27d691e6c1d763ecbf32e028a74a; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=7c2e27d691e6c1d763ecbf32e028a74a; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=7c2e27d691e6c1d763ecbf32e028a74a; + path=/; secure; HttpOnly; SameSite=Lax + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.16 + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + Content-Length: + - '218' + body: + encoding: UTF-8 + string: | + + + Sabre\DAV\Exception\Conflict + Parent node does not exist + + recorded_at: Mon, 22 Apr 2024 09:41:52 GMT +recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/create_folder_root.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/create_folder_root.yml new file mode 100644 index 000000000000..24965787e5dd --- /dev/null +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/create_folder_root.yml @@ -0,0 +1,244 @@ +--- +http_interactions: +- request: + method: mkcol + uri: https://nextcloud.local/remote.php/dav/files/admin/F%C3%B6lder%20CreatedBy%20%C3%87ommand + body: + encoding: US-ASCII + string: '' + headers: + Authorization: + - Bearer + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + response: + status: + code: 201 + message: Created + headers: + Cache-Control: + - no-store, no-cache, must-revalidate + Content-Security-Policy: + - default-src 'none'; + Content-Type: + - text/html; charset=UTF-8 + Date: + - Tue, 23 Apr 2024 11:22:31 GMT + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Oc-Fileid: + - 00000377ocirabgzify6 + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.57 (Debian) + Set-Cookie: + - ocirabgzify6=dd7ce459e2cabdf972c3f87cd183ad7f; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=CucxndjvP8%2BXaXaLrjP0pUq7V3cwEomLjViS9pyhS7AlQ3hud9EhGHF7txkv3E9i4Y88dtnjQ9742lbIGQZwLrcdXIAR%2FfbHhteH2XhToQ1phd3vCH1kmLl0XBWdxUd1; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=dd7ce459e2cabdf972c3f87cd183ad7f; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, ocirabgzify6=dd7ce459e2cabdf972c3f87cd183ad7f; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=dd7ce459e2cabdf972c3f87cd183ad7f; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=dd7ce459e2cabdf972c3f87cd183ad7f; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=dd7ce459e2cabdf972c3f87cd183ad7f; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=dd7ce459e2cabdf972c3f87cd183ad7f; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=dd7ce459e2cabdf972c3f87cd183ad7f; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=dd7ce459e2cabdf972c3f87cd183ad7f; + path=/; secure; HttpOnly; SameSite=Lax + X-Content-Type-Options: + - nosniff + X-Debug-Token: + - HZEbHK0fWt8z74g7AAcr + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.16 + X-Request-Id: + - HZEbHK0fWt8z74g7AAcr + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + Content-Length: + - '0' + body: + encoding: UTF-8 + string: '' + recorded_at: Tue, 23 Apr 2024 11:22:31 GMT +- request: + method: propfind + uri: https://nextcloud.local/remote.php/dav/files/admin/F%C3%B6lder%20CreatedBy%20%C3%87ommand + body: + encoding: UTF-8 + string: | + + + + + + + + + + headers: + Authorization: + - Bearer + Depth: + - '1' + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/xml; charset=utf-8 + Content-Length: + - '207' + response: + status: + code: 207 + message: Multi-Status + headers: + Cache-Control: + - no-store, no-cache, must-revalidate + Content-Encoding: + - gzip + Content-Security-Policy: + - default-src 'none'; + Content-Type: + - application/xml; charset=utf-8 + Date: + - Tue, 23 Apr 2024 11:22:31 GMT + Dav: + - 1, 3, extended-mkcol, access-control, calendarserver-principal-property-search, + nextcloud-checksum-update, nc-calendar-search, nc-enable-birthday-calendar + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.57 (Debian) + Set-Cookie: + - ocirabgzify6=0b4b09c6179209355093498040262528; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=g4GnBMKuLL0cOxOzKNK%2FGCklEn8yQciQmOy9nNCYimhGWIHSx%2F%2F5Ax8K%2F3jd3OdCdnNiKhoZoJhLNAkxsf6wRDu3SGktO1bYNr%2BHfOEi3WBRMfNzLq%2B1YVCgTZ0jkDH4; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=0b4b09c6179209355093498040262528; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, ocirabgzify6=0b4b09c6179209355093498040262528; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=0b4b09c6179209355093498040262528; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=0b4b09c6179209355093498040262528; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=0b4b09c6179209355093498040262528; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=0b4b09c6179209355093498040262528; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=0b4b09c6179209355093498040262528; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=0b4b09c6179209355093498040262528; + path=/; secure; HttpOnly; SameSite=Lax + Vary: + - Brief,Prefer + X-Content-Type-Options: + - nosniff + X-Debug-Token: + - 9oDnx7CV0R7QW7DNSd4w + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.16 + X-Request-Id: + - 9oDnx7CV0R7QW7DNSd4w + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + Content-Length: + - '320' + body: + encoding: UTF-8 + string: | + + /remote.php/dav/files/admin/F%c3%b6lder%20CreatedBy%20%c3%87ommand/3770Tue, 23 Apr 2024 11:22:31 GMTadminHTTP/1.1 200 OK + recorded_at: Tue, 23 Apr 2024 11:22:32 GMT +- request: + method: delete + uri: https://nextcloud.local/remote.php/dav/files/admin/F%C3%B6lder%20CreatedBy%20%C3%87ommand + body: + encoding: US-ASCII + string: '' + headers: + Authorization: + - Bearer + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + response: + status: + code: 204 + message: No Content + headers: + Cache-Control: + - no-store, no-cache, must-revalidate + Content-Security-Policy: + - default-src 'none'; + Date: + - Tue, 23 Apr 2024 11:22:32 GMT + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.57 (Debian) + Set-Cookie: + - ocirabgzify6=947d30a592db32931270e3f8becceb30; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=sd7OS%2Fqp1IC6pwqeAQCG8sLf545iZxRlwKPWcqGv5cUCdPgHzprDPAgy7lhsTRflZ3QqDWo3RBUo7vlKoV6gNQhAXgb40dq3L6Dh4eDEq84A7%2BdrUPI1VH1GR%2FbS7ZEE; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=947d30a592db32931270e3f8becceb30; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, ocirabgzify6=947d30a592db32931270e3f8becceb30; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=947d30a592db32931270e3f8becceb30; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=947d30a592db32931270e3f8becceb30; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=947d30a592db32931270e3f8becceb30; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=947d30a592db32931270e3f8becceb30; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=947d30a592db32931270e3f8becceb30; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=947d30a592db32931270e3f8becceb30; + path=/; secure; HttpOnly; SameSite=Lax + X-Content-Type-Options: + - nosniff + X-Debug-Token: + - HV8GJcQ5Af2dJOnXTkKk + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.16 + X-Request-Id: + - HV8GJcQ5Af2dJOnXTkKk + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + body: + encoding: UTF-8 + string: '' + recorded_at: Tue, 23 Apr 2024 11:22:32 GMT +recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/delete_folder.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/delete_folder.yml new file mode 100644 index 000000000000..4b445746b8ff --- /dev/null +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/delete_folder.yml @@ -0,0 +1,244 @@ +--- +http_interactions: +- request: + method: mkcol + uri: https://nextcloud.local/remote.php/dav/files/admin/To%20Be%20Deleted%20Soon + body: + encoding: US-ASCII + string: '' + headers: + Authorization: + - Bearer + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + response: + status: + code: 201 + message: Created + headers: + Cache-Control: + - no-store, no-cache, must-revalidate + Content-Security-Policy: + - default-src 'none'; + Content-Type: + - text/html; charset=UTF-8 + Date: + - Tue, 23 Apr 2024 13:36:36 GMT + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Oc-Fileid: + - '00000379ocirabgzify6' + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.57 (Debian) + Set-Cookie: + - ocirabgzify6=bd3a1031dc4c68f08e0f4eda28c758f6; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=LFkW5aUhC0JvGYEYVrEsjbMMNDKyW8pKreIgjNqWYrgtuK5qKw%2Br45SWo6agU1ohWlFS4S%2BcuLOmRIo99PFrbHqoYD6UCD372RENgUGKTnE3hfI%2FXJxrUVQ17Awh5dI%2F; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=bd3a1031dc4c68f08e0f4eda28c758f6; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, ocirabgzify6=bd3a1031dc4c68f08e0f4eda28c758f6; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=bd3a1031dc4c68f08e0f4eda28c758f6; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=bd3a1031dc4c68f08e0f4eda28c758f6; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=bd3a1031dc4c68f08e0f4eda28c758f6; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=bd3a1031dc4c68f08e0f4eda28c758f6; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=bd3a1031dc4c68f08e0f4eda28c758f6; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=bd3a1031dc4c68f08e0f4eda28c758f6; + path=/; secure; HttpOnly; SameSite=Lax + X-Content-Type-Options: + - nosniff + X-Debug-Token: + - R73idPXWWf94QWLqivvW + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.16 + X-Request-Id: + - R73idPXWWf94QWLqivvW + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + Content-Length: + - '0' + body: + encoding: UTF-8 + string: '' + recorded_at: Tue, 23 Apr 2024 13:36:36 GMT +- request: + method: propfind + uri: https://nextcloud.local/remote.php/dav/files/admin/To%20Be%20Deleted%20Soon + body: + encoding: UTF-8 + string: | + + + + + + + + + + headers: + Authorization: + - Bearer + Depth: + - '1' + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/xml; charset=utf-8 + Content-Length: + - '207' + response: + status: + code: 207 + message: Multi-Status + headers: + Cache-Control: + - no-store, no-cache, must-revalidate + Content-Encoding: + - gzip + Content-Security-Policy: + - default-src 'none'; + Content-Type: + - application/xml; charset=utf-8 + Date: + - Tue, 23 Apr 2024 13:36:36 GMT + Dav: + - 1, 3, extended-mkcol, access-control, calendarserver-principal-property-search, + nextcloud-checksum-update, nc-calendar-search, nc-enable-birthday-calendar + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.57 (Debian) + Set-Cookie: + - ocirabgzify6=3ead1b22903eb48d95d46841973fdc8c; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=EiO9hoYhsC5yO8wFDc2e5OI%2BXAUQyotcDcl0NPWoZblj8UYBoC3JaXTDLCI%2B%2FxLpfp5nGHMY6lemCiJPriRT6Rw7POXv5%2FI1NzZEaI%2ByvpTwlOgLD52%2FFnGYNGFCE%2Bkk; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=3ead1b22903eb48d95d46841973fdc8c; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, ocirabgzify6=3ead1b22903eb48d95d46841973fdc8c; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=3ead1b22903eb48d95d46841973fdc8c; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=3ead1b22903eb48d95d46841973fdc8c; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=3ead1b22903eb48d95d46841973fdc8c; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=3ead1b22903eb48d95d46841973fdc8c; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=3ead1b22903eb48d95d46841973fdc8c; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=3ead1b22903eb48d95d46841973fdc8c; + path=/; secure; HttpOnly; SameSite=Lax + Vary: + - Brief,Prefer + X-Content-Type-Options: + - nosniff + X-Debug-Token: + - TBEGPFMhRymRLEho7tmG + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.16 + X-Request-Id: + - TBEGPFMhRymRLEho7tmG + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + Content-Length: + - '310' + body: + encoding: UTF-8 + string: | + + /remote.php/dav/files/admin/To%20Be%20Deleted%20Soon/3790Tue, 23 Apr 2024 13:36:36 GMTadminHTTP/1.1 200 OK + recorded_at: Tue, 23 Apr 2024 13:36:36 GMT +- request: + method: delete + uri: https://nextcloud.local/remote.php/dav/files/admin/To%20Be%20Deleted%20Soon + body: + encoding: US-ASCII + string: '' + headers: + Authorization: + - Bearer + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + response: + status: + code: 204 + message: No Content + headers: + Cache-Control: + - no-store, no-cache, must-revalidate + Content-Security-Policy: + - default-src 'none'; + Date: + - Tue, 23 Apr 2024 13:36:36 GMT + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.57 (Debian) + Set-Cookie: + - ocirabgzify6=6335b52c313d175b153e500e83ffbd56; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=6oL%2BK01S%2BXYDcD052qo3wdh0G0dD%2FMmMgcdquwnxsZf8OKNjMPus5wm%2FhSglZX%2FZH%2FKCrxzlZ%2FaSw2AnY%2B1BlTddMctfhE245BP4ofFwGj787fqwKE4hHI3Gl2iRW1GW; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=6335b52c313d175b153e500e83ffbd56; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, ocirabgzify6=6335b52c313d175b153e500e83ffbd56; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=6335b52c313d175b153e500e83ffbd56; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=6335b52c313d175b153e500e83ffbd56; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=6335b52c313d175b153e500e83ffbd56; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=6335b52c313d175b153e500e83ffbd56; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=6335b52c313d175b153e500e83ffbd56; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=6335b52c313d175b153e500e83ffbd56; + path=/; secure; HttpOnly; SameSite=Lax + X-Content-Type-Options: + - nosniff + X-Debug-Token: + - 9aN5vpkDdzT1aLqCkCdt + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.16 + X-Request-Id: + - 9aN5vpkDdzT1aLqCkCdt + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + body: + encoding: UTF-8 + string: '' + recorded_at: Tue, 23 Apr 2024 13:36:36 GMT +recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/delete_folder_not_found.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/delete_folder_not_found.yml new file mode 100644 index 000000000000..b0d15c9c5961 --- /dev/null +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/delete_folder_not_found.yml @@ -0,0 +1,77 @@ +--- +http_interactions: +- request: + method: delete + uri: https://nextcloud.local/remote.php/dav/files/admin/IDoNotExist + body: + encoding: US-ASCII + string: '' + headers: + Authorization: + - Bearer + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + response: + status: + code: 404 + message: Not Found + headers: + Cache-Control: + - no-store, no-cache, must-revalidate + Content-Security-Policy: + - default-src 'none'; + Content-Type: + - application/xml; charset=utf-8 + Date: + - Mon, 22 Apr 2024 09:17:13 GMT + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.57 (Debian) + Set-Cookie: + - ocirabgzify6=694195c25dfcf14ddaf8e788ee2bb565; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=DV%2F8xj6nADGr%2BgJxjxpqGqHSRZcaaj9ffJAMo75n5zY%2FfuoQMamUzZ80kMfgnVzaMeqhe67MiX90MiqC2bn2PwJudXoyfLZwpOorTFMpZ6Vr%2B9%2FyPa8VS7ZIrXpZq0wC; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=694195c25dfcf14ddaf8e788ee2bb565; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, ocirabgzify6=694195c25dfcf14ddaf8e788ee2bb565; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=694195c25dfcf14ddaf8e788ee2bb565; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=694195c25dfcf14ddaf8e788ee2bb565; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=694195c25dfcf14ddaf8e788ee2bb565; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=694195c25dfcf14ddaf8e788ee2bb565; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=694195c25dfcf14ddaf8e788ee2bb565; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=694195c25dfcf14ddaf8e788ee2bb565; + path=/; secure; HttpOnly; SameSite=Lax + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.16 + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + Content-Length: + - '241' + body: + encoding: UTF-8 + string: | + + + Sabre\DAV\Exception\NotFound + File with name //IDoNotExist could not be located + + recorded_at: Mon, 22 Apr 2024 09:17:13 GMT +recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/download_link_query_not_found.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/download_link_query_not_found.yml new file mode 100644 index 000000000000..928ae15557d3 --- /dev/null +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/download_link_query_not_found.yml @@ -0,0 +1,83 @@ +--- +http_interactions: +- request: + method: post + uri: https://nextcloud.local/ocs/v2.php/apps/dav/api/v1/direct + body: + encoding: UTF-8 + string: '{"fileId":"DeathStarNumberThree"}' + headers: + Ocs-Apirequest: + - 'true' + Accept: + - application/json + Authorization: + - Bearer + User-Agent: + - httpx.rb/1.2.3 + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '33' + response: + status: + code: 404 + message: Not Found + headers: + Cache-Control: + - no-cache, no-store, must-revalidate + Content-Security-Policy: + - default-src 'none';base-uri 'none';manifest-src 'self';frame-ancestors 'none' + Content-Type: + - application/json; charset=utf-8 + Date: + - Mon, 08 Apr 2024 11:45:08 GMT + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Feature-Policy: + - autoplay 'none';camera 'none';fullscreen 'none';geolocation 'none';microphone + 'none';payment 'none' + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.57 (Debian) + Set-Cookie: + - ocirabgzify6=a2f996f3ca668255552213b8f9f091a2; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=aIbW5xgiklv%2Fcfy4ntVIlzu3JMbuSiRJiXSk8ppLfI2gFKnJYXdBBVkte0boPAZC1p58VWSVgWFrZpFn8JNXGvMmRARg4nkegifImFgoO3njSdxgOPyt2MmBRp%2BNBTkp; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=a2f996f3ca668255552213b8f9f091a2; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, ocirabgzify6=a2f996f3ca668255552213b8f9f091a2; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=a2f996f3ca668255552213b8f9f091a2; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=a2f996f3ca668255552213b8f9f091a2; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=a2f996f3ca668255552213b8f9f091a2; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=a2f996f3ca668255552213b8f9f091a2; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=a2f996f3ca668255552213b8f9f091a2; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=a2f996f3ca668255552213b8f9f091a2; + path=/; secure; HttpOnly; SameSite=Lax + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.16 + X-Request-Id: + - pmHzKTYbkUkfiUSko8Er + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + Content-Length: + - '77' + body: + encoding: UTF-8 + string: '{"ocs":{"meta":{"status":"failure","statuscode":404,"message":""},"data":[]}}' + recorded_at: Mon, 08 Apr 2024 11:45:08 GMT +recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/download_link_query_success.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/download_link_query_success.yml new file mode 100644 index 000000000000..233b1009c28e --- /dev/null +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/download_link_query_success.yml @@ -0,0 +1,85 @@ +--- +http_interactions: +- request: + method: post + uri: https://nextcloud.local/ocs/v2.php/apps/dav/api/v1/direct + body: + encoding: UTF-8 + string: '{"fileId":"182"}' + headers: + Ocs-Apirequest: + - 'true' + Accept: + - application/json + Authorization: + - Bearer + User-Agent: + - httpx.rb/1.2.3 + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '16' + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-cache, no-store, must-revalidate + Content-Encoding: + - gzip + Content-Security-Policy: + - default-src 'none';base-uri 'none';manifest-src 'self';frame-ancestors 'none' + Content-Type: + - application/json; charset=utf-8 + Date: + - Mon, 08 Apr 2024 11:34:13 GMT + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Feature-Policy: + - autoplay 'none';camera 'none';fullscreen 'none';geolocation 'none';microphone + 'none';payment 'none' + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.57 (Debian) + Set-Cookie: + - ocirabgzify6=d78505eb55e4bc58109b19b7121e8152; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=de%2Fy4BrNKSmwAyqI5TXmTQEm00bLbAQuUO588brHwO3mqMDbLAX%2FV8UsKg79X3dVOiiu2ciGAFtiECiAa6vPM43vv3kwIZ6ko8gRqNfmTyKCGrXUj5HJlXGrM6hLOVkZ; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=d78505eb55e4bc58109b19b7121e8152; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, ocirabgzify6=d78505eb55e4bc58109b19b7121e8152; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=d78505eb55e4bc58109b19b7121e8152; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=d78505eb55e4bc58109b19b7121e8152; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=d78505eb55e4bc58109b19b7121e8152; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=d78505eb55e4bc58109b19b7121e8152; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=d78505eb55e4bc58109b19b7121e8152; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=d78505eb55e4bc58109b19b7121e8152; + path=/; secure; HttpOnly; SameSite=Lax + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.16 + X-Request-Id: + - 2Qcm5eyA9mV2rlnCD0bF + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + Content-Length: + - '183' + body: + encoding: UTF-8 + string: '{"ocs":{"meta":{"status":"ok","statuscode":200,"message":"OK"},"data":{"url":"https:\/\/nextcloud.local\/remote.php\/direct\/I5uqL5tARwsUPNuqSzTMJ8dvsCmqAxBF18ltlmzDEEFn5ZOyfbkAFoJ4rMSV"}}}' + recorded_at: Mon, 08 Apr 2024 11:34:13 GMT +recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/download_link_query_unauthorized.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/download_link_query_unauthorized.yml new file mode 100644 index 000000000000..3cafd5c27d0e --- /dev/null +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/download_link_query_unauthorized.yml @@ -0,0 +1,231 @@ +--- +http_interactions: +- request: + method: post + uri: https://nextcloud.local/ocs/v2.php/apps/dav/api/v1/direct + body: + encoding: UTF-8 + string: '{"fileId":"182"}' + headers: + Ocs-Apirequest: + - 'true' + Accept: + - application/json + Authorization: + - Bearer + User-Agent: + - httpx.rb/1.2.3 + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '16' + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-store, no-cache, must-revalidate + Content-Security-Policy: + - 'default-src ''self''; script-src ''self'' ''nonce-Ym5ici9rMUMyVXhrTW4xZVdnSGpteDlTM3NqbERtQVBwS09McHdLTzVFWT06WGlEYnl5c2txWHRXV2dVSkkxYTUvRkEwbkszT1hSQmgzUGJqa2s3WjFpMD0=''; + style-src ''self'' ''unsafe-inline''; frame-src *; img-src * data: blob:; + font-src ''self'' data:; media-src *; connect-src *; object-src ''none''; + base-uri ''self'';' + Content-Type: + - text/html; charset=UTF-8 + Date: + - Mon, 08 Apr 2024 11:49:14 GMT + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.57 (Debian) + Set-Cookie: + - ocirabgzify6=7571b36253a7b5bb08fed3bd3704a948; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=bRr4g92CSjqgQHBqGoGukTd2MQWaMuNIcD7RCXfooQDf4YOxz4NEnLUgmyGoA%2BMKZDSpxUt9At8WmawFyvoXg6Y%2FHEHr9n8WcdD%2B1sV3NeAoDhgfBBew7jUrk8N8p15w; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=7571b36253a7b5bb08fed3bd3704a948; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, ocirabgzify6=7571b36253a7b5bb08fed3bd3704a948; + path=/; secure; HttpOnly; SameSite=Lax + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.16 + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + Content-Length: + - '0' + body: + encoding: UTF-8 + string: '' + recorded_at: Mon, 08 Apr 2024 11:49:14 GMT +- request: + method: post + uri: https://nextcloud.local/index.php/apps/oauth2/api/v1/token + body: + encoding: ASCII-8BIT + string: grant_type=refresh_token&scope=&client_id=7fj7lpG0GOqwOGhHAyfGwd1oEgtbTto7mctu0IaSN3SE79o9Xs0q8k3kDiEwXDrM&client_secret=j7RoyauWeIpMc7cYdY3lewCGKxdgiAowonpGzmAuj9iRSvYBAGXhP7hvz9Hp7skR&refresh_token=FONj4kNQyzalItisiPfffipcIL0Ou4X5Q0fy0le2OmBkozdkzh8JNWGXnK9ZuQbDbCBe9B5wEpZzKofVUJdANHQ1yfX8wrqJtB6SbRqCcDEjzuSTssNwNYqIRsLHj4br + headers: + User-Agent: + - httpx.rb/1.2.3 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '328' + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-cache, no-store, must-revalidate + Content-Encoding: + - gzip + Content-Security-Policy: + - default-src 'none';base-uri 'none';manifest-src 'self';frame-ancestors 'none' + Content-Type: + - application/json; charset=utf-8 + Date: + - Mon, 08 Apr 2024 11:49:14 GMT + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Feature-Policy: + - autoplay 'none';camera 'none';fullscreen 'none';geolocation 'none';microphone + 'none';payment 'none' + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.57 (Debian) + Set-Cookie: + - ocirabgzify6=32fdd4735f2889baa600992b8dce34b1; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=8abrUaAOLRAvEmRgGKwbze42COmfd9SdI%2BnXosFrAs1UrBWMf0GfrM4hkElBwutAyn0uDZOjQDePQZHXmvzzTAHvKCHnq%2B3X%2BmqWeuUpUqP9eTeRAcKgNe8JpDXPxVq2; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=32fdd4735f2889baa600992b8dce34b1; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, ocirabgzify6=32fdd4735f2889baa600992b8dce34b1; + path=/; secure; HttpOnly; SameSite=Lax + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-Nextcloud-Bruteforce-Throttled: + - 200ms + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.16 + X-Request-Id: + - 8qP63HFarS2USyt8ZWfG + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + Content-Length: + - '270' + body: + encoding: UTF-8 + string: '{"access_token":"","token_type":"Bearer","expires_in":3600,"refresh_token":"4QiBy5UYfaB2F0akcmEEAX2k930io4lSDlyt6GAp8YZrbel9u8RNpEG1iJacenEn4Het529v6MSOUEp7F1dGK3TanOHs8rIRY9cGtmJzPpmb4mBsaevAVhZOZhpxDA6h","user_id":"admin"}' + recorded_at: Mon, 08 Apr 2024 11:49:14 GMT +- request: + method: post + uri: https://nextcloud.local/ocs/v2.php/apps/dav/api/v1/direct + body: + encoding: UTF-8 + string: '{"fileId":"182"}' + headers: + Ocs-Apirequest: + - 'true' + Accept: + - application/json + User-Agent: + - httpx.rb/1.2.3 + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '16' + Authorization: + - Bearer + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-cache, no-store, must-revalidate + Content-Encoding: + - gzip + Content-Security-Policy: + - default-src 'none';base-uri 'none';manifest-src 'self';frame-ancestors 'none' + Content-Type: + - application/json; charset=utf-8 + Date: + - Mon, 08 Apr 2024 11:49:14 GMT + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Feature-Policy: + - autoplay 'none';camera 'none';fullscreen 'none';geolocation 'none';microphone + 'none';payment 'none' + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.57 (Debian) + Set-Cookie: + - ocirabgzify6=b4494cef0f6f34a42b21ee3db7141854; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=joJPkVh672p401VEcBmDAEvEYVHvoMbBKBc1LdvxY%2B%2F4S9SplYlscEqJjQ4luQ%2BdbtIilHtt0tYbcg%2BeIvyrXUVgy5seyiJFU%2BQu3K7p7uqBN90cD6keFsGMNXuf%2FyQf; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=b4494cef0f6f34a42b21ee3db7141854; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, ocirabgzify6=b4494cef0f6f34a42b21ee3db7141854; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=b4494cef0f6f34a42b21ee3db7141854; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=b4494cef0f6f34a42b21ee3db7141854; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=b4494cef0f6f34a42b21ee3db7141854; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=b4494cef0f6f34a42b21ee3db7141854; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=b4494cef0f6f34a42b21ee3db7141854; + path=/; secure; HttpOnly; SameSite=Lax, ocirabgzify6=b4494cef0f6f34a42b21ee3db7141854; + path=/; secure; HttpOnly; SameSite=Lax + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.16 + X-Request-Id: + - y3jxZktoCQ4WGfESLoyu + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + Content-Length: + - '182' + body: + encoding: UTF-8 + string: '{"ocs":{"meta":{"status":"ok","statuscode":200,"message":"OK"},"data":{"url":"https:\/\/nextcloud.local\/remote.php\/direct\/tfqJBvmg8n89HX0iFVMhQHVYLTKsJx69aNnbGjU8HOrXfKTTVMBTFFu60SMI"}}}' + recorded_at: Mon, 08 Apr 2024 11:49:14 GMT +recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/file_path_to_id_map_query_invalid_parent.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/file_path_to_id_map_query_invalid_parent.yml new file mode 100644 index 000000000000..f10e1ae12f99 --- /dev/null +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/file_path_to_id_map_query_invalid_parent.yml @@ -0,0 +1,95 @@ +--- +http_interactions: +- request: + method: propfind + uri: https://nextcloud.local/remote.php/dav/files/admin/I/just/made/that/up + body: + encoding: UTF-8 + string: | + + + + + + + + headers: + Depth: + - infinity + Authorization: + - Bearer + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/xml; charset=utf-8 + Content-Length: + - '192' + response: + status: + code: 404 + message: Not Found + headers: + Cache-Control: + - no-store, no-cache, must-revalidate + Content-Security-Policy: + - default-src 'none'; + Content-Type: + - application/xml; charset=utf-8 + Date: + - Mon, 29 Apr 2024 09:27:02 GMT + Dav: + - 1, 3, extended-mkcol, access-control, calendarserver-principal-property-search, + nextcloud-checksum-update, nc-calendar-search, nc-enable-birthday-calendar + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.59 (Debian) + Set-Cookie: + - oc07ul6b4oaw=d5add640a32a32d41d02170d73dd30bd; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=eLXRRbs1vLi5xkH0WJYyVwQJqpjGro0c0Zg3nUyYr5VYgUqF9Bt2M8oZ9gNzG3r%2BetStTAiHiIzJoK9h3r4uj41hg%2Bp0rmSAbfcYTXntvL8N3gQIW%2BkkeMHfhya3npEJ; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=d5add640a32a32d41d02170d73dd30bd; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, oc07ul6b4oaw=d5add640a32a32d41d02170d73dd30bd; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=d5add640a32a32d41d02170d73dd30bd; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=d5add640a32a32d41d02170d73dd30bd; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=d5add640a32a32d41d02170d73dd30bd; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=d5add640a32a32d41d02170d73dd30bd; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=d5add640a32a32d41d02170d73dd30bd; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=d5add640a32a32d41d02170d73dd30bd; + path=/; secure; HttpOnly; SameSite=Lax + Vary: + - Brief,Prefer + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.18 + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + Content-Length: + - '231' + body: + encoding: UTF-8 + string: | + + + Sabre\DAV\Exception\NotFound + File with name //I could not be located + + recorded_at: Mon, 29 Apr 2024 09:27:02 GMT +recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/file_path_to_id_map_query_parent_folder.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/file_path_to_id_map_query_parent_folder.yml new file mode 100644 index 000000000000..a1fd79fd7d9d --- /dev/null +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/file_path_to_id_map_query_parent_folder.yml @@ -0,0 +1,98 @@ +--- +http_interactions: +- request: + method: propfind + uri: https://nextcloud.local/remote.php/dav/files/admin/Folder + body: + encoding: UTF-8 + string: | + + + + + + + + headers: + Depth: + - infinity + Authorization: + - Bearer + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/xml; charset=utf-8 + Content-Length: + - '192' + response: + status: + code: 207 + message: Multi-Status + headers: + Cache-Control: + - no-store, no-cache, must-revalidate + Content-Encoding: + - gzip + Content-Security-Policy: + - default-src 'none'; + Content-Type: + - application/xml; charset=utf-8 + Date: + - Mon, 29 Apr 2024 09:27:02 GMT + Dav: + - 1, 3, extended-mkcol, access-control, calendarserver-principal-property-search, + nextcloud-checksum-update, nc-calendar-search, nc-enable-birthday-calendar + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.59 (Debian) + Set-Cookie: + - oc07ul6b4oaw=bbc1b8b5d96bfb844ecb9f000d05ccf9; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=QGRWLsaUpaf5JsdI0cV162JoZvcVfhQVV61E6mpPh%2BvmQRlBwBWC%2BP42vMFWwOmkkWTTF9miI%2FBEoiqthA3UQ3ib0UiO40kKObozzqQBv5d%2FsnkiMF0pJJMnsdM8JWTT; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=bbc1b8b5d96bfb844ecb9f000d05ccf9; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, oc07ul6b4oaw=bbc1b8b5d96bfb844ecb9f000d05ccf9; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=bbc1b8b5d96bfb844ecb9f000d05ccf9; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=bbc1b8b5d96bfb844ecb9f000d05ccf9; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=bbc1b8b5d96bfb844ecb9f000d05ccf9; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=bbc1b8b5d96bfb844ecb9f000d05ccf9; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=bbc1b8b5d96bfb844ecb9f000d05ccf9; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=bbc1b8b5d96bfb844ecb9f000d05ccf9; + path=/; secure; HttpOnly; SameSite=Lax + Vary: + - Brief,Prefer + X-Content-Type-Options: + - nosniff + X-Debug-Token: + - C2A5yYZ2GjWsVq5rexEF + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.18 + X-Request-Id: + - C2A5yYZ2GjWsVq5rexEF + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + Content-Length: + - '366' + body: + encoding: UTF-8 + string: | + + /remote.php/dav/files/admin/Folder/169HTTP/1.1 200 OKHTTP/1.1 404 Not Found/remote.php/dav/files/admin/Folder/android-studio-2021.3.1.17-linux.tar.gz267HTTP/1.1 200 OKHTTP/1.1 404 Not Found/remote.php/dav/files/admin/Folder/empty/172HTTP/1.1 200 OKHTTP/1.1 404 Not Found/remote.php/dav/files/admin/Folder/%c3%9cml%c3%a6%c3%bbts/350HTTP/1.1 200 OKHTTP/1.1 404 Not Found/remote.php/dav/files/admin/Folder/%c3%9cml%c3%a6%c3%bbts/Anr%c3%bcchiges%20deutsches%20Dokument.docx351HTTP/1.1 200 OKHTTP/1.1 404 Not Found + recorded_at: Mon, 29 Apr 2024 09:27:02 GMT +recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/file_path_to_id_map_query_root.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/file_path_to_id_map_query_root.yml new file mode 100644 index 000000000000..ba95d5d2c2a7 --- /dev/null +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/file_path_to_id_map_query_root.yml @@ -0,0 +1,98 @@ +--- +http_interactions: +- request: + method: propfind + uri: https://nextcloud.local/remote.php/dav/files/admin/ + body: + encoding: UTF-8 + string: | + + + + + + + + headers: + Depth: + - infinity + Authorization: + - Bearer + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/xml; charset=utf-8 + Content-Length: + - '192' + response: + status: + code: 207 + message: Multi-Status + headers: + Cache-Control: + - no-store, no-cache, must-revalidate + Content-Encoding: + - gzip + Content-Security-Policy: + - default-src 'none'; + Content-Type: + - application/xml; charset=utf-8 + Date: + - Mon, 29 Apr 2024 09:21:37 GMT + Dav: + - 1, 3, extended-mkcol, access-control, calendarserver-principal-property-search, + nextcloud-checksum-update, nc-calendar-search, nc-enable-birthday-calendar + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.59 (Debian) + Set-Cookie: + - oc07ul6b4oaw=dce80de6ee27126cc7f063c499bbf2d2; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=qHbGrRqzApLz65yOgbjo0F50qZOP7tl5seLjGa5MF5xAsfWUBS86U4TbnP6wBuwrqH1oAgAR19gOq6FYJvymPZW3tkMSKR9kS5YaIuyIWuqjif2txirDkqaymU7cOOVG; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=dce80de6ee27126cc7f063c499bbf2d2; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, oc07ul6b4oaw=dce80de6ee27126cc7f063c499bbf2d2; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=dce80de6ee27126cc7f063c499bbf2d2; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=dce80de6ee27126cc7f063c499bbf2d2; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=dce80de6ee27126cc7f063c499bbf2d2; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=dce80de6ee27126cc7f063c499bbf2d2; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=dce80de6ee27126cc7f063c499bbf2d2; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=dce80de6ee27126cc7f063c499bbf2d2; + path=/; secure; HttpOnly; SameSite=Lax + Vary: + - Brief,Prefer + X-Content-Type-Options: + - nosniff + X-Debug-Token: + - 6Cb1TBf2Ullw34vWD3yf + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.18 + X-Request-Id: + - 6Cb1TBf2Ullw34vWD3yf + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + Content-Length: + - '477' + body: + encoding: UTF-8 + string: | + + /remote.php/dav/files/admin/2HTTP/1.1 200 OKHTTP/1.1 404 Not Found/remote.php/dav/files/admin/Folder/169HTTP/1.1 200 OKHTTP/1.1 404 Not Found/remote.php/dav/files/admin/Folder/android-studio-2021.3.1.17-linux.tar.gz267HTTP/1.1 200 OKHTTP/1.1 404 Not Found/remote.php/dav/files/admin/Folder/empty/172HTTP/1.1 200 OKHTTP/1.1 404 Not Found/remote.php/dav/files/admin/Folder/%c3%9cml%c3%a6%c3%bbts/350HTTP/1.1 200 OKHTTP/1.1 404 Not Found/remote.php/dav/files/admin/Folder/%c3%9cml%c3%a6%c3%bbts/Anr%c3%bcchiges%20deutsches%20Dokument.docx351HTTP/1.1 200 OKHTTP/1.1 404 Not Found/remote.php/dav/files/admin/Folder%20with%20spaces/165HTTP/1.1 200 OKHTTP/1.1 404 Not Found/remote.php/dav/files/admin/Folder%20with%20spaces/New%20Requests/166HTTP/1.1 200 OKHTTP/1.1 404 Not Found/remote.php/dav/files/admin/Folder%20with%20spaces/New%20Requests/request_001.md167HTTP/1.1 200 OKHTTP/1.1 404 Not Found/remote.php/dav/files/admin/Folder%20with%20spaces/New%20Requests/request_002.md168HTTP/1.1 200 OKHTTP/1.1 404 Not Found/remote.php/dav/files/admin/Practical_guide_to_BAGGM_Digital.pdf295HTTP/1.1 200 OKHTTP/1.1 404 Not Found/remote.php/dav/files/admin/Readme.md268HTTP/1.1 200 OKHTTP/1.1 404 Not Found + recorded_at: Mon, 29 Apr 2024 09:21:38 GMT +recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_folder_base_folder.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_folder_base_folder.yml index 2a2054d09b73..0bd69b404710 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_folder_base_folder.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_folder_base_folder.yml @@ -1,5 +1,64 @@ --- http_interactions: +- request: + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token + body: + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB + headers: + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-store, no-cache + Pragma: + - no-cache + Content-Type: + - application/json; charset=utf-8 + Expires: + - "-1" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - 1e6589ec-0d86-43bb-9355-0e5dec2b9100 + X-Ms-Ests-Server: + - 2.1.17846.6 - NEULR1 ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=AuNfQ9B8kalGnLYpnECivA-kbDoXAQAAADrxut0OAAAA; expires=Fri, 24-May-2024 + 12:25:31 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly + Date: + - Wed, 24 Apr 2024 12:25:30 GMT + Connection: + - close + Content-Length: + - '1735' + body: + encoding: UTF-8 + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Wed, 24 Apr 2024 12:25:31 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root/children @@ -7,18 +66,18 @@ http_interactions: encoding: UTF-8 string: '{"name":"Test Template Folder","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: - '86' + Authorization: + - Bearer response: status: code: 201 @@ -26,36 +85,34 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{7A129FB1-6704-4B6A-A3B8-AA2340B19859},1"' + - '"{FEE5765F-8356-460E-81EF-21ADECC85712},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs')/items('root')/children('01AZJL5PNRT4JHUBDHNJF2HOFKENALDGCZ') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs')/items('root')/children('01AZJL5PK7O3S74VUDBZDID3ZBVXWMQVYS') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - b3526d3e-2bde-41dc-a30d-804faf41a906 + - 10495f37-ef42-4002-8d19-e3726aeeec78 Client-Request-Id: - - b3526d3e-2bde-41dc-a30d-804faf41a906 + - 10495f37-ef42-4002-8d19-e3726aeeec78 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000001DD"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"000","RoleInstance":"FR1PEPF000010A0"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 19:22:53 GMT + - Wed, 24 Apr 2024 12:25:31 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs'')/root/children/$entity","@odata.etag":"\"{7A129FB1-6704-4B6A-A3B8-AA2340B19859},1\"","createdDateTime":"2024-02-14T19:22:54Z","eTag":"\"{7A129FB1-6704-4B6A-A3B8-AA2340B19859},1\"","id":"01AZJL5PNRT4JHUBDHNJF2HOFKENALDGCZ","lastModifiedDateTime":"2024-02-14T19:22:54Z","name":"Test - Template Folder","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Test%20Template%20Folder","cTag":"\"c:{7A129FB1-6704-4B6A-A3B8-AA2340B19859},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs'')/root/children/$entity","@odata.etag":"\"{FEE5765F-8356-460E-81EF-21ADECC85712},1\"","createdDateTime":"2024-04-24T12:25:32Z","eTag":"\"{FEE5765F-8356-460E-81EF-21ADECC85712},1\"","id":"01AZJL5PK7O3S74VUDBZDID3ZBVXWMQVYS","lastModifiedDateTime":"2024-04-24T12:25:32Z","name":"Test + Template Folder","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Test%20Template%20Folder","cTag":"\"c:{FEE5765F-8356-460E-81EF-21ADECC85712},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","sharepointIds":{"listId":"f3baf95b-362b-4740-80d8-4f593d28f5ec","listItemUniqueId":"049e81d0-52fb-4624-af6d-96611c29a9cc","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T19:22:54Z","lastModifiedDateTime":"2024-02-14T19:22:54Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 19:22:54 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","sharepointIds":{"listId":"f3baf95b-362b-4740-80d8-4f593d28f5ec","listItemUniqueId":"049e81d0-52fb-4624-af6d-96611c29a9cc","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:25:32Z","lastModifiedDateTime":"2024-04-24T12:25:32Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:25:32 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_folder_copy_successful.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_folder_copy_successful.yml index f27fe9526dd0..616454900be1 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_folder_copy_successful.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_folder_copy_successful.yml @@ -37,27 +37,29 @@ http_interactions: P3p: - CP="DSP CUR OTPi IND OTRi ONL FIN" X-Ms-Request-Id: - - 491c476a-33b1-49f1-a7b1-c26656cf1500 + - 0b1e20e9-3d35-4f0d-b0ae-b22504447700 X-Ms-Ests-Server: - - 2.1.17282.6 - SEC ProdSlices + - 2.1.17846.6 - NEULR1 ProdSlices + X-Ms-Srs: + - 1.P X-Xss-Protection: - '0' Set-Cookie: - - fpc=AnhoXUI4HRpIhGLme0PFt6GkbDoXAQAAABAKX90OAAAA; expires=Fri, 15-Mar-2024 - 19:22:56 GMT; path=/; secure; HttpOnly; SameSite=None + - fpc=AvGN5Z8uAztJhhuRvH_LCNakbDoXAQAAAD_xut0OAAAA; expires=Fri, 24-May-2024 + 12:25:35 GMT; path=/; secure; HttpOnly; SameSite=None - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly Date: - - Wed, 14 Feb 2024 19:22:55 GMT + - Wed, 24 Apr 2024 12:25:35 GMT Content-Length: - '1708' body: encoding: UTF-8 string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Wed, 14 Feb 2024 19:22:56 GMT + recorded_at: Wed, 24 Apr 2024 12:25:35 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PNRT4JHUBDHNJF2HOFKENALDGCZ/copy?@microsoft.graph.conflictBehavior=fail + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PK7O3S74VUDBZDID3ZBVXWMQVYS/copy?@microsoft.graph.conflictBehavior=fail body: encoding: UTF-8 string: '{"name":"My New Folder"}' @@ -69,7 +71,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -82,40 +84,40 @@ http_interactions: Cache-Control: - no-store, no-cache Location: - - https://finn.sharepoint.com/sites/openprojectfilestoragetests/_api/v2.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PIB44C43JBSMNHJSEFKZPG2NRYO?force303=1&tempauth=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAvZmlubi5zaGFyZXBvaW50LmNvbUA0ZDQ0YmYzNi05YjU2LTQ1YzAtODgwNy1iYmYzODZkZDA0N2YiLCJpc3MiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAiLCJuYmYiOiIxNzA3OTM4NTc2IiwiZXhwIjoiMTcwODAyNDk3NiIsImVuZHBvaW50dXJsIjoiT24zbEdKQVMxV2VkSDBWTjlzVjhXS084dkhQOWVvVHpPUjdCN0pWTDVHUT0iLCJlbmRwb2ludHVybExlbmd0aCI6IjE5NyIsImlzbG9vcGJhY2siOiJUcnVlIiwiY2lkIjoiNDYvbmoyd1dDRU9aUnpJeDhHaUJNUT09IiwidmVyIjoiaGFzaGVkcHJvb2Z0b2tlbiIsInNpdGVpZCI6Ik1XSTBZalkxTnpZdE9UQTJaQzAwWkRrMExUaG1ORGt0Tm1Rd01HRTVOVEEzWWpVdyIsImFwcF9kaXNwbGF5bmFtZSI6Ik9wZW5Qcm9qZWN0IERldiBBcHAiLCJuYW1laWQiOiI0MjYyZGYyYi03N2JiLTQ5YzItYTVkZi0yODM1NWRhNjc2ZDJANGQ0NGJmMzYtOWI1Ni00NWMwLTg4MDctYmJmMzg2ZGQwNDdmIiwicm9sZXMiOiJhbGxzaXRlcy5yZWFkIGFsbHNpdGVzLndyaXRlIGFsbGZpbGVzLndyaXRlIiwidHQiOiIxIiwiaXBhZGRyIjoiMjAuMTkwLjE5MC4xMDAifQ.5cKsq7vSyHhdS09LeBNrlASYFakCSwcSw8pwfMFdN7U + - https://finn.sharepoint.com/sites/openprojectfilestoragetests/_api/v2.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PL4T3SH2QCR55D34IN436TEXDAE?force303=1&tempauth=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBfZGlzcGxheW5hbWUiOiJPcGVuUHJvamVjdCBEZXYgQXBwIiwiYXVkIjoiMDAwMDAwMDMtMDAwMC0wZmYxLWNlMDAtMDAwMDAwMDAwMDAwL2Zpbm4uc2hhcmVwb2ludC5jb21ANGQ0NGJmMzYtOWI1Ni00NWMwLTg4MDctYmJmMzg2ZGQwNDdmIiwiY2lkIjoiVkxTdjdzMXJjRWlFeVQyT0RvRXI4dz09IiwiZW5kcG9pbnR1cmwiOiI5Qy9WdURjSGFjdzdDWmJhTWxCbWYvbDBZV1Ntb01KaEpRZnBQVDQzRzJZPSIsImVuZHBvaW50dXJsTGVuZ3RoIjoiMTk3IiwiZXhwIjoiMTcxNDA0NzkzNiIsImlwYWRkciI6IjIwLjE5MC4xOTAuMTAxIiwiaXNsb29wYmFjayI6IlRydWUiLCJpc3MiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAiLCJuYW1laWQiOiI0MjYyZGYyYi03N2JiLTQ5YzItYTVkZi0yODM1NWRhNjc2ZDJANGQ0NGJmMzYtOWI1Ni00NWMwLTg4MDctYmJmMzg2ZGQwNDdmIiwibmJmIjoiMTcxMzk2MTUzNiIsInJvbGVzIjoiYWxsc2l0ZXMucmVhZCBhbGxzaXRlcy53cml0ZSBhbGxmaWxlcy53cml0ZSIsInNpdGVpZCI6Ik1XSTBZalkxTnpZdE9UQTJaQzAwWkRrMExUaG1ORGt0Tm1Rd01HRTVOVEEzWWpVdyIsInR0IjoiMSIsInZlciI6Imhhc2hlZHByb29mdG9rZW4ifQ.eGGj7QeyBMbziVKEPS93_-LqTgUhla7iYy2Sg3lnbxo Strict-Transport-Security: - max-age=31536000 Request-Id: - - 8fe7afe3-166c-4308-9947-3231f0688131 + - eeafb454-6bcd-4870-84c9-3d8e0e812bf3 Client-Request-Id: - - 8fe7afe3-166c-4308-9947-3231f0688131 + - eeafb454-6bcd-4870-84c9-3d8e0e812bf3 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000001DF"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"000","RoleInstance":"FR1PEPF0000109E"}}' Date: - - Wed, 14 Feb 2024 19:22:56 GMT + - Wed, 24 Apr 2024 12:25:36 GMT Content-Length: - '0' body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 19:22:57 GMT + recorded_at: Wed, 24 Apr 2024 12:25:36 GMT - request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root/children?$select=name,id,folder + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token body: - encoding: US-ASCII - string: '' + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' response: status: code: 200 @@ -123,51 +125,56 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked + Pragma: + - no-cache Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Vary: - - Accept-Encoding + - application/json; charset=utf-8 + Expires: + - "-1" Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - bc70bc5e-4ef1-46ad-8121-04c8816f3c95 - Client-Request-Id: - - bc70bc5e-4ef1-46ad-8121-04c8816f3c95 - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000003EE"}}' - Odata-Version: - - '4.0' + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - '09e5b60f-e68d-47ab-a645-0757beaf7a00' + X-Ms-Ests-Server: + - 2.1.17846.6 - NEULR1 ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=AioRurQSOnVHiO77KkNdQ2ykbDoXAQAAAEDxut0OAAAA; expires=Fri, 24-May-2024 + 12:25:36 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly Date: - - Wed, 14 Feb 2024 19:22:56 GMT + - Wed, 24 Apr 2024 12:25:36 GMT + Connection: + - close + Content-Length: + - '1735' body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs'')/root/children(name,id,folder)","value":[{"@odata.etag":"\"{6087B980-4C01-4020-BBF2-1E349BD0C831},1\"","id":"01AZJL5PMAXGDWAAKMEBALX4Q6GSN5BSBR","name":"Folder","folder":{"childCount":5}},{"@odata.etag":"\"{BAABD554-2A6E-4B51-A07F-22B54378CC94},1\"","id":"01AZJL5PKU2WV3U3RKKFF2A7ZCWVBXRTEU","name":"Folder - with spaces","folder":{"childCount":4}},{"@odata.etag":"\"{CD05E701-32A4-4E63-9910-AACBCDA6C70E},1\"","id":"01AZJL5PIB44C43JBSMNHJSEFKZPG2NRYO","name":"My - New Folder","folder":{"childCount":2}},{"@odata.etag":"\"{73565DBB-32EA-46CE-9F64-A01EDD691B01},3\"","id":"01AZJL5PN3LVLHH2RSZZDJ6ZFAD3OWSGYB","name":"Permissions - Folder","folder":{"childCount":0}},{"@odata.etag":"\"{7A129FB1-6704-4B6A-A3B8-AA2340B19859},1\"","id":"01AZJL5PNRT4JHUBDHNJF2HOFKENALDGCZ","name":"Test - Template Folder","folder":{"childCount":2}}]}' - recorded_at: Wed, 14 Feb 2024 19:22:57 GMT + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Wed, 24 Apr 2024 12:25:36 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PIB44C43JBSMNHJSEFKZPG2NRYO + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PL4T3SH2QCR55D34IN436TEXDAE body: encoding: US-ASCII string: '' headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate + Authorization: + - Bearer response: status: code: 204 @@ -178,15 +185,15 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 716716ac-9f43-4cd5-9b05-b6de97edbfd3 + - 829f0487-52a1-4043-a243-8c1498c2b9e0 Client-Request-Id: - - 716716ac-9f43-4cd5-9b05-b6de97edbfd3 + - 829f0487-52a1-4043-a243-8c1498c2b9e0 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000001E6"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"000","RoleInstance":"FR1PEPF0000107D"}}' Date: - - Wed, 14 Feb 2024 19:22:57 GMT + - Wed, 24 Apr 2024 12:25:36 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 19:22:57 GMT + recorded_at: Wed, 24 Apr 2024 12:25:37 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_folder_existing_folders.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_folder_existing_folders.yml index a3dcd6893f9a..ccce0ed55bc7 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_folder_existing_folders.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_folder_existing_folders.yml @@ -37,24 +37,26 @@ http_interactions: P3p: - CP="DSP CUR OTPi IND OTRi ONL FIN" X-Ms-Request-Id: - - 84773f73-ac7f-48cb-b431-55cbd33d1200 + - 6b6e6f98-f504-4d1e-89ee-d80ea9797c00 X-Ms-Ests-Server: - - 2.1.17282.6 - FRC ProdSlices + - 2.1.17846.6 - WEULR1 ProdSlices + X-Ms-Srs: + - 1.P X-Xss-Protection: - '0' Set-Cookie: - - fpc=AjCv_Bb-N59Jgeqer0Ba5g-kbDoXAQAAAAsKX90OAAAA; expires=Fri, 15-Mar-2024 - 19:22:52 GMT; path=/; secure; HttpOnly; SameSite=None + - fpc=Ah9Kxo1ii3pBpZUzkQee-bykbDoXAQAAADrxut0OAAAA; expires=Fri, 24-May-2024 + 12:25:30 GMT; path=/; secure; HttpOnly; SameSite=None - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly Date: - - Wed, 14 Feb 2024 19:22:52 GMT + - Wed, 24 Apr 2024 12:25:30 GMT Content-Length: - '1708' body: encoding: UTF-8 string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Wed, 14 Feb 2024 19:22:52 GMT + recorded_at: Wed, 24 Apr 2024 12:25:30 GMT - request: method: get uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root/children?$select=name,id,folder @@ -69,7 +71,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -79,30 +81,25 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 61e81838-7829-41a7-aa97-a42f6a231c3a + - 41608542-7e95-4037-90bb-c324eced64c6 Client-Request-Id: - - 61e81838-7829-41a7-aa97-a42f6a231c3a + - 41608542-7e95-4037-90bb-c324eced64c6 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000003EE"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"000","RoleInstance":"FR1PEPF000007AC"}}' Date: - - Wed, 14 Feb 2024 19:22:52 GMT + - Wed, 24 Apr 2024 12:25:30 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs'')/root/children(name,id,folder)","value":[{"@odata.etag":"\"{6087B980-4C01-4020-BBF2-1E349BD0C831},1\"","id":"01AZJL5PMAXGDWAAKMEBALX4Q6GSN5BSBR","name":"Folder","folder":{"childCount":5}},{"@odata.etag":"\"{BAABD554-2A6E-4B51-A07F-22B54378CC94},1\"","id":"01AZJL5PKU2WV3U3RKKFF2A7ZCWVBXRTEU","name":"Folder + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)","value":[{"@odata.etag":"\"{6087B980-4C01-4020-BBF2-1E349BD0C831},1\"","id":"01AZJL5PMAXGDWAAKMEBALX4Q6GSN5BSBR","name":"Folder","folder":{"childCount":5}},{"@odata.etag":"\"{BAABD554-2A6E-4B51-A07F-22B54378CC94},1\"","id":"01AZJL5PKU2WV3U3RKKFF2A7ZCWVBXRTEU","name":"Folder with spaces","folder":{"childCount":4}},{"@odata.etag":"\"{73565DBB-32EA-46CE-9F64-A01EDD691B01},3\"","id":"01AZJL5PN3LVLHH2RSZZDJ6ZFAD3OWSGYB","name":"Permissions - Folder","folder":{"childCount":0}}]}' - recorded_at: Wed, 14 Feb 2024 19:22:52 GMT + Folder","folder":{"childCount":0,"decorator":{"iconColor":"darkRed"}}}]}' + recorded_at: Wed, 24 Apr 2024 12:25:31 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_folder_no_overwrite.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_folder_no_overwrite.yml index 9137bac02912..11ec229a761b 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_folder_no_overwrite.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_folder_no_overwrite.yml @@ -37,27 +37,29 @@ http_interactions: P3p: - CP="DSP CUR OTPi IND OTRi ONL FIN" X-Ms-Request-Id: - - 96563b2f-18f0-42f1-bff0-e8a3a6afba00 + - ff114599-2b16-4e88-8dea-a9a419c19300 X-Ms-Ests-Server: - - 2.1.17282.6 - WEULR1 ProdSlices + - 2.1.17846.6 - WEULR1 ProdSlices + X-Ms-Srs: + - 1.P X-Xss-Protection: - '0' Set-Cookie: - - fpc=Aow4CwlsPWdHubKXADsWoDykbDoXAQAAABAKX90OAAAA; expires=Fri, 15-Mar-2024 - 19:22:57 GMT; path=/; secure; HttpOnly; SameSite=None + - fpc=AuqfvWCbIcRGhZuoYIZGOQukbDoXAQAAAEDxut0OAAAA; expires=Fri, 24-May-2024 + 12:25:37 GMT; path=/; secure; HttpOnly; SameSite=None - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly Date: - - Wed, 14 Feb 2024 19:22:57 GMT + - Wed, 24 Apr 2024 12:25:37 GMT Content-Length: - '1708' body: encoding: UTF-8 string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Wed, 14 Feb 2024 19:22:57 GMT + recorded_at: Wed, 24 Apr 2024 12:25:37 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PNRT4JHUBDHNJF2HOFKENALDGCZ/copy?@microsoft.graph.conflictBehavior=fail + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PK7O3S74VUDBZDID3ZBVXWMQVYS/copy?@microsoft.graph.conflictBehavior=fail body: encoding: UTF-8 string: '{"name":"Folder"}' @@ -69,7 +71,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -81,8 +83,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json Content-Encoding: @@ -92,15 +92,15 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - c25ccc75-416d-40b6-a2c5-58392738a66b + - d7be4068-7873-480e-9bf3-8803326071fc Client-Request-Id: - - c25ccc75-416d-40b6-a2c5-58392738a66b + - d7be4068-7873-480e-9bf3-8803326071fc X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000001E9"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"000","RoleInstance":"FR1PEPF0000079B"}}' Date: - - Wed, 14 Feb 2024 19:22:57 GMT + - Wed, 24 Apr 2024 12:25:37 GMT body: encoding: UTF-8 - string: '{"error":{"code":"nameAlreadyExists","message":"Name already exists","innerError":{"date":"2024-02-14T19:22:58","request-id":"c25ccc75-416d-40b6-a2c5-58392738a66b","client-request-id":"c25ccc75-416d-40b6-a2c5-58392738a66b"}}}' - recorded_at: Wed, 14 Feb 2024 19:22:58 GMT + string: '{"error":{"code":"nameAlreadyExists","message":"Name already exists","innerError":{"date":"2024-04-24T12:25:37","request-id":"d7be4068-7873-480e-9bf3-8803326071fc","client-request-id":"d7be4068-7873-480e-9bf3-8803326071fc"}}}' + recorded_at: Wed, 24 Apr 2024 12:25:37 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_folder_setup.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_folder_setup.yml index d93bacf52d70..d5714e823247 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_folder_setup.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_folder_setup.yml @@ -4,19 +4,19 @@ http_interactions: method: post uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token body: - encoding: UTF-8 - string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB headers: User-Agent: - - Rack::OAuth2 (2.2.1) - Authorization: - - Basic - Content-Type: - - application/x-www-form-urlencoded - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + - httpx.rb/1.2.4 Accept: - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' response: status: code: 200 @@ -37,43 +37,47 @@ http_interactions: P3p: - CP="DSP CUR OTPi IND OTRi ONL FIN" X-Ms-Request-Id: - - 2ca5db6d-97d5-4df5-95e7-e399344e1000 + - 49fea6e6-03f9-457c-932c-6f111bcf7900 X-Ms-Ests-Server: - - 2.1.17282.6 - FRC ProdSlices + - 2.1.17846.6 - NEULR1 ProdSlices + X-Ms-Srs: + - 1.P X-Xss-Protection: - '0' Set-Cookie: - - fpc=AkiA71EV7VdLgvAjknEEJhmkbDoXAQAAAA4KX90OAAAA; expires=Fri, 15-Mar-2024 - 19:22:54 GMT; path=/; secure; HttpOnly; SameSite=None - - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly + - fpc=Ag_GW70JUf9Mg_1SKDNR7N6kbDoXAQAAADzxut0OAAAA; expires=Fri, 24-May-2024 + 12:25:32 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly Date: - - Wed, 14 Feb 2024 19:22:53 GMT + - Wed, 24 Apr 2024 12:25:32 GMT + Connection: + - close Content-Length: - - '1708' + - '1735' body: encoding: UTF-8 string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Wed, 14 Feb 2024 19:22:54 GMT + recorded_at: Wed, 24 Apr 2024 12:25:32 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PNRT4JHUBDHNJF2HOFKENALDGCZ/children + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PK7O3S74VUDBZDID3ZBVXWMQVYS/children body: encoding: UTF-8 string: '{"name":"Empty Subfolder","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: - '81' + Authorization: + - Bearer response: status: code: 201 @@ -81,54 +85,52 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{CE9B104B-61BE-474C-AD2E-497902867219},1"' + - '"{455B5C32-A03E-4ACA-9BB3-50019F255AFF},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs')/items('01AZJL5PNRT4JHUBDHNJF2HOFKENALDGCZ')/children('01AZJL5PKLCCN45PTBJRD22LSJPEBIM4QZ') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs')/items('01AZJL5PK7O3S74VUDBZDID3ZBVXWMQVYS')/children('01AZJL5PJSLRNUKPVAZJFJXM2QAGPSKWX7') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 7aadf85b-1af3-4528-b477-3645010f8687 + - 9d5870c0-0ad2-4e36-ae2d-98d684db4758 Client-Request-Id: - - 7aadf85b-1af3-4528-b477-3645010f8687 + - 9d5870c0-0ad2-4e36-ae2d-98d684db4758 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000003FE"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"000","RoleInstance":"FR1PEPF00001084"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 19:22:54 GMT + - Wed, 24 Apr 2024 12:25:32 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs'')/items(''01AZJL5PNRT4JHUBDHNJF2HOFKENALDGCZ'')/children/$entity","@odata.etag":"\"{CE9B104B-61BE-474C-AD2E-497902867219},1\"","createdDateTime":"2024-02-14T19:22:55Z","eTag":"\"{CE9B104B-61BE-474C-AD2E-497902867219},1\"","id":"01AZJL5PKLCCN45PTBJRD22LSJPEBIM4QZ","lastModifiedDateTime":"2024-02-14T19:22:55Z","name":"Empty - Subfolder","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Test%20Template%20Folder/Empty%20Subfolder","cTag":"\"c:{CE9B104B-61BE-474C-AD2E-497902867219},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs'')/items(''01AZJL5PK7O3S74VUDBZDID3ZBVXWMQVYS'')/children/$entity","@odata.etag":"\"{455B5C32-A03E-4ACA-9BB3-50019F255AFF},1\"","createdDateTime":"2024-04-24T12:25:33Z","eTag":"\"{455B5C32-A03E-4ACA-9BB3-50019F255AFF},1\"","id":"01AZJL5PJSLRNUKPVAZJFJXM2QAGPSKWX7","lastModifiedDateTime":"2024-04-24T12:25:33Z","name":"Empty + Subfolder","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Test%20Template%20Folder/Empty%20Subfolder","cTag":"\"c:{455B5C32-A03E-4ACA-9BB3-50019F255AFF},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","driveType":"documentLibrary","id":"01AZJL5PNRT4JHUBDHNJF2HOFKENALDGCZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:/Test - Template Folder","sharepointIds":{"listId":"f3baf95b-362b-4740-80d8-4f593d28f5ec","listItemUniqueId":"7a129fb1-6704-4b6a-a3b8-aa2340b19859","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T19:22:55Z","lastModifiedDateTime":"2024-02-14T19:22:55Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 19:22:54 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","driveType":"documentLibrary","id":"01AZJL5PK7O3S74VUDBZDID3ZBVXWMQVYS","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:/Test + Template Folder","sharepointIds":{"listId":"f3baf95b-362b-4740-80d8-4f593d28f5ec","listItemUniqueId":"fee5765f-8356-460e-81ef-21adecc85712","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:25:33Z","lastModifiedDateTime":"2024-04-24T12:25:33Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:25:33 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PNRT4JHUBDHNJF2HOFKENALDGCZ/children + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PK7O3S74VUDBZDID3ZBVXWMQVYS/children body: encoding: UTF-8 string: '{"name":"Subfolder with File","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json + Authorization: + - Bearer User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: @@ -140,42 +142,40 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{F64C5C41-C6CF-4A02-8059-5AB340B2D3EA},1"' + - '"{A28DA413-3770-4D7B-B636-5BD747894EFF},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs')/items('01AZJL5PNRT4JHUBDHNJF2HOFKENALDGCZ')/children('01AZJL5PKBLRGPNT6GAJFIAWK2WNALFU7K') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs')/items('01AZJL5PK7O3S74VUDBZDID3ZBVXWMQVYS')/children('01AZJL5PITUSG2E4BXPNG3MNS325DYSTX7') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - a83cf708-3e14-4d02-8aee-2bf732a77a1d + - 7e9cc2cd-279e-414c-9000-e2dd992d86b4 Client-Request-Id: - - a83cf708-3e14-4d02-8aee-2bf732a77a1d + - 7e9cc2cd-279e-414c-9000-e2dd992d86b4 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000001DE"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"000","RoleInstance":"FR1PEPF00000C2E"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 19:22:55 GMT + - Wed, 24 Apr 2024 12:25:33 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs'')/items(''01AZJL5PNRT4JHUBDHNJF2HOFKENALDGCZ'')/children/$entity","@odata.etag":"\"{F64C5C41-C6CF-4A02-8059-5AB340B2D3EA},1\"","createdDateTime":"2024-02-14T19:22:55Z","eTag":"\"{F64C5C41-C6CF-4A02-8059-5AB340B2D3EA},1\"","id":"01AZJL5PKBLRGPNT6GAJFIAWK2WNALFU7K","lastModifiedDateTime":"2024-02-14T19:22:55Z","name":"Subfolder - with File","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Test%20Template%20Folder/Subfolder%20with%20File","cTag":"\"c:{F64C5C41-C6CF-4A02-8059-5AB340B2D3EA},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs'')/items(''01AZJL5PK7O3S74VUDBZDID3ZBVXWMQVYS'')/children/$entity","@odata.etag":"\"{A28DA413-3770-4D7B-B636-5BD747894EFF},1\"","createdDateTime":"2024-04-24T12:25:33Z","eTag":"\"{A28DA413-3770-4D7B-B636-5BD747894EFF},1\"","id":"01AZJL5PITUSG2E4BXPNG3MNS325DYSTX7","lastModifiedDateTime":"2024-04-24T12:25:33Z","name":"Subfolder + with File","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Test%20Template%20Folder/Subfolder%20with%20File","cTag":"\"c:{A28DA413-3770-4D7B-B636-5BD747894EFF},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","driveType":"documentLibrary","id":"01AZJL5PNRT4JHUBDHNJF2HOFKENALDGCZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:/Test - Template Folder","sharepointIds":{"listId":"f3baf95b-362b-4740-80d8-4f593d28f5ec","listItemUniqueId":"7a129fb1-6704-4b6a-a3b8-aa2340b19859","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T19:22:55Z","lastModifiedDateTime":"2024-02-14T19:22:55Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 19:22:55 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","driveType":"documentLibrary","id":"01AZJL5PK7O3S74VUDBZDID3ZBVXWMQVYS","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:/Test + Template Folder","sharepointIds":{"listId":"f3baf95b-362b-4740-80d8-4f593d28f5ec","listItemUniqueId":"fee5765f-8356-460e-81ef-21adecc85712","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:25:33Z","lastModifiedDateTime":"2024-04-24T12:25:33Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:25:33 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PKBLRGPNT6GAJFIAWK2WNALFU7K:/files_query_root.yml:/createUploadSession + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PITUSG2E4BXPNG3MNS325DYSTX7:/files_query_root.yml:/createUploadSession body: encoding: UTF-8 string: '{"item":{"@microsoft.graph.conflictBehavior":"rename","name":"files_query_root.yml"}}' @@ -185,7 +185,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept: - "*/*" Accept-Encoding: @@ -199,8 +199,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -212,22 +210,22 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 3182112b-b079-4ce1-9f0b-f0f8499d8b25 + - 9cefbeff-8b45-4bb2-8c9a-7f21b23f1641 Client-Request-Id: - - 3182112b-b079-4ce1-9f0b-f0f8499d8b25 + - 9cefbeff-8b45-4bb2-8c9a-7f21b23f1641 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000001E5"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"000","RoleInstance":"FR1PEPF000007A1"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 19:22:55 GMT + - Wed, 24 Apr 2024 12:25:34 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.uploadSession","expirationDateTime":"2024-02-14T19:37:55.435Z","nextExpectedRanges":["0-"],"uploadUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/_api/v2.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PLGXVQE6VOQMVHLQ4X6J7A5CA44/uploadSession?guid=''5408c609-cf9e-4d31-9e3f-77b6706995d9''&overwrite=False&rename=True&dc=0&tempauth=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAvZmlubi5zaGFyZXBvaW50LmNvbUA0ZDQ0YmYzNi05YjU2LTQ1YzAtODgwNy1iYmYzODZkZDA0N2YiLCJpc3MiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAiLCJuYmYiOiIxNzA3OTM4NTc1IiwiZXhwIjoiMTcwODAyNDk3NSIsImVuZHBvaW50dXJsIjoiNnp3akU1Tzh6anBtVEpUYzJsWG5jTGE3U0w0T25qdzdJYjQ0bUFzVVZUVT0iLCJlbmRwb2ludHVybExlbmd0aCI6IjI3NyIsImlzbG9vcGJhY2siOiJUcnVlIiwiY2lkIjoiS3hHQ01YbXc0VXlmQy9ENFNaMkxKUT09IiwidmVyIjoiaGFzaGVkcHJvb2Z0b2tlbiIsInNpdGVpZCI6Ik1XSTBZalkxTnpZdE9UQTJaQzAwWkRrMExUaG1ORGt0Tm1Rd01HRTVOVEEzWWpVdyIsImFwcF9kaXNwbGF5bmFtZSI6Ik9wZW5Qcm9qZWN0IERldiBBcHAiLCJnaXZlbl9uYW1lIjoiTWFyY2VsbG8iLCJmYW1pbHlfbmFtZSI6IlJvY2hhIiwic2lnbmluX3N0YXRlIjoiW1wia21zaVwiXSIsImFwcGlkIjoiNDI2MmRmMmItNzdiYi00OWMyLWE1ZGYtMjgzNTVkYTY3NmQyIiwidGlkIjoiNGQ0NGJmMzYtOWI1Ni00NWMwLTg4MDctYmJmMzg2ZGQwNDdmIiwidXBuIjoibXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20iLCJwdWlkIjoiMTAwMzIwMDJFRDE5QkE1MCIsImNhY2hla2V5IjoiMGguZnxtZW1iZXJzaGlwfDEwMDMyMDAyZWQxOWJhNTBAbGl2ZS5jb20iLCJzY3AiOiJhbGxmaWxlcy53cml0ZSBhbGxzaXRlcy5yZWFkIGFsbHNpdGVzLndyaXRlIGFsbHByb2ZpbGVzLnJlYWQiLCJ0dCI6IjIiLCJpcGFkZHIiOiIyMC4xOTAuMTkwLjEwMCJ9.7ihoc39-_4ldgPOikQ7-gEcAeCVOEtXvH-MObPOwqUY"}' - recorded_at: Wed, 14 Feb 2024 19:22:55 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.uploadSession","expirationDateTime":"2024-04-24T12:40:34.384Z","nextExpectedRanges":["0-"],"uploadUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/_api/v2.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PKEWXDLTI6AFBC3V6T5CEAPMHMR/uploadSession?guid=''a042763d-fba1-4f11-943a-513f487ef91f''&overwrite=False&rename=True&dc=0&tempauth=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBfZGlzcGxheW5hbWUiOiJPcGVuUHJvamVjdCBEZXYgQXBwIiwiYXBwaWQiOiI0MjYyZGYyYi03N2JiLTQ5YzItYTVkZi0yODM1NWRhNjc2ZDIiLCJhdWQiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAvZmlubi5zaGFyZXBvaW50LmNvbUA0ZDQ0YmYzNi05YjU2LTQ1YzAtODgwNy1iYmYzODZkZDA0N2YiLCJjYWNoZWtleSI6IjBoLmZ8bWVtYmVyc2hpcHwxMDAzMjAwMmVkMmNhMDBlQGxpdmUuY29tIiwiY2lkIjoiLzc3dm5FV0xza3VNbW44aHNqOFdRUT09IiwiZW5kcG9pbnR1cmwiOiJGcmNXVWtmTXpWQlhaL1FnUnY0UnJBTlA1SmZoMFNuWTl2MUR2U2sralJBPSIsImVuZHBvaW50dXJsTGVuZ3RoIjoiMjc3IiwiZXhwIjoiMTcxNDA0NzkzNCIsImZhbWlseV9uYW1lIjoiU2NodWJlcnQiLCJnaXZlbl9uYW1lIjoiRXJpYyIsImlwYWRkciI6IjIwLjE5MC4xOTAuMTAxIiwiaXNsb29wYmFjayI6IlRydWUiLCJpc3MiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAiLCJuYmYiOiIxNzEzOTYxNTM0IiwicHVpZCI6IjEwMDMyMDAyRUQyQ0EwMEUiLCJzY3AiOiJhbGxmaWxlcy53cml0ZSBhbGxzaXRlcy5yZWFkIGFsbHNpdGVzLndyaXRlIGFsbHByb2ZpbGVzLnJlYWQiLCJzaXRlaWQiOiJNV0kwWWpZMU56WXRPVEEyWkMwMFpEazBMVGhtTkRrdE5tUXdNR0U1TlRBM1lqVXciLCJ0aWQiOiI0ZDQ0YmYzNi05YjU2LTQ1YzAtODgwNy1iYmYzODZkZDA0N2YiLCJ0dCI6IjIiLCJ1cG4iOiJlc2NodWJlcnQub3Bfb3V0bG9vay5jb20jZXh0I0BmaW5uLm9ubWljcm9zb2Z0LmNvbSIsInZlciI6Imhhc2hlZHByb29mdG9rZW4ifQ.NGbmOHI6aWlPQyM7lvdn4hhCLyAQuA3Apb2TymvU5VM"}' + recorded_at: Wed, 24 Apr 2024 12:25:34 GMT - request: method: put - uri: https://finn.sharepoint.com/sites/openprojectfilestoragetests/_api/v2.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PLGXVQE6VOQMVHLQ4X6J7A5CA44/uploadSession?dc=0&guid=%275408c609-cf9e-4d31-9e3f-77b6706995d9%27&overwrite=False&rename=True&tempauth=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAvZmlubi5zaGFyZXBvaW50LmNvbUA0ZDQ0YmYzNi05YjU2LTQ1YzAtODgwNy1iYmYzODZkZDA0N2YiLCJpc3MiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAiLCJuYmYiOiIxNzA3OTM4NTc1IiwiZXhwIjoiMTcwODAyNDk3NSIsImVuZHBvaW50dXJsIjoiNnp3akU1Tzh6anBtVEpUYzJsWG5jTGE3U0w0T25qdzdJYjQ0bUFzVVZUVT0iLCJlbmRwb2ludHVybExlbmd0aCI6IjI3NyIsImlzbG9vcGJhY2siOiJUcnVlIiwiY2lkIjoiS3hHQ01YbXc0VXlmQy9ENFNaMkxKUT09IiwidmVyIjoiaGFzaGVkcHJvb2Z0b2tlbiIsInNpdGVpZCI6Ik1XSTBZalkxTnpZdE9UQTJaQzAwWkRrMExUaG1ORGt0Tm1Rd01HRTVOVEEzWWpVdyIsImFwcF9kaXNwbGF5bmFtZSI6Ik9wZW5Qcm9qZWN0IERldiBBcHAiLCJnaXZlbl9uYW1lIjoiTWFyY2VsbG8iLCJmYW1pbHlfbmFtZSI6IlJvY2hhIiwic2lnbmluX3N0YXRlIjoiW1wia21zaVwiXSIsImFwcGlkIjoiNDI2MmRmMmItNzdiYi00OWMyLWE1ZGYtMjgzNTVkYTY3NmQyIiwidGlkIjoiNGQ0NGJmMzYtOWI1Ni00NWMwLTg4MDctYmJmMzg2ZGQwNDdmIiwidXBuIjoibXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20iLCJwdWlkIjoiMTAwMzIwMDJFRDE5QkE1MCIsImNhY2hla2V5IjoiMGguZnxtZW1iZXJzaGlwfDEwMDMyMDAyZWQxOWJhNTBAbGl2ZS5jb20iLCJzY3AiOiJhbGxmaWxlcy53cml0ZSBhbGxzaXRlcy5yZWFkIGFsbHNpdGVzLndyaXRlIGFsbHByb2ZpbGVzLnJlYWQiLCJ0dCI6IjIiLCJpcGFkZHIiOiIyMC4xOTAuMTkwLjEwMCJ9.7ihoc39-_4ldgPOikQ7-gEcAeCVOEtXvH-MObPOwqUY + uri: https://finn.sharepoint.com/sites/openprojectfilestoragetests/_api/v2.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PKEWXDLTI6AFBC3V6T5CEAPMHMR/uploadSession?dc=0&guid=%27a042763d-fba1-4f11-943a-513f487ef91f%27&overwrite=False&rename=True&tempauth=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBfZGlzcGxheW5hbWUiOiJPcGVuUHJvamVjdCBEZXYgQXBwIiwiYXBwaWQiOiI0MjYyZGYyYi03N2JiLTQ5YzItYTVkZi0yODM1NWRhNjc2ZDIiLCJhdWQiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAvZmlubi5zaGFyZXBvaW50LmNvbUA0ZDQ0YmYzNi05YjU2LTQ1YzAtODgwNy1iYmYzODZkZDA0N2YiLCJjYWNoZWtleSI6IjBoLmZ8bWVtYmVyc2hpcHwxMDAzMjAwMmVkMmNhMDBlQGxpdmUuY29tIiwiY2lkIjoiLzc3dm5FV0xza3VNbW44aHNqOFdRUT09IiwiZW5kcG9pbnR1cmwiOiJGcmNXVWtmTXpWQlhaL1FnUnY0UnJBTlA1SmZoMFNuWTl2MUR2U2sralJBPSIsImVuZHBvaW50dXJsTGVuZ3RoIjoiMjc3IiwiZXhwIjoiMTcxNDA0NzkzNCIsImZhbWlseV9uYW1lIjoiU2NodWJlcnQiLCJnaXZlbl9uYW1lIjoiRXJpYyIsImlwYWRkciI6IjIwLjE5MC4xOTAuMTAxIiwiaXNsb29wYmFjayI6IlRydWUiLCJpc3MiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAiLCJuYmYiOiIxNzEzOTYxNTM0IiwicHVpZCI6IjEwMDMyMDAyRUQyQ0EwMEUiLCJzY3AiOiJhbGxmaWxlcy53cml0ZSBhbGxzaXRlcy5yZWFkIGFsbHNpdGVzLndyaXRlIGFsbHByb2ZpbGVzLnJlYWQiLCJzaXRlaWQiOiJNV0kwWWpZMU56WXRPVEEyWkMwMFpEazBMVGhtTkRrdE5tUXdNR0U1TlRBM1lqVXciLCJ0aWQiOiI0ZDQ0YmYzNi05YjU2LTQ1YzAtODgwNy1iYmYzODZkZDA0N2YiLCJ0dCI6IjIiLCJ1cG4iOiJlc2NodWJlcnQub3Bfb3V0bG9vay5jb20jZXh0I0BmaW5uLm9ubWljcm9zb2Z0LmNvbSIsInZlciI6Imhhc2hlZHByb29mdG9rZW4ifQ.NGbmOHI6aWlPQyM7lvdn4hhCLyAQuA3Apb2TymvU5VM body: encoding: ASCII-8BIT string: | @@ -289,7 +287,7 @@ http_interactions: Content-Range: - bytes 0-4378/4379 User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept: - "*/*" Accept-Encoding: @@ -309,21 +307,20 @@ http_interactions: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Expires: - "-1" - P3p: - - CP="ALL IND DSP COR ADM CONo CUR CUSo IVAo IVDo PSA PSD TAI TELo OUR SAMo - CNT COM INT NAV ONL PHY PRE PUR UNI" + Server: + - Microsoft-IIS/10.0 X-Networkstatistics: - - 0,525568,0,0,287522,0,95211 + - '0,64256,0,0,272,0,24164' X-Sharepointhealthscore: - - '1' + - '3' X-Sp-Serverstate: - ReadOnly=0 Odata-Version: - '4.0' Spclientservicerequestduration: - - '332' + - '542' Sprequestduration: - - '333' + - '542' X-Aspnet-Version: - 4.0.30319 X-Databoundary: @@ -333,11 +330,11 @@ http_interactions: X-Ariacollectorurl: - https://eu-mobile.events.data.microsoft.com/Collector/3.0 Sprequestguid: - - f4b30ba1-d0e1-8000-47a7-737a4022e505 + - e52322a1-30e4-8000-b360-ca98f762c9b1 Request-Id: - - f4b30ba1-d0e1-8000-47a7-737a4022e505 + - e52322a1-30e4-8000-b360-ca98f762c9b1 Ms-Cv: - - oQuz9OHQAIBHp3N6QCLlBQ.0 + - oSIj5eQwAICzYMqY92LJsQ.0 Strict-Transport-Security: - max-age=31536000 X-Frame-Options: @@ -351,25 +348,25 @@ http_interactions: X-Powered-By: - ASP.NET Microsoftsharepointteamservices: - - 16.0.0.24531 + - 16.0.0.24810 X-Content-Type-Options: - nosniff X-Ms-Invokeapp: - 1; RequireReadOnly - X-Cache: - - CONFIG_NOCACHE - X-Msedge-Ref: - - 'Ref A: 80922DFC2693439A90EFF361EF364682 Ref B: BER30EDGE0809 Ref C: 2024-02-14T19:22:55Z' + P3p: + - CP="ALL IND DSP COR ADM CONo CUR CUSo IVAo IVDo PSA PSD TAI TELo OUR SAMo + CNT COM INT NAV ONL PHY PRE PUR UNI" Date: - - Wed, 14 Feb 2024 19:22:56 GMT + - Wed, 24 Apr 2024 12:25:34 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/_api/v2.0/$metadata#items/$entity","@content.downloadUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/_layouts/15/download.aspx?UniqueId=4f60bd66-d055-4e65-b872-fe4fc1d1039c&Translate=false&tempauth=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAvZmlubi5zaGFyZXBvaW50LmNvbUA0ZDQ0YmYzNi05YjU2LTQ1YzAtODgwNy1iYmYzODZkZDA0N2YiLCJpc3MiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAiLCJuYmYiOiIxNzA3OTM4NTc2IiwiZXhwIjoiMTcwNzk0MjE3NiIsImVuZHBvaW50dXJsIjoiVVNjUVduekEzelpsQ2xVRDFmRWtaMVhDLzh5R2sxZ2Yzc0YvSHg1SnhCOD0iLCJlbmRwb2ludHVybExlbmd0aCI6IjE0OSIsImlzbG9vcGJhY2siOiJUcnVlIiwiY2lkIjoib1F1ejlPSFFBSUJIcDNONlFDTGxCUT09IiwidmVyIjoiaGFzaGVkcHJvb2Z0b2tlbiIsInNpdGVpZCI6Ik1XSTBZalkxTnpZdE9UQTJaQzAwWkRrMExUaG1ORGt0Tm1Rd01HRTVOVEEzWWpVdyIsImFwcF9kaXNwbGF5bmFtZSI6Ik9wZW5Qcm9qZWN0IERldiBBcHAiLCJnaXZlbl9uYW1lIjoiTWFyY2VsbG8iLCJmYW1pbHlfbmFtZSI6IlJvY2hhIiwic2lnbmluX3N0YXRlIjoiW1wia21zaVwiXSIsImFwcGlkIjoiNDI2MmRmMmItNzdiYi00OWMyLWE1ZGYtMjgzNTVkYTY3NmQyIiwidGlkIjoiNGQ0NGJmMzYtOWI1Ni00NWMwLTg4MDctYmJmMzg2ZGQwNDdmIiwidXBuIjoibXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20iLCJwdWlkIjoiMTAwMzIwMDJFRDE5QkE1MCIsImNhY2hla2V5IjoiMGguZnxtZW1iZXJzaGlwfDEwMDMyMDAyZWQxOWJhNTBAbGl2ZS5jb20iLCJzY3AiOiJhbGxmaWxlcy53cml0ZSBhbGxzaXRlcy5yZWFkIGFsbHNpdGVzLndyaXRlIGFsbHByb2ZpbGVzLnJlYWQiLCJ0dCI6IjIiLCJpcGFkZHIiOiIyMDAzOmNkOjc3NDI6OTU4ZTpkY2NkOmJkZTM6MWU2MzpkMWYifQ.d9XC60xQvamhSCo089Mt8ZqqqXb4UTywdQJ2csn2nYI&ApiVersion=2.0","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello - Rocha"}},"createdDateTime":"2024-02-14T19:22:55Z","eTag":"\"{4F60BD66-D055-4E65-B872-FE4FC1D1039C},3\"","id":"01AZJL5PLGXVQE6VOQMVHLQ4X6J7A5CA44","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello - Rocha"}},"lastModifiedDateTime":"2024-02-14T19:22:56Z","name":"files_query_root.yml","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PKBLRGPNT6GAJFIAWK2WNALFU7K","name":"Subfolder + string: '{"@odata.context":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/_api/v2.0/$metadata#items/$entity","@content.downloadUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/_layouts/15/download.aspx?UniqueId=b9c6b544-c0a3-4528-bafa-7d1100f61d91&Translate=false&tempauth=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBfZGlzcGxheW5hbWUiOiJPcGVuUHJvamVjdCBEZXYgQXBwIiwiYXBwaWQiOiI0MjYyZGYyYi03N2JiLTQ5YzItYTVkZi0yODM1NWRhNjc2ZDIiLCJhdWQiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAvZmlubi5zaGFyZXBvaW50LmNvbUA0ZDQ0YmYzNi05YjU2LTQ1YzAtODgwNy1iYmYzODZkZDA0N2YiLCJjYWNoZWtleSI6IjBoLmZ8bWVtYmVyc2hpcHwxMDAzMjAwMmVkMmNhMDBlQGxpdmUuY29tIiwiY2lkIjoib1NJajVlUXdBSUN6WU1xWTkyTEpzUT09IiwiZW5kcG9pbnR1cmwiOiJlT01OU0lXUEFCMkkzWlhjY3p3d0s5ZzRCakJQcVBlSms3VVpzUXZrc3pBPSIsImVuZHBvaW50dXJsTGVuZ3RoIjoiMTQ5IiwiZXhwIjoiMTcxMzk2NTEzNSIsImZhbWlseV9uYW1lIjoiU2NodWJlcnQiLCJnaXZlbl9uYW1lIjoiRXJpYyIsImlwYWRkciI6IjkzLjIyOS4yMDguMjQiLCJpc2xvb3BiYWNrIjoiVHJ1ZSIsImlzcyI6IjAwMDAwMDAzLTAwMDAtMGZmMS1jZTAwLTAwMDAwMDAwMDAwMCIsIm5iZiI6IjE3MTM5NjE1MzUiLCJwdWlkIjoiMTAwMzIwMDJFRDJDQTAwRSIsInNjcCI6ImFsbGZpbGVzLndyaXRlIGFsbHNpdGVzLnJlYWQgYWxsc2l0ZXMud3JpdGUgYWxscHJvZmlsZXMucmVhZCIsInNpdGVpZCI6Ik1XSTBZalkxTnpZdE9UQTJaQzAwWkRrMExUaG1ORGt0Tm1Rd01HRTVOVEEzWWpVdyIsInRpZCI6IjRkNDRiZjM2LTliNTYtNDVjMC04ODA3LWJiZjM4NmRkMDQ3ZiIsInR0IjoiMiIsInVwbiI6ImVzY2h1YmVydC5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29tIiwidmVyIjoiaGFzaGVkcHJvb2Z0b2tlbiJ9.5mdJwBAE8bI69tfqPhBIINy5rw1BNkUBy5ZeaecoXCk&ApiVersion=2.0","@deprecated.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric + Schubert"}},"createdDateTime":"2024-04-24T12:25:35Z","eTag":"\"{B9C6B544-C0A3-4528-BAFA-7D1100F61D91},3\"","id":"01AZJL5PKEWXDLTI6AFBC3V6T5CEAPMHMR","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric + Schubert"}},"lastModifiedDateTime":"2024-04-24T12:25:35Z","name":"files_query_root.yml","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PITUSG2E4BXPNG3MNS325DYSTX7","name":"Subfolder with File","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:/Test - Template Folder/Subfolder with File","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Test%20Template%20Folder/Subfolder%20with%20File/files_query_root.yml","cTag":"\"c:{4F60BD66-D055-4E65-B872-FE4FC1D1039C},2\"","file":{"hashes":{"quickXorHash":"GgbM1xxLeQNBtKn2c8vlsz73+Fk="},"irmEffectivelyEnabled":false,"irmEnabled":false,"mimeType":"application/octet-stream"},"fileSystemInfo":{"createdDateTime":"2024-02-14T19:22:55Z","lastModifiedDateTime":"2024-02-14T19:22:56Z"},"shared":{"effectiveRoles":["write"],"scope":"users"},"size":4379}' - recorded_at: Wed, 14 Feb 2024 19:22:56 GMT + Template Folder/Subfolder with File","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Test%20Template%20Folder/Subfolder%20with%20File/files_query_root.yml","cTag":"\"c:{B9C6B544-C0A3-4528-BAFA-7D1100F61D91},2\"","file":{"hashes":{"quickXorHash":"GgbM1xxLeQNBtKn2c8vlsz73+Fk="},"irmEffectivelyEnabled":false,"irmEnabled":false,"mimeType":"application/octet-stream"},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:25:35Z","lastModifiedDateTime":"2024-04-24T12:25:35Z"},"shared":{"effectiveRoles":["write"],"scope":"users"},"size":4379}' + recorded_at: Wed, 24 Apr 2024 12:25:35 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_folder_teardown.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_folder_teardown.yml index 8d1c97c08a5f..d40c015a7c08 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_folder_teardown.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_folder_teardown.yml @@ -1,22 +1,79 @@ --- http_interactions: +- request: + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token + body: + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB + headers: + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-store, no-cache + Pragma: + - no-cache + Content-Type: + - application/json; charset=utf-8 + Expires: + - "-1" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - b32c65a2-3984-4641-8da5-5d454cf79400 + X-Ms-Ests-Server: + - 2.1.17846.6 - WEULR1 ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=Ajnsh8dOGytFoKfHYvCAbvikbDoXAQAAAEHxut0OAAAA; expires=Fri, 24-May-2024 + 12:25:38 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly + Date: + - Wed, 24 Apr 2024 12:25:37 GMT + Connection: + - close + Content-Length: + - '1735' + body: + encoding: UTF-8 + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Wed, 24 Apr 2024 12:25:38 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PNRT4JHUBDHNJF2HOFKENALDGCZ + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PK7O3S74VUDBZDID3ZBVXWMQVYS body: encoding: US-ASCII string: '' headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate + Authorization: + - Bearer response: status: code: 204 @@ -27,15 +84,15 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 3894b2da-6735-41c3-a0a7-ac7d5cbea072 + - 26aa4654-97f8-4afa-a6a9-e5bd7c6c2468 Client-Request-Id: - - 3894b2da-6735-41c3-a0a7-ac7d5cbea072 + - 26aa4654-97f8-4afa-a6a9-e5bd7c6c2468 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000001EE"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"000","RoleInstance":"FR1PEPF00000D37"}}' Date: - - Wed, 14 Feb 2024 19:22:58 GMT + - Wed, 24 Apr 2024 12:25:38 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 19:22:59 GMT + recorded_at: Wed, 24 Apr 2024 12:25:38 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_source_not_found.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_source_not_found.yml index 7e9a5843b319..ff0318c694b8 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_source_not_found.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/copy_template_source_not_found.yml @@ -37,24 +37,26 @@ http_interactions: P3p: - CP="DSP CUR OTPi IND OTRi ONL FIN" X-Ms-Request-Id: - - b7e44639-1c9b-49eb-9d06-c76efc61aa00 + - a35b3182-39d0-4cfb-b1e9-415048e19300 X-Ms-Ests-Server: - - 2.1.17282.6 - WEULR1 ProdSlices + - 2.1.17846.6 - FRC ProdSlices + X-Ms-Srs: + - 1.P X-Xss-Protection: - '0' Set-Cookie: - - fpc=ApI_7PNRlNRAnwPdJkQyVQikbDoXAQAAABEKX90OAAAA; expires=Fri, 15-Mar-2024 - 19:22:58 GMT; path=/; secure; HttpOnly; SameSite=None + - fpc=AmoOF8b2SjRGvV5NV0Jvi2-kbDoXAQAAAEHxut0OAAAA; expires=Fri, 24-May-2024 + 12:25:38 GMT; path=/; secure; HttpOnly; SameSite=None - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly Date: - - Wed, 14 Feb 2024 19:22:57 GMT + - Wed, 24 Apr 2024 12:25:37 GMT Content-Length: - '1708' body: encoding: UTF-8 string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Wed, 14 Feb 2024 19:22:58 GMT + recorded_at: Wed, 24 Apr 2024 12:25:38 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/TheCakeIsALie/copy?@microsoft.graph.conflictBehavior=fail @@ -69,7 +71,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -81,8 +83,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json Content-Encoding: @@ -92,15 +92,15 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - e5c63576-651d-4604-b3b2-762cc1a3bbf6 + - 68ae29d7-e08b-4d0e-a225-84a6bbfe49df Client-Request-Id: - - e5c63576-651d-4604-b3b2-762cc1a3bbf6 + - 68ae29d7-e08b-4d0e-a225-84a6bbfe49df X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000003EA"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"000","RoleInstance":"FR1PEPF0000102D"}}' Date: - - Wed, 14 Feb 2024 19:22:57 GMT + - Wed, 24 Apr 2024 12:25:37 GMT body: encoding: UTF-8 - string: '{"error":{"code":"itemNotFound","message":"Item not found","innerError":{"date":"2024-02-14T19:22:58","request-id":"e5c63576-651d-4604-b3b2-762cc1a3bbf6","client-request-id":"e5c63576-651d-4604-b3b2-762cc1a3bbf6"}}}' - recorded_at: Wed, 14 Feb 2024 19:22:58 GMT + string: '{"error":{"code":"itemNotFound","message":"Item not found","innerError":{"date":"2024-04-24T12:25:38","request-id":"68ae29d7-e08b-4d0e-a225-84a6bbfe49df","client-request-id":"68ae29d7-e08b-4d0e-a225-84a6bbfe49df"}}}' + recorded_at: Wed, 24 Apr 2024 12:25:38 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_already_exists.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_already_exists.yml index b8a3a921c3f5..b9feba8fd03e 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_already_exists.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_already_exists.yml @@ -4,19 +4,19 @@ http_interactions: method: post uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token body: - encoding: UTF-8 - string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB headers: User-Agent: - - Rack::OAuth2 (2.2.1) - Authorization: - - Basic - Content-Type: - - application/x-www-form-urlencoded - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + - httpx.rb/1.2.4 Accept: - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' response: status: code: 200 @@ -37,101 +37,45 @@ http_interactions: P3p: - CP="DSP CUR OTPi IND OTRi ONL FIN" X-Ms-Request-Id: - - ed20da22-6350-412e-ad34-945574bf1500 + - 7b9c2a3b-6b35-4d14-beb2-af5c0bff2c00 X-Ms-Ests-Server: - - 2.1.17184.4 - NEULR1 ProdSlices + - 2.1.17846.6 - NEULR1 ProdSlices + X-Ms-Srs: + - 1.P X-Xss-Protection: - '0' Set-Cookie: - - fpc=As0kw9XbXS5NjTjc3dW7QNKkbDoXAQAAAPzBTt0OAAAA; expires=Sun, 03-Mar-2024 - 10:59:08 GMT; path=/; secure; HttpOnly; SameSite=None - - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly + - fpc=Aoe3j1UDTmlElQnMOPlZuEOkbDoXAQAAABtVuN0OAAAA; expires=Wed, 22-May-2024 + 12:54:52 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly Date: - - Fri, 02 Feb 2024 10:59:07 GMT + - Mon, 22 Apr 2024 12:54:51 GMT Content-Length: - - '1708' + - '1735' body: encoding: UTF-8 string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Fri, 02 Feb 2024 10:59:08 GMT + recorded_at: Mon, 22 Apr 2024 12:54:52 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root/children body: encoding: UTF-8 - string: '{"name":"Földer CreatedBy Çommand","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"Folder","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: - - '92' - response: - status: - code: 201 - message: Created - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Etag: - - '"{49246452-9BFC-4755-8658-100F0FC80E83},1"' - Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs')/items('root')/children('01AZJL5PKSMQSET7E3KVDYMWAQB4H4QDUD') - Vary: - - Accept-Encoding - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - fa8c95d8-e264-480d-8867-a2f3d762d85d - Client-Request-Id: - - fa8c95d8-e264-480d-8867-a2f3d762d85d - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000004D8"}}' - Odata-Version: - - '4.0' - Date: - - Fri, 02 Feb 2024 10:59:08 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs'')/root/children/$entity","@odata.etag":"\"{49246452-9BFC-4755-8658-100F0FC80E83},1\"","createdDateTime":"2024-02-02T10:59:09Z","eTag":"\"{49246452-9BFC-4755-8658-100F0FC80E83},1\"","id":"01AZJL5PKSMQSET7E3KVDYMWAQB4H4QDUD","lastModifiedDateTime":"2024-02-02T10:59:09Z","name":"F\u00f6lder - CreatedBy \u00c7ommand","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/F%C3%B6lder%20CreatedBy%20%C3%87ommand","cTag":"\"c:{49246452-9BFC-4755-8658-100F0FC80E83},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject - Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","sharepointIds":{"listId":"f3baf95b-362b-4740-80d8-4f593d28f5ec","listItemUniqueId":"049e81d0-52fb-4624-af6d-96611c29a9cc","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-02T10:59:09Z","lastModifiedDateTime":"2024-02-02T10:59:09Z"},"folder":{"childCount":0}}' - recorded_at: Fri, 02 Feb 2024 10:59:08 GMT -- request: - method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root/children - body: - encoding: UTF-8 - string: '{"name":"Földer CreatedBy Çommand","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' - headers: + - '72' Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.1 - Accept-Encoding: - - gzip, deflate - Content-Length: - - '92' response: status: code: 409 @@ -139,8 +83,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json Content-Encoding: @@ -150,165 +92,15 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 9efc2e03-a4c0-4254-b52d-ceb2e54a6dfc - Client-Request-Id: - - 9efc2e03-a4c0-4254-b52d-ceb2e54a6dfc - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000003B4"}}' - Date: - - Fri, 02 Feb 2024 10:59:08 GMT - body: - encoding: UTF-8 - string: '{"error":{"code":"nameAlreadyExists","message":"Name already exists","innerError":{"date":"2024-02-02T10:59:08","request-id":"9efc2e03-a4c0-4254-b52d-ceb2e54a6dfc","client-request-id":"9efc2e03-a4c0-4254-b52d-ceb2e54a6dfc"}}}' - recorded_at: Fri, 02 Feb 2024 10:59:08 GMT -- request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root/children - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.1 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 200 - message: OK - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; - charset=utf-8 - Content-Encoding: - - gzip - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - abfa6de3-9088-4bd1-8c5f-6d4489bbe69a - Client-Request-Id: - - abfa6de3-9088-4bd1-8c5f-6d4489bbe69a - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000004D4"}}' - Date: - - Fri, 02 Feb 2024 10:59:08 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)","value":[{"createdBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"createdDateTime":"2023-09-26T14:38:50Z","eTag":"\"{6087B980-4C01-4020-BBF2-1E349BD0C831},1\"","id":"01AZJL5PMAXGDWAAKMEBALX4Q6GSN5BSBR","lastModifiedBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"lastModifiedDateTime":"2023-09-26T14:38:50Z","name":"Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Folder","cTag":"\"c:{6087B980-4C01-4020-BBF2-1E349BD0C831},0\"","fileSystemInfo":{"createdDateTime":"2023-09-26T14:38:50Z","lastModifiedDateTime":"2023-09-26T14:38:50Z"},"folder":{"childCount":5},"shared":{"scope":"users"},"size":260500},{"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-02-02T10:59:09Z","eTag":"\"{49246452-9BFC-4755-8658-100F0FC80E83},1\"","id":"01AZJL5PKSMQSET7E3KVDYMWAQB4H4QDUD","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-02-02T10:59:09Z","name":"F\u00f6lder - CreatedBy \u00c7ommand","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/F%C3%B6lder%20CreatedBy%20%C3%87ommand","cTag":"\"c:{49246452-9BFC-4755-8658-100F0FC80E83},0\"","fileSystemInfo":{"createdDateTime":"2024-02-02T10:59:09Z","lastModifiedDateTime":"2024-02-02T10:59:09Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0},{"createdBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"createdDateTime":"2023-09-26T14:38:57Z","eTag":"\"{BAABD554-2A6E-4B51-A07F-22B54378CC94},1\"","id":"01AZJL5PKU2WV3U3RKKFF2A7ZCWVBXRTEU","lastModifiedBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"lastModifiedDateTime":"2023-09-26T14:38:57Z","name":"Folder with - spaces","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Folder%20with%20spaces","cTag":"\"c:{BAABD554-2A6E-4B51-A07F-22B54378CC94},0\"","fileSystemInfo":{"createdDateTime":"2023-09-26T14:38:57Z","lastModifiedDateTime":"2023-09-26T14:38:57Z"},"folder":{"childCount":4},"shared":{"scope":"users"},"size":35141},{"createdBy":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello - Rocha"}},"createdDateTime":"2024-01-12T09:05:10Z","eTag":"\"{73565DBB-32EA-46CE-9F64-A01EDD691B01},3\"","id":"01AZJL5PN3LVLHH2RSZZDJ6ZFAD3OWSGYB","lastModifiedBy":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello - Rocha"}},"lastModifiedDateTime":"2024-01-12T09:05:24Z","name":"Permissions - Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Permissions%20Folder","cTag":"\"c:{73565DBB-32EA-46CE-9F64-A01EDD691B01},0\"","decorator":{"iconColor":"darkRed"},"fileSystemInfo":{"createdDateTime":"2024-01-12T09:05:10Z","lastModifiedDateTime":"2024-01-12T09:05:24Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}]}' - recorded_at: Fri, 02 Feb 2024 10:59:09 GMT -- request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root/children - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.1 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 200 - message: OK - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; - charset=utf-8 - Content-Encoding: - - gzip - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - d3eea186-0f90-46c4-a64f-0bc8094090f3 - Client-Request-Id: - - d3eea186-0f90-46c4-a64f-0bc8094090f3 - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000003B3"}}' - Date: - - Fri, 02 Feb 2024 10:59:08 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)","value":[{"createdBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"createdDateTime":"2023-09-26T14:38:50Z","eTag":"\"{6087B980-4C01-4020-BBF2-1E349BD0C831},1\"","id":"01AZJL5PMAXGDWAAKMEBALX4Q6GSN5BSBR","lastModifiedBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"lastModifiedDateTime":"2023-09-26T14:38:50Z","name":"Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Folder","cTag":"\"c:{6087B980-4C01-4020-BBF2-1E349BD0C831},0\"","fileSystemInfo":{"createdDateTime":"2023-09-26T14:38:50Z","lastModifiedDateTime":"2023-09-26T14:38:50Z"},"folder":{"childCount":5},"shared":{"scope":"users"},"size":260500},{"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-02-02T10:59:09Z","eTag":"\"{49246452-9BFC-4755-8658-100F0FC80E83},1\"","id":"01AZJL5PKSMQSET7E3KVDYMWAQB4H4QDUD","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-02-02T10:59:09Z","name":"F\u00f6lder - CreatedBy \u00c7ommand","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/F%C3%B6lder%20CreatedBy%20%C3%87ommand","cTag":"\"c:{49246452-9BFC-4755-8658-100F0FC80E83},0\"","fileSystemInfo":{"createdDateTime":"2024-02-02T10:59:09Z","lastModifiedDateTime":"2024-02-02T10:59:09Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0},{"createdBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"createdDateTime":"2023-09-26T14:38:57Z","eTag":"\"{BAABD554-2A6E-4B51-A07F-22B54378CC94},1\"","id":"01AZJL5PKU2WV3U3RKKFF2A7ZCWVBXRTEU","lastModifiedBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"lastModifiedDateTime":"2023-09-26T14:38:57Z","name":"Folder with - spaces","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Folder%20with%20spaces","cTag":"\"c:{BAABD554-2A6E-4B51-A07F-22B54378CC94},0\"","fileSystemInfo":{"createdDateTime":"2023-09-26T14:38:57Z","lastModifiedDateTime":"2023-09-26T14:38:57Z"},"folder":{"childCount":4},"shared":{"scope":"users"},"size":35141},{"createdBy":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello - Rocha"}},"createdDateTime":"2024-01-12T09:05:10Z","eTag":"\"{73565DBB-32EA-46CE-9F64-A01EDD691B01},3\"","id":"01AZJL5PN3LVLHH2RSZZDJ6ZFAD3OWSGYB","lastModifiedBy":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello - Rocha"}},"lastModifiedDateTime":"2024-01-12T09:05:24Z","name":"Permissions - Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Permissions%20Folder","cTag":"\"c:{73565DBB-32EA-46CE-9F64-A01EDD691B01},0\"","decorator":{"iconColor":"darkRed"},"fileSystemInfo":{"createdDateTime":"2024-01-12T09:05:10Z","lastModifiedDateTime":"2024-01-12T09:05:24Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}]}' - recorded_at: Fri, 02 Feb 2024 10:59:09 GMT -- request: - method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PKSMQSET7E3KVDYMWAQB4H4QDUD - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.1 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 204 - message: No Content - headers: - Cache-Control: - - no-store, no-cache - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - d73b6fc6-e03d-4ae1-a6d3-830e3b366d37 + - 80784f71-6a84-4b33-96a5-7e972867f8ca Client-Request-Id: - - d73b6fc6-e03d-4ae1-a6d3-830e3b366d37 + - 80784f71-6a84-4b33-96a5-7e972867f8ca X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000001DA"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"004","RoleInstance":"FR2PEPF00000406"}}' Date: - - Fri, 02 Feb 2024 10:59:09 GMT + - Mon, 22 Apr 2024 12:54:51 GMT body: encoding: UTF-8 - string: '' - recorded_at: Fri, 02 Feb 2024 10:59:09 GMT + string: '{"error":{"code":"nameAlreadyExists","message":"Name already exists","innerError":{"date":"2024-04-22T12:54:52","request-id":"80784f71-6a84-4b33-96a5-7e972867f8ca","client-request-id":"80784f71-6a84-4b33-96a5-7e972867f8ca"}}}' + recorded_at: Mon, 22 Apr 2024 12:54:52 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_base.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_base.yml deleted file mode 100644 index 4e56d25de040..000000000000 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_base.yml +++ /dev/null @@ -1,210 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token - body: - encoding: UTF-8 - string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default - headers: - User-Agent: - - Rack::OAuth2 (2.2.1) - Authorization: - - Basic - Content-Type: - - application/x-www-form-urlencoded - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Cache-Control: - - no-store, no-cache - Pragma: - - no-cache - Content-Type: - - application/json; charset=utf-8 - Expires: - - "-1" - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - X-Content-Type-Options: - - nosniff - P3p: - - CP="DSP CUR OTPi IND OTRi ONL FIN" - X-Ms-Request-Id: - - b43fae89-83df-409f-99d1-7685b5404300 - X-Ms-Ests-Server: - - 2.1.17184.4 - WEULR1 ProdSlices - X-Xss-Protection: - - '0' - Set-Cookie: - - fpc=Am-p91TYPo9CoreU9I1CbVqkbDoXAQAAAPrBTt0OAAAA; expires=Sun, 03-Mar-2024 - 10:59:07 GMT; path=/; secure; HttpOnly; SameSite=None - - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly - Date: - - Fri, 02 Feb 2024 10:59:07 GMT - Content-Length: - - '1708' - body: - encoding: UTF-8 - string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Fri, 02 Feb 2024 10:59:07 GMT -- request: - method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root/children - body: - encoding: UTF-8 - string: '{"name":"Földer CreatedBy Çommand","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.1 - Accept-Encoding: - - gzip, deflate - Content-Length: - - '92' - response: - status: - code: 201 - message: Created - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Etag: - - '"{8899BFFC-367B-4722-A32C-86E2195F4B00},1"' - Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs')/items('root')/children('01AZJL5PP4X6MYQ6ZWEJD2GLEG4IMV6SYA') - Vary: - - Accept-Encoding - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - 9b6642df-9015-4dd8-a433-043f941e26a5 - Client-Request-Id: - - 9b6642df-9015-4dd8-a433-043f941e26a5 - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000001DF"}}' - Odata-Version: - - '4.0' - Date: - - Fri, 02 Feb 2024 10:59:06 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs'')/root/children/$entity","@odata.etag":"\"{8899BFFC-367B-4722-A32C-86E2195F4B00},1\"","createdDateTime":"2024-02-02T10:59:08Z","eTag":"\"{8899BFFC-367B-4722-A32C-86E2195F4B00},1\"","id":"01AZJL5PP4X6MYQ6ZWEJD2GLEG4IMV6SYA","lastModifiedDateTime":"2024-02-02T10:59:08Z","name":"F\u00f6lder - CreatedBy \u00c7ommand","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/F%C3%B6lder%20CreatedBy%20%C3%87ommand","cTag":"\"c:{8899BFFC-367B-4722-A32C-86E2195F4B00},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject - Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","sharepointIds":{"listId":"f3baf95b-362b-4740-80d8-4f593d28f5ec","listItemUniqueId":"049e81d0-52fb-4624-af6d-96611c29a9cc","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-02T10:59:08Z","lastModifiedDateTime":"2024-02-02T10:59:08Z"},"folder":{"childCount":0}}' - recorded_at: Fri, 02 Feb 2024 10:59:07 GMT -- request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root/children - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.1 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 200 - message: OK - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; - charset=utf-8 - Content-Encoding: - - gzip - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - ac77f13c-f89b-497c-880e-f8ead115caca - Client-Request-Id: - - ac77f13c-f89b-497c-880e-f8ead115caca - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000004D3"}}' - Date: - - Fri, 02 Feb 2024 10:59:07 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)","value":[{"createdBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"createdDateTime":"2023-09-26T14:38:50Z","eTag":"\"{6087B980-4C01-4020-BBF2-1E349BD0C831},1\"","id":"01AZJL5PMAXGDWAAKMEBALX4Q6GSN5BSBR","lastModifiedBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"lastModifiedDateTime":"2023-09-26T14:38:50Z","name":"Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Folder","cTag":"\"c:{6087B980-4C01-4020-BBF2-1E349BD0C831},0\"","fileSystemInfo":{"createdDateTime":"2023-09-26T14:38:50Z","lastModifiedDateTime":"2023-09-26T14:38:50Z"},"folder":{"childCount":5},"shared":{"scope":"users"},"size":260500},{"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-02-02T10:59:08Z","eTag":"\"{8899BFFC-367B-4722-A32C-86E2195F4B00},1\"","id":"01AZJL5PP4X6MYQ6ZWEJD2GLEG4IMV6SYA","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-02-02T10:59:08Z","name":"F\u00f6lder - CreatedBy \u00c7ommand","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/F%C3%B6lder%20CreatedBy%20%C3%87ommand","cTag":"\"c:{8899BFFC-367B-4722-A32C-86E2195F4B00},0\"","fileSystemInfo":{"createdDateTime":"2024-02-02T10:59:08Z","lastModifiedDateTime":"2024-02-02T10:59:08Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0},{"createdBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"createdDateTime":"2023-09-26T14:38:57Z","eTag":"\"{BAABD554-2A6E-4B51-A07F-22B54378CC94},1\"","id":"01AZJL5PKU2WV3U3RKKFF2A7ZCWVBXRTEU","lastModifiedBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"lastModifiedDateTime":"2023-09-26T14:38:57Z","name":"Folder with - spaces","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Folder%20with%20spaces","cTag":"\"c:{BAABD554-2A6E-4B51-A07F-22B54378CC94},0\"","fileSystemInfo":{"createdDateTime":"2023-09-26T14:38:57Z","lastModifiedDateTime":"2023-09-26T14:38:57Z"},"folder":{"childCount":4},"shared":{"scope":"users"},"size":35141},{"createdBy":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello - Rocha"}},"createdDateTime":"2024-01-12T09:05:10Z","eTag":"\"{73565DBB-32EA-46CE-9F64-A01EDD691B01},3\"","id":"01AZJL5PN3LVLHH2RSZZDJ6ZFAD3OWSGYB","lastModifiedBy":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello - Rocha"}},"lastModifiedDateTime":"2024-01-12T09:05:24Z","name":"Permissions - Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Permissions%20Folder","cTag":"\"c:{73565DBB-32EA-46CE-9F64-A01EDD691B01},0\"","decorator":{"iconColor":"darkRed"},"fileSystemInfo":{"createdDateTime":"2024-01-12T09:05:10Z","lastModifiedDateTime":"2024-01-12T09:05:24Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}]}' - recorded_at: Fri, 02 Feb 2024 10:59:08 GMT -- request: - method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PP4X6MYQ6ZWEJD2GLEG4IMV6SYA - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.1 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 204 - message: No Content - headers: - Cache-Control: - - no-store, no-cache - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - ea39e491-6f3c-4314-92b6-924979269ad8 - Client-Request-Id: - - ea39e491-6f3c-4314-92b6-924979269ad8 - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000004D5"}}' - Date: - - Fri, 02 Feb 2024 10:59:07 GMT - body: - encoding: UTF-8 - string: '' - recorded_at: Fri, 02 Feb 2024 10:59:08 GMT -recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_parent.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_parent.yml new file mode 100644 index 000000000000..fac8809f7058 --- /dev/null +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_parent.yml @@ -0,0 +1,155 @@ +--- +http_interactions: +- request: + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token + body: + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB + headers: + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-store, no-cache + Pragma: + - no-cache + Content-Type: + - application/json; charset=utf-8 + Expires: + - "-1" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - 94de5a92-c596-4315-9f6e-3f9ddfbc4c00 + X-Ms-Ests-Server: + - 2.1.17846.6 - SEC ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=AoGOQl9ZqHpApn7RhTfNREykbDoXAQAAADpUuN0OAAAA; expires=Wed, 22-May-2024 + 12:51:07 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly + Date: + - Mon, 22 Apr 2024 12:51:06 GMT + Connection: + - close + Content-Length: + - '1735' + body: + encoding: UTF-8 + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Mon, 22 Apr 2024 12:51:07 GMT +- request: + method: post + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PKU2WV3U3RKKFF2A7ZCWVBXRTEU/children + body: + encoding: UTF-8 + string: '{"name":"Földer CreatedBy Çommand","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + headers: + Content-Type: + - application/json + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Length: + - '92' + Authorization: + - Bearer + response: + status: + code: 201 + message: Created + headers: + Cache-Control: + - no-store, no-cache + Content-Type: + - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + Content-Encoding: + - gzip + Etag: + - '"{AB87832F-9D09-4995-844D-7295E2A8F9AB},1"' + Location: + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs')/items('01AZJL5PKU2WV3U3RKKFF2A7ZCWVBXRTEU')/children('01AZJL5PJPQOD2WCM5SVEYITLSSXRKR6NL') + Vary: + - Accept-Encoding + Strict-Transport-Security: + - max-age=31536000 + Request-Id: + - 0f951b35-2720-403e-bd1a-a78d360f44b0 + Client-Request-Id: + - 0f951b35-2720-403e-bd1a-a78d360f44b0 + X-Ms-Ags-Diagnostic: + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000052E"}}' + Odata-Version: + - '4.0' + Date: + - Mon, 22 Apr 2024 12:51:07 GMT + body: + encoding: UTF-8 + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs'')/items(''01AZJL5PKU2WV3U3RKKFF2A7ZCWVBXRTEU'')/children/$entity","@odata.etag":"\"{AB87832F-9D09-4995-844D-7295E2A8F9AB},1\"","createdDateTime":"2024-04-22T12:51:07Z","eTag":"\"{AB87832F-9D09-4995-844D-7295E2A8F9AB},1\"","id":"01AZJL5PJPQOD2WCM5SVEYITLSSXRKR6NL","lastModifiedDateTime":"2024-04-22T12:51:07Z","name":"F\u00f6lder + CreatedBy \u00c7ommand","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Folder%20with%20spaces/F%C3%B6lder%20CreatedBy%20%C3%87ommand","cTag":"\"c:{AB87832F-9D09-4995-844D-7295E2A8F9AB},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint + App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","driveType":"documentLibrary","id":"01AZJL5PKU2WV3U3RKKFF2A7ZCWVBXRTEU","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:/Folder + with spaces","sharepointIds":{"listId":"f3baf95b-362b-4740-80d8-4f593d28f5ec","listItemUniqueId":"baabd554-2a6e-4b51-a07f-22b54378cc94","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-22T12:51:07Z","lastModifiedDateTime":"2024-04-22T12:51:07Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Mon, 22 Apr 2024 12:51:07 GMT +- request: + method: delete + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PJPQOD2WCM5SVEYITLSSXRKR6NL + body: + encoding: US-ASCII + string: '' + headers: + Authorization: + - Bearer + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + response: + status: + code: 204 + message: No Content + headers: + Cache-Control: + - no-store, no-cache + Strict-Transport-Security: + - max-age=31536000 + Request-Id: + - 6108b97c-6820-45af-a4f3-814d0553d45a + Client-Request-Id: + - 6108b97c-6820-45af-a4f3-814d0553d45a + X-Ms-Ags-Diagnostic: + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000166"}}' + Date: + - Mon, 22 Apr 2024 12:51:07 GMT + body: + encoding: UTF-8 + string: '' + recorded_at: Mon, 22 Apr 2024 12:51:08 GMT +recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_parent_not_found.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_parent_not_found.yml new file mode 100644 index 000000000000..723a1011b255 --- /dev/null +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_parent_not_found.yml @@ -0,0 +1,106 @@ +--- +http_interactions: +- request: + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token + body: + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB + headers: + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-store, no-cache + Pragma: + - no-cache + Content-Type: + - application/json; charset=utf-8 + Expires: + - "-1" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - 5682c1d0-e7f1-4dcc-92f1-d019aa214b00 + X-Ms-Ests-Server: + - 2.1.17846.6 - SEC ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=AnGVFUYx26BDsrEb73HC3oakbDoXAQAAAItVuN0OAAAA; expires=Wed, 22-May-2024 + 12:56:44 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly + Date: + - Mon, 22 Apr 2024 12:56:43 GMT + Content-Length: + - '1735' + body: + encoding: UTF-8 + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Mon, 22 Apr 2024 12:56:44 GMT +- request: + method: post + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PKU2WV3U3RKKFF4A7ZCWVBXRTEU/children + body: + encoding: UTF-8 + string: '{"name":"Földer CreatedBy Çommand","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + headers: + Content-Type: + - application/json + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Length: + - '92' + Authorization: + - Bearer + response: + status: + code: 404 + message: Not Found + headers: + Cache-Control: + - no-store, no-cache + Content-Type: + - application/json + Content-Encoding: + - gzip + Vary: + - Accept-Encoding + Strict-Transport-Security: + - max-age=31536000 + Request-Id: + - 2b8549e9-ff0e-44b5-bf97-bbe67bd1b976 + Client-Request-Id: + - 2b8549e9-ff0e-44b5-bf97-bbe67bd1b976 + X-Ms-Ags-Diagnostic: + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"005","RoleInstance":"FR3PEPF000002D9"}}' + Date: + - Mon, 22 Apr 2024 12:56:43 GMT + body: + encoding: UTF-8 + string: '{"error":{"code":"itemNotFound","message":"Item not found","innerError":{"date":"2024-04-22T12:56:44","request-id":"2b8549e9-ff0e-44b5-bf97-bbe67bd1b976","client-request-id":"2b8549e9-ff0e-44b5-bf97-bbe67bd1b976"}}}' + recorded_at: Mon, 22 Apr 2024 12:56:44 GMT +recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_root.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_root.yml new file mode 100644 index 000000000000..947f67fba349 --- /dev/null +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_root.yml @@ -0,0 +1,154 @@ +--- +http_interactions: +- request: + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token + body: + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB + headers: + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-store, no-cache + Pragma: + - no-cache + Content-Type: + - application/json; charset=utf-8 + Expires: + - "-1" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - 5cafb002-3ad9-4094-9a1b-e1bf261e4b00 + X-Ms-Ests-Server: + - 2.1.17846.6 - WEULR1 ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=Atu5By_0zAZJi7-guoZRzr6kbDoXAQAAAHtUuN0OAAAA; expires=Wed, 22-May-2024 + 12:52:12 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly + Date: + - Mon, 22 Apr 2024 12:52:12 GMT + Connection: + - close + Content-Length: + - '1735' + body: + encoding: UTF-8 + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Mon, 22 Apr 2024 12:52:12 GMT +- request: + method: post + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root/children + body: + encoding: UTF-8 + string: '{"name":"Földer CreatedBy Çommand","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + headers: + Content-Type: + - application/json + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Length: + - '92' + Authorization: + - Bearer + response: + status: + code: 201 + message: Created + headers: + Cache-Control: + - no-store, no-cache + Content-Type: + - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + Content-Encoding: + - gzip + Etag: + - '"{AA5D82C3-06D0-42BC-B800-BAF1E1575CB3},1"' + Location: + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs')/items('root')/children('01AZJL5PODQJO2VUAGXRBLQAF26HQVOXFT') + Vary: + - Accept-Encoding + Strict-Transport-Security: + - max-age=31536000 + Request-Id: + - 55b98114-3897-4aca-9ecb-cbfbdf995d72 + Client-Request-Id: + - 55b98114-3897-4aca-9ecb-cbfbdf995d72 + X-Ms-Ags-Diagnostic: + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"003","RoleInstance":"FR1PEPF00001027"}}' + Odata-Version: + - '4.0' + Date: + - Mon, 22 Apr 2024 12:52:12 GMT + body: + encoding: UTF-8 + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs'')/root/children/$entity","@odata.etag":"\"{AA5D82C3-06D0-42BC-B800-BAF1E1575CB3},1\"","createdDateTime":"2024-04-22T12:52:12Z","eTag":"\"{AA5D82C3-06D0-42BC-B800-BAF1E1575CB3},1\"","id":"01AZJL5PODQJO2VUAGXRBLQAF26HQVOXFT","lastModifiedDateTime":"2024-04-22T12:52:12Z","name":"F\u00f6lder + CreatedBy \u00c7ommand","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/F%C3%B6lder%20CreatedBy%20%C3%87ommand","cTag":"\"c:{AA5D82C3-06D0-42BC-B800-BAF1E1575CB3},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint + App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","sharepointIds":{"listId":"f3baf95b-362b-4740-80d8-4f593d28f5ec","listItemUniqueId":"049e81d0-52fb-4624-af6d-96611c29a9cc","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-22T12:52:12Z","lastModifiedDateTime":"2024-04-22T12:52:12Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Mon, 22 Apr 2024 12:52:12 GMT +- request: + method: delete + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PODQJO2VUAGXRBLQAF26HQVOXFT + body: + encoding: US-ASCII + string: '' + headers: + Authorization: + - Bearer + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + response: + status: + code: 204 + message: No Content + headers: + Cache-Control: + - no-store, no-cache + Strict-Transport-Security: + - max-age=31536000 + Request-Id: + - 98132ce2-8267-464c-ae96-24ce725adea8 + Client-Request-Id: + - 98132ce2-8267-464c-ae96-24ce725adea8 + X-Ms-Ags-Diagnostic: + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"003","RoleInstance":"FR1PEPF00000D36"}}' + Date: + - Mon, 22 Apr 2024 12:52:12 GMT + body: + encoding: UTF-8 + string: '' + recorded_at: Mon, 22 Apr 2024 12:52:13 GMT +recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_setup.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_setup.yml deleted file mode 100644 index de92a448e4ed..000000000000 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_setup.yml +++ /dev/null @@ -1,111 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token - body: - encoding: UTF-8 - string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default - headers: - User-Agent: - - Rack::OAuth2 (2.2.1) - Authorization: - - Basic - Content-Type: - - application/x-www-form-urlencoded - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Cache-Control: - - no-store, no-cache - Pragma: - - no-cache - Content-Type: - - application/json; charset=utf-8 - Expires: - - "-1" - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - X-Content-Type-Options: - - nosniff - P3p: - - CP="DSP CUR OTPi IND OTRi ONL FIN" - X-Ms-Request-Id: - - 80ed89aa-e0fd-46b2-8a8a-3c61a2bf1600 - X-Ms-Ests-Server: - - 2.1.17184.4 - FRC ProdSlices - X-Xss-Protection: - - '0' - Set-Cookie: - - fpc=AgkUqOdYlQRNpz7MWHdKp26kbDoXAQAAAPbBTt0OAAAA; expires=Sun, 03-Mar-2024 - 10:59:03 GMT; path=/; secure; HttpOnly; SameSite=None - - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly - Date: - - Fri, 02 Feb 2024 10:59:02 GMT - Content-Length: - - '1708' - body: - encoding: UTF-8 - string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Fri, 02 Feb 2024 10:59:03 GMT -- request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root/children - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.1 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 200 - message: OK - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; - charset=utf-8 - Content-Encoding: - - gzip - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - a6f8548d-2c01-487a-9c8b-bad988ef1677 - Client-Request-Id: - - a6f8548d-2c01-487a-9c8b-bad988ef1677 - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF00000403"}}' - Date: - - Fri, 02 Feb 2024 10:59:02 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)","value":[{"createdBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"createdDateTime":"2023-09-26T14:38:50Z","eTag":"\"{6087B980-4C01-4020-BBF2-1E349BD0C831},1\"","id":"01AZJL5PMAXGDWAAKMEBALX4Q6GSN5BSBR","lastModifiedBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"lastModifiedDateTime":"2023-09-26T14:38:50Z","name":"Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Folder","cTag":"\"c:{6087B980-4C01-4020-BBF2-1E349BD0C831},0\"","fileSystemInfo":{"createdDateTime":"2023-09-26T14:38:50Z","lastModifiedDateTime":"2023-09-26T14:38:50Z"},"folder":{"childCount":5},"shared":{"scope":"users"},"size":260500},{"createdBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"createdDateTime":"2023-09-26T14:38:57Z","eTag":"\"{BAABD554-2A6E-4B51-A07F-22B54378CC94},1\"","id":"01AZJL5PKU2WV3U3RKKFF2A7ZCWVBXRTEU","lastModifiedBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"lastModifiedDateTime":"2023-09-26T14:38:57Z","name":"Folder with - spaces","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Folder%20with%20spaces","cTag":"\"c:{BAABD554-2A6E-4B51-A07F-22B54378CC94},0\"","fileSystemInfo":{"createdDateTime":"2023-09-26T14:38:57Z","lastModifiedDateTime":"2023-09-26T14:38:57Z"},"folder":{"childCount":4},"shared":{"scope":"users"},"size":35141},{"createdBy":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello - Rocha"}},"createdDateTime":"2024-01-12T09:05:10Z","eTag":"\"{73565DBB-32EA-46CE-9F64-A01EDD691B01},3\"","id":"01AZJL5PN3LVLHH2RSZZDJ6ZFAD3OWSGYB","lastModifiedBy":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello - Rocha"}},"lastModifiedDateTime":"2024-01-12T09:05:24Z","name":"Permissions - Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Permissions%20Folder","cTag":"\"c:{73565DBB-32EA-46CE-9F64-A01EDD691B01},0\"","decorator":{"iconColor":"darkRed"},"fileSystemInfo":{"createdDateTime":"2024-01-12T09:05:10Z","lastModifiedDateTime":"2024-01-12T09:05:24Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}]}' - recorded_at: Fri, 02 Feb 2024 10:59:03 GMT -recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_sub_folder.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_sub_folder.yml deleted file mode 100644 index 6c2d0f464412..000000000000 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_sub_folder.yml +++ /dev/null @@ -1,269 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token - body: - encoding: UTF-8 - string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default - headers: - User-Agent: - - Rack::OAuth2 (2.2.1) - Authorization: - - Basic - Content-Type: - - application/x-www-form-urlencoded - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Cache-Control: - - no-store, no-cache - Pragma: - - no-cache - Content-Type: - - application/json; charset=utf-8 - Expires: - - "-1" - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - X-Content-Type-Options: - - nosniff - P3p: - - CP="DSP CUR OTPi IND OTRi ONL FIN" - X-Ms-Request-Id: - - ab316a52-bfc7-4d54-a07e-77b113361900 - X-Ms-Ests-Server: - - 2.1.17184.4 - FRC ProdSlices - X-Xss-Protection: - - '0' - Set-Cookie: - - fpc=Am2jW5DsrN1KgVVT4ldTHIOkbDoXAQAAAPnBTt0OAAAA; expires=Sun, 03-Mar-2024 - 10:59:06 GMT; path=/; secure; HttpOnly; SameSite=None - - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly - Date: - - Fri, 02 Feb 2024 10:59:05 GMT - Content-Length: - - '1708' - body: - encoding: UTF-8 - string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Fri, 02 Feb 2024 10:59:06 GMT -- request: - method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root/children - body: - encoding: UTF-8 - string: '{"name":"Földer CreatedBy Çommand","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.1 - Accept-Encoding: - - gzip, deflate - Content-Length: - - '92' - response: - status: - code: 201 - message: Created - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Etag: - - '"{A5F7B6A8-37D5-49C2-A8E0-D8D35EDFC154},1"' - Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs')/items('root')/children('01AZJL5PNIW332LVJXYJE2RYGY2NPN7QKU') - Vary: - - Accept-Encoding - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - 35fc8cc2-0976-45a9-84fe-0008905c8a26 - Client-Request-Id: - - 35fc8cc2-0976-45a9-84fe-0008905c8a26 - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000004D4"}}' - Odata-Version: - - '4.0' - Date: - - Fri, 02 Feb 2024 10:59:05 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs'')/root/children/$entity","@odata.etag":"\"{A5F7B6A8-37D5-49C2-A8E0-D8D35EDFC154},1\"","createdDateTime":"2024-02-02T10:59:06Z","eTag":"\"{A5F7B6A8-37D5-49C2-A8E0-D8D35EDFC154},1\"","id":"01AZJL5PNIW332LVJXYJE2RYGY2NPN7QKU","lastModifiedDateTime":"2024-02-02T10:59:06Z","name":"F\u00f6lder - CreatedBy \u00c7ommand","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/F%C3%B6lder%20CreatedBy%20%C3%87ommand","cTag":"\"c:{A5F7B6A8-37D5-49C2-A8E0-D8D35EDFC154},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject - Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","sharepointIds":{"listId":"f3baf95b-362b-4740-80d8-4f593d28f5ec","listItemUniqueId":"049e81d0-52fb-4624-af6d-96611c29a9cc","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-02T10:59:06Z","lastModifiedDateTime":"2024-02-02T10:59:06Z"},"folder":{"childCount":0}}' - recorded_at: Fri, 02 Feb 2024 10:59:06 GMT -- request: - method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PNIW332LVJXYJE2RYGY2NPN7QKU/children - body: - encoding: UTF-8 - string: '{"name":"Another Folder","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.1 - Accept-Encoding: - - gzip, deflate - Content-Length: - - '80' - response: - status: - code: 201 - message: Created - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Etag: - - '"{BFEF1805-9ACA-43D3-BCC7-C7F27A30CB70},1"' - Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs')/items('01AZJL5PNIW332LVJXYJE2RYGY2NPN7QKU')/children('01AZJL5PIFDDX37SU22NB3ZR6H6J5DBS3Q') - Vary: - - Accept-Encoding - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - 9661a03f-5d69-4f03-9c25-e33aa679fc21 - Client-Request-Id: - - 9661a03f-5d69-4f03-9c25-e33aa679fc21 - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000004D4"}}' - Odata-Version: - - '4.0' - Date: - - Fri, 02 Feb 2024 10:59:05 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs'')/items(''01AZJL5PNIW332LVJXYJE2RYGY2NPN7QKU'')/children/$entity","@odata.etag":"\"{BFEF1805-9ACA-43D3-BCC7-C7F27A30CB70},1\"","createdDateTime":"2024-02-02T10:59:06Z","eTag":"\"{BFEF1805-9ACA-43D3-BCC7-C7F27A30CB70},1\"","id":"01AZJL5PIFDDX37SU22NB3ZR6H6J5DBS3Q","lastModifiedDateTime":"2024-02-02T10:59:06Z","name":"Another - Folder","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/F%C3%B6lder%20CreatedBy%20%C3%87ommand/Another%20Folder","cTag":"\"c:{BFEF1805-9ACA-43D3-BCC7-C7F27A30CB70},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject - Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","driveType":"documentLibrary","id":"01AZJL5PNIW332LVJXYJE2RYGY2NPN7QKU","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:/F\u00f6lder - CreatedBy \u00c7ommand","sharepointIds":{"listId":"f3baf95b-362b-4740-80d8-4f593d28f5ec","listItemUniqueId":"a5f7b6a8-37d5-49c2-a8e0-d8d35edfc154","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-02T10:59:06Z","lastModifiedDateTime":"2024-02-02T10:59:06Z"},"folder":{"childCount":0}}' - recorded_at: Fri, 02 Feb 2024 10:59:06 GMT -- request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root/children - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.1 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 200 - message: OK - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; - charset=utf-8 - Content-Encoding: - - gzip - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - 7adfdc6d-741a-48ac-82f0-b9e59142cafc - Client-Request-Id: - - 7adfdc6d-741a-48ac-82f0-b9e59142cafc - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000001E5"}}' - Date: - - Fri, 02 Feb 2024 10:59:05 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)","value":[{"createdBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"createdDateTime":"2023-09-26T14:38:50Z","eTag":"\"{6087B980-4C01-4020-BBF2-1E349BD0C831},1\"","id":"01AZJL5PMAXGDWAAKMEBALX4Q6GSN5BSBR","lastModifiedBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"lastModifiedDateTime":"2023-09-26T14:38:50Z","name":"Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Folder","cTag":"\"c:{6087B980-4C01-4020-BBF2-1E349BD0C831},0\"","fileSystemInfo":{"createdDateTime":"2023-09-26T14:38:50Z","lastModifiedDateTime":"2023-09-26T14:38:50Z"},"folder":{"childCount":5},"shared":{"scope":"users"},"size":260500},{"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-02-02T10:59:06Z","eTag":"\"{A5F7B6A8-37D5-49C2-A8E0-D8D35EDFC154},1\"","id":"01AZJL5PNIW332LVJXYJE2RYGY2NPN7QKU","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-02-02T10:59:06Z","name":"F\u00f6lder - CreatedBy \u00c7ommand","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/F%C3%B6lder%20CreatedBy%20%C3%87ommand","cTag":"\"c:{A5F7B6A8-37D5-49C2-A8E0-D8D35EDFC154},0\"","fileSystemInfo":{"createdDateTime":"2024-02-02T10:59:06Z","lastModifiedDateTime":"2024-02-02T10:59:06Z"},"folder":{"childCount":1},"shared":{"scope":"users"},"size":0},{"createdBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"createdDateTime":"2023-09-26T14:38:57Z","eTag":"\"{BAABD554-2A6E-4B51-A07F-22B54378CC94},1\"","id":"01AZJL5PKU2WV3U3RKKFF2A7ZCWVBXRTEU","lastModifiedBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"lastModifiedDateTime":"2023-09-26T14:38:57Z","name":"Folder with - spaces","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Folder%20with%20spaces","cTag":"\"c:{BAABD554-2A6E-4B51-A07F-22B54378CC94},0\"","fileSystemInfo":{"createdDateTime":"2023-09-26T14:38:57Z","lastModifiedDateTime":"2023-09-26T14:38:57Z"},"folder":{"childCount":4},"shared":{"scope":"users"},"size":35141},{"createdBy":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello - Rocha"}},"createdDateTime":"2024-01-12T09:05:10Z","eTag":"\"{73565DBB-32EA-46CE-9F64-A01EDD691B01},3\"","id":"01AZJL5PN3LVLHH2RSZZDJ6ZFAD3OWSGYB","lastModifiedBy":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello - Rocha"}},"lastModifiedDateTime":"2024-01-12T09:05:24Z","name":"Permissions - Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Permissions%20Folder","cTag":"\"c:{73565DBB-32EA-46CE-9F64-A01EDD691B01},0\"","decorator":{"iconColor":"darkRed"},"fileSystemInfo":{"createdDateTime":"2024-01-12T09:05:10Z","lastModifiedDateTime":"2024-01-12T09:05:24Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}]}' - recorded_at: Fri, 02 Feb 2024 10:59:06 GMT -- request: - method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PNIW332LVJXYJE2RYGY2NPN7QKU - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.1 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 204 - message: No Content - headers: - Cache-Control: - - no-store, no-cache - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - 97d61145-adc3-4a0a-8580-5f4a06568e7f - Client-Request-Id: - - 97d61145-adc3-4a0a-8580-5f4a06568e7f - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF00000403"}}' - Date: - - Fri, 02 Feb 2024 10:59:06 GMT - body: - encoding: UTF-8 - string: '' - recorded_at: Fri, 02 Feb 2024 10:59:07 GMT -recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_sub_folder_with_existing_parent.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_sub_folder_with_existing_parent.yml deleted file mode 100644 index b570aec518f4..000000000000 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/create_folder_sub_folder_with_existing_parent.yml +++ /dev/null @@ -1,373 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token - body: - encoding: UTF-8 - string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default - headers: - User-Agent: - - Rack::OAuth2 (2.2.1) - Authorization: - - Basic - Content-Type: - - application/x-www-form-urlencoded - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Cache-Control: - - no-store, no-cache - Pragma: - - no-cache - Content-Type: - - application/json; charset=utf-8 - Expires: - - "-1" - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - X-Content-Type-Options: - - nosniff - P3p: - - CP="DSP CUR OTPi IND OTRi ONL FIN" - X-Ms-Request-Id: - - 3028d9b7-2ffa-43b6-9265-7e84c4031a00 - X-Ms-Ests-Server: - - 2.1.17184.4 - SEC ProdSlices - X-Xss-Protection: - - '0' - Set-Cookie: - - fpc=AjHwl5KxklxIoZ1ls9egfAykbDoXAQAAAP3BTt0OAAAA; expires=Sun, 03-Mar-2024 - 10:59:10 GMT; path=/; secure; HttpOnly; SameSite=None - - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly - Date: - - Fri, 02 Feb 2024 10:59:09 GMT - Content-Length: - - '1708' - body: - encoding: UTF-8 - string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Fri, 02 Feb 2024 10:59:10 GMT -- request: - method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root/children - body: - encoding: UTF-8 - string: '{"name":"Földer CreatedBy Çommand","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.1 - Accept-Encoding: - - gzip, deflate - Content-Length: - - '92' - response: - status: - code: 201 - message: Created - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Etag: - - '"{9F9CDA46-DA4F-4402-AB19-0FB8D4F5C508},1"' - Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs')/items('root')/children('01AZJL5PKG3KOJ6T62AJCKWGIPXDKPLRII') - Vary: - - Accept-Encoding - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - '03843b2f-a98d-4356-8ffb-7340c51a8dff' - Client-Request-Id: - - '03843b2f-a98d-4356-8ffb-7340c51a8dff' - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000003EB"}}' - Odata-Version: - - '4.0' - Date: - - Fri, 02 Feb 2024 10:59:09 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs'')/root/children/$entity","@odata.etag":"\"{9F9CDA46-DA4F-4402-AB19-0FB8D4F5C508},1\"","createdDateTime":"2024-02-02T10:59:10Z","eTag":"\"{9F9CDA46-DA4F-4402-AB19-0FB8D4F5C508},1\"","id":"01AZJL5PKG3KOJ6T62AJCKWGIPXDKPLRII","lastModifiedDateTime":"2024-02-02T10:59:10Z","name":"F\u00f6lder - CreatedBy \u00c7ommand","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/F%C3%B6lder%20CreatedBy%20%C3%87ommand","cTag":"\"c:{9F9CDA46-DA4F-4402-AB19-0FB8D4F5C508},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject - Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","sharepointIds":{"listId":"f3baf95b-362b-4740-80d8-4f593d28f5ec","listItemUniqueId":"049e81d0-52fb-4624-af6d-96611c29a9cc","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-02T10:59:10Z","lastModifiedDateTime":"2024-02-02T10:59:10Z"},"folder":{"childCount":0}}' - recorded_at: Fri, 02 Feb 2024 10:59:10 GMT -- request: - method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root/children - body: - encoding: UTF-8 - string: '{"name":"Földer CreatedBy Çommand","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.1 - Accept-Encoding: - - gzip, deflate - Content-Length: - - '92' - response: - status: - code: 409 - message: Conflict - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json - Content-Encoding: - - gzip - Vary: - - Accept-Encoding - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - aba20552-db14-4a4c-91e7-08cf8447b86c - Client-Request-Id: - - aba20552-db14-4a4c-91e7-08cf8447b86c - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000001EE"}}' - Date: - - Fri, 02 Feb 2024 10:59:09 GMT - body: - encoding: UTF-8 - string: '{"error":{"code":"nameAlreadyExists","message":"Name already exists","innerError":{"date":"2024-02-02T10:59:10","request-id":"aba20552-db14-4a4c-91e7-08cf8447b86c","client-request-id":"aba20552-db14-4a4c-91e7-08cf8447b86c"}}}' - recorded_at: Fri, 02 Feb 2024 10:59:10 GMT -- request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root/children - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.1 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 200 - message: OK - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; - charset=utf-8 - Content-Encoding: - - gzip - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - 852672b4-2447-4d6c-baf1-a2b8f0fa21a1 - Client-Request-Id: - - 852672b4-2447-4d6c-baf1-a2b8f0fa21a1 - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000004D3"}}' - Date: - - Fri, 02 Feb 2024 10:59:09 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)","value":[{"createdBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"createdDateTime":"2023-09-26T14:38:50Z","eTag":"\"{6087B980-4C01-4020-BBF2-1E349BD0C831},1\"","id":"01AZJL5PMAXGDWAAKMEBALX4Q6GSN5BSBR","lastModifiedBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"lastModifiedDateTime":"2023-09-26T14:38:50Z","name":"Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Folder","cTag":"\"c:{6087B980-4C01-4020-BBF2-1E349BD0C831},0\"","fileSystemInfo":{"createdDateTime":"2023-09-26T14:38:50Z","lastModifiedDateTime":"2023-09-26T14:38:50Z"},"folder":{"childCount":5},"shared":{"scope":"users"},"size":260500},{"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-02-02T10:59:10Z","eTag":"\"{9F9CDA46-DA4F-4402-AB19-0FB8D4F5C508},1\"","id":"01AZJL5PKG3KOJ6T62AJCKWGIPXDKPLRII","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-02-02T10:59:10Z","name":"F\u00f6lder - CreatedBy \u00c7ommand","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/F%C3%B6lder%20CreatedBy%20%C3%87ommand","cTag":"\"c:{9F9CDA46-DA4F-4402-AB19-0FB8D4F5C508},0\"","fileSystemInfo":{"createdDateTime":"2024-02-02T10:59:10Z","lastModifiedDateTime":"2024-02-02T10:59:10Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0},{"createdBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"createdDateTime":"2023-09-26T14:38:57Z","eTag":"\"{BAABD554-2A6E-4B51-A07F-22B54378CC94},1\"","id":"01AZJL5PKU2WV3U3RKKFF2A7ZCWVBXRTEU","lastModifiedBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"lastModifiedDateTime":"2023-09-26T14:38:57Z","name":"Folder with - spaces","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Folder%20with%20spaces","cTag":"\"c:{BAABD554-2A6E-4B51-A07F-22B54378CC94},0\"","fileSystemInfo":{"createdDateTime":"2023-09-26T14:38:57Z","lastModifiedDateTime":"2023-09-26T14:38:57Z"},"folder":{"childCount":4},"shared":{"scope":"users"},"size":35141},{"createdBy":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello - Rocha"}},"createdDateTime":"2024-01-12T09:05:10Z","eTag":"\"{73565DBB-32EA-46CE-9F64-A01EDD691B01},3\"","id":"01AZJL5PN3LVLHH2RSZZDJ6ZFAD3OWSGYB","lastModifiedBy":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello - Rocha"}},"lastModifiedDateTime":"2024-01-12T09:05:24Z","name":"Permissions - Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Permissions%20Folder","cTag":"\"c:{73565DBB-32EA-46CE-9F64-A01EDD691B01},0\"","decorator":{"iconColor":"darkRed"},"fileSystemInfo":{"createdDateTime":"2024-01-12T09:05:10Z","lastModifiedDateTime":"2024-01-12T09:05:24Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}]}' - recorded_at: Fri, 02 Feb 2024 10:59:10 GMT -- request: - method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PKG3KOJ6T62AJCKWGIPXDKPLRII/children - body: - encoding: UTF-8 - string: '{"name":"With Existing Folder","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.1 - Accept-Encoding: - - gzip, deflate - Content-Length: - - '86' - response: - status: - code: 201 - message: Created - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Etag: - - '"{619762FC-ECDC-4089-86C0-D11F8A1D0418},1"' - Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs')/items('01AZJL5PKG3KOJ6T62AJCKWGIPXDKPLRII')/children('01AZJL5PP4MKLWDXHMRFAINQGRD6FB2BAY') - Vary: - - Accept-Encoding - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - 2ec88a14-aee8-4510-96e7-27d60dd3f697 - Client-Request-Id: - - 2ec88a14-aee8-4510-96e7-27d60dd3f697 - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000001EE"}}' - Odata-Version: - - '4.0' - Date: - - Fri, 02 Feb 2024 10:59:10 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs'')/items(''01AZJL5PKG3KOJ6T62AJCKWGIPXDKPLRII'')/children/$entity","@odata.etag":"\"{619762FC-ECDC-4089-86C0-D11F8A1D0418},1\"","createdDateTime":"2024-02-02T10:59:11Z","eTag":"\"{619762FC-ECDC-4089-86C0-D11F8A1D0418},1\"","id":"01AZJL5PP4MKLWDXHMRFAINQGRD6FB2BAY","lastModifiedDateTime":"2024-02-02T10:59:11Z","name":"With - Existing Folder","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/F%C3%B6lder%20CreatedBy%20%C3%87ommand/With%20Existing%20Folder","cTag":"\"c:{619762FC-ECDC-4089-86C0-D11F8A1D0418},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject - Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","driveType":"documentLibrary","id":"01AZJL5PKG3KOJ6T62AJCKWGIPXDKPLRII","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:/F\u00f6lder - CreatedBy \u00c7ommand","sharepointIds":{"listId":"f3baf95b-362b-4740-80d8-4f593d28f5ec","listItemUniqueId":"9f9cda46-da4f-4402-ab19-0fb8d4f5c508","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-02T10:59:11Z","lastModifiedDateTime":"2024-02-02T10:59:11Z"},"folder":{"childCount":0}}' - recorded_at: Fri, 02 Feb 2024 10:59:10 GMT -- request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root/children - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.1 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 200 - message: OK - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; - charset=utf-8 - Content-Encoding: - - gzip - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - c0c9a6a7-74a3-4015-a28d-c0d60f78038e - Client-Request-Id: - - c0c9a6a7-74a3-4015-a28d-c0d60f78038e - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000003B3"}}' - Date: - - Fri, 02 Feb 2024 10:59:10 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)","value":[{"createdBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"createdDateTime":"2023-09-26T14:38:50Z","eTag":"\"{6087B980-4C01-4020-BBF2-1E349BD0C831},1\"","id":"01AZJL5PMAXGDWAAKMEBALX4Q6GSN5BSBR","lastModifiedBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"lastModifiedDateTime":"2023-09-26T14:38:50Z","name":"Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Folder","cTag":"\"c:{6087B980-4C01-4020-BBF2-1E349BD0C831},0\"","fileSystemInfo":{"createdDateTime":"2023-09-26T14:38:50Z","lastModifiedDateTime":"2023-09-26T14:38:50Z"},"folder":{"childCount":5},"shared":{"scope":"users"},"size":260500},{"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-02-02T10:59:10Z","eTag":"\"{9F9CDA46-DA4F-4402-AB19-0FB8D4F5C508},1\"","id":"01AZJL5PKG3KOJ6T62AJCKWGIPXDKPLRII","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-02-02T10:59:10Z","name":"F\u00f6lder - CreatedBy \u00c7ommand","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/F%C3%B6lder%20CreatedBy%20%C3%87ommand","cTag":"\"c:{9F9CDA46-DA4F-4402-AB19-0FB8D4F5C508},0\"","fileSystemInfo":{"createdDateTime":"2024-02-02T10:59:10Z","lastModifiedDateTime":"2024-02-02T10:59:10Z"},"folder":{"childCount":1},"shared":{"scope":"users"},"size":0},{"createdBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"createdDateTime":"2023-09-26T14:38:57Z","eTag":"\"{BAABD554-2A6E-4B51-A07F-22B54378CC94},1\"","id":"01AZJL5PKU2WV3U3RKKFF2A7ZCWVBXRTEU","lastModifiedBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"lastModifiedDateTime":"2023-09-26T14:38:57Z","name":"Folder with - spaces","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Folder%20with%20spaces","cTag":"\"c:{BAABD554-2A6E-4B51-A07F-22B54378CC94},0\"","fileSystemInfo":{"createdDateTime":"2023-09-26T14:38:57Z","lastModifiedDateTime":"2023-09-26T14:38:57Z"},"folder":{"childCount":4},"shared":{"scope":"users"},"size":35141},{"createdBy":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello - Rocha"}},"createdDateTime":"2024-01-12T09:05:10Z","eTag":"\"{73565DBB-32EA-46CE-9F64-A01EDD691B01},3\"","id":"01AZJL5PN3LVLHH2RSZZDJ6ZFAD3OWSGYB","lastModifiedBy":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello - Rocha"}},"lastModifiedDateTime":"2024-01-12T09:05:24Z","name":"Permissions - Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"VCR","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/VCR/Permissions%20Folder","cTag":"\"c:{73565DBB-32EA-46CE-9F64-A01EDD691B01},0\"","decorator":{"iconColor":"darkRed"},"fileSystemInfo":{"createdDateTime":"2024-01-12T09:05:10Z","lastModifiedDateTime":"2024-01-12T09:05:24Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}]}' - recorded_at: Fri, 02 Feb 2024 10:59:11 GMT -- request: - method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PKG3KOJ6T62AJCKWGIPXDKPLRII - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.1 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 204 - message: No Content - headers: - Cache-Control: - - no-store, no-cache - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - 9c3df77e-7a1d-41d9-86d7-ae5728eac22f - Client-Request-Id: - - 9c3df77e-7a1d-41d9-86d7-ae5728eac22f - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"FR2PEPF000001E6"}}' - Date: - - Fri, 02 Feb 2024 10:59:10 GMT - body: - encoding: UTF-8 - string: '' - recorded_at: Fri, 02 Feb 2024 10:59:11 GMT -recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/file_info_query_one_not_found.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/download_link_query_not_found.yml similarity index 66% rename from modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/file_info_query_one_not_found.yml rename to modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/download_link_query_not_found.yml index 9d75f803fb54..cabdb7d75b7d 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/file_info_query_one_not_found.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/download_link_query_not_found.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/not_existent?$select=id,name,fileSystemInfo,file,folder,size,createdBy,lastModifiedBy,parentReference + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/DeathStarNumberThree/content body: encoding: US-ASCII string: '' @@ -10,7 +10,7 @@ http_interactions: Authorization: - Bearer User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.3 Accept: - "*/*" Accept-Encoding: @@ -22,8 +22,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json; charset=utf-8 Content-Encoding: @@ -33,15 +31,15 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - feb96c62-6f97-4ad2-8b61-947cd4d18f30 + - b1a39085-f4ec-4c47-9c42-611df2c6d1d4 Client-Request-Id: - - feb96c62-6f97-4ad2-8b61-947cd4d18f30 + - b1a39085-f4ec-4c47-9c42-611df2c6d1d4 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF00000464"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"000","RoleInstance":"FR1PEPF00000C20"}}' Date: - - Tue, 30 Jan 2024 11:56:01 GMT + - Mon, 08 Apr 2024 11:15:04 GMT body: encoding: UTF-8 string: '{"error":{"code":"itemNotFound","message":"Item not found"}}' - recorded_at: Tue, 30 Jan 2024 11:56:02 GMT + recorded_at: Mon, 08 Apr 2024 11:15:04 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/download_link_query_success.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/download_link_query_success.yml new file mode 100644 index 000000000000..9f38287a8c45 --- /dev/null +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/download_link_query_success.yml @@ -0,0 +1,45 @@ +--- +http_interactions: +- request: + method: get + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PNDURPQGKUSGFCJQJMNNWXKTHSE/content + body: + encoding: US-ASCII + string: '' + headers: + Authorization: + - Bearer + User-Agent: + - httpx.rb/1.2.3 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + response: + status: + code: 302 + message: Found + headers: + Cache-Control: + - no-store, no-cache + Content-Type: + - application/octet-stream + Location: + - https://finn.sharepoint.com/sites/openprojectfilestoragetests/_layouts/15/download.aspx?UniqueId=035fa4a3-922a-4431-9825-8d6daea99e44&Translate=false&tempauth=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBfZGlzcGxheW5hbWUiOiJPcGVuUHJvamVjdCBEZXYgQXBwIiwiYXBwaWQiOiI0MjYyZGYyYi03N2JiLTQ5YzItYTVkZi0yODM1NWRhNjc2ZDIiLCJhdWQiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAvZmlubi5zaGFyZXBvaW50LmNvbUA0ZDQ0YmYzNi05YjU2LTQ1YzAtODgwNy1iYmYzODZkZDA0N2YiLCJjYWNoZWtleSI6IjBoLmZ8bWVtYmVyc2hpcHwxMDAzMjAwMmVkMmNhMDBlQGxpdmUuY29tIiwiY2lkIjoiSmlBTzVId0Rva1d4ZnEwUzZOZDJmZz09IiwiZW5kcG9pbnR1cmwiOiIwdHp4QWFzNTVycUZJNU1RVUF5eFN4Sk1iYTgxRktaU0pObWJDMnNQMGtVPSIsImVuZHBvaW50dXJsTGVuZ3RoIjoiMTQ5IiwiZXhwIjoiMTcxMjU3NzY4MCIsImZhbWlseV9uYW1lIjoiU2NodWJlcnQiLCJnaXZlbl9uYW1lIjoiRXJpYyIsImlwYWRkciI6IjIwLjE5MC4xOTAuOTYiLCJpc2xvb3BiYWNrIjoiVHJ1ZSIsImlzcyI6IjAwMDAwMDAzLTAwMDAtMGZmMS1jZTAwLTAwMDAwMDAwMDAwMCIsIm5iZiI6IjE3MTI1NzQwODAiLCJwdWlkIjoiMTAwMzIwMDJFRDJDQTAwRSIsInNjcCI6ImFsbGZpbGVzLndyaXRlIGFsbHNpdGVzLnJlYWQgYWxsc2l0ZXMud3JpdGUgYWxscHJvZmlsZXMucmVhZCIsInNpdGVpZCI6Ik1XSTBZalkxTnpZdE9UQTJaQzAwWkRrMExUaG1ORGt0Tm1Rd01HRTVOVEEzWWpVdyIsInRpZCI6IjRkNDRiZjM2LTliNTYtNDVjMC04ODA3LWJiZjM4NmRkMDQ3ZiIsInR0IjoiMiIsInVwbiI6ImVzY2h1YmVydC5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29tIiwidmVyIjoiaGFzaGVkcHJvb2Z0b2tlbiJ9.Umai1d7GO_BKZYAU-63vCUp4nHbp7nQq2cUbowxNhS8&ApiVersion=2.0 + Strict-Transport-Security: + - max-age=31536000 + Request-Id: + - e40e2026-037c-45a2-b17e-ad12e8d7767e + Client-Request-Id: + - e40e2026-037c-45a2-b17e-ad12e8d7767e + X-Ms-Ags-Diagnostic: + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"003","RoleInstance":"FR1PEPF00000AF2"}}' + Date: + - Mon, 08 Apr 2024 11:01:19 GMT + Content-Length: + - '0' + body: + encoding: UTF-8 + string: '' + recorded_at: Mon, 08 Apr 2024 11:01:20 GMT +recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/file_info_query_forbidden.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/file_info_query_forbidden.yml new file mode 100644 index 000000000000..661aa02f4e7c --- /dev/null +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/file_info_query_forbidden.yml @@ -0,0 +1,354 @@ +--- +http_interactions: +- request: + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token + body: + encoding: UTF-8 + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default + headers: + User-Agent: + - Rack::OAuth2 (2.2.1) + Authorization: + - Basic + Content-Type: + - application/x-www-form-urlencoded + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-store, no-cache + Pragma: + - no-cache + Content-Type: + - application/json; charset=utf-8 + Expires: + - "-1" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - 9ccbdf3f-d9a7-45ab-b4da-b1659f74b800 + X-Ms-Ests-Server: + - 2.1.17846.6 - SEC ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=Aqgdg4QXwYFCsvfdSklAGxOkbDoXAQAAAKsdvN0OAAAA; expires=Sat, 25-May-2024 + 09:47:24 GMT; path=/; secure; HttpOnly; SameSite=None + - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly + - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly + Date: + - Thu, 25 Apr 2024 09:47:23 GMT + Content-Length: + - '1708' + body: + encoding: UTF-8 + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Thu, 25 Apr 2024 09:47:24 GMT +- request: + method: post + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children + body: + encoding: UTF-8 + string: '{"name":"Forbidden Folder","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + headers: + Authorization: + - Bearer + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - httpx.rb/1.2.4 + Accept-Encoding: + - gzip, deflate + Content-Length: + - '82' + response: + status: + code: 201 + message: Created + headers: + Cache-Control: + - no-store, no-cache + Content-Type: + - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + Content-Encoding: + - gzip + Etag: + - '"{D13E6CD8-1B18-4C8B-B7F8-A3AC796798F1},1"' + Location: + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5POYNQ7NCGA3RNGLP6FDVR4WPGHR') + Vary: + - Accept-Encoding + Strict-Transport-Security: + - max-age=31536000 + Request-Id: + - 5d0d1aa8-576c-41e8-ae4b-5330c6f36e12 + Client-Request-Id: + - 5d0d1aa8-576c-41e8-ae4b-5330c6f36e12 + X-Ms-Ags-Diagnostic: + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"000","RoleInstance":"FR1PEPF0000107D"}}' + Odata-Version: + - '4.0' + Date: + - Thu, 25 Apr 2024 09:47:24 GMT + body: + encoding: UTF-8 + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{D13E6CD8-1B18-4C8B-B7F8-A3AC796798F1},1\"","createdDateTime":"2024-04-25T09:47:24Z","eTag":"\"{D13E6CD8-1B18-4C8B-B7F8-A3AC796798F1},1\"","id":"01AZJL5POYNQ7NCGA3RNGLP6FDVR4WPGHR","lastModifiedDateTime":"2024-04-25T09:47:24Z","name":"Forbidden + Folder","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Forbidden%20Folder","cTag":"\"c:{D13E6CD8-1B18-4C8B-B7F8-A3AC796798F1},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint + App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-25T09:47:24Z","lastModifiedDateTime":"2024-04-25T09:47:24Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Thu, 25 Apr 2024 09:47:24 GMT +- request: + method: get + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POYNQ7NCGA3RNGLP6FDVR4WPGHR?$select=id,name,fileSystemInfo,file,folder,size,createdBy,lastModifiedBy,parentReference + body: + encoding: US-ASCII + string: '' + headers: + Authorization: + - Bearer + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + response: + status: + code: 404 + message: Not Found + headers: + Cache-Control: + - no-store, no-cache + Content-Type: + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 + Content-Encoding: + - gzip + Vary: + - Accept-Encoding + Strict-Transport-Security: + - max-age=31536000 + Request-Id: + - d159669c-0cc9-4891-ba35-8cb549c6338d + Client-Request-Id: + - d159669c-0cc9-4891-ba35-8cb549c6338d + X-Ms-Ags-Diagnostic: + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"000","RoleInstance":"FR1PEPF000007A4"}}' + Date: + - Thu, 25 Apr 2024 09:47:24 GMT + body: + encoding: UTF-8 + string: '{"error":{"code":"itemNotFound","message":"The resource could not be + found."}}' + recorded_at: Thu, 25 Apr 2024 09:47:25 GMT +- request: + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token + body: + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB + headers: + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-store, no-cache + Pragma: + - no-cache + Content-Type: + - application/json; charset=utf-8 + Expires: + - "-1" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - 1928c9e5-2a3f-40ca-a045-df7153a9b500 + X-Ms-Ests-Server: + - 2.1.17846.6 - FRC ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=AkmNlzqUsAhBicjKNc8eYxKkbDoXAQAAAKwdvN0OAAAA; expires=Sat, 25-May-2024 + 09:47:25 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly + Date: + - Thu, 25 Apr 2024 09:47:24 GMT + Content-Length: + - '1735' + body: + encoding: UTF-8 + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Thu, 25 Apr 2024 09:47:25 GMT +- request: + method: get + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POYNQ7NCGA3RNGLP6FDVR4WPGHR?$select=id,name,fileSystemInfo,file,folder,size,createdBy,lastModifiedBy,parentReference + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Authorization: + - Bearer + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-cache + Content-Type: + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 + Content-Encoding: + - gzip + Strict-Transport-Security: + - max-age=31536000 + Request-Id: + - 456700b3-96ec-43c7-80b9-5df523b5b5f0 + Client-Request-Id: + - 456700b3-96ec-43c7-80b9-5df523b5b5f0 + X-Ms-Ags-Diagnostic: + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"000","RoleInstance":"FR1PEPF000007AC"}}' + Date: + - Thu, 25 Apr 2024 09:47:25 GMT + body: + encoding: UTF-8 + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@odata.etag":"\"{D13E6CD8-1B18-4C8B-B7F8-A3AC796798F1},2\"","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"id":"01AZJL5POYNQ7NCGA3RNGLP6FDVR4WPGHR","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"name":"Forbidden Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-04-25T09:47:24Z","lastModifiedDateTime":"2024-04-25T09:47:24Z"},"folder":{"childCount":0},"size":0}' + recorded_at: Thu, 25 Apr 2024 09:47:25 GMT +- request: + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token + body: + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB + headers: + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-store, no-cache + Pragma: + - no-cache + Content-Type: + - application/json; charset=utf-8 + Expires: + - "-1" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - 9c178365-2d3d-4c25-b160-4584064cc000 + X-Ms-Ests-Server: + - 2.1.17846.6 - FRC ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=AuohO-25QkJDph7AQcb6W2ukbDoXAQAAAK4dvN0OAAAA; expires=Sat, 25-May-2024 + 09:47:26 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly + Date: + - Thu, 25 Apr 2024 09:47:25 GMT + Content-Length: + - '1735' + body: + encoding: UTF-8 + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Thu, 25 Apr 2024 09:47:26 GMT +- request: + method: delete + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POYNQ7NCGA3RNGLP6FDVR4WPGHR + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Authorization: + - Bearer + response: + status: + code: 204 + message: No Content + headers: + Cache-Control: + - no-store, no-cache + Strict-Transport-Security: + - max-age=31536000 + Request-Id: + - 81112f90-1d8b-4d06-89e7-e168463427d8 + Client-Request-Id: + - 81112f90-1d8b-4d06-89e7-e168463427d8 + X-Ms-Ags-Diagnostic: + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"000","RoleInstance":"FR1PEPF000010A0"}}' + Date: + - Thu, 25 Apr 2024 09:47:26 GMT + body: + encoding: UTF-8 + string: '' + recorded_at: Thu, 25 Apr 2024 09:47:26 GMT +recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/file_info_query_not_found.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/file_info_query_not_found.yml new file mode 100644 index 000000000000..3c0f5ac20612 --- /dev/null +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/file_info_query_not_found.yml @@ -0,0 +1,144 @@ +--- +http_interactions: +- request: + method: get + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/not_existent?$select=id,name,fileSystemInfo,file,folder,size,createdBy,lastModifiedBy,parentReference + body: + encoding: US-ASCII + string: '' + headers: + Authorization: + - Bearer + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + response: + status: + code: 404 + message: Not Found + headers: + Cache-Control: + - no-store, no-cache + Content-Type: + - application/json; charset=utf-8 + Content-Encoding: + - gzip + Vary: + - Accept-Encoding + Strict-Transport-Security: + - max-age=31536000 + Request-Id: + - e8f4d212-b8de-4c44-9c99-f3f44761314d + Client-Request-Id: + - e8f4d212-b8de-4c44-9c99-f3f44761314d + X-Ms-Ags-Diagnostic: + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"000","RoleInstance":"FR1PEPF0000109D"}}' + Date: + - Thu, 25 Apr 2024 09:40:30 GMT + body: + encoding: UTF-8 + string: '{"error":{"code":"itemNotFound","message":"Item not found"}}' + recorded_at: Thu, 25 Apr 2024 09:40:31 GMT +- request: + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token + body: + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB + headers: + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-store, no-cache + Pragma: + - no-cache + Content-Type: + - application/json; charset=utf-8 + Expires: + - "-1" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - 102e41d2-ebf8-4412-8a93-1f5e31309800 + X-Ms-Ests-Server: + - 2.1.17846.6 - WEULR1 ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=Aq6ssGKvEZdKjk_vkF-IR9akbDoXAQAAAA8cvN0OAAAA; expires=Sat, 25-May-2024 + 09:40:32 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly + Date: + - Thu, 25 Apr 2024 09:40:31 GMT + Content-Length: + - '1735' + body: + encoding: UTF-8 + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Thu, 25 Apr 2024 09:40:32 GMT +- request: + method: get + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/not_existent?$select=id,name,fileSystemInfo,file,folder,size,createdBy,lastModifiedBy,parentReference + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Authorization: + - Bearer + response: + status: + code: 404 + message: Not Found + headers: + Cache-Control: + - no-store, no-cache + Content-Type: + - application/json; charset=utf-8 + Content-Encoding: + - gzip + Vary: + - Accept-Encoding + Strict-Transport-Security: + - max-age=31536000 + Request-Id: + - 303046bb-b35f-445f-94b0-0c3616a26892 + Client-Request-Id: + - 303046bb-b35f-445f-94b0-0c3616a26892 + X-Ms-Ags-Diagnostic: + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"000","RoleInstance":"FR1PEPF00000C2E"}}' + Date: + - Thu, 25 Apr 2024 09:40:31 GMT + body: + encoding: UTF-8 + string: '{"error":{"code":"itemNotFound","message":"Item not found"}}' + recorded_at: Thu, 25 Apr 2024 09:40:32 GMT +recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/file_info_query_success_file.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/file_info_query_success_file.yml index 509f0d594ff1..acc4b24bea7f 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/file_info_query_success_file.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/file_info_query_success_file.yml @@ -10,7 +10,7 @@ http_interactions: Authorization: - Bearer User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept: - "*/*" Accept-Encoding: @@ -22,8 +22,6 @@ http_interactions: headers: Cache-Control: - no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; charset=utf-8 @@ -32,17 +30,17 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 2fa26f33-24ef-4ae7-96e8-9c043ecfd012 + - ebd96740-b499-4757-abad-c92006a8c2c4 Client-Request-Id: - - 2fa26f33-24ef-4ae7-96e8-9c043ecfd012 + - ebd96740-b499-4757-abad-c92006a8c2c4 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002E4"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"000","RoleInstance":"FR1PEPF0000107E"}}' Date: - - Tue, 30 Jan 2024 11:56:00 GMT + - Thu, 25 Apr 2024 09:46:07 GMT body: encoding: UTF-8 string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@odata.etag":"\"{128880A2-6DA3-4DFA-995F-A075F7ACED60},3\"","createdBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric Schubert"}},"id":"01AZJL5PNCQCEBFI3N7JGZSX5AOX32Z3LA","lastModifiedBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric Schubert"}},"name":"NextcloudHub.md","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PPWP5UOATNRJJBYJG5TACDHEUAG","name":"Subfolder","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:/Folder/Subfolder","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"file":{"hashes":{"quickXorHash":"2HQJc625zkgBM9NAAjuXr1Im/0M="},"mimeType":"application/octet-stream"},"fileSystemInfo":{"createdDateTime":"2023-09-26T14:45:25Z","lastModifiedDateTime":"2023-09-26T14:46:13Z"},"size":1095}' - recorded_at: Tue, 30 Jan 2024 11:56:01 GMT + recorded_at: Thu, 25 Apr 2024 09:46:08 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/file_info_query_success_folder.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/file_info_query_success_folder.yml index 7827c355f60c..c14e1424c816 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/file_info_query_success_folder.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/file_info_query_success_folder.yml @@ -10,7 +10,7 @@ http_interactions: Authorization: - Bearer User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept: - "*/*" Accept-Encoding: @@ -22,8 +22,6 @@ http_interactions: headers: Cache-Control: - no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; charset=utf-8 @@ -32,17 +30,17 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - bbe5d119-0f93-4ac7-be44-ca15c3b35e3f + - eb6e0b8f-924f-4e15-b35b-92f96ed3d55c Client-Request-Id: - - bbe5d119-0f93-4ac7-be44-ca15c3b35e3f + - eb6e0b8f-924f-4e15-b35b-92f96ed3d55c X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF0000045F"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"004","RoleInstance":"FR2PEPF00000553"}}' Date: - - Tue, 30 Jan 2024 11:56:01 GMT + - Thu, 25 Apr 2024 09:46:37 GMT body: encoding: UTF-8 string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@odata.etag":"\"{D67AC1B0-566D-41C3-B8A4-E94075763181},2\"","createdBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric Schubert"}},"id":"01AZJL5PNQYF5NM3KWYNA3RJHJIB2XMMMB","lastModifiedBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric - Schubert"}},"name":"\u00dcml\u00e6\u00fbts","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PMAXGDWAAKMEBALX4Q6GSN5BSBR","name":"Folder","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:/Folder","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2023-10-09T15:26:32Z","lastModifiedDateTime":"2023-10-09T15:26:32Z"},"folder":{"childCount":1},"size":18007}' - recorded_at: Tue, 30 Jan 2024 11:56:01 GMT + Schubert"}},"name":"\u00dcml\u00e6\u00fbts","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PMAXGDWAAKMEBALX4Q6GSN5BSBR","name":"Folder","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:/Folder","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2023-10-09T15:26:32Z","lastModifiedDateTime":"2023-10-09T15:26:32Z"},"folder":{"childCount":1,"decorator":{"iconColor":"darkTeal"}},"size":20789}' + recorded_at: Thu, 25 Apr 2024 09:46:37 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/folder_files_file_ids_deep_query_invalid_parent.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/file_path_to_id_map_query_invalid_parent.yml similarity index 100% rename from modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/folder_files_file_ids_deep_query_invalid_parent.yml rename to modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/file_path_to_id_map_query_invalid_parent.yml diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/folder_files_file_ids_deep_query_parent_folder.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/file_path_to_id_map_query_parent_folder.yml similarity index 100% rename from modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/folder_files_file_ids_deep_query_parent_folder.yml rename to modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/file_path_to_id_map_query_parent_folder.yml diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/folder_files_file_ids_deep_query_root.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/file_path_to_id_map_query_root.yml similarity index 100% rename from modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/folder_files_file_ids_deep_query_root.yml rename to modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/file_path_to_id_map_query_root.yml diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/files_info_query_one_not_found.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/files_info_query_one_not_found.yml index c196f0e0e275..064681f4dd8b 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/files_info_query_one_not_found.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/files_info_query_one_not_found.yml @@ -10,11 +10,117 @@ http_interactions: Authorization: - Bearer User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept: - "*/*" Accept-Encoding: - gzip, deflate + response: + status: + code: 401 + message: Unauthorized + headers: + Content-Type: + - application/json + Content-Encoding: + - gzip + Vary: + - Accept-Encoding + Strict-Transport-Security: + - max-age=31536000 + Request-Id: + - ee8c6eb1-6433-4065-b9d9-34f8b9d6a841 + Client-Request-Id: + - ee8c6eb1-6433-4065-b9d9-34f8b9d6a841 + X-Ms-Ags-Diagnostic: + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"005","RoleInstance":"FR3PEPF0000054E"}}' + Www-Authenticate: + - Bearer realm="", authorization_uri="https://login.microsoftonline.com/common/oauth2/authorize", + client_id="00000003-0000-0000-c000-000000000000" + Date: + - Thu, 25 Apr 2024 13:51:28 GMT + body: + encoding: UTF-8 + string: '{"error":{"code":"InvalidAuthenticationToken","message":"Lifetime validation + failed, the token is expired.","innerError":{"date":"2024-04-25T13:51:28","request-id":"ee8c6eb1-6433-4065-b9d9-34f8b9d6a841","client-request-id":"ee8c6eb1-6433-4065-b9d9-34f8b9d6a841"}}}' + recorded_at: Thu, 25 Apr 2024 13:51:28 GMT +- request: + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token + body: + encoding: ASCII-8BIT + string: grant_type=refresh_token&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB&refresh_token=0.AQkANr9ETVabwEWIB7vzht0EfyvfYkK7d8JJpd8oNV2mdtIJAE4.AgABAwEAAADnfolhJpSnRYB1SVj-Hgd8AgDs_wUA9P_diHW6bDhe23QNDcLxox9BCAFs_rdN6aZo6bcTA2g2IhWaKSOQ8bEKyi0WmbJw3_I8LZdNwYRWsko9J5tNkN8WQloCG7VPtR4I3RO5Pnl99-bdo01xwUcwIfoYGhXy7ckY09-6jqcyOs4ArHsC0QGb2EYs0Ir5Rv6Wr_Co6iZp4euuZVqDuIO54xoIJ322pFtpJLRBtb0HUqy8W9iWHNM86xjrRn5XqTJNp_PVgL7jVfkucuZCRC4ZfvuDV9921kqsJN5DlCIfCYLq9L76DkiFsRpSr4BbsEUDyQlYUE6vto6QU8KoVUdUEkCnjVHY9CAODwVxAeSsRUOwqoIKUQPN7m47iocrNJ7mcWxYeVFGVMXsECPC_vnWffdCZKHO6i3xpXaFBADwUg6YVs-7ESlxZ8I8Z6CouGhxtnMpMvQvYUoOlgKB3tAfXsoZU0Y3fMCzX-1bMl47oZiGh91uME-IPb1UlcmMoQf09_MlQbKhmeCOcd3H2YnPLhfsH1-wUy3bJb-dQQi4UVPK1qEi5q7n9_9VMHX1q3B3avX7r8Jf-FJb79VeiGW3ZqDJV4FCpecLeoZpXprIzCFrgNOY99ldYrRgP-BdRees5veipoonQFD6jyFjTR4CNFhXCqZZV9dBdRMQ2KO7cgGke3JQtEkSluKDqSEhuZUkZqqjDHf_nTr0kwaPI6QWDsB-F-BFyu1z_xA0gwHj-ETOOcsz-AxGFTfpGBS066BD4V504xxOx8i4-ZqGB53oA3xRB9Ds_zkQ8a3GWodHxMJw9_IBAo8lKhQ19w40EdfKbdebFrQtSynHXUE6Snko6GqH0L-dEeTlWjf5I4_gFfWk_LjpgeZnmRWWvWsoed8Eq8ZrQZralr92HSY6Wwql1o6VaVkDkUgMzkzzPf70t2Kq5Tt9ODarnuWeDUuCLyoGFgBX8REcmlxAZM1ajw6wNhiYnAIgtLcG1rt86Io__r8DJemO7dDOBtHjNJq-EkU0vsdhP-UJs0Rszo9n1Zz61Lma3xr5pBMOAW56tRHBkae-gBp60wl6Ad8VhkQ5r76M3GjsSvaVPC4R2_fkvD5q-pZzHEtZopqDIMBpEyfFzeygkVlPiOr2jqmN9Lqy2aBPXklBkoNA0NWsKr74HsQBgfEjVIEtFVWukv6EYOdTCfbr7R3P-2AvJ75HDB8Yt_jqmQmKd5PxYOAPkNnhfs1vBLZ9yhKk00dWV_aZMoXl349DIcbHYz0hr1UbOSAolq8fP-zjZSI1arhVqbgrLyw_t3k9bBrLcNvN4lFQIR_gm_4q6vvUAZdn-VLQUH3R1-4KZODfFXk41HvyQ2CDXY9amKmDD1VLVgP0MEu5pQmue6MfRqYHYcFThSfw0JNCnliR70nEklGTQtPkrMu24gPQMT_DoblNhlo3WWXPcDOha2X3bBPsSdLYHF4_yaYgJsj-U3YpsyprX8a4M0jffvfynM5oKdS73i-oHgcemnMtwBNRbfxdvs-nJTXbcsKC9Ac + headers: + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '1812' + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-store, no-cache + Pragma: + - no-cache + Content-Type: + - application/json; charset=utf-8 + Expires: + - "-1" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - fe337949-2ea7-46b0-8001-31ed10efb700 + X-Ms-Ests-Server: + - 2.1.17846.6 - FRC ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=AvwAm1VZpNZEiwmqDOLCvit9yQTNAQAAAOBWvN0OAAAA; expires=Sat, 25-May-2024 + 13:51:28 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly + Date: + - Thu, 25 Apr 2024 13:51:27 GMT + Connection: + - close + Content-Length: + - '4366' + body: + encoding: UTF-8 + string: '{"token_type":"Bearer","scope":"profile openid email https://graph.microsoft.com/Directory.ReadWrite.All + https://graph.microsoft.com/Files.ReadWrite.All https://graph.microsoft.com/Sites.Read.All + https://graph.microsoft.com/Sites.ReadWrite.All https://graph.microsoft.com/User.Read + https://graph.microsoft.com/.default","expires_in":3606,"ext_expires_in":3606,"access_token":"","refresh_token":"0.AQkANr9ETVabwEWIB7vzht0EfyvfYkK7d8JJpd8oNV2mdtIJAE4.AgABAwEAAADnfolhJpSnRYB1SVj-Hgd8AgDs_wUA9P-sDDHa2BVRSkTTExtCWmbHQ3ng2s2_Eg-R5lxELM8iUK_l2FkU3D_yABYGoplQR5x1fHIv-Bio-XbO5-GMFxlcTsBPMV6CCqqNMmgTUkVVrQNUmW7Vh_RR131R2GN16lBlnWbj0OWJxFkUVDL9kgPCwGrQLrdMojJ4Lgv4kOj0Fe2De29dC5CvV1kxt2lkwtcjTemyM47WT0GXCTgaO72hTK-z0eNxQ_p7dWti8iJ0dT8npoXNOxvhJt5qvfMYSGlgVVMPkmz_cRAt0hLYpk_TrnE_PBdsHWIRiM1TePjI2haopCjqze5RBu7WlSnZyw2kvtmd-fq7h4sfZgUpowpAsq7fFymacBoUXa3i3b1A8cVDqsvSDJQ1Rf-869B6K4YOocPuYX0A_0E-y6tDQ79Z2kAM_olytRKF5Moil0Fba8PcbQuZGha9T1fUiEWn2QPOuumcqEJVQkmtRLHq5cokhF87qfDLuHl4y1xy3HJX0QzJm0sLXsGutq43KcXxQD_er1ufi1UQxO3esIDhPEJlAW_E8gjvyMuO5-T6Zmrzyz-Im74Vurq3bFJAE7JQ4NnpFvkLmSUUrdu5RQit7jA4ZXdh6aSDE8UWxcdrlJ_j4-xafAH2FTwgBCZ74jtW_Vf5b8mTGlDiGwynkzDn5dClrXMto0CQSbQupxmIX9rkilsf8NvY-gp9E4CcyH9e2J1G-vucF7jmuXEporIdWCZ0v8RQ1eP0bcO6mLMxC6LKZTellhWmuzo1d7tlj8-YTjLAjlDea197vMl7bXMfFFhY6P7EBMd9ZzdB13bY8Un7Lvjui-ALwmMZGolC5-QK5NiVrMn0Cy-lbibJAnF4Y9QkG4QmVdDmoXg2vRl38huLfaCJ3bELxajRdIFW_z6tzFnUzNofCCRn4-aSYS9m3I-psLQ9Y_6BVpgUp42m1ynJuEuDvLG4GWQpQQhjOKoeKQnjcXOxUdLuAYe_VOvNBgcQwXZdaRarfkmD83t1fLFLkhlhmILGMj1HAQFPrzMaOEHPicv8TyaIJngpIAHMjxDg0ikTzDH01qydMZH1fgJc5E7iEn4sHyb6Vri7aqnj8rXGbm0z2usZrMWgetJ6LIwRa6H5vgtJFc8rt021HbEMVs3MBIPhkPPDlnNvACb-B5NbBeekcTL9EPoFVnZBZrHNDuy8Lsrd0C53_hpP1UncMw--nICskuNRX8DN7reybe93_I9suaXlEX7wgpZ0s7Pdwm8BYTrJ9f7fCFtA_IzUpCtVeKyW8zeacmLJIgJyMhqf8zxzJsH-JSrIw1boxWCnem9PMlWP1RP_osFFlApqCwGUydawzagETdTc5moQyGgMAbPpQ8iIsOLG2Hs2JpRKwLo-byN_-yA66La7q5va8uTm7wK21GeavrD-vm3VpW3g7XjmOhvW0GL3lYRAx37-ogpjmyBhm2FjFiJ6Buu5qHEjj4qRC3SgVsKLz2ogUNrruLOH7wF56Q8jLTp6il4WluuGcGg7hUQ"}' + recorded_at: Thu, 25 Apr 2024 13:51:28 GMT +- request: + method: get + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/01AZJL5PJTICED3C5YSVAY6NWTBNA2XERU?$select=id,name,fileSystemInfo,file,folder,size,createdBy,lastModifiedBy,parentReference + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Authorization: + - Bearer response: status: code: 200 @@ -22,8 +128,6 @@ http_interactions: headers: Cache-Control: - no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; charset=utf-8 @@ -32,19 +136,19 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - f04d52dd-14d7-44bb-9f5c-b472dbf0b7a8 + - fea83d0b-352a-496c-9d2d-1e6b0dbc1e16 Client-Request-Id: - - f04d52dd-14d7-44bb-9f5c-b472dbf0b7a8 + - fea83d0b-352a-496c-9d2d-1e6b0dbc1e16 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF0000045F"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"005","RoleInstance":"FR3PEPF000002C3"}}' Date: - - Tue, 30 Jan 2024 11:55:54 GMT + - Thu, 25 Apr 2024 13:51:28 GMT body: encoding: UTF-8 string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@odata.etag":"\"{3D884033-B88B-4195-8F36-D30B41AB9234},6\"","createdBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric Schubert"}},"id":"01AZJL5PJTICED3C5YSVAY6NWTBNA2XERU","lastModifiedBy":{"user":{"email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a","displayName":"Eric Schubert"}},"name":"Document.docx","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs","id":"01AZJL5PMAXGDWAAKMEBALX4Q6GSN5BSBR","name":"Folder","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root:/Folder","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"file":{"hashes":{"quickXorHash":"unQc+b2OwmpXiE0xrwtDf4g4ZjI="},"mimeType":"application/vnd.openxmlformats-officedocument.wordprocessingml.document"},"fileSystemInfo":{"createdDateTime":"2023-09-26T14:40:58Z","lastModifiedDateTime":"2023-09-26T14:42:03Z"},"size":22514}' - recorded_at: Tue, 30 Jan 2024 11:55:54 GMT + recorded_at: Thu, 25 Apr 2024 13:51:29 GMT - request: method: get uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/not_existent?$select=id,name,fileSystemInfo,file,folder,size,createdBy,lastModifiedBy,parentReference @@ -55,11 +159,112 @@ http_interactions: Authorization: - Bearer User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + response: + status: + code: 404 + message: Not Found + headers: + Cache-Control: + - no-store, no-cache + Content-Type: + - application/json; charset=utf-8 + Content-Encoding: + - gzip + Vary: + - Accept-Encoding + Strict-Transport-Security: + - max-age=31536000 + Request-Id: + - c0a2affb-624f-44b7-9e57-8bc2fdfcbe7f + Client-Request-Id: + - c0a2affb-624f-44b7-9e57-8bc2fdfcbe7f + X-Ms-Ags-Diagnostic: + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"005","RoleInstance":"FR3PEPF00000366"}}' + Date: + - Thu, 25 Apr 2024 13:51:28 GMT + body: + encoding: UTF-8 + string: '{"error":{"code":"itemNotFound","message":"Item not found"}}' + recorded_at: Thu, 25 Apr 2024 13:51:29 GMT +- request: + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token + body: + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB + headers: + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-store, no-cache + Pragma: + - no-cache + Content-Type: + - application/json; charset=utf-8 + Expires: + - "-1" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - cdc3f5fe-4f4c-4123-8821-1c1dc262dc00 + X-Ms-Ests-Server: + - 2.1.17846.6 - SEC ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=AinSItHZvHpPhPx_Ohm_iySkbDoXAQAAAOFWvN0OAAAA; expires=Sat, 25-May-2024 + 13:51:29 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly + Date: + - Thu, 25 Apr 2024 13:51:28 GMT + Connection: + - close + Content-Length: + - '1740' + body: + encoding: UTF-8 + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Thu, 25 Apr 2024 13:51:29 GMT +- request: + method: get + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/items/not_existent?$select=id,name,fileSystemInfo,file,folder,size,createdBy,lastModifiedBy,parentReference + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - httpx.rb/1.2.4 Accept: - "*/*" Accept-Encoding: - gzip, deflate + Authorization: + - Bearer response: status: code: 404 @@ -67,8 +272,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json; charset=utf-8 Content-Encoding: @@ -78,15 +281,15 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - ba0accac-f9f1-46cb-932e-b51529530b67 + - f29d4c34-af1e-4beb-9dbc-d11fc3768b6a Client-Request-Id: - - ba0accac-f9f1-46cb-932e-b51529530b67 + - f29d4c34-af1e-4beb-9dbc-d11fc3768b6a X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF0000036B"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"005","RoleInstance":"FR3PEPF00000538"}}' Date: - - Tue, 30 Jan 2024 11:55:54 GMT + - Thu, 25 Apr 2024 13:51:29 GMT body: encoding: UTF-8 string: '{"error":{"code":"itemNotFound","message":"Item not found"}}' - recorded_at: Tue, 30 Jan 2024 11:55:54 GMT + recorded_at: Thu, 25 Apr 2024 13:51:29 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/folder_files_file_ids_deep_query_invalid_credentials.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/folder_files_file_ids_deep_query_invalid_credentials.yml deleted file mode 100644 index f19a8472e6bb..000000000000 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/folder_files_file_ids_deep_query_invalid_credentials.yml +++ /dev/null @@ -1,53 +0,0 @@ ---- -http_interactions: -- request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2OBb-brzKzZAR4DYT1k9KPXs/root?$select=id,name,parentReference - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.2 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 401 - message: Unauthorized - headers: - Transfer-Encoding: - - chunked - Content-Type: - - application/json - Content-Encoding: - - gzip - Vary: - - Accept-Encoding - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - 074f6649-c2a3-44a6-a9e9-6898f9ba126c - Client-Request-Id: - - 074f6649-c2a3-44a6-a9e9-6898f9ba126c - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"004","RoleInstance":"FR2PEPF00000396"}}' - Www-Authenticate: - - Bearer realm="", authorization_uri="https://login.microsoftonline.com/common/oauth2/authorize", - client_id="00000003-0000-0000-c000-000000000000" - Date: - - Wed, 21 Feb 2024 15:45:11 GMT - body: - encoding: UTF-8 - string: '{"error":{"code":"InvalidAuthenticationToken","message":"IDX14100: - JWT is not well formed, there are no dots (.).\nThe token needs to be in JWS - or JWE Compact Serialization Format. (JWS): ''EncodedHeader.EndcodedPayload.EncodedSignature''. - (JWE): ''EncodedProtectedHeader.EncodedEncryptedKey.EncodedInitializationVector.EncodedCiphertext.EncodedAuthenticationTag''.","innerError":{"date":"2024-02-21T15:45:11","request-id":"074f6649-c2a3-44a6-a9e9-6898f9ba126c","client-request-id":"074f6649-c2a3-44a6-a9e9-6898f9ba126c"}}}' - recorded_at: Wed, 21 Feb 2024 15:45:11 GMT -recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_create_permission_read.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_create_permission_read.yml index 135a4bfad7cf..01c09e11d6c8 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_create_permission_read.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_create_permission_read.yml @@ -37,24 +37,83 @@ http_interactions: P3p: - CP="DSP CUR OTPi IND OTRi ONL FIN" X-Ms-Request-Id: - - 74a6931e-d86b-4cbe-a86f-f1b538ea6500 + - 3624bfd9-6a99-4c8e-a67e-b36108bba700 X-Ms-Ests-Server: - - 2.1.17122.3 - WEULR1 ProdSlices + - 2.1.17846.6 - SEC ProdSlices + X-Ms-Srs: + - 1.P X-Xss-Protection: - '0' Set-Cookie: - - fpc=AtoUkabZLU1Dm35O6IAUTtqkbDoXAQAAAK_aSt0OAAAA; expires=Thu, 29-Feb-2024 - 11:55:27 GMT; path=/; secure; HttpOnly; SameSite=None + - fpc=Ag7wp_6Iq8JAqS267e7jNTGkbDoXAQAAACfout0OAAAA; expires=Fri, 24-May-2024 + 11:46:47 GMT; path=/; secure; HttpOnly; SameSite=None - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly Date: - - Tue, 30 Jan 2024 11:55:27 GMT + - Wed, 24 Apr 2024 11:46:47 GMT Content-Length: - '1708' body: encoding: UTF-8 string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Tue, 30 Jan 2024 11:55:27 GMT + recorded_at: Wed, 24 Apr 2024 11:46:47 GMT +- request: + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token + body: + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB + headers: + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-store, no-cache + Pragma: + - no-cache + Content-Type: + - application/json; charset=utf-8 + Expires: + - "-1" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - 891ddc70-72bc-4df9-add3-867dccd39000 + X-Ms-Ests-Server: + - 2.1.17846.6 - FRC ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=AhTYZZSB0uFPshZKDJ6VxqOkbDoXAQAAACfout0OAAAA; expires=Fri, 24-May-2024 + 11:46:48 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly + Date: + - Wed, 24 Apr 2024 11:46:47 GMT + Content-Length: + - '1740' + body: + encoding: UTF-8 + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Wed, 24 Apr 2024 11:46:48 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children @@ -62,18 +121,18 @@ http_interactions: encoding: UTF-8 string: '{"name":"Permission Test Folder","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: - '88' + Authorization: + - Bearer response: status: code: 201 @@ -81,41 +140,39 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{4F26BBEF-EA2F-422D-BBDE-467E08A32E35},1"' + - '"{7BAA41CE-7694-4048-838D-B3D8E0F2C038},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PPPXMTE6L7KFVBLXXSGPYEKGLRV') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5POOIGVHXFDWJBAIHDNT3DQPFQBY') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - c860fe8f-5536-4e83-bfbf-ce4b42a99add + - e36224dc-1d0d-4081-9980-8d419d36db98 Client-Request-Id: - - c860fe8f-5536-4e83-bfbf-ce4b42a99add + - e36224dc-1d0d-4081-9980-8d419d36db98 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002DC"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"AM4PEPF00015126"}}' Odata-Version: - '4.0' Date: - - Tue, 30 Jan 2024 11:55:27 GMT + - Wed, 24 Apr 2024 11:46:48 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{4F26BBEF-EA2F-422D-BBDE-467E08A32E35},1\"","createdDateTime":"2024-01-30T11:55:28Z","eTag":"\"{4F26BBEF-EA2F-422D-BBDE-467E08A32E35},1\"","id":"01AZJL5PPPXMTE6L7KFVBLXXSGPYEKGLRV","lastModifiedDateTime":"2024-01-30T11:55:28Z","name":"Permission - Test Folder","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{4F26BBEF-EA2F-422D-BBDE-467E08A32E35},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{7BAA41CE-7694-4048-838D-B3D8E0F2C038},1\"","createdDateTime":"2024-04-24T11:46:48Z","eTag":"\"{7BAA41CE-7694-4048-838D-B3D8E0F2C038},1\"","id":"01AZJL5POOIGVHXFDWJBAIHDNT3DQPFQBY","lastModifiedDateTime":"2024-04-24T11:46:48Z","name":"Permission + Test Folder","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{7BAA41CE-7694-4048-838D-B3D8E0F2C038},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-01-30T11:55:28Z","lastModifiedDateTime":"2024-01-30T11:55:28Z"},"folder":{"childCount":0}}' - recorded_at: Tue, 30 Jan 2024 11:55:28 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T11:46:48Z","lastModifiedDateTime":"2024-04-24T11:46:48Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 11:46:48 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPPXMTE6L7KFVBLXXSGPYEKGLRV/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POOIGVHXFDWJBAIHDNT3DQPFQBY/permissions body: encoding: US-ASCII string: '' @@ -127,7 +184,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -137,22 +194,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - c8b32f67-1592-4af4-9fbc-9b5a9c102619 + - b717588b-6e64-4523-9537-756f713ce38c Client-Request-Id: - - c8b32f67-1592-4af4-9fbc-9b5a9c102619 + - b717588b-6e64-4523-9537-756f713ce38c X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF0000045F"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"AM4PEPF0002AB77"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -160,26 +213,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Tue, 30 Jan 2024 11:55:28 GMT + - Wed, 24 Apr 2024 11:46:49 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPPXMTE6L7KFVBLXXSGPYEKGLRV'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5POOIGVHXFDWJBAIHDNT3DQPFQBY'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:28 GMT + recorded_at: Wed, 24 Apr 2024 11:46:49 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPPXMTE6L7KFVBLXXSGPYEKGLRV + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POOIGVHXFDWJBAIHDNT3DQPFQBY body: encoding: US-ASCII string: '' @@ -191,7 +245,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -201,8 +255,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; charset=utf-8 @@ -211,24 +263,25 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - eb6bdc67-8ee7-4b27-a40a-61c5d1ded2c5 + - 96896688-7545-40f9-bea5-2b4732ebe4bf Client-Request-Id: - - eb6bdc67-8ee7-4b27-a40a-61c5d1ded2c5 + - 96896688-7545-40f9-bea5-2b4732ebe4bf X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF0000045D"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"AM4PEPF00015127"}}' Date: - - Tue, 30 Jan 2024 11:55:28 GMT + - Wed, 24 Apr 2024 11:46:48 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-01-30T11:55:28Z","eTag":"\"{4F26BBEF-EA2F-422D-BBDE-467E08A32E35},1\"","id":"01AZJL5PPPXMTE6L7KFVBLXXSGPYEKGLRV","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-01-30T11:55:28Z","name":"Permission + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T11:46:48Z","eTag":"\"{7BAA41CE-7694-4048-838D-B3D8E0F2C038},2\"","id":"01AZJL5POOIGVHXFDWJBAIHDNT3DQPFQBY","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T11:46:48Z","name":"Permission Test Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{4F26BBEF-EA2F-422D-BBDE-467E08A32E35},0\"","fileSystemInfo":{"createdDateTime":"2024-01-30T11:55:28Z","lastModifiedDateTime":"2024-01-30T11:55:28Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' - recorded_at: Tue, 30 Jan 2024 11:55:28 GMT + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{7BAA41CE-7694-4048-838D-B3D8E0F2C038},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T11:46:48Z","lastModifiedDateTime":"2024-04-24T11:46:48Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 11:46:49 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPPXMTE6L7KFVBLXXSGPYEKGLRV/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POOIGVHXFDWJBAIHDNT3DQPFQBY/permissions body: encoding: US-ASCII string: '' @@ -240,7 +293,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -250,22 +303,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 17626be5-77c1-4002-a527-7069c791d7eb + - fe07c818-850b-4c77-a3e5-7adf7e8300bf Client-Request-Id: - - 17626be5-77c1-4002-a527-7069c791d7eb + - fe07c818-850b-4c77-a3e5-7adf7e8300bf X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF00000366"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"AM4PEPF0001511C"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -273,26 +322,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Tue, 30 Jan 2024 11:55:28 GMT + - Wed, 24 Apr 2024 11:46:49 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPPXMTE6L7KFVBLXXSGPYEKGLRV'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5POOIGVHXFDWJBAIHDNT3DQPFQBY'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:29 GMT + recorded_at: Wed, 24 Apr 2024 11:46:49 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPPXMTE6L7KFVBLXXSGPYEKGLRV/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POOIGVHXFDWJBAIHDNT3DQPFQBY/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["read"],"recipients":[{"objectId":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"}]}' @@ -304,7 +354,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -316,8 +366,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -329,11 +377,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 78684050-d5eb-4acb-99a1-6fd24f9f9abd + - b37b78dc-e3e7-4a12-8319-3283efd9b99f Client-Request-Id: - - 78684050-d5eb-4acb-99a1-6fd24f9f9abd + - b37b78dc-e3e7-4a12-8319-3283efd9b99f X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002D8"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"AM4PEPF0002E1B8"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -344,15 +392,15 @@ http_interactions: Odata-Version: - '4.0' Date: - - Tue, 30 Jan 2024 11:55:29 GMT + - Wed, 24 Apr 2024 11:46:50 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["read"],"grantedTo":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["read"],"grantedTo":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello Rocha"}}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:30 GMT + recorded_at: Wed, 24 Apr 2024 11:46:51 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPPXMTE6L7KFVBLXXSGPYEKGLRV/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POOIGVHXFDWJBAIHDNT3DQPFQBY/permissions body: encoding: US-ASCII string: '' @@ -364,7 +412,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -374,22 +422,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 5f385752-f162-4ede-b516-b01752cbd7b6 + - 183b5e13-e00a-4ac7-8dbc-afb13ff3a8a6 Client-Request-Id: - - 5f385752-f162-4ede-b516-b01752cbd7b6 + - 183b5e13-e00a-4ac7-8dbc-afb13ff3a8a6 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF0000036B"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"AM4PEPF0002AB3E"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -397,41 +441,41 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Tue, 30 Jan 2024 11:55:30 GMT + - Wed, 24 Apr 2024 11:46:51 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPPXMTE6L7KFVBLXXSGPYEKGLRV'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5POOIGVHXFDWJBAIHDNT3DQPFQBY'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["read"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello - Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"},"siteUser":{"displayName":"Marcello + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["read"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello + Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello Rocha","email":"mrocha.op@outlook.com","id":"24","loginName":"i:0#.f|membership|mrocha.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Marcello - Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:30 GMT + recorded_at: Wed, 24 Apr 2024 11:46:51 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPPXMTE6L7KFVBLXXSGPYEKGLRV + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POOIGVHXFDWJBAIHDNT3DQPFQBY body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -444,15 +488,15 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 38228138-7180-4887-99c0-08e9b29a389d + - 0f30e23f-2ae6-440a-bce3-55469bd540aa Client-Request-Id: - - 38228138-7180-4887-99c0-08e9b29a389d + - 0f30e23f-2ae6-440a-bce3-55469bd540aa X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002DA"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"AM4PEPF0001511E"}}' Date: - - Tue, 30 Jan 2024 11:55:30 GMT + - Wed, 24 Apr 2024 11:46:51 GMT body: encoding: UTF-8 string: '' - recorded_at: Tue, 30 Jan 2024 11:55:30 GMT + recorded_at: Wed, 24 Apr 2024 11:46:52 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_create_permission_write.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_create_permission_write.yml index 46c044f04ce3..0a67c65d3925 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_create_permission_write.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_create_permission_write.yml @@ -37,24 +37,83 @@ http_interactions: P3p: - CP="DSP CUR OTPi IND OTRi ONL FIN" X-Ms-Request-Id: - - a92eb883-580b-4081-93ad-fa1f3c855a00 + - 012a4dce-e753-45d6-8eb4-a9796254a100 X-Ms-Ests-Server: - - 2.1.17122.3 - NEULR1 ProdSlices + - 2.1.17846.6 - SEC ProdSlices + X-Ms-Srs: + - 1.P X-Xss-Protection: - '0' Set-Cookie: - - fpc=AoTxvWNb9mVFk80C1p1cj6akbDoXAQAAALLaSt0OAAAA; expires=Thu, 29-Feb-2024 - 11:55:30 GMT; path=/; secure; HttpOnly; SameSite=None + - fpc=AsSuOcI877JBhwtEJFJ5gwukbDoXAQAAACLout0OAAAA; expires=Fri, 24-May-2024 + 11:46:43 GMT; path=/; secure; HttpOnly; SameSite=None - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly Date: - - Tue, 30 Jan 2024 11:55:30 GMT + - Wed, 24 Apr 2024 11:46:42 GMT Content-Length: - '1708' body: encoding: UTF-8 string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Tue, 30 Jan 2024 11:55:30 GMT + recorded_at: Wed, 24 Apr 2024 11:46:43 GMT +- request: + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token + body: + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB + headers: + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-store, no-cache + Pragma: + - no-cache + Content-Type: + - application/json; charset=utf-8 + Expires: + - "-1" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - d5c5225f-eda6-4348-b9cf-e2c2e372c900 + X-Ms-Ests-Server: + - 2.1.17846.6 - SEC ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=AuWQNT7kPaxDms08xyYmKzekbDoXAQAAACLout0OAAAA; expires=Fri, 24-May-2024 + 11:46:43 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly + Date: + - Wed, 24 Apr 2024 11:46:42 GMT + Content-Length: + - '1740' + body: + encoding: UTF-8 + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Wed, 24 Apr 2024 11:46:43 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children @@ -62,18 +121,18 @@ http_interactions: encoding: UTF-8 string: '{"name":"Permission Test Folder","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: - '88' + Authorization: + - Bearer response: status: code: 201 @@ -81,41 +140,39 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{A8262B4A-33EE-45F4-BF0A-9861A49B3D65},1"' + - '"{A2F56992-FA51-467D-8359-E4187317AE7C},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PKKFMTKR3RT6RC36CUYMGSJWPLF') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PMSNH22EUP2PVDIGWPEDBZRPLT4') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 180f0255-3042-4ad5-b47d-43a2f75824d2 + - 1c934038-cb42-4789-9871-5d7a6a55f5e2 Client-Request-Id: - - 180f0255-3042-4ad5-b47d-43a2f75824d2 + - 1c934038-cb42-4789-9871-5d7a6a55f5e2 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF00000356"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"AM4PEPF0002AB3E"}}' Odata-Version: - '4.0' Date: - - Tue, 30 Jan 2024 11:55:30 GMT + - Wed, 24 Apr 2024 11:46:43 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{A8262B4A-33EE-45F4-BF0A-9861A49B3D65},1\"","createdDateTime":"2024-01-30T11:55:31Z","eTag":"\"{A8262B4A-33EE-45F4-BF0A-9861A49B3D65},1\"","id":"01AZJL5PKKFMTKR3RT6RC36CUYMGSJWPLF","lastModifiedDateTime":"2024-01-30T11:55:31Z","name":"Permission - Test Folder","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{A8262B4A-33EE-45F4-BF0A-9861A49B3D65},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{A2F56992-FA51-467D-8359-E4187317AE7C},1\"","createdDateTime":"2024-04-24T11:46:44Z","eTag":"\"{A2F56992-FA51-467D-8359-E4187317AE7C},1\"","id":"01AZJL5PMSNH22EUP2PVDIGWPEDBZRPLT4","lastModifiedDateTime":"2024-04-24T11:46:44Z","name":"Permission + Test Folder","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{A2F56992-FA51-467D-8359-E4187317AE7C},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-01-30T11:55:31Z","lastModifiedDateTime":"2024-01-30T11:55:31Z"},"folder":{"childCount":0}}' - recorded_at: Tue, 30 Jan 2024 11:55:31 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T11:46:44Z","lastModifiedDateTime":"2024-04-24T11:46:44Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 11:46:44 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKKFMTKR3RT6RC36CUYMGSJWPLF/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PMSNH22EUP2PVDIGWPEDBZRPLT4/permissions body: encoding: US-ASCII string: '' @@ -127,7 +184,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -137,22 +194,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 8f722584-8355-44a9-841d-38c48a40b51c + - b54e175f-ffa0-4614-8512-60e666b9df1a Client-Request-Id: - - 8f722584-8355-44a9-841d-38c48a40b51c + - b54e175f-ffa0-4614-8512-60e666b9df1a X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002DC"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"AM4PEPF0002E1B9"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -160,26 +213,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Tue, 30 Jan 2024 11:55:31 GMT + - Wed, 24 Apr 2024 11:46:44 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PKKFMTKR3RT6RC36CUYMGSJWPLF'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PMSNH22EUP2PVDIGWPEDBZRPLT4'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:31 GMT + recorded_at: Wed, 24 Apr 2024 11:46:44 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKKFMTKR3RT6RC36CUYMGSJWPLF + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PMSNH22EUP2PVDIGWPEDBZRPLT4 body: encoding: US-ASCII string: '' @@ -191,7 +245,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -201,8 +255,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; charset=utf-8 @@ -211,24 +263,25 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 1f4d1d10-6f09-4d73-9579-b83990b1321a + - 94238c27-a573-4ef6-bf54-0454afee51ff Client-Request-Id: - - 1f4d1d10-6f09-4d73-9579-b83990b1321a + - 94238c27-a573-4ef6-bf54-0454afee51ff X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002C3"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"AM4PEPF0001511D"}}' Date: - - Tue, 30 Jan 2024 11:55:31 GMT + - Wed, 24 Apr 2024 11:46:44 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-01-30T11:55:31Z","eTag":"\"{A8262B4A-33EE-45F4-BF0A-9861A49B3D65},1\"","id":"01AZJL5PKKFMTKR3RT6RC36CUYMGSJWPLF","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-01-30T11:55:31Z","name":"Permission + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T11:46:44Z","eTag":"\"{A2F56992-FA51-467D-8359-E4187317AE7C},2\"","id":"01AZJL5PMSNH22EUP2PVDIGWPEDBZRPLT4","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T11:46:45Z","name":"Permission Test Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{A8262B4A-33EE-45F4-BF0A-9861A49B3D65},0\"","fileSystemInfo":{"createdDateTime":"2024-01-30T11:55:31Z","lastModifiedDateTime":"2024-01-30T11:55:31Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' - recorded_at: Tue, 30 Jan 2024 11:55:31 GMT + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{A2F56992-FA51-467D-8359-E4187317AE7C},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T11:46:44Z","lastModifiedDateTime":"2024-04-24T11:46:45Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 11:46:44 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKKFMTKR3RT6RC36CUYMGSJWPLF/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PMSNH22EUP2PVDIGWPEDBZRPLT4/permissions body: encoding: US-ASCII string: '' @@ -240,7 +293,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -250,22 +303,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - ef846a6d-c84b-4f1e-acb2-2ac8d919e18b + - b7057ee5-ee54-43a3-8339-857ffdc7748f Client-Request-Id: - - ef846a6d-c84b-4f1e-acb2-2ac8d919e18b + - b7057ee5-ee54-43a3-8339-857ffdc7748f X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF0000045F"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"AM4PEPF0002E1B5"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -273,26 +322,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Tue, 30 Jan 2024 11:55:31 GMT + - Wed, 24 Apr 2024 11:46:44 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PKKFMTKR3RT6RC36CUYMGSJWPLF'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PMSNH22EUP2PVDIGWPEDBZRPLT4'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:31 GMT + recorded_at: Wed, 24 Apr 2024 11:46:45 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKKFMTKR3RT6RC36CUYMGSJWPLF/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PMSNH22EUP2PVDIGWPEDBZRPLT4/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"}]}' @@ -304,7 +354,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -316,8 +366,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -329,11 +377,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - bf057f21-a4e5-48d7-9e16-c0481ba43758 + - 48805eba-c9d3-4ddd-ace5-9fb973f25d88 Client-Request-Id: - - bf057f21-a4e5-48d7-9e16-c0481ba43758 + - 48805eba-c9d3-4ddd-ace5-9fb973f25d88 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF0000045D"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"AM4PEPF0002CE1A"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -344,15 +392,15 @@ http_interactions: Odata-Version: - '4.0' Date: - - Tue, 30 Jan 2024 11:55:32 GMT + - Wed, 24 Apr 2024 11:46:46 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["write"],"grantedTo":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["write"],"grantedTo":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello Rocha"}}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:33 GMT + recorded_at: Wed, 24 Apr 2024 11:46:46 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKKFMTKR3RT6RC36CUYMGSJWPLF/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PMSNH22EUP2PVDIGWPEDBZRPLT4/permissions body: encoding: US-ASCII string: '' @@ -364,7 +412,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -374,22 +422,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - edcfbc9d-50c6-4d87-b863-3982df827f76 + - 7ff8747b-c7d4-4b7b-9f4e-90086242adfc Client-Request-Id: - - edcfbc9d-50c6-4d87-b863-3982df827f76 + - 7ff8747b-c7d4-4b7b-9f4e-90086242adfc X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002E8"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"AM4PEPF0002E1B3"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -397,41 +441,41 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Tue, 30 Jan 2024 11:55:32 GMT + - Wed, 24 Apr 2024 11:46:46 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PKKFMTKR3RT6RC36CUYMGSJWPLF'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PMSNH22EUP2PVDIGWPEDBZRPLT4'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello - Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"},"siteUser":{"displayName":"Marcello + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello + Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello Rocha","email":"mrocha.op@outlook.com","id":"24","loginName":"i:0#.f|membership|mrocha.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Marcello - Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:33 GMT + recorded_at: Wed, 24 Apr 2024 11:46:47 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKKFMTKR3RT6RC36CUYMGSJWPLF + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PMSNH22EUP2PVDIGWPEDBZRPLT4 body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -444,15 +488,15 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 665945fe-446b-4e2d-936c-cb0deca64cdc + - '081e323c-8a27-4892-ae2f-ef5fc0ae5b3c' Client-Request-Id: - - 665945fe-446b-4e2d-936c-cb0deca64cdc + - '081e323c-8a27-4892-ae2f-ef5fc0ae5b3c' X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF0000045E"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"001","RoleInstance":"AM4PEPF00028B85"}}' Date: - - Tue, 30 Jan 2024 11:55:33 GMT + - Wed, 24 Apr 2024 11:46:47 GMT body: encoding: UTF-8 string: '' - recorded_at: Tue, 30 Jan 2024 11:55:33 GMT + recorded_at: Wed, 24 Apr 2024 11:46:47 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_delete_permission_read.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_delete_permission_read.yml index 4ca8bf60eeeb..18c8ffc059f5 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_delete_permission_read.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_delete_permission_read.yml @@ -4,19 +4,19 @@ http_interactions: method: post uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token body: - encoding: UTF-8 - string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB headers: User-Agent: - - Rack::OAuth2 (2.2.1) - Authorization: - - Basic - Content-Type: - - application/x-www-form-urlencoded - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + - httpx.rb/1.2.4 Accept: - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' response: status: code: 200 @@ -37,24 +37,26 @@ http_interactions: P3p: - CP="DSP CUR OTPi IND OTRi ONL FIN" X-Ms-Request-Id: - - f6a64cae-0f12-4188-afbd-a457aba08000 + - 32e2096c-69a5-4406-a287-a3aa09341a00 X-Ms-Ests-Server: - - 2.1.17122.3 - FRC ProdSlices + - 2.1.17846.6 - SEC ProdSlices + X-Ms-Srs: + - 1.P X-Xss-Protection: - '0' Set-Cookie: - - fpc=ArXeNGFv4BBHqm7Ml_JaHOSkbDoXAQAAALnaSt0OAAAA; expires=Thu, 29-Feb-2024 - 11:55:37 GMT; path=/; secure; HttpOnly; SameSite=None - - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly + - fpc=AnHWBpwXVY9CjKnY5lKTPmakbDoXAQAAALXnut0OAAAA; expires=Fri, 24-May-2024 + 11:44:54 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly Date: - - Tue, 30 Jan 2024 11:55:36 GMT + - Wed, 24 Apr 2024 11:44:53 GMT Content-Length: - - '1708' + - '1735' body: encoding: UTF-8 string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Tue, 30 Jan 2024 11:55:37 GMT + recorded_at: Wed, 24 Apr 2024 11:44:54 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children @@ -62,18 +64,18 @@ http_interactions: encoding: UTF-8 string: '{"name":"Permission Test Folder","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: - '88' + Authorization: + - Bearer response: status: code: 201 @@ -81,41 +83,96 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{A65BAC36-9A70-46A5-A92C-F5955F14EC71},1"' + - '"{31DC64E0-6C92-4EF8-9320-21D5134CE071},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PJWVRN2M4E2UVDKSLHVSVPRJ3DR') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PPAMTODDETM7BHJGIBB2UJUZYDR') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 18bebc45-58dd-4053-a921-2c83fa618207 + - f33c1d8b-908e-47ab-8706-3a3c37956633 Client-Request-Id: - - 18bebc45-58dd-4053-a921-2c83fa618207 + - f33c1d8b-908e-47ab-8706-3a3c37956633 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF0000045F"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"004","RoleInstance":"FR2PEPF00000393"}}' Odata-Version: - '4.0' Date: - - Tue, 30 Jan 2024 11:55:38 GMT + - Wed, 24 Apr 2024 11:44:53 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{A65BAC36-9A70-46A5-A92C-F5955F14EC71},1\"","createdDateTime":"2024-01-30T11:55:38Z","eTag":"\"{A65BAC36-9A70-46A5-A92C-F5955F14EC71},1\"","id":"01AZJL5PJWVRN2M4E2UVDKSLHVSVPRJ3DR","lastModifiedDateTime":"2024-01-30T11:55:38Z","name":"Permission - Test Folder","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{A65BAC36-9A70-46A5-A92C-F5955F14EC71},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{31DC64E0-6C92-4EF8-9320-21D5134CE071},1\"","createdDateTime":"2024-04-24T11:44:54Z","eTag":"\"{31DC64E0-6C92-4EF8-9320-21D5134CE071},1\"","id":"01AZJL5PPAMTODDETM7BHJGIBB2UJUZYDR","lastModifiedDateTime":"2024-04-24T11:44:54Z","name":"Permission + Test Folder","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{31DC64E0-6C92-4EF8-9320-21D5134CE071},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-01-30T11:55:38Z","lastModifiedDateTime":"2024-01-30T11:55:38Z"},"folder":{"childCount":0}}' - recorded_at: Tue, 30 Jan 2024 11:55:38 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T11:44:54Z","lastModifiedDateTime":"2024-04-24T11:44:54Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 11:44:54 GMT +- request: + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token + body: + encoding: UTF-8 + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default + headers: + User-Agent: + - Rack::OAuth2 (2.2.1) + Authorization: + - Basic + Content-Type: + - application/x-www-form-urlencoded + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-store, no-cache + Pragma: + - no-cache + Content-Type: + - application/json; charset=utf-8 + Expires: + - "-1" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - 5636eceb-2499-4db9-a5f4-4cdbe0017d00 + X-Ms-Ests-Server: + - 2.1.17846.6 - WEULR1 ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=Ahq7btrtSmJFnN1XAKAFgRSkbDoXAQAAALbnut0OAAAA; expires=Fri, 24-May-2024 + 11:44:54 GMT; path=/; secure; HttpOnly; SameSite=None + - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly + - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly + Date: + - Wed, 24 Apr 2024 11:44:54 GMT + Content-Length: + - '1708' + body: + encoding: UTF-8 + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Wed, 24 Apr 2024 11:44:54 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJWVRN2M4E2UVDKSLHVSVPRJ3DR + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPAMTODDETM7BHJGIBB2UJUZYDR body: encoding: US-ASCII string: '' @@ -127,7 +184,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -137,8 +194,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; charset=utf-8 @@ -147,24 +202,25 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 3b5ad605-d8cb-4114-a05e-ca43ad476a3a + - 34b3cce1-028a-435e-9ad5-a0b3739acd19 Client-Request-Id: - - 3b5ad605-d8cb-4114-a05e-ca43ad476a3a + - 34b3cce1-028a-435e-9ad5-a0b3739acd19 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF00000461"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"004","RoleInstance":"FR2PEPF000003BA"}}' Date: - - Tue, 30 Jan 2024 11:55:37 GMT + - Wed, 24 Apr 2024 11:44:54 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-01-30T11:55:38Z","eTag":"\"{A65BAC36-9A70-46A5-A92C-F5955F14EC71},1\"","id":"01AZJL5PJWVRN2M4E2UVDKSLHVSVPRJ3DR","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-01-30T11:55:38Z","name":"Permission + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T11:44:54Z","eTag":"\"{31DC64E0-6C92-4EF8-9320-21D5134CE071},2\"","id":"01AZJL5PPAMTODDETM7BHJGIBB2UJUZYDR","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T11:44:54Z","name":"Permission Test Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{A65BAC36-9A70-46A5-A92C-F5955F14EC71},0\"","fileSystemInfo":{"createdDateTime":"2024-01-30T11:55:38Z","lastModifiedDateTime":"2024-01-30T11:55:38Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' - recorded_at: Tue, 30 Jan 2024 11:55:38 GMT + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{31DC64E0-6C92-4EF8-9320-21D5134CE071},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T11:44:54Z","lastModifiedDateTime":"2024-04-24T11:44:54Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 11:44:55 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJWVRN2M4E2UVDKSLHVSVPRJ3DR/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPAMTODDETM7BHJGIBB2UJUZYDR/permissions body: encoding: US-ASCII string: '' @@ -176,7 +232,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -186,22 +242,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 6cf01637-1e0c-47e8-8f73-a8168f7df9a0 + - 59a2bc3a-f7a8-4a83-921a-ecbccd267ac1 Client-Request-Id: - - 6cf01637-1e0c-47e8-8f73-a8168f7df9a0 + - 59a2bc3a-f7a8-4a83-921a-ecbccd267ac1 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002E8"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"004","RoleInstance":"FR2PEPF00000390"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -209,26 +261,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Tue, 30 Jan 2024 11:55:38 GMT + - Wed, 24 Apr 2024 11:44:55 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PJWVRN2M4E2UVDKSLHVSVPRJ3DR'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPAMTODDETM7BHJGIBB2UJUZYDR'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:38 GMT + recorded_at: Wed, 24 Apr 2024 11:44:55 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJWVRN2M4E2UVDKSLHVSVPRJ3DR/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPAMTODDETM7BHJGIBB2UJUZYDR/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["read"],"recipients":[{"objectId":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"}]}' @@ -240,7 +293,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -252,8 +305,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -265,11 +316,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 4c583c13-d0f9-4925-a664-b72d432ce9f9 + - af06128c-17cf-4b84-9ff2-f3d783ec3a2f Client-Request-Id: - - 4c583c13-d0f9-4925-a664-b72d432ce9f9 + - af06128c-17cf-4b84-9ff2-f3d783ec3a2f X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002E4"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"004","RoleInstance":"FR2PEPF0000058C"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -280,15 +331,15 @@ http_interactions: Odata-Version: - '4.0' Date: - - Tue, 30 Jan 2024 11:55:38 GMT + - Wed, 24 Apr 2024 11:44:56 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["read"],"grantedTo":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["read"],"grantedTo":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello Rocha"}}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:39 GMT + recorded_at: Wed, 24 Apr 2024 11:44:57 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJWVRN2M4E2UVDKSLHVSVPRJ3DR/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPAMTODDETM7BHJGIBB2UJUZYDR/permissions body: encoding: US-ASCII string: '' @@ -300,7 +351,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -310,22 +361,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 9bc6b549-3b30-490c-af3c-3785301c248d + - 97aaaefa-98ac-407f-97d1-9e79a72dae03 Client-Request-Id: - - 9bc6b549-3b30-490c-af3c-3785301c248d + - 97aaaefa-98ac-407f-97d1-9e79a72dae03 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002DD"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"004","RoleInstance":"FR2PEPF0000056B"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -333,29 +380,31 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Tue, 30 Jan 2024 11:55:39 GMT + - Wed, 24 Apr 2024 11:44:56 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PJWVRN2M4E2UVDKSLHVSVPRJ3DR'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPAMTODDETM7BHJGIBB2UJUZYDR'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["read"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello - Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"},"siteUser":{"displayName":"Marcello + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["read"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello + Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello Rocha","email":"mrocha.op@outlook.com","id":"24","loginName":"i:0#.f|membership|mrocha.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Marcello - Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:39 GMT + recorded_at: Wed, 24 Apr 2024 11:44:57 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJWVRN2M4E2UVDKSLHVSVPRJ3DR + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPAMTODDETM7BHJGIBB2UJUZYDR body: encoding: US-ASCII string: '' @@ -367,7 +416,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -377,8 +426,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; charset=utf-8 @@ -387,24 +434,25 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - b7150639-7cf7-4c62-b458-5a7bc9da00b0 + - 572e041e-c2d9-4f67-91cd-257c53525aaa Client-Request-Id: - - b7150639-7cf7-4c62-b458-5a7bc9da00b0 + - 572e041e-c2d9-4f67-91cd-257c53525aaa X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF00000462"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"004","RoleInstance":"FR2PEPF00000571"}}' Date: - - Tue, 30 Jan 2024 11:55:39 GMT + - Wed, 24 Apr 2024 11:44:57 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-01-30T11:55:38Z","eTag":"\"{A65BAC36-9A70-46A5-A92C-F5955F14EC71},2\"","id":"01AZJL5PJWVRN2M4E2UVDKSLHVSVPRJ3DR","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-01-30T11:55:38Z","name":"Permission + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T11:44:54Z","eTag":"\"{31DC64E0-6C92-4EF8-9320-21D5134CE071},3\"","id":"01AZJL5PPAMTODDETM7BHJGIBB2UJUZYDR","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T11:44:54Z","name":"Permission Test Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{A65BAC36-9A70-46A5-A92C-F5955F14EC71},0\"","fileSystemInfo":{"createdDateTime":"2024-01-30T11:55:38Z","lastModifiedDateTime":"2024-01-30T11:55:38Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' - recorded_at: Tue, 30 Jan 2024 11:55:39 GMT + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{31DC64E0-6C92-4EF8-9320-21D5134CE071},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T11:44:54Z","lastModifiedDateTime":"2024-04-24T11:44:54Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 11:44:57 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJWVRN2M4E2UVDKSLHVSVPRJ3DR/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPAMTODDETM7BHJGIBB2UJUZYDR/permissions body: encoding: US-ASCII string: '' @@ -416,7 +464,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -426,22 +474,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 21859fbe-0668-4220-a3c3-8ef65dbf566a + - 3a3adb64-d751-4ed6-9e92-c6e8d13a5196 Client-Request-Id: - - 21859fbe-0668-4220-a3c3-8ef65dbf566a + - 3a3adb64-d751-4ed6-9e92-c6e8d13a5196 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF00000318"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"004","RoleInstance":"FR2PEPF0000054F"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -449,29 +493,31 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Tue, 30 Jan 2024 11:55:39 GMT + - Wed, 24 Apr 2024 11:44:57 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PJWVRN2M4E2UVDKSLHVSVPRJ3DR'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPAMTODDETM7BHJGIBB2UJUZYDR'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["read"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello - Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"},"siteUser":{"displayName":"Marcello + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["read"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello + Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello Rocha","email":"mrocha.op@outlook.com","id":"24","loginName":"i:0#.f|membership|mrocha.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Marcello - Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:40 GMT + recorded_at: Wed, 24 Apr 2024 11:44:58 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJWVRN2M4E2UVDKSLHVSVPRJ3DR/permissions/aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPAMTODDETM7BHJGIBB2UJUZYDR/permissions/aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20 body: encoding: US-ASCII string: '' @@ -483,7 +529,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -496,11 +542,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - d89074c8-3b7b-4880-95a5-b0d3820eb266 + - 677bfde4-fe1f-470d-a925-e77e288c31d9 Client-Request-Id: - - d89074c8-3b7b-4880-95a5-b0d3820eb266 + - 677bfde4-fe1f-470d-a925-e77e288c31d9 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF00000463"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"004","RoleInstance":"FR2PEPF000003EF"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -509,14 +555,14 @@ http_interactions: Sunset: - Sun, 01 Oct 2023 23:59:59 GMT Date: - - Tue, 30 Jan 2024 11:55:40 GMT + - Wed, 24 Apr 2024 11:44:58 GMT body: encoding: UTF-8 string: '' - recorded_at: Tue, 30 Jan 2024 11:55:40 GMT + recorded_at: Wed, 24 Apr 2024 11:44:59 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJWVRN2M4E2UVDKSLHVSVPRJ3DR/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPAMTODDETM7BHJGIBB2UJUZYDR/permissions body: encoding: US-ASCII string: '' @@ -528,7 +574,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -538,22 +584,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 93e40014-2c7d-4bfb-801c-e40ca1e61043 + - 52a04649-7c65-4665-8f77-e724f2b0a7a9 Client-Request-Id: - - 93e40014-2c7d-4bfb-801c-e40ca1e61043 + - 52a04649-7c65-4665-8f77-e724f2b0a7a9 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002E8"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"004","RoleInstance":"FR2PEPF000003B9"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -561,38 +603,37 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Tue, 30 Jan 2024 11:55:40 GMT + - Wed, 24 Apr 2024 11:44:58 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PJWVRN2M4E2UVDKSLHVSVPRJ3DR'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPAMTODDETM7BHJGIBB2UJUZYDR'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:41 GMT + recorded_at: Wed, 24 Apr 2024 11:44:59 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJWVRN2M4E2UVDKSLHVSVPRJ3DR + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPAMTODDETM7BHJGIBB2UJUZYDR body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -605,15 +646,15 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - f9ac1762-f4b6-42ba-ac84-def0747ffeda + - 65bc4cd9-7c82-4235-b7f5-cec055cd1b83 Client-Request-Id: - - f9ac1762-f4b6-42ba-ac84-def0747ffeda + - 65bc4cd9-7c82-4235-b7f5-cec055cd1b83 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002DA"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"004","RoleInstance":"FR2PEPF000005A8"}}' Date: - - Tue, 30 Jan 2024 11:55:41 GMT + - Wed, 24 Apr 2024 11:44:59 GMT body: encoding: UTF-8 string: '' - recorded_at: Tue, 30 Jan 2024 11:55:41 GMT + recorded_at: Wed, 24 Apr 2024 11:44:59 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_delete_permission_write.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_delete_permission_write.yml index 80f39f1d980f..fd6128ee99fc 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_delete_permission_write.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_delete_permission_write.yml @@ -4,19 +4,19 @@ http_interactions: method: post uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token body: - encoding: UTF-8 - string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB headers: User-Agent: - - Rack::OAuth2 (2.2.1) - Authorization: - - Basic - Content-Type: - - application/x-www-form-urlencoded - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + - httpx.rb/1.2.4 Accept: - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' response: status: code: 200 @@ -37,24 +37,26 @@ http_interactions: P3p: - CP="DSP CUR OTPi IND OTRi ONL FIN" X-Ms-Request-Id: - - 4647f244-f345-494e-ba1a-c916616c8a00 + - 5143f273-9cef-4718-af47-ac225a537e00 X-Ms-Ests-Server: - - 2.1.17122.3 - SEC ProdSlices + - 2.1.17846.6 - WEULR1 ProdSlices + X-Ms-Srs: + - 1.P X-Xss-Protection: - '0' Set-Cookie: - - fpc=AqIEr1AzOFJGgxehXlWHjnakbDoXAQAAALTaSt0OAAAA; expires=Thu, 29-Feb-2024 - 11:55:33 GMT; path=/; secure; HttpOnly; SameSite=None - - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly + - fpc=AjdEKMJpp6FCvtvFN4DksqykbDoXAQAAALvnut0OAAAA; expires=Fri, 24-May-2024 + 11:45:00 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly Date: - - Tue, 30 Jan 2024 11:55:33 GMT + - Wed, 24 Apr 2024 11:44:59 GMT Content-Length: - - '1708' + - '1735' body: encoding: UTF-8 string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Tue, 30 Jan 2024 11:55:34 GMT + recorded_at: Wed, 24 Apr 2024 11:45:00 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children @@ -62,18 +64,18 @@ http_interactions: encoding: UTF-8 string: '{"name":"Permission Test Folder","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: - '88' + Authorization: + - Bearer response: status: code: 201 @@ -81,41 +83,96 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{CFE846D3-5EC2-4A6A-BEAB-020F4E163FF1},1"' + - '"{5EA835A5-EAF8-439F-B12A-6827A7403436},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5POTI3UM7QS6NJFL5KYCB5HBMP7R') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PNFGWUF56HKT5B3CKTIE6TUANBW') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - d2b2573f-ed2c-4cc2-8e8b-6b76eed34f83 + - 0f563d4f-9649-4b0d-a129-e53828e229a6 Client-Request-Id: - - d2b2573f-ed2c-4cc2-8e8b-6b76eed34f83 + - 0f563d4f-9649-4b0d-a129-e53828e229a6 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF00000356"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"004","RoleInstance":"FR2PEPF00000555"}}' Odata-Version: - '4.0' Date: - - Tue, 30 Jan 2024 11:55:33 GMT + - Wed, 24 Apr 2024 11:45:00 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{CFE846D3-5EC2-4A6A-BEAB-020F4E163FF1},1\"","createdDateTime":"2024-01-30T11:55:34Z","eTag":"\"{CFE846D3-5EC2-4A6A-BEAB-020F4E163FF1},1\"","id":"01AZJL5POTI3UM7QS6NJFL5KYCB5HBMP7R","lastModifiedDateTime":"2024-01-30T11:55:34Z","name":"Permission - Test Folder","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{CFE846D3-5EC2-4A6A-BEAB-020F4E163FF1},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{5EA835A5-EAF8-439F-B12A-6827A7403436},1\"","createdDateTime":"2024-04-24T11:45:01Z","eTag":"\"{5EA835A5-EAF8-439F-B12A-6827A7403436},1\"","id":"01AZJL5PNFGWUF56HKT5B3CKTIE6TUANBW","lastModifiedDateTime":"2024-04-24T11:45:01Z","name":"Permission + Test Folder","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{5EA835A5-EAF8-439F-B12A-6827A7403436},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-01-30T11:55:34Z","lastModifiedDateTime":"2024-01-30T11:55:34Z"},"folder":{"childCount":0}}' - recorded_at: Tue, 30 Jan 2024 11:55:34 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T11:45:01Z","lastModifiedDateTime":"2024-04-24T11:45:01Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 11:45:00 GMT +- request: + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token + body: + encoding: UTF-8 + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default + headers: + User-Agent: + - Rack::OAuth2 (2.2.1) + Authorization: + - Basic + Content-Type: + - application/x-www-form-urlencoded + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-store, no-cache + Pragma: + - no-cache + Content-Type: + - application/json; charset=utf-8 + Expires: + - "-1" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - 120cf2de-1b77-484f-affa-e1bb4eeb7600 + X-Ms-Ests-Server: + - 2.1.17846.6 - NEULR1 ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=AqWtMJprZjhGu6zUDKw0UfOkbDoXAQAAALznut0OAAAA; expires=Fri, 24-May-2024 + 11:45:00 GMT; path=/; secure; HttpOnly; SameSite=None + - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly + - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly + Date: + - Wed, 24 Apr 2024 11:45:00 GMT + Content-Length: + - '1708' + body: + encoding: UTF-8 + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Wed, 24 Apr 2024 11:45:00 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POTI3UM7QS6NJFL5KYCB5HBMP7R + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFGWUF56HKT5B3CKTIE6TUANBW body: encoding: US-ASCII string: '' @@ -127,7 +184,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -137,8 +194,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; charset=utf-8 @@ -147,24 +202,25 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 56690bd2-15db-49a8-b6e5-30b90033bd48 + - 53365d97-7e93-4aad-83c5-557e1b3bf587 Client-Request-Id: - - 56690bd2-15db-49a8-b6e5-30b90033bd48 + - 53365d97-7e93-4aad-83c5-557e1b3bf587 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002C3"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"004","RoleInstance":"FR2PEPF0000039B"}}' Date: - - Tue, 30 Jan 2024 11:55:33 GMT + - Wed, 24 Apr 2024 11:45:01 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-01-30T11:55:34Z","eTag":"\"{CFE846D3-5EC2-4A6A-BEAB-020F4E163FF1},1\"","id":"01AZJL5POTI3UM7QS6NJFL5KYCB5HBMP7R","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-01-30T11:55:34Z","name":"Permission + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T11:45:01Z","eTag":"\"{5EA835A5-EAF8-439F-B12A-6827A7403436},2\"","id":"01AZJL5PNFGWUF56HKT5B3CKTIE6TUANBW","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T11:45:01Z","name":"Permission Test Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{CFE846D3-5EC2-4A6A-BEAB-020F4E163FF1},0\"","fileSystemInfo":{"createdDateTime":"2024-01-30T11:55:34Z","lastModifiedDateTime":"2024-01-30T11:55:34Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' - recorded_at: Tue, 30 Jan 2024 11:55:34 GMT + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{5EA835A5-EAF8-439F-B12A-6827A7403436},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T11:45:01Z","lastModifiedDateTime":"2024-04-24T11:45:01Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 11:45:01 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POTI3UM7QS6NJFL5KYCB5HBMP7R/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFGWUF56HKT5B3CKTIE6TUANBW/permissions body: encoding: US-ASCII string: '' @@ -176,7 +232,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -186,22 +242,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - f0256faf-4e2c-4958-8ba3-961434b1d436 + - 47473909-975c-4fc9-9103-2b79c63044ee Client-Request-Id: - - f0256faf-4e2c-4958-8ba3-961434b1d436 + - 47473909-975c-4fc9-9103-2b79c63044ee X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF00000316"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"004","RoleInstance":"FR2PEPF000005AA"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -209,26 +261,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Tue, 30 Jan 2024 11:55:34 GMT + - Wed, 24 Apr 2024 11:45:01 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5POTI3UM7QS6NJFL5KYCB5HBMP7R'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNFGWUF56HKT5B3CKTIE6TUANBW'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:34 GMT + recorded_at: Wed, 24 Apr 2024 11:45:01 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POTI3UM7QS6NJFL5KYCB5HBMP7R/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFGWUF56HKT5B3CKTIE6TUANBW/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"}]}' @@ -240,7 +293,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -252,8 +305,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -265,11 +316,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - f56ec05c-68b9-444d-9e7a-b84543fc339c + - 9881d04b-8a41-4a2a-87d6-03c2fc2cd484 Client-Request-Id: - - f56ec05c-68b9-444d-9e7a-b84543fc339c + - 9881d04b-8a41-4a2a-87d6-03c2fc2cd484 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002E4"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"004","RoleInstance":"FR2PEPF0000054F"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -280,15 +331,15 @@ http_interactions: Odata-Version: - '4.0' Date: - - Tue, 30 Jan 2024 11:55:34 GMT + - Wed, 24 Apr 2024 11:45:01 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["write"],"grantedTo":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["write"],"grantedTo":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello Rocha"}}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:35 GMT + recorded_at: Wed, 24 Apr 2024 11:45:02 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POTI3UM7QS6NJFL5KYCB5HBMP7R/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFGWUF56HKT5B3CKTIE6TUANBW/permissions body: encoding: US-ASCII string: '' @@ -300,7 +351,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -310,22 +361,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 8c5002ed-4101-40c3-8937-f613be79f4b0 + - b8322456-ec54-4f36-be7b-e535bfefde33 Client-Request-Id: - - 8c5002ed-4101-40c3-8937-f613be79f4b0 + - b8322456-ec54-4f36-be7b-e535bfefde33 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002DA"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"004","RoleInstance":"FR2PEPF000003F3"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -333,29 +380,31 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Tue, 30 Jan 2024 11:55:35 GMT + - Wed, 24 Apr 2024 11:45:02 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5POTI3UM7QS6NJFL5KYCB5HBMP7R'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNFGWUF56HKT5B3CKTIE6TUANBW'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello - Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"},"siteUser":{"displayName":"Marcello + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello + Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello Rocha","email":"mrocha.op@outlook.com","id":"24","loginName":"i:0#.f|membership|mrocha.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Marcello - Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:36 GMT + recorded_at: Wed, 24 Apr 2024 11:45:03 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POTI3UM7QS6NJFL5KYCB5HBMP7R + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFGWUF56HKT5B3CKTIE6TUANBW body: encoding: US-ASCII string: '' @@ -367,7 +416,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -377,8 +426,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; charset=utf-8 @@ -387,24 +434,25 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - cb6c86e2-5217-47ed-a152-3be574dc95cd + - 279d1841-57c0-4848-a772-9f2ce8ac706c Client-Request-Id: - - cb6c86e2-5217-47ed-a152-3be574dc95cd + - 279d1841-57c0-4848-a772-9f2ce8ac706c X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002D8"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"004","RoleInstance":"FR2PEPF000005AA"}}' Date: - - Tue, 30 Jan 2024 11:55:35 GMT + - Wed, 24 Apr 2024 11:45:03 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-01-30T11:55:34Z","eTag":"\"{CFE846D3-5EC2-4A6A-BEAB-020F4E163FF1},2\"","id":"01AZJL5POTI3UM7QS6NJFL5KYCB5HBMP7R","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-01-30T11:55:34Z","name":"Permission + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T11:45:01Z","eTag":"\"{5EA835A5-EAF8-439F-B12A-6827A7403436},3\"","id":"01AZJL5PNFGWUF56HKT5B3CKTIE6TUANBW","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T11:45:01Z","name":"Permission Test Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{CFE846D3-5EC2-4A6A-BEAB-020F4E163FF1},0\"","fileSystemInfo":{"createdDateTime":"2024-01-30T11:55:34Z","lastModifiedDateTime":"2024-01-30T11:55:34Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' - recorded_at: Tue, 30 Jan 2024 11:55:36 GMT + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{5EA835A5-EAF8-439F-B12A-6827A7403436},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T11:45:01Z","lastModifiedDateTime":"2024-04-24T11:45:01Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 11:45:03 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POTI3UM7QS6NJFL5KYCB5HBMP7R/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFGWUF56HKT5B3CKTIE6TUANBW/permissions body: encoding: US-ASCII string: '' @@ -416,7 +464,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -426,22 +474,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 584ab87f-ae3e-4434-b3e9-cd9cccc92aca + - 73e9a805-452b-48f6-b8da-9190cedef6ae Client-Request-Id: - - 584ab87f-ae3e-4434-b3e9-cd9cccc92aca + - 73e9a805-452b-48f6-b8da-9190cedef6ae X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF00000464"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"004","RoleInstance":"FR2PEPF00000571"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -449,29 +493,31 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Tue, 30 Jan 2024 11:55:36 GMT + - Wed, 24 Apr 2024 11:45:03 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5POTI3UM7QS6NJFL5KYCB5HBMP7R'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNFGWUF56HKT5B3CKTIE6TUANBW'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello - Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"},"siteUser":{"displayName":"Marcello + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello + Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello Rocha","email":"mrocha.op@outlook.com","id":"24","loginName":"i:0#.f|membership|mrocha.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Marcello - Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:36 GMT + recorded_at: Wed, 24 Apr 2024 11:45:04 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POTI3UM7QS6NJFL5KYCB5HBMP7R/permissions/aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFGWUF56HKT5B3CKTIE6TUANBW/permissions/aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20 body: encoding: US-ASCII string: '' @@ -483,7 +529,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -496,11 +542,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - c6e9353d-3920-4e9c-915e-1257b8546ad6 + - d8ea55b1-a569-42f7-bd86-76f62a6041ad Client-Request-Id: - - c6e9353d-3920-4e9c-915e-1257b8546ad6 + - d8ea55b1-a569-42f7-bd86-76f62a6041ad X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF00000462"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"004","RoleInstance":"FR2PEPF0000054F"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -509,14 +555,14 @@ http_interactions: Sunset: - Sun, 01 Oct 2023 23:59:59 GMT Date: - - Tue, 30 Jan 2024 11:55:36 GMT + - Wed, 24 Apr 2024 11:45:03 GMT body: encoding: UTF-8 string: '' - recorded_at: Tue, 30 Jan 2024 11:55:37 GMT + recorded_at: Wed, 24 Apr 2024 11:45:04 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POTI3UM7QS6NJFL5KYCB5HBMP7R/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFGWUF56HKT5B3CKTIE6TUANBW/permissions body: encoding: US-ASCII string: '' @@ -528,7 +574,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -538,22 +584,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 2e968ac6-db8e-454e-a6f0-1db99cc321e0 + - 6d083001-2257-4c2e-a889-9df8fa876ee9 Client-Request-Id: - - 2e968ac6-db8e-454e-a6f0-1db99cc321e0 + - 6d083001-2257-4c2e-a889-9df8fa876ee9 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF00000356"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"004","RoleInstance":"FR2PEPF00000391"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -561,38 +603,37 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Tue, 30 Jan 2024 11:55:36 GMT + - Wed, 24 Apr 2024 11:45:04 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5POTI3UM7QS6NJFL5KYCB5HBMP7R'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNFGWUF56HKT5B3CKTIE6TUANBW'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:37 GMT + recorded_at: Wed, 24 Apr 2024 11:45:05 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POTI3UM7QS6NJFL5KYCB5HBMP7R + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFGWUF56HKT5B3CKTIE6TUANBW body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -605,15 +646,15 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - e68bb795-9d2c-41ef-95cf-9c54def36cb8 + - 00ec7787-cd59-497f-9d0c-a582b9b582df Client-Request-Id: - - e68bb795-9d2c-41ef-95cf-9c54def36cb8 + - 00ec7787-cd59-497f-9d0c-a582b9b582df X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002DC"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"004","RoleInstance":"FR2PEPF0000056F"}}' Date: - - Tue, 30 Jan 2024 11:55:37 GMT + - Wed, 24 Apr 2024 11:45:04 GMT body: encoding: UTF-8 string: '' - recorded_at: Tue, 30 Jan 2024 11:55:37 GMT + recorded_at: Wed, 24 Apr 2024 11:45:05 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_not_found_folder.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_not_found_folder.yml index 801487912829..97c9c52e8212 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_not_found_folder.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_not_found_folder.yml @@ -37,24 +37,26 @@ http_interactions: P3p: - CP="DSP CUR OTPi IND OTRi ONL FIN" X-Ms-Request-Id: - - b9638a08-b494-4dce-93e9-2772a8d08a00 + - ca79e193-85eb-4b38-a4e1-6444740a6500 X-Ms-Ests-Server: - - 2.1.17122.3 - FRC ProdSlices + - 2.1.17846.6 - NEULR1 ProdSlices + X-Ms-Srs: + - 1.P X-Xss-Protection: - '0' Set-Cookie: - - fpc=AlyqwIaXev9AvelRLZf_ZxOkbDoXAQAAAK7aSt0OAAAA; expires=Thu, 29-Feb-2024 - 11:55:26 GMT; path=/; secure; HttpOnly; SameSite=None + - fpc=ApLtMF9uhpJBj8lFCB9V6RSkbDoXAQAAAHHout0OAAAA; expires=Fri, 24-May-2024 + 11:48:02 GMT; path=/; secure; HttpOnly; SameSite=None - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly Date: - - Tue, 30 Jan 2024 11:55:26 GMT + - Wed, 24 Apr 2024 11:48:01 GMT Content-Length: - '1708' body: encoding: UTF-8 string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Tue, 30 Jan 2024 11:55:26 GMT + recorded_at: Wed, 24 Apr 2024 11:48:02 GMT - request: method: get uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/THIS_IS_NOT_THE_FOLDER_YOURE_LOOKING_FOR @@ -69,7 +71,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -79,8 +81,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json; charset=utf-8 Content-Encoding: @@ -90,17 +90,74 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 7b8f3010-a369-4830-a20a-e04c33a824c6 + - a82736c7-7ffc-425a-b1d5-58750376f5d0 Client-Request-Id: - - 7b8f3010-a369-4830-a20a-e04c33a824c6 + - a82736c7-7ffc-425a-b1d5-58750376f5d0 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF00000464"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"010","RoleInstance":"AM4PEPF000278F6"}}' Date: - - Tue, 30 Jan 2024 11:55:26 GMT + - Wed, 24 Apr 2024 11:48:02 GMT body: encoding: UTF-8 string: '{"error":{"code":"itemNotFound","message":"Item not found"}}' - recorded_at: Tue, 30 Jan 2024 11:55:27 GMT + recorded_at: Wed, 24 Apr 2024 11:48:03 GMT +- request: + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token + body: + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB + headers: + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-store, no-cache + Pragma: + - no-cache + Content-Type: + - application/json; charset=utf-8 + Expires: + - "-1" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - 7387aaa2-4560-48ef-890d-ffb31a837600 + X-Ms-Ests-Server: + - 2.1.17846.6 - NEULR1 ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=ArsIcYhS1HRDl1TC_N6ELtWkbDoXAQAAAHLout0OAAAA; expires=Fri, 24-May-2024 + 11:48:03 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly + Date: + - Wed, 24 Apr 2024 11:48:02 GMT + Content-Length: + - '1740' + body: + encoding: UTF-8 + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Wed, 24 Apr 2024 11:48:03 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children @@ -108,18 +165,18 @@ http_interactions: encoding: UTF-8 string: '{"name":"Permission Test Folder","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: - '88' + Authorization: + - Bearer response: status: code: 201 @@ -127,53 +184,49 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{C8295C55-7973-4367-A239-2E2C8A413927},1"' + - '"{C7555272-1501-4709-9C78-2FC712CD2532},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PKVLQU4Q43ZM5B2EOJOFSFECOJH') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PLSKJK4OAIVBFDZY6BPY4JM2JJS') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - afee8da8-85f8-4dd8-a86a-786c10c94b39 + - 60e7b080-0a1d-4e88-86ae-82ec32440318 Client-Request-Id: - - afee8da8-85f8-4dd8-a86a-786c10c94b39 + - 60e7b080-0a1d-4e88-86ae-82ec32440318 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF0000045E"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"010","RoleInstance":"AM4PEPF000278FB"}}' Odata-Version: - '4.0' Date: - - Tue, 30 Jan 2024 11:55:27 GMT + - Wed, 24 Apr 2024 11:48:03 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{C8295C55-7973-4367-A239-2E2C8A413927},1\"","createdDateTime":"2024-01-30T11:55:27Z","eTag":"\"{C8295C55-7973-4367-A239-2E2C8A413927},1\"","id":"01AZJL5PKVLQU4Q43ZM5B2EOJOFSFECOJH","lastModifiedDateTime":"2024-01-30T11:55:27Z","name":"Permission - Test Folder","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{C8295C55-7973-4367-A239-2E2C8A413927},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{C7555272-1501-4709-9C78-2FC712CD2532},1\"","createdDateTime":"2024-04-24T11:48:04Z","eTag":"\"{C7555272-1501-4709-9C78-2FC712CD2532},1\"","id":"01AZJL5PLSKJK4OAIVBFDZY6BPY4JM2JJS","lastModifiedDateTime":"2024-04-24T11:48:04Z","name":"Permission + Test Folder","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{C7555272-1501-4709-9C78-2FC712CD2532},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-01-30T11:55:27Z","lastModifiedDateTime":"2024-01-30T11:55:27Z"},"folder":{"childCount":0}}' - recorded_at: Tue, 30 Jan 2024 11:55:27 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T11:48:04Z","lastModifiedDateTime":"2024-04-24T11:48:04Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 11:48:04 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKVLQU4Q43ZM5B2EOJOFSFECOJH + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLSKJK4OAIVBFDZY6BPY4JM2JJS body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -186,15 +239,15 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - '083512b4-d2d9-475a-ac38-5b63b413d7f6' + - 15b118a3-a891-41f7-8021-a8c911a45e03 Client-Request-Id: - - '083512b4-d2d9-475a-ac38-5b63b413d7f6' + - 15b118a3-a891-41f7-8021-a8c911a45e03 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF00000318"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"010","RoleInstance":"AM4PEPF000278FE"}}' Date: - - Tue, 30 Jan 2024 11:55:26 GMT + - Wed, 24 Apr 2024 11:48:03 GMT body: encoding: UTF-8 string: '' - recorded_at: Tue, 30 Jan 2024 11:55:27 GMT + recorded_at: Wed, 24 Apr 2024 11:48:04 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_replace_permissions_read.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_replace_permissions_read.yml index 391ab14141c2..244faa9598a9 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_replace_permissions_read.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_replace_permissions_read.yml @@ -4,19 +4,19 @@ http_interactions: method: post uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token body: - encoding: UTF-8 - string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB headers: User-Agent: - - Rack::OAuth2 (2.2.1) - Authorization: - - Basic - Content-Type: - - application/x-www-form-urlencoded - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + - httpx.rb/1.2.4 Accept: - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' response: status: code: 200 @@ -37,24 +37,26 @@ http_interactions: P3p: - CP="DSP CUR OTPi IND OTRi ONL FIN" X-Ms-Request-Id: - - 9e1f97f5-a89d-4347-a247-2bfbfcae6500 + - 5898acbb-b1d0-4779-aeb4-a3f64d9d7000 X-Ms-Ests-Server: - - 2.1.17122.3 - NEULR1 ProdSlices + - 2.1.17846.6 - NEULR1 ProdSlices + X-Ms-Srs: + - 1.P X-Xss-Protection: - '0' Set-Cookie: - - fpc=AsZWoH7Nlk1ChvFNb1zr38akbDoXAQAAAMLaSt0OAAAA; expires=Thu, 29-Feb-2024 - 11:55:46 GMT; path=/; secure; HttpOnly; SameSite=None - - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly + - fpc=AiWaPVRN6VJIpHqU96bUQkCkbDoXAQAAAEvout0OAAAA; expires=Fri, 24-May-2024 + 11:47:24 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly Date: - - Tue, 30 Jan 2024 11:55:46 GMT + - Wed, 24 Apr 2024 11:47:24 GMT Content-Length: - - '1708' + - '1740' body: encoding: UTF-8 string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Tue, 30 Jan 2024 11:55:46 GMT + recorded_at: Wed, 24 Apr 2024 11:47:24 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children @@ -62,18 +64,18 @@ http_interactions: encoding: UTF-8 string: '{"name":"Permission Test Folder","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: - '88' + Authorization: + - Bearer response: status: code: 201 @@ -81,41 +83,96 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{406D0E30-4B66-47D5-A1D9-DFCFE45700B2},1"' + - '"{D2CAADF5-7A90-463B-9B7C-4CBFCE3C1671},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PJQBZWUAZSL2VD2DWO7Z7SFOAFS') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PPVVXFNFED2HNDJW7CMX7HDYFTR') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 16db7b4d-cd67-4ca0-9f18-03192173835f + - 27c7d864-ed8b-4f69-bf95-8697a65e44a1 Client-Request-Id: - - 16db7b4d-cd67-4ca0-9f18-03192173835f + - 27c7d864-ed8b-4f69-bf95-8697a65e44a1 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002E7"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"AM1PEPF00032D10"}}' Odata-Version: - '4.0' Date: - - Tue, 30 Jan 2024 11:55:46 GMT + - Wed, 24 Apr 2024 11:47:24 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{406D0E30-4B66-47D5-A1D9-DFCFE45700B2},1\"","createdDateTime":"2024-01-30T11:55:47Z","eTag":"\"{406D0E30-4B66-47D5-A1D9-DFCFE45700B2},1\"","id":"01AZJL5PJQBZWUAZSL2VD2DWO7Z7SFOAFS","lastModifiedDateTime":"2024-01-30T11:55:47Z","name":"Permission - Test Folder","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{406D0E30-4B66-47D5-A1D9-DFCFE45700B2},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{D2CAADF5-7A90-463B-9B7C-4CBFCE3C1671},1\"","createdDateTime":"2024-04-24T11:47:25Z","eTag":"\"{D2CAADF5-7A90-463B-9B7C-4CBFCE3C1671},1\"","id":"01AZJL5PPVVXFNFED2HNDJW7CMX7HDYFTR","lastModifiedDateTime":"2024-04-24T11:47:25Z","name":"Permission + Test Folder","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{D2CAADF5-7A90-463B-9B7C-4CBFCE3C1671},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-01-30T11:55:47Z","lastModifiedDateTime":"2024-01-30T11:55:47Z"},"folder":{"childCount":0}}' - recorded_at: Tue, 30 Jan 2024 11:55:47 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T11:47:25Z","lastModifiedDateTime":"2024-04-24T11:47:25Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 11:47:25 GMT +- request: + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token + body: + encoding: UTF-8 + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default + headers: + User-Agent: + - Rack::OAuth2 (2.2.1) + Authorization: + - Basic + Content-Type: + - application/x-www-form-urlencoded + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-store, no-cache + Pragma: + - no-cache + Content-Type: + - application/json; charset=utf-8 + Expires: + - "-1" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - ed19226e-a67c-4f61-bb12-968ebc117400 + X-Ms-Ests-Server: + - 2.1.17846.6 - NEULR1 ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=ArvRsd-YJ8xHoFjbJ4yOeZKkbDoXAQAAAEzout0OAAAA; expires=Fri, 24-May-2024 + 11:47:25 GMT; path=/; secure; HttpOnly; SameSite=None + - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly + - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly + Date: + - Wed, 24 Apr 2024 11:47:24 GMT + Content-Length: + - '1708' + body: + encoding: UTF-8 + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Wed, 24 Apr 2024 11:47:25 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJQBZWUAZSL2VD2DWO7Z7SFOAFS + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPVVXFNFED2HNDJW7CMX7HDYFTR body: encoding: US-ASCII string: '' @@ -127,7 +184,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -137,8 +194,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; charset=utf-8 @@ -147,24 +202,25 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - e4995435-2a44-4975-acc5-81386be97e9b + - affa7fbf-a2cb-4cc5-ac32-dd88b37b9d25 Client-Request-Id: - - e4995435-2a44-4975-acc5-81386be97e9b + - affa7fbf-a2cb-4cc5-ac32-dd88b37b9d25 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF00000461"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"AM1PEPF000105C8"}}' Date: - - Tue, 30 Jan 2024 11:55:46 GMT + - Wed, 24 Apr 2024 11:47:24 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-01-30T11:55:47Z","eTag":"\"{406D0E30-4B66-47D5-A1D9-DFCFE45700B2},1\"","id":"01AZJL5PJQBZWUAZSL2VD2DWO7Z7SFOAFS","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-01-30T11:55:47Z","name":"Permission + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T11:47:25Z","eTag":"\"{D2CAADF5-7A90-463B-9B7C-4CBFCE3C1671},2\"","id":"01AZJL5PPVVXFNFED2HNDJW7CMX7HDYFTR","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T11:47:25Z","name":"Permission Test Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{406D0E30-4B66-47D5-A1D9-DFCFE45700B2},0\"","fileSystemInfo":{"createdDateTime":"2024-01-30T11:55:47Z","lastModifiedDateTime":"2024-01-30T11:55:47Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' - recorded_at: Tue, 30 Jan 2024 11:55:47 GMT + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{D2CAADF5-7A90-463B-9B7C-4CBFCE3C1671},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T11:47:25Z","lastModifiedDateTime":"2024-04-24T11:47:25Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 11:47:25 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJQBZWUAZSL2VD2DWO7Z7SFOAFS/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPVVXFNFED2HNDJW7CMX7HDYFTR/permissions body: encoding: US-ASCII string: '' @@ -176,7 +232,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -186,22 +242,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - ae3c1061-c655-4d27-87f9-0508f0e98da8 + - bae7be9a-46ed-48bf-8f88-5b47585c2682 Client-Request-Id: - - ae3c1061-c655-4d27-87f9-0508f0e98da8 + - bae7be9a-46ed-48bf-8f88-5b47585c2682 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF0000036B"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"AM1PEPF000105C1"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -209,26 +261,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Tue, 30 Jan 2024 11:55:47 GMT + - Wed, 24 Apr 2024 11:47:25 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PJQBZWUAZSL2VD2DWO7Z7SFOAFS'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPVVXFNFED2HNDJW7CMX7HDYFTR'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:47 GMT + recorded_at: Wed, 24 Apr 2024 11:47:26 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJQBZWUAZSL2VD2DWO7Z7SFOAFS/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPVVXFNFED2HNDJW7CMX7HDYFTR/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["read"],"recipients":[{"objectId":"84acc1d5-61be-470b-9d79-0d1f105c2c5f"}]}' @@ -240,7 +293,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -252,8 +305,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -265,11 +316,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 88b49d1d-b34b-4b69-b53e-ec94f8807690 + - 033b6e5c-3129-4281-8596-2b03a05e2190 Client-Request-Id: - - 88b49d1d-b34b-4b69-b53e-ec94f8807690 + - 033b6e5c-3129-4281-8596-2b03a05e2190 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF00000366"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"AM1PEPF00028A5B"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -280,15 +331,15 @@ http_interactions: Odata-Version: - '4.0' Date: - - Tue, 30 Jan 2024 11:55:48 GMT + - Wed, 24 Apr 2024 11:47:27 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8YXBmb2hsLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["read"],"grantedTo":{"user":{"email":"apfohl.op@outlook.com","id":"84acc1d5-61be-470b-9d79-0d1f105c2c5f","displayName":"Andreas + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8YXBmb2hsLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["read"],"grantedTo":{"user":{"email":"apfohl.op@outlook.com","id":"84acc1d5-61be-470b-9d79-0d1f105c2c5f","displayName":"Andreas Pfohl"}}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:48 GMT + recorded_at: Wed, 24 Apr 2024 11:47:27 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJQBZWUAZSL2VD2DWO7Z7SFOAFS/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPVVXFNFED2HNDJW7CMX7HDYFTR/permissions body: encoding: US-ASCII string: '' @@ -300,7 +351,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -310,22 +361,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - ee8d3734-0b19-4cf2-b373-e5510411d0f6 + - 15a0ff56-0a73-44b7-a644-09481ed08426 Client-Request-Id: - - ee8d3734-0b19-4cf2-b373-e5510411d0f6 + - 15a0ff56-0a73-44b7-a644-09481ed08426 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002E4"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"AM1PEPF00032D0D"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -333,29 +380,31 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Tue, 30 Jan 2024 11:55:48 GMT + - Wed, 24 Apr 2024 11:47:27 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PJQBZWUAZSL2VD2DWO7Z7SFOAFS'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPVVXFNFED2HNDJW7CMX7HDYFTR'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8YXBmb2hsLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["read"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8YXBmb2hsLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Andreas - Pfohl","email":"apfohl.op@outlook.com","id":"84acc1d5-61be-470b-9d79-0d1f105c2c5f"},"siteUser":{"displayName":"Andreas + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8YXBmb2hsLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["read"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8YXBmb2hsLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Andreas + Pfohl","email":"apfohl.op@outlook.com","id":"84acc1d5-61be-470b-9d79-0d1f105c2c5f"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Andreas Pfohl","email":"apfohl.op@outlook.com","id":"15","loginName":"i:0#.f|membership|apfohl.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Andreas - Pfohl","email":"apfohl.op@outlook.com","id":"84acc1d5-61be-470b-9d79-0d1f105c2c5f"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + Pfohl","email":"apfohl.op@outlook.com","id":"84acc1d5-61be-470b-9d79-0d1f105c2c5f"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:48 GMT + recorded_at: Wed, 24 Apr 2024 11:47:28 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJQBZWUAZSL2VD2DWO7Z7SFOAFS + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPVVXFNFED2HNDJW7CMX7HDYFTR body: encoding: US-ASCII string: '' @@ -367,7 +416,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -377,8 +426,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; charset=utf-8 @@ -387,24 +434,25 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 6b28923c-a5a1-481d-a345-5fb19af75fbd + - da69cd94-74fa-4409-8e52-0e83b6c7a764 Client-Request-Id: - - 6b28923c-a5a1-481d-a345-5fb19af75fbd + - da69cd94-74fa-4409-8e52-0e83b6c7a764 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002D8"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"AM1PEPF00010594"}}' Date: - - Tue, 30 Jan 2024 11:55:48 GMT + - Wed, 24 Apr 2024 11:47:28 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-01-30T11:55:47Z","eTag":"\"{406D0E30-4B66-47D5-A1D9-DFCFE45700B2},2\"","id":"01AZJL5PJQBZWUAZSL2VD2DWO7Z7SFOAFS","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-01-30T11:55:47Z","name":"Permission + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T11:47:25Z","eTag":"\"{D2CAADF5-7A90-463B-9B7C-4CBFCE3C1671},3\"","id":"01AZJL5PPVVXFNFED2HNDJW7CMX7HDYFTR","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T11:47:25Z","name":"Permission Test Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{406D0E30-4B66-47D5-A1D9-DFCFE45700B2},0\"","fileSystemInfo":{"createdDateTime":"2024-01-30T11:55:47Z","lastModifiedDateTime":"2024-01-30T11:55:47Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' - recorded_at: Tue, 30 Jan 2024 11:55:49 GMT + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{D2CAADF5-7A90-463B-9B7C-4CBFCE3C1671},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T11:47:25Z","lastModifiedDateTime":"2024-04-24T11:47:25Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 11:47:28 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJQBZWUAZSL2VD2DWO7Z7SFOAFS/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPVVXFNFED2HNDJW7CMX7HDYFTR/permissions body: encoding: US-ASCII string: '' @@ -416,7 +464,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -426,22 +474,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 19128be5-48d4-4886-9097-db4be72f4bf8 + - 3e984d42-2923-4aef-9cb8-afe7e7d24ac4 Client-Request-Id: - - 19128be5-48d4-4886-9097-db4be72f4bf8 + - 3e984d42-2923-4aef-9cb8-afe7e7d24ac4 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF00000464"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"AM1PEPF00032D15"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -449,29 +493,31 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Tue, 30 Jan 2024 11:55:48 GMT + - Wed, 24 Apr 2024 11:47:28 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PJQBZWUAZSL2VD2DWO7Z7SFOAFS'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPVVXFNFED2HNDJW7CMX7HDYFTR'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8YXBmb2hsLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["read"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8YXBmb2hsLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Andreas - Pfohl","email":"apfohl.op@outlook.com","id":"84acc1d5-61be-470b-9d79-0d1f105c2c5f"},"siteUser":{"displayName":"Andreas + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8YXBmb2hsLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["read"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8YXBmb2hsLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Andreas + Pfohl","email":"apfohl.op@outlook.com","id":"84acc1d5-61be-470b-9d79-0d1f105c2c5f"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Andreas Pfohl","email":"apfohl.op@outlook.com","id":"15","loginName":"i:0#.f|membership|apfohl.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Andreas - Pfohl","email":"apfohl.op@outlook.com","id":"84acc1d5-61be-470b-9d79-0d1f105c2c5f"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + Pfohl","email":"apfohl.op@outlook.com","id":"84acc1d5-61be-470b-9d79-0d1f105c2c5f"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:49 GMT + recorded_at: Wed, 24 Apr 2024 11:47:28 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJQBZWUAZSL2VD2DWO7Z7SFOAFS/permissions/aTowIy5mfG1lbWJlcnNoaXB8YXBmb2hsLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPVVXFNFED2HNDJW7CMX7HDYFTR/permissions/aTowIy5mfG1lbWJlcnNoaXB8YXBmb2hsLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20 body: encoding: US-ASCII string: '' @@ -483,7 +529,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -496,11 +542,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - c0fb52f4-29c2-4b85-94d3-003997fc8359 + - f42d15f8-88ed-4eea-9ec9-7b1af7acbcdc Client-Request-Id: - - c0fb52f4-29c2-4b85-94d3-003997fc8359 + - f42d15f8-88ed-4eea-9ec9-7b1af7acbcdc X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002E8"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"AM1PEPF00032D0B"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -509,14 +555,14 @@ http_interactions: Sunset: - Sun, 01 Oct 2023 23:59:59 GMT Date: - - Tue, 30 Jan 2024 11:55:49 GMT + - Wed, 24 Apr 2024 11:47:28 GMT body: encoding: UTF-8 string: '' - recorded_at: Tue, 30 Jan 2024 11:55:49 GMT + recorded_at: Wed, 24 Apr 2024 11:47:29 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJQBZWUAZSL2VD2DWO7Z7SFOAFS/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPVVXFNFED2HNDJW7CMX7HDYFTR/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["read"],"recipients":[{"objectId":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"}]}' @@ -528,7 +574,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -540,8 +586,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -553,11 +597,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 4f200c12-adbe-427d-9eb6-79da0b1ed5c7 + - 2f296938-5df5-4bee-a13a-d42d78ace5cf Client-Request-Id: - - 4f200c12-adbe-427d-9eb6-79da0b1ed5c7 + - 2f296938-5df5-4bee-a13a-d42d78ace5cf X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002E4"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"AM1PEPF0002B36A"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -568,15 +612,15 @@ http_interactions: Odata-Version: - '4.0' Date: - - Tue, 30 Jan 2024 11:55:50 GMT + - Wed, 24 Apr 2024 11:47:30 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["read"],"grantedTo":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["read"],"grantedTo":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello Rocha"}}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:51 GMT + recorded_at: Wed, 24 Apr 2024 11:47:30 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJQBZWUAZSL2VD2DWO7Z7SFOAFS/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPVVXFNFED2HNDJW7CMX7HDYFTR/permissions body: encoding: US-ASCII string: '' @@ -588,7 +632,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -598,22 +642,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 973da6f0-dfe6-4b3f-b045-f6e7e9cc7b73 + - aac6bd45-5211-4b43-ae77-0208a592c4dd Client-Request-Id: - - 973da6f0-dfe6-4b3f-b045-f6e7e9cc7b73 + - aac6bd45-5211-4b43-ae77-0208a592c4dd X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002DD"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"AM1PEPF00032D0E"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -621,41 +661,41 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Tue, 30 Jan 2024 11:55:51 GMT + - Wed, 24 Apr 2024 11:47:30 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PJQBZWUAZSL2VD2DWO7Z7SFOAFS'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPVVXFNFED2HNDJW7CMX7HDYFTR'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["read"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello - Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"},"siteUser":{"displayName":"Marcello + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["read"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello + Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello Rocha","email":"mrocha.op@outlook.com","id":"24","loginName":"i:0#.f|membership|mrocha.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Marcello - Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:51 GMT + recorded_at: Wed, 24 Apr 2024 11:47:31 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJQBZWUAZSL2VD2DWO7Z7SFOAFS + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPVVXFNFED2HNDJW7CMX7HDYFTR body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -668,15 +708,15 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 213962b5-7676-428f-8702-ab38cd69d2d6 + - 44da1793-7d8b-4c6d-aa72-8da8b10964d6 Client-Request-Id: - - 213962b5-7676-428f-8702-ab38cd69d2d6 + - 44da1793-7d8b-4c6d-aa72-8da8b10964d6 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF00000449"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"AM1PEPF0002E554"}}' Date: - - Tue, 30 Jan 2024 11:55:51 GMT + - Wed, 24 Apr 2024 11:47:31 GMT body: encoding: UTF-8 string: '' - recorded_at: Tue, 30 Jan 2024 11:55:51 GMT + recorded_at: Wed, 24 Apr 2024 11:47:31 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_replace_permissions_write.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_replace_permissions_write.yml index f6405d5842cf..faca88509b6f 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_replace_permissions_write.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/set_permissions_replace_permissions_write.yml @@ -4,19 +4,19 @@ http_interactions: method: post uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token body: - encoding: UTF-8 - string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB headers: User-Agent: - - Rack::OAuth2 (2.2.1) - Authorization: - - Basic - Content-Type: - - application/x-www-form-urlencoded - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + - httpx.rb/1.2.4 Accept: - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' response: status: code: 200 @@ -37,24 +37,28 @@ http_interactions: P3p: - CP="DSP CUR OTPi IND OTRi ONL FIN" X-Ms-Request-Id: - - 351b2c60-33de-49fe-8720-8b86f2104e00 + - 0f76f548-2db3-49a2-86ca-720968f2aa00 X-Ms-Ests-Server: - - 2.1.17122.3 - WEULR1 ProdSlices + - 2.1.17846.6 - SEC ProdSlices + X-Ms-Srs: + - 1.P X-Xss-Protection: - '0' Set-Cookie: - - fpc=AhQvuQXCE9VPmmj8J1VQIU2kbDoXAQAAAL3aSt0OAAAA; expires=Thu, 29-Feb-2024 - 11:55:41 GMT; path=/; secure; HttpOnly; SameSite=None - - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly + - fpc=Ai6J5er4rxlLnkRvkhGCAsqkbDoXAQAAACvnut0OAAAA; expires=Fri, 24-May-2024 + 11:42:35 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly Date: - - Tue, 30 Jan 2024 11:55:41 GMT + - Wed, 24 Apr 2024 11:42:34 GMT + Connection: + - close Content-Length: - - '1708' + - '1735' body: encoding: UTF-8 string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Tue, 30 Jan 2024 11:55:41 GMT + recorded_at: Wed, 24 Apr 2024 11:42:35 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children @@ -62,18 +66,18 @@ http_interactions: encoding: UTF-8 string: '{"name":"Permission Test Folder","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: - '88' + Authorization: + - Bearer response: status: code: 201 @@ -81,41 +85,96 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{CAA2305C-2DC4-4E7E-8E09-5C0A1A8DF0FB},1"' + - '"{3523A8FD-5FBF-49AD-87A4-EC61035118C8},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PK4GCRMVRBNPZHI4CK4BINI34H3') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PP5VARTLP27VVEYPJHMMEBVCGGI') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - a0963fb5-da42-4ea0-9a6d-5109e60c08ae + - bd76e42c-e009-4df7-b435-3d1599d35729 Client-Request-Id: - - a0963fb5-da42-4ea0-9a6d-5109e60c08ae + - bd76e42c-e009-4df7-b435-3d1599d35729 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF00000356"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"005","RoleInstance":"FR3PEPF000002E4"}}' Odata-Version: - '4.0' Date: - - Tue, 30 Jan 2024 11:55:41 GMT + - Wed, 24 Apr 2024 11:42:35 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{CAA2305C-2DC4-4E7E-8E09-5C0A1A8DF0FB},1\"","createdDateTime":"2024-01-30T11:55:42Z","eTag":"\"{CAA2305C-2DC4-4E7E-8E09-5C0A1A8DF0FB},1\"","id":"01AZJL5PK4GCRMVRBNPZHI4CK4BINI34H3","lastModifiedDateTime":"2024-01-30T11:55:42Z","name":"Permission - Test Folder","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{CAA2305C-2DC4-4E7E-8E09-5C0A1A8DF0FB},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{3523A8FD-5FBF-49AD-87A4-EC61035118C8},1\"","createdDateTime":"2024-04-24T11:42:36Z","eTag":"\"{3523A8FD-5FBF-49AD-87A4-EC61035118C8},1\"","id":"01AZJL5PP5VARTLP27VVEYPJHMMEBVCGGI","lastModifiedDateTime":"2024-04-24T11:42:36Z","name":"Permission + Test Folder","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{3523A8FD-5FBF-49AD-87A4-EC61035118C8},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-01-30T11:55:42Z","lastModifiedDateTime":"2024-01-30T11:55:42Z"},"folder":{"childCount":0}}' - recorded_at: Tue, 30 Jan 2024 11:55:42 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T11:42:36Z","lastModifiedDateTime":"2024-04-24T11:42:36Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 11:42:36 GMT +- request: + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token + body: + encoding: UTF-8 + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default + headers: + User-Agent: + - Rack::OAuth2 (2.2.1) + Authorization: + - Basic + Content-Type: + - application/x-www-form-urlencoded + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-store, no-cache + Pragma: + - no-cache + Content-Type: + - application/json; charset=utf-8 + Expires: + - "-1" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - caced140-3f42-49ed-b737-7a5483889d00 + X-Ms-Ests-Server: + - 2.1.17846.6 - FRC ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=AqztNP5O3H5OlhOzr78cNcSkbDoXAQAAACvnut0OAAAA; expires=Fri, 24-May-2024 + 11:42:36 GMT; path=/; secure; HttpOnly; SameSite=None + - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly + - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly + Date: + - Wed, 24 Apr 2024 11:42:36 GMT + Content-Length: + - '1708' + body: + encoding: UTF-8 + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Wed, 24 Apr 2024 11:42:36 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PK4GCRMVRBNPZHI4CK4BINI34H3 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PP5VARTLP27VVEYPJHMMEBVCGGI body: encoding: US-ASCII string: '' @@ -127,7 +186,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -137,8 +196,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; charset=utf-8 @@ -147,24 +204,25 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 6eb204ad-ee7b-4a16-83fa-1992795641b1 + - 84b3154a-7e2b-4e1c-a4ca-20658ff99413 Client-Request-Id: - - 6eb204ad-ee7b-4a16-83fa-1992795641b1 + - 84b3154a-7e2b-4e1c-a4ca-20658ff99413 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002DF"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"005","RoleInstance":"FR3PEPF00000565"}}' Date: - - Tue, 30 Jan 2024 11:55:41 GMT + - Wed, 24 Apr 2024 11:42:36 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-01-30T11:55:42Z","eTag":"\"{CAA2305C-2DC4-4E7E-8E09-5C0A1A8DF0FB},1\"","id":"01AZJL5PK4GCRMVRBNPZHI4CK4BINI34H3","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-01-30T11:55:42Z","name":"Permission + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T11:42:36Z","eTag":"\"{3523A8FD-5FBF-49AD-87A4-EC61035118C8},2\"","id":"01AZJL5PP5VARTLP27VVEYPJHMMEBVCGGI","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T11:42:37Z","name":"Permission Test Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{CAA2305C-2DC4-4E7E-8E09-5C0A1A8DF0FB},0\"","fileSystemInfo":{"createdDateTime":"2024-01-30T11:55:42Z","lastModifiedDateTime":"2024-01-30T11:55:42Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' - recorded_at: Tue, 30 Jan 2024 11:55:42 GMT + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{3523A8FD-5FBF-49AD-87A4-EC61035118C8},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T11:42:36Z","lastModifiedDateTime":"2024-04-24T11:42:37Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 11:42:36 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PK4GCRMVRBNPZHI4CK4BINI34H3/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PP5VARTLP27VVEYPJHMMEBVCGGI/permissions body: encoding: US-ASCII string: '' @@ -176,7 +234,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -186,22 +244,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - ab08cec7-0968-41bb-927b-9f3c8852abb5 + - 92de7e4c-e729-4aa3-a3d8-b2d305cc2062 Client-Request-Id: - - ab08cec7-0968-41bb-927b-9f3c8852abb5 + - 92de7e4c-e729-4aa3-a3d8-b2d305cc2062 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF0000036B"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"005","RoleInstance":"FR3PEPF0000036B"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -209,26 +263,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Tue, 30 Jan 2024 11:55:42 GMT + - Wed, 24 Apr 2024 11:42:36 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PK4GCRMVRBNPZHI4CK4BINI34H3'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PP5VARTLP27VVEYPJHMMEBVCGGI'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:42 GMT + recorded_at: Wed, 24 Apr 2024 11:42:37 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PK4GCRMVRBNPZHI4CK4BINI34H3/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PP5VARTLP27VVEYPJHMMEBVCGGI/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"84acc1d5-61be-470b-9d79-0d1f105c2c5f"}]}' @@ -240,7 +295,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -252,8 +307,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -265,11 +318,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - f0287c74-7523-45a3-9013-1ec6093d8537 + - b76be666-1691-440b-adfa-e40a7f3e2bc3 Client-Request-Id: - - f0287c74-7523-45a3-9013-1ec6093d8537 + - b76be666-1691-440b-adfa-e40a7f3e2bc3 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002DA"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"005","RoleInstance":"FR3PEPF00000557"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -280,15 +333,15 @@ http_interactions: Odata-Version: - '4.0' Date: - - Tue, 30 Jan 2024 11:55:43 GMT + - Wed, 24 Apr 2024 11:42:38 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8YXBmb2hsLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["write"],"grantedTo":{"user":{"email":"apfohl.op@outlook.com","id":"84acc1d5-61be-470b-9d79-0d1f105c2c5f","displayName":"Andreas + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8YXBmb2hsLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["write"],"grantedTo":{"user":{"email":"apfohl.op@outlook.com","id":"84acc1d5-61be-470b-9d79-0d1f105c2c5f","displayName":"Andreas Pfohl"}}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:43 GMT + recorded_at: Wed, 24 Apr 2024 11:42:39 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PK4GCRMVRBNPZHI4CK4BINI34H3/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PP5VARTLP27VVEYPJHMMEBVCGGI/permissions body: encoding: US-ASCII string: '' @@ -300,7 +353,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -310,22 +363,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 7b657af3-3030-4b01-8d06-cdf1243f20f0 + - 00c676c0-e49a-4d3c-abd7-a25e99c7886d Client-Request-Id: - - 7b657af3-3030-4b01-8d06-cdf1243f20f0 + - 00c676c0-e49a-4d3c-abd7-a25e99c7886d X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF00000462"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"005","RoleInstance":"FR3PEPF00000315"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -333,29 +382,31 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Tue, 30 Jan 2024 11:55:43 GMT + - Wed, 24 Apr 2024 11:42:39 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PK4GCRMVRBNPZHI4CK4BINI34H3'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PP5VARTLP27VVEYPJHMMEBVCGGI'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8YXBmb2hsLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8YXBmb2hsLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Andreas - Pfohl","email":"apfohl.op@outlook.com","id":"84acc1d5-61be-470b-9d79-0d1f105c2c5f"},"siteUser":{"displayName":"Andreas + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8YXBmb2hsLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8YXBmb2hsLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Andreas + Pfohl","email":"apfohl.op@outlook.com","id":"84acc1d5-61be-470b-9d79-0d1f105c2c5f"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Andreas Pfohl","email":"apfohl.op@outlook.com","id":"15","loginName":"i:0#.f|membership|apfohl.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Andreas - Pfohl","email":"apfohl.op@outlook.com","id":"84acc1d5-61be-470b-9d79-0d1f105c2c5f"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + Pfohl","email":"apfohl.op@outlook.com","id":"84acc1d5-61be-470b-9d79-0d1f105c2c5f"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:44 GMT + recorded_at: Wed, 24 Apr 2024 11:42:39 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PK4GCRMVRBNPZHI4CK4BINI34H3 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PP5VARTLP27VVEYPJHMMEBVCGGI body: encoding: US-ASCII string: '' @@ -367,7 +418,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -377,8 +428,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; charset=utf-8 @@ -387,24 +436,25 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 94522b1a-0b41-464c-8083-426f42eb216f + - 0245ad5c-6732-44cb-9e69-07d277dbfb51 Client-Request-Id: - - 94522b1a-0b41-464c-8083-426f42eb216f + - 0245ad5c-6732-44cb-9e69-07d277dbfb51 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF00000318"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"005","RoleInstance":"FR3PEPF00000581"}}' Date: - - Tue, 30 Jan 2024 11:55:43 GMT + - Wed, 24 Apr 2024 11:42:39 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-01-30T11:55:42Z","eTag":"\"{CAA2305C-2DC4-4E7E-8E09-5C0A1A8DF0FB},2\"","id":"01AZJL5PK4GCRMVRBNPZHI4CK4BINI34H3","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-01-30T11:55:42Z","name":"Permission + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T11:42:36Z","eTag":"\"{3523A8FD-5FBF-49AD-87A4-EC61035118C8},3\"","id":"01AZJL5PP5VARTLP27VVEYPJHMMEBVCGGI","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T11:42:37Z","name":"Permission Test Folder","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{CAA2305C-2DC4-4E7E-8E09-5C0A1A8DF0FB},0\"","fileSystemInfo":{"createdDateTime":"2024-01-30T11:55:42Z","lastModifiedDateTime":"2024-01-30T11:55:42Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' - recorded_at: Tue, 30 Jan 2024 11:55:44 GMT + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Permission%20Test%20Folder","cTag":"\"c:{3523A8FD-5FBF-49AD-87A4-EC61035118C8},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T11:42:36Z","lastModifiedDateTime":"2024-04-24T11:42:37Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 11:42:40 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PK4GCRMVRBNPZHI4CK4BINI34H3/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PP5VARTLP27VVEYPJHMMEBVCGGI/permissions body: encoding: US-ASCII string: '' @@ -416,7 +466,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -426,22 +476,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - eb5d3729-9837-42c8-85ab-d7de24efda80 + - ca807e30-c711-499b-a13a-34863272bc6c Client-Request-Id: - - eb5d3729-9837-42c8-85ab-d7de24efda80 + - ca807e30-c711-499b-a13a-34863272bc6c X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF000002D9"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"005","RoleInstance":"FR3PEPF00000536"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -449,29 +495,31 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Tue, 30 Jan 2024 11:55:44 GMT + - Wed, 24 Apr 2024 11:42:40 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PK4GCRMVRBNPZHI4CK4BINI34H3'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PP5VARTLP27VVEYPJHMMEBVCGGI'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8YXBmb2hsLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8YXBmb2hsLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Andreas - Pfohl","email":"apfohl.op@outlook.com","id":"84acc1d5-61be-470b-9d79-0d1f105c2c5f"},"siteUser":{"displayName":"Andreas + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8YXBmb2hsLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8YXBmb2hsLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Andreas + Pfohl","email":"apfohl.op@outlook.com","id":"84acc1d5-61be-470b-9d79-0d1f105c2c5f"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Andreas Pfohl","email":"apfohl.op@outlook.com","id":"15","loginName":"i:0#.f|membership|apfohl.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Andreas - Pfohl","email":"apfohl.op@outlook.com","id":"84acc1d5-61be-470b-9d79-0d1f105c2c5f"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + Pfohl","email":"apfohl.op@outlook.com","id":"84acc1d5-61be-470b-9d79-0d1f105c2c5f"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:44 GMT + recorded_at: Wed, 24 Apr 2024 11:42:40 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PK4GCRMVRBNPZHI4CK4BINI34H3/permissions/aTowIy5mfG1lbWJlcnNoaXB8YXBmb2hsLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PP5VARTLP27VVEYPJHMMEBVCGGI/permissions/aTowIy5mfG1lbWJlcnNoaXB8YXBmb2hsLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20 body: encoding: US-ASCII string: '' @@ -483,7 +531,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -496,11 +544,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 8b2f9add-bdab-425f-b5f2-5c64324bdf4b + - bd9bd2f0-946b-438c-90ea-74d6a1b834d0 Client-Request-Id: - - 8b2f9add-bdab-425f-b5f2-5c64324bdf4b + - bd9bd2f0-946b-438c-90ea-74d6a1b834d0 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF0000045D"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"005","RoleInstance":"FR3PEPF00000315"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -509,14 +557,14 @@ http_interactions: Sunset: - Sun, 01 Oct 2023 23:59:59 GMT Date: - - Tue, 30 Jan 2024 11:55:45 GMT + - Wed, 24 Apr 2024 11:42:40 GMT body: encoding: UTF-8 string: '' - recorded_at: Tue, 30 Jan 2024 11:55:45 GMT + recorded_at: Wed, 24 Apr 2024 11:42:41 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PK4GCRMVRBNPZHI4CK4BINI34H3/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PP5VARTLP27VVEYPJHMMEBVCGGI/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"}]}' @@ -528,7 +576,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -540,8 +588,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -553,11 +599,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - c9a37eae-24ab-4e83-af54-199c6d4a7f5a + - a08a5101-772e-44ee-9cdd-a5843842bd18 Client-Request-Id: - - c9a37eae-24ab-4e83-af54-199c6d4a7f5a + - a08a5101-772e-44ee-9cdd-a5843842bd18 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF00000461"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"005","RoleInstance":"FR3PEPF000002DF"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -568,15 +614,15 @@ http_interactions: Odata-Version: - '4.0' Date: - - Tue, 30 Jan 2024 11:55:45 GMT + - Wed, 24 Apr 2024 11:42:41 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["write"],"grantedTo":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["write"],"grantedTo":{"user":{"email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce","displayName":"Marcello Rocha"}}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:45 GMT + recorded_at: Wed, 24 Apr 2024 11:42:42 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PK4GCRMVRBNPZHI4CK4BINI34H3/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PP5VARTLP27VVEYPJHMMEBVCGGI/permissions body: encoding: US-ASCII string: '' @@ -588,7 +634,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -598,22 +644,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - cd7ca964-bb6e-4b7e-a347-936cec4dac48 + - da1230e2-5163-4e03-93f6-bd127301d30e Client-Request-Id: - - cd7ca964-bb6e-4b7e-a347-936cec4dac48 + - da1230e2-5163-4e03-93f6-bd127301d30e X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF00000316"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"005","RoleInstance":"FR3PEPF000002DC"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -621,41 +663,41 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Tue, 30 Jan 2024 11:55:45 GMT + - Wed, 24 Apr 2024 11:42:42 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PK4GCRMVRBNPZHI4CK4BINI34H3'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PP5VARTLP27VVEYPJHMMEBVCGGI'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello - Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"},"siteUser":{"displayName":"Marcello + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello + Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello Rocha","email":"mrocha.op@outlook.com","id":"24","loginName":"i:0#.f|membership|mrocha.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Marcello - Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Tue, 30 Jan 2024 11:55:46 GMT + recorded_at: Wed, 24 Apr 2024 11:42:42 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PK4GCRMVRBNPZHI4CK4BINI34H3 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PP5VARTLP27VVEYPJHMMEBVCGGI body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.1 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -668,15 +710,15 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 5c6e2fe3-3961-49a4-b538-b9cd72bc9411 + - 127c4c17-2658-40b6-8f0f-50ff9460c6a9 Client-Request-Id: - - 5c6e2fe3-3961-49a4-b538-b9cd72bc9411 + - 127c4c17-2658-40b6-8f0f-50ff9460c6a9 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"005","RoleInstance":"FR3PEPF0000045E"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"005","RoleInstance":"FR3PEPF00000583"}}' Date: - - Tue, 30 Jan 2024 11:55:46 GMT + - Wed, 24 Apr 2024 11:42:42 GMT body: encoding: UTF-8 string: '' - recorded_at: Tue, 30 Jan 2024 11:55:46 GMT + recorded_at: Wed, 24 Apr 2024 11:42:43 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_admin_access.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_admin_access.yml index 288fc41a0f1d..6b0be6b1920b 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_admin_access.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_admin_access.yml @@ -37,24 +37,26 @@ http_interactions: P3p: - CP="DSP CUR OTPi IND OTRi ONL FIN" X-Ms-Request-Id: - - ad5de8a4-19b2-4e1d-8cbc-14a2c8c41100 + - ba4342cc-7546-4183-9724-fc7f08dfaa00 X-Ms-Ests-Server: - - 2.1.17282.6 - FRC ProdSlices + - 2.1.17846.6 - SEC ProdSlices + X-Ms-Srs: + - 1.P X-Xss-Protection: - '0' Set-Cookie: - - fpc=Auf50B3mRq1Gk7qGAJhnQlikbDoXAQAAANP3Xt0OAAAA; expires=Fri, 15-Mar-2024 - 18:05:07 GMT; path=/; secure; HttpOnly; SameSite=None + - fpc=AqxjBAMv38xPoN7q4jxduJWkbDoXAQAAAKzvut0OAAAA; expires=Fri, 24-May-2024 + 12:18:52 GMT; path=/; secure; HttpOnly; SameSite=None - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly Date: - - Wed, 14 Feb 2024 18:05:07 GMT + - Wed, 24 Apr 2024 12:18:52 GMT Content-Length: - '1708' body: encoding: UTF-8 string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Wed, 14 Feb 2024 18:05:07 GMT + recorded_at: Wed, 24 Apr 2024 12:18:52 GMT - request: method: get uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children @@ -69,7 +71,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -79,118 +81,111 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 9df6c520-6ed5-48e2-9eb3-8bef5f85ca01 + - a6fd7484-b220-4f5b-a010-a0cbc16c0afa Client-Request-Id: - - 9df6c520-6ed5-48e2-9eb3-8bef5f85ca01 + - a6fd7484-b220-4f5b-a010-a0cbc16c0afa X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000310"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000054B"}}' Date: - - Wed, 14 Feb 2024 18:05:07 GMT + - Wed, 24 Apr 2024 12:18:52 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children","value":[{"createdDateTime":"2024-01-29T17:30:48Z","eTag":"\"{AA674C60-1512-4607-AC2F-7838F996B4A9},1\"","id":"01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ","lastModifiedDateTime":"2024-01-29T17:30:48Z","name":"Project - B","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20B","cTag":"\"c:{AA674C60-1512-4607-AC2F-7838F996B4A9},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:48Z","lastModifiedDateTime":"2024-01-29T17:30:48Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2024-01-29T17:30:52Z","eTag":"\"{98914E03-2109-4235-8A69-3092969D062D},1\"","id":"01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN","lastModifiedDateTime":"2024-01-29T17:30:52Z","name":"Project - C","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20C","cTag":"\"c:{98914E03-2109-4235-8A69-3092969D062D},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:52Z","lastModifiedDateTime":"2024-01-29T17:30:52Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2023-12-15T14:58:59Z","eTag":"\"{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},33\"","id":"01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM","lastModifiedDateTime":"2023-12-29T10:44:06Z","name":"Renamed - Project A (1234)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Renamed%20Project%20A%20(1234)","cTag":"\"c:{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},0\"","decorator":{"iconColor":"darkGreen"},"size":33882,"createdBy":{"user":{"email":"w.lindenthal@finnlabs.com","id":"99fb2d61-359b-4fae-91c9-1ac6c8f02b5e","displayName":"Wieland - Lindenthal"}},"lastModifiedBy":{"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2023-12-15T14:58:59Z","lastModifiedDateTime":"2023-12-29T10:44:06Z"},"folder":{"childCount":2},"shared":{"scope":"users"}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:08 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)","value":[{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-18T12:05:15Z","eTag":"\"{B94392DB-A502-4109-9EC5-17E7ABFFF461},4\"","id":"01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-18T12:05:15Z","name":"[dev] + Large (4)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5Bdev%5D%20Large%20(4)","cTag":"\"c:{B94392DB-A502-4109-9EC5-17E7ABFFF461},0\"","fileSystemInfo":{"createdDateTime":"2024-04-18T12:05:15Z","lastModifiedDateTime":"2024-04-18T12:05:15Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0},{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-03-18T18:12:55Z","eTag":"\"{D03A86A5-D563-45AC-B5FA-2A333F353BEA},275\"","id":"01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-03-18T18:12:55Z","name":"Demo + project (1)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Demo%20project%20(1)","cTag":"\"c:{D03A86A5-D563-45AC-B5FA-2A333F353BEA},0\"","fileSystemInfo":{"createdDateTime":"2024-03-18T18:12:55Z","lastModifiedDateTime":"2024-03-18T18:12:55Z"},"folder":{"childCount":1},"shared":{"scope":"users"},"size":988098560}]}' + recorded_at: Wed, 24 Apr 2024 12:18:53 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token body: - encoding: UTF-8 - string: '{"name":"[Sample] Project Name _ Ehuu (332)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded Content-Length: - - '100' + - '201' response: status: - code: 201 - message: Created + code: 200 + message: OK headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked + Pragma: + - no-cache Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Etag: - - '"{1DE61FEE-EA86-43E4-9638-1154D2608626},1"' - Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PPOD7TB3BXK4RBZMOARKTJGBBRG') - Vary: - - Accept-Encoding + - application/json; charset=utf-8 + Expires: + - "-1" Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - 78269979-a54f-4bb6-81ea-ed4d5dae4bf3 - Client-Request-Id: - - 78269979-a54f-4bb6-81ea-ed4d5dae4bf3 - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000313"}}' - Odata-Version: - - '4.0' + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - 8971875e-35ec-4f84-939b-f426315bbb00 + X-Ms-Ests-Server: + - 2.1.17846.6 - SEC ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=AqlrjKErzkBIl1NUM5Ck8CukbDoXAQAAAK3vut0OAAAA; expires=Fri, 24-May-2024 + 12:18:53 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly Date: - - Wed, 14 Feb 2024 18:05:08 GMT + - Wed, 24 Apr 2024 12:18:52 GMT + Content-Length: + - '1735' body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{1DE61FEE-EA86-43E4-9638-1154D2608626},1\"","createdDateTime":"2024-02-14T18:05:08Z","eTag":"\"{1DE61FEE-EA86-43E4-9638-1154D2608626},1\"","id":"01AZJL5PPOD7TB3BXK4RBZMOARKTJGBBRG","lastModifiedDateTime":"2024-02-14T18:05:08Z","name":"[Sample] - Project Name _ Ehuu (332)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(332)","cTag":"\"c:{1DE61FEE-EA86-43E4-9638-1154D2608626},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject - Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:08Z","lastModifiedDateTime":"2024-02-14T18:05:08Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:05:08 GMT + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Wed, 24 Apr 2024 12:18:53 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"_=o=_ _ _Jedi_ Project Folder ___ (333)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"[Sample] Project Name _ Ehuu (681)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: - - '105' + - '100' + Authorization: + - Bearer response: status: code: 201 @@ -198,57 +193,55 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{EF7C7599-5938-4AE7-9853-37751EDCCAED},1"' + - '"{97C2029C-9015-4227-A303-0E8EA33393C2},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PMZOV6O6OCZ45FJQUZXOUPNZSXN') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PM4ALBJOFMQE5BKGAYOR2RTHE6C') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 03dff040-41c6-4f66-bde1-55b66d44b267 + - f3e51348-3a63-432d-a0a8-669d97adeb4a Client-Request-Id: - - 03dff040-41c6-4f66-bde1-55b66d44b267 + - f3e51348-3a63-432d-a0a8-669d97adeb4a X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000165"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016A"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:08 GMT + - Wed, 24 Apr 2024 12:18:52 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{EF7C7599-5938-4AE7-9853-37751EDCCAED},1\"","createdDateTime":"2024-02-14T18:05:09Z","eTag":"\"{EF7C7599-5938-4AE7-9853-37751EDCCAED},1\"","id":"01AZJL5PMZOV6O6OCZ45FJQUZXOUPNZSXN","lastModifiedDateTime":"2024-02-14T18:05:09Z","name":"_=o=_ - _ _Jedi_ Project Folder ___ (333)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(333)","cTag":"\"c:{EF7C7599-5938-4AE7-9853-37751EDCCAED},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{97C2029C-9015-4227-A303-0E8EA33393C2},1\"","createdDateTime":"2024-04-24T12:18:54Z","eTag":"\"{97C2029C-9015-4227-A303-0E8EA33393C2},1\"","id":"01AZJL5PM4ALBJOFMQE5BKGAYOR2RTHE6C","lastModifiedDateTime":"2024-04-24T12:18:54Z","name":"[Sample] + Project Name _ Ehuu (681)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(681)","cTag":"\"c:{97C2029C-9015-4227-A303-0E8EA33393C2},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:09Z","lastModifiedDateTime":"2024-02-14T18:05:09Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:05:08 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:54Z","lastModifiedDateTime":"2024-04-24T12:18:54Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:18:53 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"PUBLIC PROJECT (335)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"_=o=_ _ _Jedi_ Project Folder ___ (682)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json + Authorization: + - Bearer User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: - - '86' + - '105' response: status: code: 201 @@ -256,157 +249,95 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{3F65FF26-CC5A-428D-88B3-EB3AE98E5528},1"' + - '"{3089F4A0-7AC8-425B-9C36-071CDC096DBC},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PJG75ST6WWMRVBIRM7LHLUY4VJI') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PNA6SETBSD2LNBJYNQHDTOAS3N4') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - a487ebac-6a18-4682-81db-8693bd0c7b90 + - 20e27641-10aa-4f4e-becf-f9b5c1cc1cd8 Client-Request-Id: - - a487ebac-6a18-4682-81db-8693bd0c7b90 + - 20e27641-10aa-4f4e-becf-f9b5c1cc1cd8 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016D"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055C"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:08 GMT + - Wed, 24 Apr 2024 12:18:53 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{3F65FF26-CC5A-428D-88B3-EB3AE98E5528},1\"","createdDateTime":"2024-02-14T18:05:09Z","eTag":"\"{3F65FF26-CC5A-428D-88B3-EB3AE98E5528},1\"","id":"01AZJL5PJG75ST6WWMRVBIRM7LHLUY4VJI","lastModifiedDateTime":"2024-02-14T18:05:09Z","name":"PUBLIC - PROJECT (335)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(335)","cTag":"\"c:{3F65FF26-CC5A-428D-88B3-EB3AE98E5528},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{3089F4A0-7AC8-425B-9C36-071CDC096DBC},1\"","createdDateTime":"2024-04-24T12:18:54Z","eTag":"\"{3089F4A0-7AC8-425B-9C36-071CDC096DBC},1\"","id":"01AZJL5PNA6SETBSD2LNBJYNQHDTOAS3N4","lastModifiedDateTime":"2024-04-24T12:18:54Z","name":"_=o=_ + _ _Jedi_ Project Folder ___ (682)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(682)","cTag":"\"c:{3089F4A0-7AC8-425B-9C36-071CDC096DBC},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:09Z","lastModifiedDateTime":"2024-02-14T18:05:09Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:05:09 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:54Z","lastModifiedDateTime":"2024-04-24T12:18:54Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:18:54 GMT - request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ + method: post + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: - encoding: US-ASCII - string: '' + encoding: UTF-8 + string: '{"name":"PUBLIC PROJECT (684)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json - User-Agent: - - httpx.rb/1.2.2 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 200 - message: OK - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Vary: - - Accept-Encoding - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - 722c0255-bff9-4608-b62e-85f55ec4c3c1 - Client-Request-Id: - - 722c0255-bff9-4608-b62e-85f55ec4c3c1 - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' - Odata-Version: - - '4.0' - Date: - - Wed, 14 Feb 2024 18:05:09 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-01-29T17:30:48Z","eTag":"\"{AA674C60-1512-4607-AC2F-7838F996B4A9},1\"","id":"01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ","lastModifiedDateTime":"2024-01-29T17:30:48Z","name":"Project - B","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20B","cTag":"\"c:{AA674C60-1512-4607-AC2F-7838F996B4A9},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:48Z","lastModifiedDateTime":"2024-01-29T17:30:48Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:09 GMT -- request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ/permissions - body: - encoding: US-ASCII - string: '' - headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate + Content-Length: + - '86' response: status: - code: 200 - message: OK + code: 201 + message: Created headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip + Etag: + - '"{F32641B3-68CE-4D25-892B-22ECEA4EA6BE},1"' + Location: + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PNTIETPHTTIEVGYSKZC5TVE5JV6') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 7f230022-efcd-4e8f-b5a8-87462282f8eb + - 4d084a8d-c708-45f0-80a7-1012597c40b6 Client-Request-Id: - - 7f230022-efcd-4e8f-b5a8-87462282f8eb + - 4d084a8d-c708-45f0-80a7-1012597c40b6 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000351"}}' - Link: - - ;rel="deprecation";type="text/html", - ;rel="deprecation";type="text/html" - Deprecation: - - Fri, 03 Sep 2021 23:59:59 GMT - Sunset: - - Sun, 01 Oct 2023 23:59:59 GMT + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000351"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:09 GMT + - Wed, 24 Apr 2024 12:18:54 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject - file storage tests Owners","id":"3","loginName":"OpenProject file storage - tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:09 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{F32641B3-68CE-4D25-892B-22ECEA4EA6BE},1\"","createdDateTime":"2024-04-24T12:18:55Z","eTag":"\"{F32641B3-68CE-4D25-892B-22ECEA4EA6BE},1\"","id":"01AZJL5PNTIETPHTTIEVGYSKZC5TVE5JV6","lastModifiedDateTime":"2024-04-24T12:18:55Z","name":"PUBLIC + PROJECT (684)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(684)","cTag":"\"c:{F32641B3-68CE-4D25-892B-22ECEA4EA6BE},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint + App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:55Z","lastModifiedDateTime":"2024-04-24T12:18:55Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:18:54 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB body: encoding: US-ASCII string: '' @@ -418,7 +349,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -428,37 +359,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - d795a023-97e6-4d49-b3e3-0cce146cd5e0 + - 2072363c-7d98-4fcc-93f0-f7c0ccaeda7f Client-Request-Id: - - d795a023-97e6-4d49-b3e3-0cce146cd5e0 + - 2072363c-7d98-4fcc-93f0-f7c0ccaeda7f X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000313"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055C"}}' Date: - - Wed, 14 Feb 2024 18:05:09 GMT + - Wed, 24 Apr 2024 12:18:54 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-01-29T17:30:52Z","eTag":"\"{98914E03-2109-4235-8A69-3092969D062D},1\"","id":"01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN","lastModifiedDateTime":"2024-01-29T17:30:52Z","name":"Project - C","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20C","cTag":"\"c:{98914E03-2109-4235-8A69-3092969D062D},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:52Z","lastModifiedDateTime":"2024-01-29T17:30:52Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:09 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-18T12:05:15Z","eTag":"\"{B94392DB-A502-4109-9EC5-17E7ABFFF461},4\"","id":"01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-18T12:05:15Z","name":"[dev] + Large (4)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5Bdev%5D%20Large%20(4)","cTag":"\"c:{B94392DB-A502-4109-9EC5-17E7ABFFF461},0\"","fileSystemInfo":{"createdDateTime":"2024-04-18T12:05:15Z","lastModifiedDateTime":"2024-04-18T12:05:15Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:18:55 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB/permissions body: encoding: US-ASCII string: '' @@ -470,7 +397,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -480,22 +407,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 5bbc9d94-cb8f-4ac9-bcc7-fc9cbcfc03fc + - 883361d9-31c0-464f-a045-fdf9aa5aca47 Client-Request-Id: - - 5bbc9d94-cb8f-4ac9-bcc7-fc9cbcfc03fc + - 883361d9-31c0-464f-a045-fdf9aa5aca47 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016E"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000351"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -503,26 +426,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:09 GMT + - Wed, 24 Apr 2024 12:18:55 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:09 GMT + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' + recorded_at: Wed, 24 Apr 2024 12:18:55 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K body: encoding: US-ASCII string: '' @@ -534,7 +458,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -544,36 +468,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 59b008da-958e-43fe-b874-a536562b79cb + - 5012c7d7-fb84-4bdf-9ae1-c28e3b841454 Client-Request-Id: - - 59b008da-958e-43fe-b874-a536562b79cb + - 5012c7d7-fb84-4bdf-9ae1-c28e3b841454 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000311"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000167"}}' Date: - - Wed, 14 Feb 2024 18:05:10 GMT + - Wed, 24 Apr 2024 12:18:55 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2023-12-15T14:58:59Z","eTag":"\"{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},33\"","id":"01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM","lastModifiedDateTime":"2023-12-29T10:44:06Z","name":"Renamed - Project A (1234)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Renamed%20Project%20A%20(1234)","cTag":"\"c:{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},0\"","decorator":{"iconColor":"darkGreen"},"size":33882,"createdBy":{"user":{"email":"w.lindenthal@finnlabs.com","id":"99fb2d61-359b-4fae-91c9-1ac6c8f02b5e","displayName":"Wieland - Lindenthal"}},"lastModifiedBy":{"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2023-12-15T14:58:59Z","lastModifiedDateTime":"2023-12-29T10:44:06Z"},"folder":{"childCount":2},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:10 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-03-18T18:12:55Z","eTag":"\"{D03A86A5-D563-45AC-B5FA-2A333F353BEA},275\"","id":"01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-03-18T18:12:55Z","name":"Demo + project (1)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Demo%20project%20(1)","cTag":"\"c:{D03A86A5-D563-45AC-B5FA-2A333F353BEA},0\"","fileSystemInfo":{"createdDateTime":"2024-03-18T18:12:55Z","lastModifiedDateTime":"2024-03-18T18:12:55Z"},"folder":{"childCount":1},"shared":{"scope":"users"},"size":988098560}' + recorded_at: Wed, 24 Apr 2024 12:18:55 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K/permissions body: encoding: US-ASCII string: '' @@ -585,7 +506,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -595,22 +516,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - d3d43c92-9d58-44d0-a230-17972a52a00f + - bdd184ea-4129-4a21-9085-b7aff85d3c55 Client-Request-Id: - - d3d43c92-9d58-44d0-a230-17972a52a00f + - bdd184ea-4129-4a21-9085-b7aff85d3c55 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057F"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -618,26 +535,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:10 GMT + - Wed, 24 Apr 2024 12:18:56 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:10 GMT + recorded_at: Wed, 24 Apr 2024 12:18:56 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPOD7TB3BXK4RBZMOARKTJGBBRG + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PM4ALBJOFMQE5BKGAYOR2RTHE6C body: encoding: US-ASCII string: '' @@ -649,7 +567,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -659,37 +577,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 1c3bc14b-d1cd-4de4-b06f-2a988922a672 + - 1f3b5b8e-b271-4b8b-b4c6-0cc3686a568b Client-Request-Id: - - 1c3bc14b-d1cd-4de4-b06f-2a988922a672 + - 1f3b5b8e-b271-4b8b-b4c6-0cc3686a568b X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000163"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055E"}}' Date: - - Wed, 14 Feb 2024 18:05:09 GMT + - Wed, 24 Apr 2024 12:18:56 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:05:08Z","eTag":"\"{1DE61FEE-EA86-43E4-9638-1154D2608626},1\"","id":"01AZJL5PPOD7TB3BXK4RBZMOARKTJGBBRG","lastModifiedDateTime":"2024-02-14T18:05:08Z","name":"[Sample] - Project Name _ Ehuu (332)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(332)","cTag":"\"c:{1DE61FEE-EA86-43E4-9638-1154D2608626},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:08Z","lastModifiedDateTime":"2024-02-14T18:05:08Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:10 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:54Z","eTag":"\"{97C2029C-9015-4227-A303-0E8EA33393C2},2\"","id":"01AZJL5PM4ALBJOFMQE5BKGAYOR2RTHE6C","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:54Z","name":"[Sample] + Project Name _ Ehuu (681)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(681)","cTag":"\"c:{97C2029C-9015-4227-A303-0E8EA33393C2},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:54Z","lastModifiedDateTime":"2024-04-24T12:18:54Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:18:56 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPOD7TB3BXK4RBZMOARKTJGBBRG/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PM4ALBJOFMQE5BKGAYOR2RTHE6C/permissions body: encoding: US-ASCII string: '' @@ -701,7 +615,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -711,22 +625,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 5e4c662f-e158-4c90-b771-cc389011b5b5 + - e8e9a29f-ede4-4f0a-b966-f0095dddc329 Client-Request-Id: - - 5e4c662f-e158-4c90-b771-cc389011b5b5 + - e8e9a29f-ede4-4f0a-b966-f0095dddc329 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000165"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000558"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -734,26 +644,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:10 GMT + - Wed, 24 Apr 2024 12:18:56 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPOD7TB3BXK4RBZMOARKTJGBBRG'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PM4ALBJOFMQE5BKGAYOR2RTHE6C'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:10 GMT + recorded_at: Wed, 24 Apr 2024 12:18:57 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPOD7TB3BXK4RBZMOARKTJGBBRG/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PM4ALBJOFMQE5BKGAYOR2RTHE6C/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"},{"objectId":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -765,7 +676,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -777,8 +688,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -790,11 +699,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 284e6b02-09f0-4727-91b6-d55b1c6c6168 + - 9ad226cb-b872-43b5-ad05-d03bcb5468d5 Client-Request-Id: - - 284e6b02-09f0-4727-91b6-d55b1c6c6168 + - 9ad226cb-b872-43b5-ad05-d03bcb5468d5 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000160"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000530"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -805,17 +714,17 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:12 GMT + - Wed, 24 Apr 2024 12:18:58 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test - Manager 01"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test - user 02"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + Manager 01"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test + user 02"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:12 GMT + recorded_at: Wed, 24 Apr 2024 12:18:58 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PMZOV6O6OCZ45FJQUZXOUPNZSXN + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNA6SETBSD2LNBJYNQHDTOAS3N4 body: encoding: US-ASCII string: '' @@ -827,7 +736,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -837,37 +746,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 65913a00-6697-4774-bd4b-dba209e58955 + - 22364e65-b8a6-496d-8d8a-bebb654b3991 Client-Request-Id: - - 65913a00-6697-4774-bd4b-dba209e58955 + - 22364e65-b8a6-496d-8d8a-bebb654b3991 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000310"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000351"}}' Date: - - Wed, 14 Feb 2024 18:05:12 GMT + - Wed, 24 Apr 2024 12:18:58 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:05:09Z","eTag":"\"{EF7C7599-5938-4AE7-9853-37751EDCCAED},1\"","id":"01AZJL5PMZOV6O6OCZ45FJQUZXOUPNZSXN","lastModifiedDateTime":"2024-02-14T18:05:09Z","name":"_=o=_ - _ _Jedi_ Project Folder ___ (333)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(333)","cTag":"\"c:{EF7C7599-5938-4AE7-9853-37751EDCCAED},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:09Z","lastModifiedDateTime":"2024-02-14T18:05:09Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:12 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:54Z","eTag":"\"{3089F4A0-7AC8-425B-9C36-071CDC096DBC},2\"","id":"01AZJL5PNA6SETBSD2LNBJYNQHDTOAS3N4","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:54Z","name":"_=o=_ + _ _Jedi_ Project Folder ___ (682)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(682)","cTag":"\"c:{3089F4A0-7AC8-425B-9C36-071CDC096DBC},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:54Z","lastModifiedDateTime":"2024-04-24T12:18:54Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:18:59 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PMZOV6O6OCZ45FJQUZXOUPNZSXN/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNA6SETBSD2LNBJYNQHDTOAS3N4/permissions body: encoding: US-ASCII string: '' @@ -879,7 +784,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -889,22 +794,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - daa32eb2-9a72-4361-8828-b638da3a13fa + - 4730b389-9623-4f4c-aad2-66c4572666ca Client-Request-Id: - - daa32eb2-9a72-4361-8828-b638da3a13fa + - 4730b389-9623-4f4c-aad2-66c4572666ca X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016E"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000163"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -912,26 +813,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:12 GMT + - Wed, 24 Apr 2024 12:18:58 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PMZOV6O6OCZ45FJQUZXOUPNZSXN'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNA6SETBSD2LNBJYNQHDTOAS3N4'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:13 GMT + recorded_at: Wed, 24 Apr 2024 12:18:59 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PMZOV6O6OCZ45FJQUZXOUPNZSXN/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNA6SETBSD2LNBJYNQHDTOAS3N4/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -943,7 +845,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -955,8 +857,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -968,11 +868,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 528d1d57-9189-45fd-b4ae-d434235e4746 + - b5da2339-acb3-4aa3-bb6b-54a51bf7fd12 Client-Request-Id: - - 528d1d57-9189-45fd-b4ae-d434235e4746 + - b5da2339-acb3-4aa3-bb6b-54a51bf7fd12 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000169"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057D"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -983,16 +883,16 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:13 GMT + - Wed, 24 Apr 2024 12:19:00 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test - Manager 01"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + Manager 01"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:14 GMT + recorded_at: Wed, 24 Apr 2024 12:19:01 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJG75ST6WWMRVBIRM7LHLUY4VJI + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNTIETPHTTIEVGYSKZC5TVE5JV6 body: encoding: US-ASCII string: '' @@ -1004,7 +904,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1014,37 +914,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 7672ada1-f191-4a09-b628-47826f47e5d6 + - '009b7c4d-7fe6-400d-ab64-019e178869d3' Client-Request-Id: - - 7672ada1-f191-4a09-b628-47826f47e5d6 + - '009b7c4d-7fe6-400d-ab64-019e178869d3' X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000165"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000530"}}' Date: - - Wed, 14 Feb 2024 18:05:14 GMT + - Wed, 24 Apr 2024 12:19:01 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:05:09Z","eTag":"\"{3F65FF26-CC5A-428D-88B3-EB3AE98E5528},1\"","id":"01AZJL5PJG75ST6WWMRVBIRM7LHLUY4VJI","lastModifiedDateTime":"2024-02-14T18:05:09Z","name":"PUBLIC - PROJECT (335)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(335)","cTag":"\"c:{3F65FF26-CC5A-428D-88B3-EB3AE98E5528},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:09Z","lastModifiedDateTime":"2024-02-14T18:05:09Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:14 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:55Z","eTag":"\"{F32641B3-68CE-4D25-892B-22ECEA4EA6BE},2\"","id":"01AZJL5PNTIETPHTTIEVGYSKZC5TVE5JV6","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:55Z","name":"PUBLIC + PROJECT (684)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(684)","cTag":"\"c:{F32641B3-68CE-4D25-892B-22ECEA4EA6BE},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:55Z","lastModifiedDateTime":"2024-04-24T12:18:55Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:19:01 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJG75ST6WWMRVBIRM7LHLUY4VJI/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNTIETPHTTIEVGYSKZC5TVE5JV6/permissions body: encoding: US-ASCII string: '' @@ -1056,7 +952,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1066,22 +962,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 72816011-cebc-4a5d-b0e2-ef4d18f9fda0 + - b638f664-6ccc-4745-9be7-400433a83fe2 Client-Request-Id: - - 72816011-cebc-4a5d-b0e2-ef4d18f9fda0 + - b638f664-6ccc-4745-9be7-400433a83fe2 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000160"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000167"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1089,26 +981,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:14 GMT + - Wed, 24 Apr 2024 12:19:01 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PJG75ST6WWMRVBIRM7LHLUY4VJI'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNTIETPHTTIEVGYSKZC5TVE5JV6'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:15 GMT + recorded_at: Wed, 24 Apr 2024 12:19:01 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJG75ST6WWMRVBIRM7LHLUY4VJI/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNTIETPHTTIEVGYSKZC5TVE5JV6/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["read"],"recipients":[{"objectId":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -1120,7 +1013,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -1132,8 +1025,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -1145,11 +1036,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 4f5741fb-cf15-4ee1-9239-39ef37e72a2f + - 9a680bc7-fec2-4114-99d7-b49afd45a2f7 Client-Request-Id: - - 4f5741fb-cf15-4ee1-9239-39ef37e72a2f + - 9a680bc7-fec2-4114-99d7-b49afd45a2f7 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016D"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055E"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1160,16 +1051,16 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:16 GMT + - Wed, 24 Apr 2024 12:19:03 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test - user 02"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test + user 02"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:16 GMT + recorded_at: Wed, 24 Apr 2024 12:19:03 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJG75ST6WWMRVBIRM7LHLUY4VJI/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNTIETPHTTIEVGYSKZC5TVE5JV6/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"}]}' @@ -1181,7 +1072,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -1193,8 +1084,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -1206,11 +1095,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 7a13a0e6-f7f1-4f1b-ad83-bab060711f56 + - 2712e5ba-9d11-48c0-a927-4cef6ab8db8a Client-Request-Id: - - 7a13a0e6-f7f1-4f1b-ad83-bab060711f56 + - 2712e5ba-9d11-48c0-a927-4cef6ab8db8a X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000034F"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000530"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1221,15 +1110,15 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:16 GMT + - Wed, 24 Apr 2024 12:19:03 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test Manager 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:17 GMT + recorded_at: Wed, 24 Apr 2024 12:19:04 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPOD7TB3BXK4RBZMOARKTJGBBRG + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PM4ALBJOFMQE5BKGAYOR2RTHE6C body: encoding: US-ASCII string: '' @@ -1241,7 +1130,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1251,37 +1140,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 43f10409-f116-426f-b5aa-6d6d56650369 + - 65b48560-641c-40b4-9126-55ac0c8b8fdc Client-Request-Id: - - 43f10409-f116-426f-b5aa-6d6d56650369 + - 65b48560-641c-40b4-9126-55ac0c8b8fdc X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000165"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000351"}}' Date: - - Wed, 14 Feb 2024 18:05:17 GMT + - Wed, 24 Apr 2024 12:19:04 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:05:08Z","eTag":"\"{1DE61FEE-EA86-43E4-9638-1154D2608626},2\"","id":"01AZJL5PPOD7TB3BXK4RBZMOARKTJGBBRG","lastModifiedDateTime":"2024-02-14T18:05:08Z","name":"[Sample] - Project Name _ Ehuu (332)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(332)","cTag":"\"c:{1DE61FEE-EA86-43E4-9638-1154D2608626},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:08Z","lastModifiedDateTime":"2024-02-14T18:05:08Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:17 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:54Z","eTag":"\"{97C2029C-9015-4227-A303-0E8EA33393C2},3\"","id":"01AZJL5PM4ALBJOFMQE5BKGAYOR2RTHE6C","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:54Z","name":"[Sample] + Project Name _ Ehuu (681)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(681)","cTag":"\"c:{97C2029C-9015-4227-A303-0E8EA33393C2},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:54Z","lastModifiedDateTime":"2024-04-24T12:18:54Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:19:04 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPOD7TB3BXK4RBZMOARKTJGBBRG/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PM4ALBJOFMQE5BKGAYOR2RTHE6C/permissions body: encoding: US-ASCII string: '' @@ -1293,7 +1178,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1303,22 +1188,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 1699c0e3-8f75-4c75-88e4-0acd4835398e + - 25537aec-bd9e-4f4c-85df-727ae7b3ad8f Client-Request-Id: - - 1699c0e3-8f75-4c75-88e4-0acd4835398e + - 25537aec-bd9e-4f4c-85df-727ae7b3ad8f X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000035F"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016E"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1326,35 +1207,39 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:16 GMT + - Wed, 24 Apr 2024 12:19:04 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPOD7TB3BXK4RBZMOARKTJGBBRG'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PM4ALBJOFMQE5BKGAYOR2RTHE6C'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test - user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"},"siteUser":{"displayName":"Test + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test user 01","email":"testuser01.op@outlook.com","id":"42","loginName":"i:0#.f|membership|testuser01.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test - user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test - user 02","email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},"siteUser":{"displayName":"Test + user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + user 02","email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test user 02","email":"testuser02.op@outlook.com","id":"43","loginName":"i:0#.f|membership|testuser02.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test - user 02","email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test - Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"},"siteUser":{"displayName":"Test + user 02","email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test Manager 01","email":"testmanager01.op@outlook.com","id":"45","loginName":"i:0#.f|membership|testmanager01.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test - Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:17 GMT + recorded_at: Wed, 24 Apr 2024 12:19:04 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PMZOV6O6OCZ45FJQUZXOUPNZSXN + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNA6SETBSD2LNBJYNQHDTOAS3N4 body: encoding: US-ASCII string: '' @@ -1366,7 +1251,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1376,37 +1261,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - b9080d1d-4ecc-4d3a-b30c-1b3ef632f4ea + - bb85ae6e-e931-49b8-a08c-7438859dae96 Client-Request-Id: - - b9080d1d-4ecc-4d3a-b30c-1b3ef632f4ea + - bb85ae6e-e931-49b8-a08c-7438859dae96 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000164"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000530"}}' Date: - - Wed, 14 Feb 2024 18:05:17 GMT + - Wed, 24 Apr 2024 12:19:04 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:05:09Z","eTag":"\"{EF7C7599-5938-4AE7-9853-37751EDCCAED},2\"","id":"01AZJL5PMZOV6O6OCZ45FJQUZXOUPNZSXN","lastModifiedDateTime":"2024-02-14T18:05:09Z","name":"_=o=_ - _ _Jedi_ Project Folder ___ (333)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(333)","cTag":"\"c:{EF7C7599-5938-4AE7-9853-37751EDCCAED},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:09Z","lastModifiedDateTime":"2024-02-14T18:05:09Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:18 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:54Z","eTag":"\"{3089F4A0-7AC8-425B-9C36-071CDC096DBC},3\"","id":"01AZJL5PNA6SETBSD2LNBJYNQHDTOAS3N4","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:54Z","name":"_=o=_ + _ _Jedi_ Project Folder ___ (682)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(682)","cTag":"\"c:{3089F4A0-7AC8-425B-9C36-071CDC096DBC},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:54Z","lastModifiedDateTime":"2024-04-24T12:18:54Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:19:05 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PMZOV6O6OCZ45FJQUZXOUPNZSXN/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNA6SETBSD2LNBJYNQHDTOAS3N4/permissions body: encoding: US-ASCII string: '' @@ -1418,7 +1299,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1428,22 +1309,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 0175e444-f295-4306-943d-c58f355109e3 + - 9764b78a-62b4-4011-b282-4d35549d30fc Client-Request-Id: - - 0175e444-f295-4306-943d-c58f355109e3 + - 9764b78a-62b4-4011-b282-4d35549d30fc X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000167"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1451,32 +1328,35 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:18 GMT + - Wed, 24 Apr 2024 12:19:05 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PMZOV6O6OCZ45FJQUZXOUPNZSXN'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNA6SETBSD2LNBJYNQHDTOAS3N4'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test - user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"},"siteUser":{"displayName":"Test + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test user 01","email":"testuser01.op@outlook.com","id":"42","loginName":"i:0#.f|membership|testuser01.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test - user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test - Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"},"siteUser":{"displayName":"Test + user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test Manager 01","email":"testmanager01.op@outlook.com","id":"45","loginName":"i:0#.f|membership|testmanager01.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test - Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:18 GMT + recorded_at: Wed, 24 Apr 2024 12:19:05 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJG75ST6WWMRVBIRM7LHLUY4VJI + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNTIETPHTTIEVGYSKZC5TVE5JV6 body: encoding: US-ASCII string: '' @@ -1488,7 +1368,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1498,37 +1378,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 7d70433c-1d1d-4eaa-9441-64de692e4022 + - 0ac2fe70-9ba6-48b0-aa9a-a3f1fedec289 Client-Request-Id: - - 7d70433c-1d1d-4eaa-9441-64de692e4022 + - 0ac2fe70-9ba6-48b0-aa9a-a3f1fedec289 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000169"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055A"}}' Date: - - Wed, 14 Feb 2024 18:05:17 GMT + - Wed, 24 Apr 2024 12:19:05 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:05:09Z","eTag":"\"{3F65FF26-CC5A-428D-88B3-EB3AE98E5528},3\"","id":"01AZJL5PJG75ST6WWMRVBIRM7LHLUY4VJI","lastModifiedDateTime":"2024-02-14T18:05:09Z","name":"PUBLIC - PROJECT (335)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(335)","cTag":"\"c:{3F65FF26-CC5A-428D-88B3-EB3AE98E5528},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:09Z","lastModifiedDateTime":"2024-02-14T18:05:09Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:18 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:55Z","eTag":"\"{F32641B3-68CE-4D25-892B-22ECEA4EA6BE},4\"","id":"01AZJL5PNTIETPHTTIEVGYSKZC5TVE5JV6","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:55Z","name":"PUBLIC + PROJECT (684)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(684)","cTag":"\"c:{F32641B3-68CE-4D25-892B-22ECEA4EA6BE},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:55Z","lastModifiedDateTime":"2024-04-24T12:18:55Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:19:05 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJG75ST6WWMRVBIRM7LHLUY4VJI/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNTIETPHTTIEVGYSKZC5TVE5JV6/permissions body: encoding: US-ASCII string: '' @@ -1540,7 +1416,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1550,22 +1426,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - '0564039f-a9e5-4a23-9776-1828f2d6ccc5' + - 47563e77-0964-4351-b34b-1b7ade474bfc Client-Request-Id: - - '0564039f-a9e5-4a23-9776-1828f2d6ccc5' + - 47563e77-0964-4351-b34b-1b7ade474bfc X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000035F"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000364"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1573,47 +1445,49 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:18 GMT + - Wed, 24 Apr 2024 12:19:06 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PJG75ST6WWMRVBIRM7LHLUY4VJI'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNTIETPHTTIEVGYSKZC5TVE5JV6'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test - user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"},"siteUser":{"displayName":"Test + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test user 01","email":"testuser01.op@outlook.com","id":"42","loginName":"i:0#.f|membership|testuser01.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test - user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test - user 02","email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},"siteUser":{"displayName":"Test + user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + user 02","email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test user 02","email":"testuser02.op@outlook.com","id":"43","loginName":"i:0#.f|membership|testuser02.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test - user 02","email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test - Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"},"siteUser":{"displayName":"Test + user 02","email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test Manager 01","email":"testmanager01.op@outlook.com","id":"45","loginName":"i:0#.f|membership|testmanager01.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test - Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:19 GMT + recorded_at: Wed, 24 Apr 2024 12:19:06 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPOD7TB3BXK4RBZMOARKTJGBBRG + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PM4ALBJOFMQE5BKGAYOR2RTHE6C body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1626,32 +1500,30 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 61485fed-bee8-44c3-955f-a45824fc0277 + - b004bb83-32e1-43b5-8232-696ad151b5a8 Client-Request-Id: - - 61485fed-bee8-44c3-955f-a45824fc0277 + - b004bb83-32e1-43b5-8232-696ad151b5a8 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016A"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000351"}}' Date: - - Wed, 14 Feb 2024 18:05:18 GMT + - Wed, 24 Apr 2024 12:19:06 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:05:19 GMT + recorded_at: Wed, 24 Apr 2024 12:19:06 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PMZOV6O6OCZ45FJQUZXOUPNZSXN + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNA6SETBSD2LNBJYNQHDTOAS3N4 body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1664,32 +1536,30 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - b49ae0c6-cffd-4d09-af79-376e4adf0c1d + - f8ea17c8-0105-4ea1-b384-320e5757c601 Client-Request-Id: - - b49ae0c6-cffd-4d09-af79-376e4adf0c1d + - f8ea17c8-0105-4ea1-b384-320e5757c601 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016E"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000311"}}' Date: - - Wed, 14 Feb 2024 18:05:18 GMT + - Wed, 24 Apr 2024 12:19:06 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:05:19 GMT + recorded_at: Wed, 24 Apr 2024 12:19:06 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJG75ST6WWMRVBIRM7LHLUY4VJI + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNTIETPHTTIEVGYSKZC5TVE5JV6 body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1702,15 +1572,15 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 22f02d39-7b05-4b0d-b93b-072e6e69c056 + - '00884e72-0ef9-415d-a6cc-32f64af141c6' Client-Request-Id: - - 22f02d39-7b05-4b0d-b93b-072e6e69c056 + - '00884e72-0ef9-415d-a6cc-32f64af141c6' X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000165"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057F"}}' Date: - - Wed, 14 Feb 2024 18:05:19 GMT + - Wed, 24 Apr 2024 12:19:07 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:05:19 GMT + recorded_at: Wed, 24 Apr 2024 12:19:07 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_create_folder.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_create_folder.yml index 1667b6eb0346..c2e777e46f07 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_create_folder.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_create_folder.yml @@ -37,24 +37,26 @@ http_interactions: P3p: - CP="DSP CUR OTPi IND OTRi ONL FIN" X-Ms-Request-Id: - - e54a3456-2fe6-462b-b857-97c788d0b300 + - 3dd8920b-728e-47fe-b154-7cc95ab89800 X-Ms-Ests-Server: - - 2.1.17282.6 - FRC ProdSlices + - 2.1.17846.6 - WEULR1 ProdSlices + X-Ms-Srs: + - 1.P X-Xss-Protection: - '0' Set-Cookie: - - fpc=Au_0ZPRoLkpPseKj5e_YUsikbDoXAQAAADD5Xt0OAAAA; expires=Fri, 15-Mar-2024 - 18:10:57 GMT; path=/; secure; HttpOnly; SameSite=None + - fpc=Au3mv7XUB7BJprJrioJ0d32kbDoXAQAAADTwut0OAAAA; expires=Fri, 24-May-2024 + 12:21:09 GMT; path=/; secure; HttpOnly; SameSite=None - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly Date: - - Wed, 14 Feb 2024 18:10:57 GMT + - Wed, 24 Apr 2024 12:21:08 GMT Content-Length: - '1708' body: encoding: UTF-8 string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Wed, 14 Feb 2024 18:10:57 GMT + recorded_at: Wed, 24 Apr 2024 12:21:09 GMT - request: method: get uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children @@ -69,7 +71,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -79,118 +81,111 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - b4d57023-52e9-4ffd-abe4-cb955a52162e + - dc1ecf32-15ca-4884-a1d6-57677596ba76 Client-Request-Id: - - b4d57023-52e9-4ffd-abe4-cb955a52162e + - dc1ecf32-15ca-4884-a1d6-57677596ba76 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000AF2"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"000","RoleInstance":"AM1PEPF00032CFD"}}' Date: - - Wed, 14 Feb 2024 18:10:57 GMT + - Wed, 24 Apr 2024 12:21:09 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children","value":[{"createdDateTime":"2024-01-29T17:30:48Z","eTag":"\"{AA674C60-1512-4607-AC2F-7838F996B4A9},1\"","id":"01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ","lastModifiedDateTime":"2024-01-29T17:30:48Z","name":"Project - B","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20B","cTag":"\"c:{AA674C60-1512-4607-AC2F-7838F996B4A9},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:48Z","lastModifiedDateTime":"2024-01-29T17:30:48Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2024-01-29T17:30:52Z","eTag":"\"{98914E03-2109-4235-8A69-3092969D062D},1\"","id":"01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN","lastModifiedDateTime":"2024-01-29T17:30:52Z","name":"Project - C","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20C","cTag":"\"c:{98914E03-2109-4235-8A69-3092969D062D},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:52Z","lastModifiedDateTime":"2024-01-29T17:30:52Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2023-12-15T14:58:59Z","eTag":"\"{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},33\"","id":"01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM","lastModifiedDateTime":"2023-12-29T10:44:06Z","name":"Renamed - Project A (1234)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Renamed%20Project%20A%20(1234)","cTag":"\"c:{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},0\"","decorator":{"iconColor":"darkGreen"},"size":33882,"createdBy":{"user":{"email":"w.lindenthal@finnlabs.com","id":"99fb2d61-359b-4fae-91c9-1ac6c8f02b5e","displayName":"Wieland - Lindenthal"}},"lastModifiedBy":{"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2023-12-15T14:58:59Z","lastModifiedDateTime":"2023-12-29T10:44:06Z"},"folder":{"childCount":2},"shared":{"scope":"users"}}]}' - recorded_at: Wed, 14 Feb 2024 18:10:57 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)","value":[{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-18T12:05:15Z","eTag":"\"{B94392DB-A502-4109-9EC5-17E7ABFFF461},4\"","id":"01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-18T12:05:15Z","name":"[dev] + Large (4)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5Bdev%5D%20Large%20(4)","cTag":"\"c:{B94392DB-A502-4109-9EC5-17E7ABFFF461},0\"","fileSystemInfo":{"createdDateTime":"2024-04-18T12:05:15Z","lastModifiedDateTime":"2024-04-18T12:05:15Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0},{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-03-18T18:12:55Z","eTag":"\"{D03A86A5-D563-45AC-B5FA-2A333F353BEA},275\"","id":"01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-03-18T18:12:55Z","name":"Demo + project (1)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Demo%20project%20(1)","cTag":"\"c:{D03A86A5-D563-45AC-B5FA-2A333F353BEA},0\"","fileSystemInfo":{"createdDateTime":"2024-03-18T18:12:55Z","lastModifiedDateTime":"2024-03-18T18:12:55Z"},"folder":{"childCount":1},"shared":{"scope":"users"},"size":988098560}]}' + recorded_at: Wed, 24 Apr 2024 12:21:10 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token body: - encoding: UTF-8 - string: '{"name":"[Sample] Project Name _ Ehuu (337)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded Content-Length: - - '100' + - '201' response: status: - code: 201 - message: Created + code: 200 + message: OK headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked + Pragma: + - no-cache Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Etag: - - '"{014CA4AF-A6CF-406B-8A5E-8C928B8DC813},1"' - Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PNPURGADT5GNNAIUXUMSKFY3SAT') - Vary: - - Accept-Encoding + - application/json; charset=utf-8 + Expires: + - "-1" Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - 1a77df9c-fc49-4f0e-a285-1658db186c62 - Client-Request-Id: - - 1a77df9c-fc49-4f0e-a285-1658db186c62 - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000DF7"}}' - Odata-Version: - - '4.0' + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - 825aeb31-5f85-4886-a016-905eb9ac9100 + X-Ms-Ests-Server: + - 2.1.17846.6 - FRC ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=Atq5OFurEOhBr7NYNIIykhOkbDoXAQAAADXwut0OAAAA; expires=Fri, 24-May-2024 + 12:21:10 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly Date: - - Wed, 14 Feb 2024 18:10:58 GMT + - Wed, 24 Apr 2024 12:21:09 GMT + Content-Length: + - '1735' body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{014CA4AF-A6CF-406B-8A5E-8C928B8DC813},1\"","createdDateTime":"2024-02-14T18:10:58Z","eTag":"\"{014CA4AF-A6CF-406B-8A5E-8C928B8DC813},1\"","id":"01AZJL5PNPURGADT5GNNAIUXUMSKFY3SAT","lastModifiedDateTime":"2024-02-14T18:10:58Z","name":"[Sample] - Project Name _ Ehuu (337)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(337)","cTag":"\"c:{014CA4AF-A6CF-406B-8A5E-8C928B8DC813},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject - Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:10:58Z","lastModifiedDateTime":"2024-02-14T18:10:58Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:10:58 GMT + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Wed, 24 Apr 2024 12:21:10 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"_=o=_ _ _Jedi_ Project Folder ___ (338)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"[Sample] Project Name _ Ehuu (686)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: - - '105' + - '100' + Authorization: + - Bearer response: status: code: 201 @@ -198,57 +193,55 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{49FBC52B-3F15-4488-82A3-7850FBF10A01},1"' + - '"{F48D5262-3511-496F-B83C-3A2AB29A10BE},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PJLYX5USFJ7RBCIFI3YKD57CCQB') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PLCKKG7IEJVN5E3QPB2FKZJUEF6') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 66647238-3246-4454-97b2-d096fbdba2f3 + - bb8f2fa0-ffbb-4817-87cb-f41c43abf158 Client-Request-Id: - - 66647238-3246-4454-97b2-d096fbdba2f3 + - bb8f2fa0-ffbb-4817-87cb-f41c43abf158 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000BA3"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"000","RoleInstance":"AM1PEPF00032CFA"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:10:58 GMT + - Wed, 24 Apr 2024 12:21:10 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{49FBC52B-3F15-4488-82A3-7850FBF10A01},1\"","createdDateTime":"2024-02-14T18:10:58Z","eTag":"\"{49FBC52B-3F15-4488-82A3-7850FBF10A01},1\"","id":"01AZJL5PJLYX5USFJ7RBCIFI3YKD57CCQB","lastModifiedDateTime":"2024-02-14T18:10:58Z","name":"_=o=_ - _ _Jedi_ Project Folder ___ (338)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(338)","cTag":"\"c:{49FBC52B-3F15-4488-82A3-7850FBF10A01},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{F48D5262-3511-496F-B83C-3A2AB29A10BE},1\"","createdDateTime":"2024-04-24T12:21:11Z","eTag":"\"{F48D5262-3511-496F-B83C-3A2AB29A10BE},1\"","id":"01AZJL5PLCKKG7IEJVN5E3QPB2FKZJUEF6","lastModifiedDateTime":"2024-04-24T12:21:11Z","name":"[Sample] + Project Name _ Ehuu (686)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(686)","cTag":"\"c:{F48D5262-3511-496F-B83C-3A2AB29A10BE},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:10:58Z","lastModifiedDateTime":"2024-02-14T18:10:58Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:10:58 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:21:11Z","lastModifiedDateTime":"2024-04-24T12:21:11Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:21:11 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"PUBLIC PROJECT (340)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"_=o=_ _ _Jedi_ Project Folder ___ (687)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json + Authorization: + - Bearer User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: - - '86' + - '105' response: status: code: 201 @@ -256,157 +249,95 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{5DA7899F-E291-4DCD-8528-5A45B69EBD72},1"' + - '"{4AF1147C-85CE-419E-B915-85FCC79995FE},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PM7RGTV3EPCZVGYKKC2IW3J5PLS') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PL4CTYUVTUFTZA3SFMF7TDZTFP6') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 004fe299-6cea-4f7a-b6d8-2e39e17b41c5 + - b769fa4e-ab31-4b92-b767-44e827bf7d11 Client-Request-Id: - - 004fe299-6cea-4f7a-b6d8-2e39e17b41c5 + - b769fa4e-ab31-4b92-b767-44e827bf7d11 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000AF5"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"000","RoleInstance":"AM1PEPF00032D08"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:10:58 GMT + - Wed, 24 Apr 2024 12:21:10 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{5DA7899F-E291-4DCD-8528-5A45B69EBD72},1\"","createdDateTime":"2024-02-14T18:10:59Z","eTag":"\"{5DA7899F-E291-4DCD-8528-5A45B69EBD72},1\"","id":"01AZJL5PM7RGTV3EPCZVGYKKC2IW3J5PLS","lastModifiedDateTime":"2024-02-14T18:10:59Z","name":"PUBLIC - PROJECT (340)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(340)","cTag":"\"c:{5DA7899F-E291-4DCD-8528-5A45B69EBD72},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{4AF1147C-85CE-419E-B915-85FCC79995FE},1\"","createdDateTime":"2024-04-24T12:21:11Z","eTag":"\"{4AF1147C-85CE-419E-B915-85FCC79995FE},1\"","id":"01AZJL5PL4CTYUVTUFTZA3SFMF7TDZTFP6","lastModifiedDateTime":"2024-04-24T12:21:11Z","name":"_=o=_ + _ _Jedi_ Project Folder ___ (687)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(687)","cTag":"\"c:{4AF1147C-85CE-419E-B915-85FCC79995FE},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:10:59Z","lastModifiedDateTime":"2024-02-14T18:10:59Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:10:58 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:21:11Z","lastModifiedDateTime":"2024-04-24T12:21:11Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:21:11 GMT - request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ + method: post + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: - encoding: US-ASCII - string: '' + encoding: UTF-8 + string: '{"name":"PUBLIC PROJECT (689)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json - User-Agent: - - httpx.rb/1.2.2 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 200 - message: OK - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Vary: - - Accept-Encoding - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - 3bcd68d5-90cb-41a2-8ad0-2241997e3dd9 - Client-Request-Id: - - 3bcd68d5-90cb-41a2-8ad0-2241997e3dd9 - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000C2C"}}' - Odata-Version: - - '4.0' - Date: - - Wed, 14 Feb 2024 18:10:58 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-01-29T17:30:48Z","eTag":"\"{AA674C60-1512-4607-AC2F-7838F996B4A9},1\"","id":"01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ","lastModifiedDateTime":"2024-01-29T17:30:48Z","name":"Project - B","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20B","cTag":"\"c:{AA674C60-1512-4607-AC2F-7838F996B4A9},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:48Z","lastModifiedDateTime":"2024-01-29T17:30:48Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:10:59 GMT -- request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ/permissions - body: - encoding: US-ASCII - string: '' - headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate + Content-Length: + - '86' response: status: - code: 200 - message: OK + code: 201 + message: Created headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip + Etag: + - '"{AC905651-467A-4A5E-8A74-E267F19E53F1},1"' + Location: + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PKRK2IKY6SGLZFIU5HCM7YZ4U7R') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - ec4c8b91-aeb9-4107-af73-f4d7d60ccd9c + - f702a5bc-8b91-4a69-9672-f7335b011ab6 Client-Request-Id: - - ec4c8b91-aeb9-4107-af73-f4d7d60ccd9c + - f702a5bc-8b91-4a69-9672-f7335b011ab6 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000AEE"}}' - Link: - - ;rel="deprecation";type="text/html", - ;rel="deprecation";type="text/html" - Deprecation: - - Fri, 03 Sep 2021 23:59:59 GMT - Sunset: - - Sun, 01 Oct 2023 23:59:59 GMT + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"000","RoleInstance":"AM1PEPF000105A6"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:10:59 GMT + - Wed, 24 Apr 2024 12:21:12 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject - file storage tests Owners","id":"3","loginName":"OpenProject file storage - tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:10:59 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{AC905651-467A-4A5E-8A74-E267F19E53F1},1\"","createdDateTime":"2024-04-24T12:21:12Z","eTag":"\"{AC905651-467A-4A5E-8A74-E267F19E53F1},1\"","id":"01AZJL5PKRK2IKY6SGLZFIU5HCM7YZ4U7R","lastModifiedDateTime":"2024-04-24T12:21:12Z","name":"PUBLIC + PROJECT (689)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(689)","cTag":"\"c:{AC905651-467A-4A5E-8A74-E267F19E53F1},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint + App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:21:12Z","lastModifiedDateTime":"2024-04-24T12:21:12Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:21:12 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB body: encoding: US-ASCII string: '' @@ -418,7 +349,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -428,37 +359,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 59de199e-4f0e-48a3-a4f5-86b714a933b6 + - adfe64b8-ce3c-455c-940c-d6c1be401e3b Client-Request-Id: - - 59de199e-4f0e-48a3-a4f5-86b714a933b6 + - adfe64b8-ce3c-455c-940c-d6c1be401e3b X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000AF8"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"000","RoleInstance":"AM1PEPF00032CFF"}}' Date: - - Wed, 14 Feb 2024 18:10:59 GMT + - Wed, 24 Apr 2024 12:21:11 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-01-29T17:30:52Z","eTag":"\"{98914E03-2109-4235-8A69-3092969D062D},1\"","id":"01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN","lastModifiedDateTime":"2024-01-29T17:30:52Z","name":"Project - C","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20C","cTag":"\"c:{98914E03-2109-4235-8A69-3092969D062D},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:52Z","lastModifiedDateTime":"2024-01-29T17:30:52Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:10:59 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-18T12:05:15Z","eTag":"\"{B94392DB-A502-4109-9EC5-17E7ABFFF461},4\"","id":"01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-18T12:05:15Z","name":"[dev] + Large (4)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5Bdev%5D%20Large%20(4)","cTag":"\"c:{B94392DB-A502-4109-9EC5-17E7ABFFF461},0\"","fileSystemInfo":{"createdDateTime":"2024-04-18T12:05:15Z","lastModifiedDateTime":"2024-04-18T12:05:15Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:21:12 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB/permissions body: encoding: US-ASCII string: '' @@ -470,7 +397,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -480,22 +407,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 0ad45e30-ac4e-464c-bd6f-fabd3f4c4d8c + - 7d3439b7-2153-436d-819d-8559c3d91971 Client-Request-Id: - - 0ad45e30-ac4e-464c-bd6f-fabd3f4c4d8c + - 7d3439b7-2153-436d-819d-8559c3d91971 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000DF7"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"000","RoleInstance":"AM1PEPF000105AB"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -503,26 +426,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:10:59 GMT + - Wed, 24 Apr 2024 12:21:12 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:10:59 GMT + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' + recorded_at: Wed, 24 Apr 2024 12:21:13 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K body: encoding: US-ASCII string: '' @@ -534,7 +458,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -544,36 +468,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - ce4c8371-cece-4746-9599-161b0846199a + - a87a3426-48b9-43f9-924c-3f731a41e7d8 Client-Request-Id: - - ce4c8371-cece-4746-9599-161b0846199a + - a87a3426-48b9-43f9-924c-3f731a41e7d8 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000AF1"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"000","RoleInstance":"AM1PEPF00010593"}}' Date: - - Wed, 14 Feb 2024 18:10:59 GMT + - Wed, 24 Apr 2024 12:21:13 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2023-12-15T14:58:59Z","eTag":"\"{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},33\"","id":"01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM","lastModifiedDateTime":"2023-12-29T10:44:06Z","name":"Renamed - Project A (1234)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Renamed%20Project%20A%20(1234)","cTag":"\"c:{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},0\"","decorator":{"iconColor":"darkGreen"},"size":33882,"createdBy":{"user":{"email":"w.lindenthal@finnlabs.com","id":"99fb2d61-359b-4fae-91c9-1ac6c8f02b5e","displayName":"Wieland - Lindenthal"}},"lastModifiedBy":{"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2023-12-15T14:58:59Z","lastModifiedDateTime":"2023-12-29T10:44:06Z"},"folder":{"childCount":2},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:11:00 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-03-18T18:12:55Z","eTag":"\"{D03A86A5-D563-45AC-B5FA-2A333F353BEA},275\"","id":"01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-03-18T18:12:55Z","name":"Demo + project (1)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Demo%20project%20(1)","cTag":"\"c:{D03A86A5-D563-45AC-B5FA-2A333F353BEA},0\"","fileSystemInfo":{"createdDateTime":"2024-03-18T18:12:55Z","lastModifiedDateTime":"2024-03-18T18:12:55Z"},"folder":{"childCount":1},"shared":{"scope":"users"},"size":988098560}' + recorded_at: Wed, 24 Apr 2024 12:21:13 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K/permissions body: encoding: US-ASCII string: '' @@ -585,7 +506,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -595,22 +516,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 7476c72a-a9f7-4b4c-aa3b-ec8ac7112a70 + - 498e47c7-ea02-4fb5-83ad-4dd21f6b853b Client-Request-Id: - - 7476c72a-a9f7-4b4c-aa3b-ec8ac7112a70 + - 498e47c7-ea02-4fb5-83ad-4dd21f6b853b X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000D36"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"000","RoleInstance":"AM1PEPF00032D01"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -618,26 +535,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:11:00 GMT + - Wed, 24 Apr 2024 12:21:13 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:11:00 GMT + recorded_at: Wed, 24 Apr 2024 12:21:14 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNPURGADT5GNNAIUXUMSKFY3SAT + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLCKKG7IEJVN5E3QPB2FKZJUEF6 body: encoding: US-ASCII string: '' @@ -649,7 +567,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -659,37 +577,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - e428cc87-0390-4c9b-ba80-2dc7d8b85733 + - 0fb468f9-2461-4d73-a84c-2042b6d484be Client-Request-Id: - - e428cc87-0390-4c9b-ba80-2dc7d8b85733 + - 0fb468f9-2461-4d73-a84c-2042b6d484be X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000AF5"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"000","RoleInstance":"AM1PEPF00032D03"}}' Date: - - Wed, 14 Feb 2024 18:11:00 GMT + - Wed, 24 Apr 2024 12:21:13 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:10:58Z","eTag":"\"{014CA4AF-A6CF-406B-8A5E-8C928B8DC813},1\"","id":"01AZJL5PNPURGADT5GNNAIUXUMSKFY3SAT","lastModifiedDateTime":"2024-02-14T18:10:58Z","name":"[Sample] - Project Name _ Ehuu (337)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(337)","cTag":"\"c:{014CA4AF-A6CF-406B-8A5E-8C928B8DC813},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:10:58Z","lastModifiedDateTime":"2024-02-14T18:10:58Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:11:00 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:21:11Z","eTag":"\"{F48D5262-3511-496F-B83C-3A2AB29A10BE},2\"","id":"01AZJL5PLCKKG7IEJVN5E3QPB2FKZJUEF6","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:21:11Z","name":"[Sample] + Project Name _ Ehuu (686)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(686)","cTag":"\"c:{F48D5262-3511-496F-B83C-3A2AB29A10BE},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:21:11Z","lastModifiedDateTime":"2024-04-24T12:21:11Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:21:14 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNPURGADT5GNNAIUXUMSKFY3SAT/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLCKKG7IEJVN5E3QPB2FKZJUEF6/permissions body: encoding: US-ASCII string: '' @@ -701,7 +615,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -711,22 +625,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - b93b3e74-e1b3-4aee-8333-980163749db9 + - 98817af3-9fd4-4f00-aca7-b8341894994e Client-Request-Id: - - b93b3e74-e1b3-4aee-8333-980163749db9 + - 98817af3-9fd4-4f00-aca7-b8341894994e X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000AF2"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"000","RoleInstance":"AM1PEPF000105B7"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -734,26 +644,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:11:00 GMT + - Wed, 24 Apr 2024 12:21:14 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNPURGADT5GNNAIUXUMSKFY3SAT'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PLCKKG7IEJVN5E3QPB2FKZJUEF6'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:11:01 GMT + recorded_at: Wed, 24 Apr 2024 12:21:15 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNPURGADT5GNNAIUXUMSKFY3SAT/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLCKKG7IEJVN5E3QPB2FKZJUEF6/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"},{"objectId":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -765,7 +676,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -777,8 +688,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -790,11 +699,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 584570d8-5b68-4c6c-9a16-c61e13276acb + - 745e767e-5a1b-4654-afd2-1fcc55b866ea Client-Request-Id: - - 584570d8-5b68-4c6c-9a16-c61e13276acb + - 745e767e-5a1b-4654-afd2-1fcc55b866ea X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000AF1"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"000","RoleInstance":"AM1PEPF000105A5"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -805,17 +714,17 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:11:02 GMT + - Wed, 24 Apr 2024 12:21:16 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test - Manager 01"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test - user 02"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + Manager 01"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test + user 02"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:11:02 GMT + recorded_at: Wed, 24 Apr 2024 12:21:16 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJLYX5USFJ7RBCIFI3YKD57CCQB + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PL4CTYUVTUFTZA3SFMF7TDZTFP6 body: encoding: US-ASCII string: '' @@ -827,7 +736,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -837,37 +746,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 9ae7393c-fa46-46ae-8161-6eb24f2e839a + - 60325243-9da0-4054-9869-a3c9abd2c88d Client-Request-Id: - - 9ae7393c-fa46-46ae-8161-6eb24f2e839a + - 60325243-9da0-4054-9869-a3c9abd2c88d X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000C24"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"000","RoleInstance":"AM1PEPF00032D09"}}' Date: - - Wed, 14 Feb 2024 18:11:02 GMT + - Wed, 24 Apr 2024 12:21:16 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:10:58Z","eTag":"\"{49FBC52B-3F15-4488-82A3-7850FBF10A01},1\"","id":"01AZJL5PJLYX5USFJ7RBCIFI3YKD57CCQB","lastModifiedDateTime":"2024-02-14T18:10:58Z","name":"_=o=_ - _ _Jedi_ Project Folder ___ (338)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(338)","cTag":"\"c:{49FBC52B-3F15-4488-82A3-7850FBF10A01},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:10:58Z","lastModifiedDateTime":"2024-02-14T18:10:58Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:11:02 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:21:11Z","eTag":"\"{4AF1147C-85CE-419E-B915-85FCC79995FE},2\"","id":"01AZJL5PL4CTYUVTUFTZA3SFMF7TDZTFP6","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:21:11Z","name":"_=o=_ + _ _Jedi_ Project Folder ___ (687)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(687)","cTag":"\"c:{4AF1147C-85CE-419E-B915-85FCC79995FE},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:21:11Z","lastModifiedDateTime":"2024-04-24T12:21:11Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:21:17 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJLYX5USFJ7RBCIFI3YKD57CCQB/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PL4CTYUVTUFTZA3SFMF7TDZTFP6/permissions body: encoding: US-ASCII string: '' @@ -879,7 +784,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -889,22 +794,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - fa6001b1-176f-46aa-8b5d-8412ebb76d63 + - e8e48c8f-102d-4743-9472-4994253bfa36 Client-Request-Id: - - fa6001b1-176f-46aa-8b5d-8412ebb76d63 + - e8e48c8f-102d-4743-9472-4994253bfa36 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000BA2"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"000","RoleInstance":"AM1PEPF000105B2"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -912,26 +813,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:11:02 GMT + - Wed, 24 Apr 2024 12:21:17 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PJLYX5USFJ7RBCIFI3YKD57CCQB'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PL4CTYUVTUFTZA3SFMF7TDZTFP6'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:11:03 GMT + recorded_at: Wed, 24 Apr 2024 12:21:17 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJLYX5USFJ7RBCIFI3YKD57CCQB/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PL4CTYUVTUFTZA3SFMF7TDZTFP6/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -943,7 +845,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -955,8 +857,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -968,11 +868,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - e63eed69-9bf9-4549-9d0f-b9e1cbabaae8 + - 5794482d-a652-4c3f-a39e-8a3b43115c8e Client-Request-Id: - - e63eed69-9bf9-4549-9d0f-b9e1cbabaae8 + - 5794482d-a652-4c3f-a39e-8a3b43115c8e X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000AB4"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"000","RoleInstance":"AM1PEPF000105AE"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -983,16 +883,16 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:11:04 GMT + - Wed, 24 Apr 2024 12:21:18 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test - Manager 01"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + Manager 01"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:11:04 GMT + recorded_at: Wed, 24 Apr 2024 12:21:19 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PM7RGTV3EPCZVGYKKC2IW3J5PLS + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKRK2IKY6SGLZFIU5HCM7YZ4U7R body: encoding: US-ASCII string: '' @@ -1004,7 +904,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1014,37 +914,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - b03bf2be-ca31-4303-83e7-efc626868752 + - 73446175-90fb-4b91-ad6a-5ab9995c449b Client-Request-Id: - - b03bf2be-ca31-4303-83e7-efc626868752 + - 73446175-90fb-4b91-ad6a-5ab9995c449b X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000C2C"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"000","RoleInstance":"AM1PEPF00032D02"}}' Date: - - Wed, 14 Feb 2024 18:11:04 GMT + - Wed, 24 Apr 2024 12:21:19 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:10:59Z","eTag":"\"{5DA7899F-E291-4DCD-8528-5A45B69EBD72},1\"","id":"01AZJL5PM7RGTV3EPCZVGYKKC2IW3J5PLS","lastModifiedDateTime":"2024-02-14T18:10:59Z","name":"PUBLIC - PROJECT (340)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(340)","cTag":"\"c:{5DA7899F-E291-4DCD-8528-5A45B69EBD72},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:10:59Z","lastModifiedDateTime":"2024-02-14T18:10:59Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:11:04 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:21:12Z","eTag":"\"{AC905651-467A-4A5E-8A74-E267F19E53F1},2\"","id":"01AZJL5PKRK2IKY6SGLZFIU5HCM7YZ4U7R","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:21:12Z","name":"PUBLIC + PROJECT (689)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(689)","cTag":"\"c:{AC905651-467A-4A5E-8A74-E267F19E53F1},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:21:12Z","lastModifiedDateTime":"2024-04-24T12:21:12Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:21:19 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PM7RGTV3EPCZVGYKKC2IW3J5PLS/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKRK2IKY6SGLZFIU5HCM7YZ4U7R/permissions body: encoding: US-ASCII string: '' @@ -1056,7 +952,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1066,22 +962,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 728be9ae-5719-4e70-8d02-606add5e1784 + - 001fa692-e9e6-4fdc-9b0f-b27bc1595ed1 Client-Request-Id: - - 728be9ae-5719-4e70-8d02-606add5e1784 + - 001fa692-e9e6-4fdc-9b0f-b27bc1595ed1 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000AEE"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"000","RoleInstance":"AM1PEPF00032D05"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1089,26 +981,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:11:04 GMT + - Wed, 24 Apr 2024 12:21:19 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PM7RGTV3EPCZVGYKKC2IW3J5PLS'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PKRK2IKY6SGLZFIU5HCM7YZ4U7R'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:11:05 GMT + recorded_at: Wed, 24 Apr 2024 12:21:20 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PM7RGTV3EPCZVGYKKC2IW3J5PLS/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKRK2IKY6SGLZFIU5HCM7YZ4U7R/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["read"],"recipients":[{"objectId":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -1120,7 +1013,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -1132,8 +1025,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -1145,11 +1036,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - f2be5846-7a60-4ff6-8540-6a0315f0b28c + - 3da8bcaf-2d96-48f7-967f-99781bdaf60a Client-Request-Id: - - f2be5846-7a60-4ff6-8540-6a0315f0b28c + - 3da8bcaf-2d96-48f7-967f-99781bdaf60a X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000C25"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"000","RoleInstance":"AM1PEPF00032D09"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1160,16 +1051,16 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:11:05 GMT + - Wed, 24 Apr 2024 12:21:20 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test - user 02"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test + user 02"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:11:06 GMT + recorded_at: Wed, 24 Apr 2024 12:21:21 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PM7RGTV3EPCZVGYKKC2IW3J5PLS/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKRK2IKY6SGLZFIU5HCM7YZ4U7R/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"}]}' @@ -1181,7 +1072,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -1193,8 +1084,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -1206,11 +1095,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 9506db9f-b235-4e41-9a60-036d930a43b1 + - 8afc5a38-0e18-481d-9802-16cdb45b9973 Client-Request-Id: - - 9506db9f-b235-4e41-9a60-036d930a43b1 + - 8afc5a38-0e18-481d-9802-16cdb45b9973 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000D36"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"000","RoleInstance":"AM1PEPF000105AE"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1221,15 +1110,15 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:11:06 GMT + - Wed, 24 Apr 2024 12:21:22 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test Manager 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:11:07 GMT + recorded_at: Wed, 24 Apr 2024 12:21:22 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNPURGADT5GNNAIUXUMSKFY3SAT + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLCKKG7IEJVN5E3QPB2FKZJUEF6 body: encoding: US-ASCII string: '' @@ -1241,7 +1130,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1251,37 +1140,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - faad1986-3cd1-4fef-b586-5bf547ca8bc3 + - 229a83cd-aafe-4c45-941e-8948e15de488 Client-Request-Id: - - faad1986-3cd1-4fef-b586-5bf547ca8bc3 + - 229a83cd-aafe-4c45-941e-8948e15de488 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000AF8"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"000","RoleInstance":"AM1PEPF00032CF9"}}' Date: - - Wed, 14 Feb 2024 18:11:06 GMT + - Wed, 24 Apr 2024 12:21:22 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:10:58Z","eTag":"\"{014CA4AF-A6CF-406B-8A5E-8C928B8DC813},2\"","id":"01AZJL5PNPURGADT5GNNAIUXUMSKFY3SAT","lastModifiedDateTime":"2024-02-14T18:10:58Z","name":"[Sample] - Project Name _ Ehuu (337)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(337)","cTag":"\"c:{014CA4AF-A6CF-406B-8A5E-8C928B8DC813},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:10:58Z","lastModifiedDateTime":"2024-02-14T18:10:58Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:11:07 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:21:11Z","eTag":"\"{F48D5262-3511-496F-B83C-3A2AB29A10BE},3\"","id":"01AZJL5PLCKKG7IEJVN5E3QPB2FKZJUEF6","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:21:11Z","name":"[Sample] + Project Name _ Ehuu (686)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(686)","cTag":"\"c:{F48D5262-3511-496F-B83C-3A2AB29A10BE},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:21:11Z","lastModifiedDateTime":"2024-04-24T12:21:11Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:21:23 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJLYX5USFJ7RBCIFI3YKD57CCQB + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PL4CTYUVTUFTZA3SFMF7TDZTFP6 body: encoding: US-ASCII string: '' @@ -1293,7 +1178,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1303,37 +1188,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 5f1cd561-e191-4c7f-976c-fe0baf7c9cb8 + - 2e444931-8b67-4062-8d41-431718c88305 Client-Request-Id: - - 5f1cd561-e191-4c7f-976c-fe0baf7c9cb8 + - 2e444931-8b67-4062-8d41-431718c88305 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000AF1"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"000","RoleInstance":"AM1PEPF000105B7"}}' Date: - - Wed, 14 Feb 2024 18:11:07 GMT + - Wed, 24 Apr 2024 12:21:22 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:10:58Z","eTag":"\"{49FBC52B-3F15-4488-82A3-7850FBF10A01},2\"","id":"01AZJL5PJLYX5USFJ7RBCIFI3YKD57CCQB","lastModifiedDateTime":"2024-02-14T18:10:58Z","name":"_=o=_ - _ _Jedi_ Project Folder ___ (338)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(338)","cTag":"\"c:{49FBC52B-3F15-4488-82A3-7850FBF10A01},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:10:58Z","lastModifiedDateTime":"2024-02-14T18:10:58Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:11:07 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:21:11Z","eTag":"\"{4AF1147C-85CE-419E-B915-85FCC79995FE},3\"","id":"01AZJL5PL4CTYUVTUFTZA3SFMF7TDZTFP6","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:21:11Z","name":"_=o=_ + _ _Jedi_ Project Folder ___ (687)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(687)","cTag":"\"c:{4AF1147C-85CE-419E-B915-85FCC79995FE},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:21:11Z","lastModifiedDateTime":"2024-04-24T12:21:11Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:21:23 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PM7RGTV3EPCZVGYKKC2IW3J5PLS + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKRK2IKY6SGLZFIU5HCM7YZ4U7R body: encoding: US-ASCII string: '' @@ -1345,7 +1226,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1355,49 +1236,43 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 98008c14-b4fa-4bd8-9925-499727aa31e7 + - 5bfd0ab8-1523-4d1b-bccb-d066210c6ad0 Client-Request-Id: - - 98008c14-b4fa-4bd8-9925-499727aa31e7 + - 5bfd0ab8-1523-4d1b-bccb-d066210c6ad0 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000AF7"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"000","RoleInstance":"AM1PEPF000105A5"}}' Date: - - Wed, 14 Feb 2024 18:11:07 GMT + - Wed, 24 Apr 2024 12:21:23 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:10:59Z","eTag":"\"{5DA7899F-E291-4DCD-8528-5A45B69EBD72},3\"","id":"01AZJL5PM7RGTV3EPCZVGYKKC2IW3J5PLS","lastModifiedDateTime":"2024-02-14T18:10:59Z","name":"PUBLIC - PROJECT (340)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(340)","cTag":"\"c:{5DA7899F-E291-4DCD-8528-5A45B69EBD72},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:10:59Z","lastModifiedDateTime":"2024-02-14T18:10:59Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:11:07 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:21:12Z","eTag":"\"{AC905651-467A-4A5E-8A74-E267F19E53F1},4\"","id":"01AZJL5PKRK2IKY6SGLZFIU5HCM7YZ4U7R","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:21:12Z","name":"PUBLIC + PROJECT (689)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(689)","cTag":"\"c:{AC905651-467A-4A5E-8A74-E267F19E53F1},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:21:12Z","lastModifiedDateTime":"2024-04-24T12:21:12Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:21:23 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNPURGADT5GNNAIUXUMSKFY3SAT + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLCKKG7IEJVN5E3QPB2FKZJUEF6 body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1410,32 +1285,30 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 10d35ebd-371a-4957-b727-26e6cdf0abc7 + - 03401c8e-34dd-429a-adec-3868a03bfd0e Client-Request-Id: - - 10d35ebd-371a-4957-b727-26e6cdf0abc7 + - 03401c8e-34dd-429a-adec-3868a03bfd0e X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000C2C"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"000","RoleInstance":"AM1PEPF00032CF8"}}' Date: - - Wed, 14 Feb 2024 18:11:07 GMT + - Wed, 24 Apr 2024 12:21:23 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:11:07 GMT + recorded_at: Wed, 24 Apr 2024 12:21:24 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJLYX5USFJ7RBCIFI3YKD57CCQB + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PL4CTYUVTUFTZA3SFMF7TDZTFP6 body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1448,32 +1321,30 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - cbb4624a-d9e6-4dd5-bb0b-899c05d0feca + - ba297e8d-62f3-475f-ac90-ba4d01b6cb1c Client-Request-Id: - - cbb4624a-d9e6-4dd5-bb0b-899c05d0feca + - ba297e8d-62f3-475f-ac90-ba4d01b6cb1c X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000AF4"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"000","RoleInstance":"AM1PEPF00032CFD"}}' Date: - - Wed, 14 Feb 2024 18:11:07 GMT + - Wed, 24 Apr 2024 12:21:24 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:11:08 GMT + recorded_at: Wed, 24 Apr 2024 12:21:24 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PM7RGTV3EPCZVGYKKC2IW3J5PLS + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKRK2IKY6SGLZFIU5HCM7YZ4U7R body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1486,15 +1357,15 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 123a7630-0590-4d59-8b6c-7881c3633599 + - fb2ed023-64dd-40d9-9cf1-24c1caa74b68 Client-Request-Id: - - 123a7630-0590-4d59-8b6c-7881c3633599 + - fb2ed023-64dd-40d9-9cf1-24c1caa74b68 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"FR1PEPF00000AED"}}' + - '{"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"000","RoleInstance":"AM1PEPF000105A7"}}' Date: - - Wed, 14 Feb 2024 18:11:07 GMT + - Wed, 24 Apr 2024 12:21:24 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:11:08 GMT + recorded_at: Wed, 24 Apr 2024 12:21:24 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_creation_fail.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_creation_fail.yml index 9eb7a7b90154..fadb6f5c190c 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_creation_fail.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_creation_fail.yml @@ -4,19 +4,19 @@ http_interactions: method: post uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token body: - encoding: UTF-8 - string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB headers: User-Agent: - - Rack::OAuth2 (2.2.1) - Authorization: - - Basic - Content-Type: - - application/x-www-form-urlencoded - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + - httpx.rb/1.2.4 Accept: - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' response: status: code: 200 @@ -37,43 +37,45 @@ http_interactions: P3p: - CP="DSP CUR OTPi IND OTRi ONL FIN" X-Ms-Request-Id: - - a5911a40-e616-4b4c-998e-cfdd32dcb600 + - 4da3f356-96ee-4d33-ae9f-89581ff89b00 X-Ms-Ests-Server: - - 2.1.17282.6 - SEC ProdSlices + - 2.1.17846.6 - FRC ProdSlices + X-Ms-Srs: + - 1.P X-Xss-Protection: - '0' Set-Cookie: - - fpc=AvGWpsxd4kVMufY-kgY2gf-kbDoXAQAAABr4Xt0OAAAA; expires=Fri, 15-Mar-2024 - 18:06:18 GMT; path=/; secure; HttpOnly; SameSite=None - - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly + - fpc=Aln_53y4JnJDuKOz3DxgYnqkbDoXAQAAANXvut0OAAAA; expires=Fri, 24-May-2024 + 12:19:33 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly Date: - - Wed, 14 Feb 2024 18:06:18 GMT + - Wed, 24 Apr 2024 12:19:32 GMT Content-Length: - - '1708' + - '1735' body: encoding: UTF-8 string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Wed, 14 Feb 2024 18:06:18 GMT + recorded_at: Wed, 24 Apr 2024 12:19:33 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"[Sample] Project Name _ Ehuu (332)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"[Sample] Project Name _ Ehuu (681)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: - '100' + Authorization: + - Bearer response: status: code: 201 @@ -81,38 +83,93 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{C6AB8C65-24D0-4541-B878-3F37C416E6F5},1"' + - '"{D0FBC158-CF61-4398-A5CB-14E93F919982},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PLFRSV4NUBEIFC3Q6B7G7CBNZXV') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PKYYH55AYOPTBB2LSYU5E7ZDGMC') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - c908c4f4-581b-4865-a702-6de89e44fcc0 + - aa5c0a22-0a51-458f-9220-5d8f68218812 Client-Request-Id: - - c908c4f4-581b-4865-a702-6de89e44fcc0 + - aa5c0a22-0a51-458f-9220-5d8f68218812 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000163"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000164"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:06:18 GMT + - Wed, 24 Apr 2024 12:19:33 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{C6AB8C65-24D0-4541-B878-3F37C416E6F5},1\"","createdDateTime":"2024-02-14T18:06:18Z","eTag":"\"{C6AB8C65-24D0-4541-B878-3F37C416E6F5},1\"","id":"01AZJL5PLFRSV4NUBEIFC3Q6B7G7CBNZXV","lastModifiedDateTime":"2024-02-14T18:06:18Z","name":"[Sample] - Project Name _ Ehuu (332)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(332)","cTag":"\"c:{C6AB8C65-24D0-4541-B878-3F37C416E6F5},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{D0FBC158-CF61-4398-A5CB-14E93F919982},1\"","createdDateTime":"2024-04-24T12:19:34Z","eTag":"\"{D0FBC158-CF61-4398-A5CB-14E93F919982},1\"","id":"01AZJL5PKYYH55AYOPTBB2LSYU5E7ZDGMC","lastModifiedDateTime":"2024-04-24T12:19:34Z","name":"[Sample] + Project Name _ Ehuu (681)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(681)","cTag":"\"c:{D0FBC158-CF61-4398-A5CB-14E93F919982},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:06:18Z","lastModifiedDateTime":"2024-02-14T18:06:18Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:06:18 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:19:34Z","lastModifiedDateTime":"2024-04-24T12:19:34Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:19:34 GMT +- request: + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token + body: + encoding: UTF-8 + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default + headers: + User-Agent: + - Rack::OAuth2 (2.2.1) + Authorization: + - Basic + Content-Type: + - application/x-www-form-urlencoded + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-store, no-cache + Pragma: + - no-cache + Content-Type: + - application/json; charset=utf-8 + Expires: + - "-1" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - 38f2afb9-1058-4f89-8411-f5707011b700 + X-Ms-Ests-Server: + - 2.1.17846.6 - SEC ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=AqeGLNqr3phFi4cHzxuSbDKkbDoXAQAAANXvut0OAAAA; expires=Fri, 24-May-2024 + 12:19:34 GMT; path=/; secure; HttpOnly; SameSite=None + - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly + - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly + Date: + - Wed, 24 Apr 2024 12:19:33 GMT + Content-Length: + - '1708' + body: + encoding: UTF-8 + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Wed, 24 Apr 2024 12:19:34 GMT - request: method: get uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children @@ -127,7 +184,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -137,60 +194,55 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - eed396b8-c091-4904-ba1e-fd47082cb217 + - 41d822ce-da48-4e05-aa5b-2cb1a0634514 Client-Request-Id: - - eed396b8-c091-4904-ba1e-fd47082cb217 + - 41d822ce-da48-4e05-aa5b-2cb1a0634514 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000160"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055B"}}' Date: - - Wed, 14 Feb 2024 18:06:18 GMT + - Wed, 24 Apr 2024 12:19:34 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children","value":[{"createdDateTime":"2024-02-14T18:06:18Z","eTag":"\"{C6AB8C65-24D0-4541-B878-3F37C416E6F5},1\"","id":"01AZJL5PLFRSV4NUBEIFC3Q6B7G7CBNZXV","lastModifiedDateTime":"2024-02-14T18:06:18Z","name":"[Sample] - Project Name _ Ehuu (332)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(332)","cTag":"\"c:{C6AB8C65-24D0-4541-B878-3F37C416E6F5},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:06:18Z","lastModifiedDateTime":"2024-02-14T18:06:18Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2024-01-29T17:30:48Z","eTag":"\"{AA674C60-1512-4607-AC2F-7838F996B4A9},1\"","id":"01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ","lastModifiedDateTime":"2024-01-29T17:30:48Z","name":"Project - B","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20B","cTag":"\"c:{AA674C60-1512-4607-AC2F-7838F996B4A9},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:48Z","lastModifiedDateTime":"2024-01-29T17:30:48Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2024-01-29T17:30:52Z","eTag":"\"{98914E03-2109-4235-8A69-3092969D062D},1\"","id":"01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN","lastModifiedDateTime":"2024-01-29T17:30:52Z","name":"Project - C","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20C","cTag":"\"c:{98914E03-2109-4235-8A69-3092969D062D},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:52Z","lastModifiedDateTime":"2024-01-29T17:30:52Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2023-12-15T14:58:59Z","eTag":"\"{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},33\"","id":"01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM","lastModifiedDateTime":"2023-12-29T10:44:06Z","name":"Renamed - Project A (1234)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Renamed%20Project%20A%20(1234)","cTag":"\"c:{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},0\"","decorator":{"iconColor":"darkGreen"},"size":33882,"createdBy":{"user":{"email":"w.lindenthal@finnlabs.com","id":"99fb2d61-359b-4fae-91c9-1ac6c8f02b5e","displayName":"Wieland - Lindenthal"}},"lastModifiedBy":{"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2023-12-15T14:58:59Z","lastModifiedDateTime":"2023-12-29T10:44:06Z"},"folder":{"childCount":2},"shared":{"scope":"users"}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:18 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)","value":[{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-18T12:05:15Z","eTag":"\"{B94392DB-A502-4109-9EC5-17E7ABFFF461},4\"","id":"01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-18T12:05:15Z","name":"[dev] + Large (4)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5Bdev%5D%20Large%20(4)","cTag":"\"c:{B94392DB-A502-4109-9EC5-17E7ABFFF461},0\"","fileSystemInfo":{"createdDateTime":"2024-04-18T12:05:15Z","lastModifiedDateTime":"2024-04-18T12:05:15Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0},{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:19:34Z","eTag":"\"{D0FBC158-CF61-4398-A5CB-14E93F919982},2\"","id":"01AZJL5PKYYH55AYOPTBB2LSYU5E7ZDGMC","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:19:35Z","name":"[Sample] + Project Name _ Ehuu (681)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(681)","cTag":"\"c:{D0FBC158-CF61-4398-A5CB-14E93F919982},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:19:34Z","lastModifiedDateTime":"2024-04-24T12:19:35Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0},{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-03-18T18:12:55Z","eTag":"\"{D03A86A5-D563-45AC-B5FA-2A333F353BEA},275\"","id":"01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-03-18T18:12:55Z","name":"Demo + project (1)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Demo%20project%20(1)","cTag":"\"c:{D03A86A5-D563-45AC-B5FA-2A333F353BEA},0\"","fileSystemInfo":{"createdDateTime":"2024-03-18T18:12:55Z","lastModifiedDateTime":"2024-03-18T18:12:55Z"},"folder":{"childCount":1},"shared":{"scope":"users"},"size":988098560}]}' + recorded_at: Wed, 24 Apr 2024 12:19:34 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"[Sample] Project Name _ Ehuu (332)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"[Sample] Project Name _ Ehuu (681)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json + Authorization: + - Bearer User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: @@ -202,8 +254,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json Content-Encoding: @@ -213,32 +263,32 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 5d334aa8-68c4-4fdf-8561-d8592a43b6ae + - af407a56-ecd1-4c07-8338-479a2debf320 Client-Request-Id: - - 5d334aa8-68c4-4fdf-8561-d8592a43b6ae + - af407a56-ecd1-4c07-8338-479a2debf320 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000310"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000544"}}' Date: - - Wed, 14 Feb 2024 18:06:18 GMT + - Wed, 24 Apr 2024 12:19:34 GMT body: encoding: UTF-8 - string: '{"error":{"code":"nameAlreadyExists","message":"Name already exists","innerError":{"date":"2024-02-14T18:06:19","request-id":"5d334aa8-68c4-4fdf-8561-d8592a43b6ae","client-request-id":"5d334aa8-68c4-4fdf-8561-d8592a43b6ae"}}}' - recorded_at: Wed, 14 Feb 2024 18:06:19 GMT + string: '{"error":{"code":"nameAlreadyExists","message":"Name already exists","innerError":{"date":"2024-04-24T12:19:34","request-id":"af407a56-ecd1-4c07-8338-479a2debf320","client-request-id":"af407a56-ecd1-4c07-8338-479a2debf320"}}}' + recorded_at: Wed, 24 Apr 2024 12:19:34 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"_=o=_ _ _Jedi_ Project Folder ___ (333)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"_=o=_ _ _Jedi_ Project Folder ___ (682)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json + Authorization: + - Bearer User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: @@ -250,53 +300,51 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{1C1ABE93-8FE4-4779-BDB9-2A4FD1BAAF46},1"' + - '"{E3D59703-6D9C-46A1-A7E9-4382400BA21F},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PMTXYNBZZEPPFD33OJKJ7I3VL2G') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PIDS7K6HHDNUFDKP2KDQJAAXIQ7') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - c1647c7c-16bf-4005-9147-e8bdfa67fc6c + - e483861a-1cf5-491d-a685-4dbc636668a6 Client-Request-Id: - - c1647c7c-16bf-4005-9147-e8bdfa67fc6c + - e483861a-1cf5-491d-a685-4dbc636668a6 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016A"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057D"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:06:18 GMT + - Wed, 24 Apr 2024 12:19:34 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{1C1ABE93-8FE4-4779-BDB9-2A4FD1BAAF46},1\"","createdDateTime":"2024-02-14T18:06:19Z","eTag":"\"{1C1ABE93-8FE4-4779-BDB9-2A4FD1BAAF46},1\"","id":"01AZJL5PMTXYNBZZEPPFD33OJKJ7I3VL2G","lastModifiedDateTime":"2024-02-14T18:06:19Z","name":"_=o=_ - _ _Jedi_ Project Folder ___ (333)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(333)","cTag":"\"c:{1C1ABE93-8FE4-4779-BDB9-2A4FD1BAAF46},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{E3D59703-6D9C-46A1-A7E9-4382400BA21F},1\"","createdDateTime":"2024-04-24T12:19:35Z","eTag":"\"{E3D59703-6D9C-46A1-A7E9-4382400BA21F},1\"","id":"01AZJL5PIDS7K6HHDNUFDKP2KDQJAAXIQ7","lastModifiedDateTime":"2024-04-24T12:19:35Z","name":"_=o=_ + _ _Jedi_ Project Folder ___ (682)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(682)","cTag":"\"c:{E3D59703-6D9C-46A1-A7E9-4382400BA21F},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:06:19Z","lastModifiedDateTime":"2024-02-14T18:06:19Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:06:19 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:19:35Z","lastModifiedDateTime":"2024-04-24T12:19:35Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:19:35 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"PUBLIC PROJECT (335)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"PUBLIC PROJECT (684)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json + Authorization: + - Bearer User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: @@ -308,41 +356,39 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{07EF5403-7CC3-4D71-9640-D05DC9CC70D2},1"' + - '"{94F14FFC-27A3-4C94-BD11-2CEE08CECA1F},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PIDKTXQPQ34OFGZMQGQLXE4Y4GS') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PP4J7YZJIZHSRGL2EJM5YEM5SQ7') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - a12a4756-4815-494d-a052-20695a09c010 + - 54104e3f-2450-4374-adab-b0b605bc0d05 Client-Request-Id: - - a12a4756-4815-494d-a052-20695a09c010 + - 54104e3f-2450-4374-adab-b0b605bc0d05 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000364"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000164"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:06:19 GMT + - Wed, 24 Apr 2024 12:19:35 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{07EF5403-7CC3-4D71-9640-D05DC9CC70D2},1\"","createdDateTime":"2024-02-14T18:06:19Z","eTag":"\"{07EF5403-7CC3-4D71-9640-D05DC9CC70D2},1\"","id":"01AZJL5PIDKTXQPQ34OFGZMQGQLXE4Y4GS","lastModifiedDateTime":"2024-02-14T18:06:19Z","name":"PUBLIC - PROJECT (335)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(335)","cTag":"\"c:{07EF5403-7CC3-4D71-9640-D05DC9CC70D2},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{94F14FFC-27A3-4C94-BD11-2CEE08CECA1F},1\"","createdDateTime":"2024-04-24T12:19:36Z","eTag":"\"{94F14FFC-27A3-4C94-BD11-2CEE08CECA1F},1\"","id":"01AZJL5PP4J7YZJIZHSRGL2EJM5YEM5SQ7","lastModifiedDateTime":"2024-04-24T12:19:36Z","name":"PUBLIC + PROJECT (684)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(684)","cTag":"\"c:{94F14FFC-27A3-4C94-BD11-2CEE08CECA1F},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:06:19Z","lastModifiedDateTime":"2024-02-14T18:06:19Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:06:19 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:19:36Z","lastModifiedDateTime":"2024-04-24T12:19:36Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:19:35 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLFRSV4NUBEIFC3Q6B7G7CBNZXV + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB body: encoding: US-ASCII string: '' @@ -354,7 +400,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -364,37 +410,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 220bbd09-473e-467d-a3d7-49beffabb01d + - 9875bf12-685c-447b-a0cd-54c1414bcb7e Client-Request-Id: - - 220bbd09-473e-467d-a3d7-49beffabb01d + - 9875bf12-685c-447b-a0cd-54c1414bcb7e X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000311"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000160"}}' Date: - - Wed, 14 Feb 2024 18:06:19 GMT + - Wed, 24 Apr 2024 12:19:35 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:06:18Z","eTag":"\"{C6AB8C65-24D0-4541-B878-3F37C416E6F5},1\"","id":"01AZJL5PLFRSV4NUBEIFC3Q6B7G7CBNZXV","lastModifiedDateTime":"2024-02-14T18:06:18Z","name":"[Sample] - Project Name _ Ehuu (332)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(332)","cTag":"\"c:{C6AB8C65-24D0-4541-B878-3F37C416E6F5},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:06:18Z","lastModifiedDateTime":"2024-02-14T18:06:18Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:06:19 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-18T12:05:15Z","eTag":"\"{B94392DB-A502-4109-9EC5-17E7ABFFF461},4\"","id":"01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-18T12:05:15Z","name":"[dev] + Large (4)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5Bdev%5D%20Large%20(4)","cTag":"\"c:{B94392DB-A502-4109-9EC5-17E7ABFFF461},0\"","fileSystemInfo":{"createdDateTime":"2024-04-18T12:05:15Z","lastModifiedDateTime":"2024-04-18T12:05:15Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:19:36 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLFRSV4NUBEIFC3Q6B7G7CBNZXV/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB/permissions body: encoding: US-ASCII string: '' @@ -406,7 +448,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -416,22 +458,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - c32e858b-f3ef-41c0-8a0e-1dd3e32f7ae8 + - 8b12f87a-2d3f-4ad7-83e4-01fc930786b0 Client-Request-Id: - - c32e858b-f3ef-41c0-8a0e-1dd3e32f7ae8 + - 8b12f87a-2d3f-4ad7-83e4-01fc930786b0 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016D"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057C"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -439,142 +477,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:06:19 GMT + - Wed, 24 Apr 2024 12:19:35 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PLFRSV4NUBEIFC3Q6B7G7CBNZXV'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:20 GMT -- request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.2 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 200 - message: OK - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Vary: - - Accept-Encoding - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - cc556f82-3536-4b61-931e-f69f99f257a6 - Client-Request-Id: - - cc556f82-3536-4b61-931e-f69f99f257a6 - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000351"}}' - Odata-Version: - - '4.0' - Date: - - Wed, 14 Feb 2024 18:06:20 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-01-29T17:30:48Z","eTag":"\"{AA674C60-1512-4607-AC2F-7838F996B4A9},1\"","id":"01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ","lastModifiedDateTime":"2024-01-29T17:30:48Z","name":"Project - B","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20B","cTag":"\"c:{AA674C60-1512-4607-AC2F-7838F996B4A9},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:48Z","lastModifiedDateTime":"2024-01-29T17:30:48Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:06:20 GMT -- request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ/permissions - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.2 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 200 - message: OK - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Vary: - - Accept-Encoding - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - 8b8e1204-9102-4a87-988b-d323f89ba659 - Client-Request-Id: - - 8b8e1204-9102-4a87-988b-d323f89ba659 - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000166"}}' - Link: - - ;rel="deprecation";type="text/html", - ;rel="deprecation";type="text/html" - Deprecation: - - Fri, 03 Sep 2021 23:59:59 GMT - Sunset: - - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' - Date: - - Wed, 14 Feb 2024 18:06:20 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject - file storage tests Owners","id":"3","loginName":"OpenProject file storage - tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:20 GMT + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' + recorded_at: Wed, 24 Apr 2024 12:19:36 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKYYH55AYOPTBB2LSYU5E7ZDGMC body: encoding: US-ASCII string: '' @@ -586,7 +509,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -596,37 +519,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - de1f1064-7785-4391-b633-ae849440f9d3 + - e29766e7-b8e5-49c3-a67a-3c91643c36e0 Client-Request-Id: - - de1f1064-7785-4391-b633-ae849440f9d3 + - e29766e7-b8e5-49c3-a67a-3c91643c36e0 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000169"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000559"}}' Date: - - Wed, 14 Feb 2024 18:06:20 GMT + - Wed, 24 Apr 2024 12:19:36 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-01-29T17:30:52Z","eTag":"\"{98914E03-2109-4235-8A69-3092969D062D},1\"","id":"01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN","lastModifiedDateTime":"2024-01-29T17:30:52Z","name":"Project - C","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20C","cTag":"\"c:{98914E03-2109-4235-8A69-3092969D062D},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:52Z","lastModifiedDateTime":"2024-01-29T17:30:52Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:06:20 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:19:34Z","eTag":"\"{D0FBC158-CF61-4398-A5CB-14E93F919982},2\"","id":"01AZJL5PKYYH55AYOPTBB2LSYU5E7ZDGMC","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:19:35Z","name":"[Sample] + Project Name _ Ehuu (681)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(681)","cTag":"\"c:{D0FBC158-CF61-4398-A5CB-14E93F919982},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:19:34Z","lastModifiedDateTime":"2024-04-24T12:19:35Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:19:36 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKYYH55AYOPTBB2LSYU5E7ZDGMC/permissions body: encoding: US-ASCII string: '' @@ -638,7 +557,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -648,22 +567,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - e1a8fad7-b950-40f4-81df-a9d753ec833c + - 7b84d862-d5ff-450b-9d4d-19b5c2d36b9b Client-Request-Id: - - e1a8fad7-b950-40f4-81df-a9d753ec833c + - 7b84d862-d5ff-450b-9d4d-19b5c2d36b9b X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000165"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000544"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -671,26 +586,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:06:20 GMT + - Wed, 24 Apr 2024 12:19:37 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PKYYH55AYOPTBB2LSYU5E7ZDGMC'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:21 GMT + recorded_at: Wed, 24 Apr 2024 12:19:37 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K body: encoding: US-ASCII string: '' @@ -702,7 +618,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -712,36 +628,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - ee47530f-a43f-41ee-8c3d-8c0fb1b0554c + - 6b5c9353-b5ab-45ea-9af7-fcc83d3fb3ef Client-Request-Id: - - ee47530f-a43f-41ee-8c3d-8c0fb1b0554c + - 6b5c9353-b5ab-45ea-9af7-fcc83d3fb3ef X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000034F"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000052E"}}' Date: - - Wed, 14 Feb 2024 18:06:20 GMT + - Wed, 24 Apr 2024 12:19:37 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2023-12-15T14:58:59Z","eTag":"\"{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},33\"","id":"01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM","lastModifiedDateTime":"2023-12-29T10:44:06Z","name":"Renamed - Project A (1234)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Renamed%20Project%20A%20(1234)","cTag":"\"c:{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},0\"","decorator":{"iconColor":"darkGreen"},"size":33882,"createdBy":{"user":{"email":"w.lindenthal@finnlabs.com","id":"99fb2d61-359b-4fae-91c9-1ac6c8f02b5e","displayName":"Wieland - Lindenthal"}},"lastModifiedBy":{"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2023-12-15T14:58:59Z","lastModifiedDateTime":"2023-12-29T10:44:06Z"},"folder":{"childCount":2},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:06:21 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-03-18T18:12:55Z","eTag":"\"{D03A86A5-D563-45AC-B5FA-2A333F353BEA},275\"","id":"01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-03-18T18:12:55Z","name":"Demo + project (1)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Demo%20project%20(1)","cTag":"\"c:{D03A86A5-D563-45AC-B5FA-2A333F353BEA},0\"","fileSystemInfo":{"createdDateTime":"2024-03-18T18:12:55Z","lastModifiedDateTime":"2024-03-18T18:12:55Z"},"folder":{"childCount":1},"shared":{"scope":"users"},"size":988098560}' + recorded_at: Wed, 24 Apr 2024 12:19:37 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K/permissions body: encoding: US-ASCII string: '' @@ -753,7 +666,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -763,22 +676,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 0f9f9a73-8840-427a-ad0e-b33883d5bd91 + - e6f18941-6cc1-423a-9cd3-c26410d76aec Client-Request-Id: - - 0f9f9a73-8840-427a-ad0e-b33883d5bd91 + - e6f18941-6cc1-423a-9cd3-c26410d76aec X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000166"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000035F"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -786,26 +695,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:06:21 GMT + - Wed, 24 Apr 2024 12:19:37 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:21 GMT + recorded_at: Wed, 24 Apr 2024 12:19:38 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PMTXYNBZZEPPFD33OJKJ7I3VL2G + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDS7K6HHDNUFDKP2KDQJAAXIQ7 body: encoding: US-ASCII string: '' @@ -817,7 +727,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -827,37 +737,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 260e0501-c966-4a53-9fff-387d751c0bdc + - 643a03bd-6f1e-4caa-9113-c770d5229c78 Client-Request-Id: - - 260e0501-c966-4a53-9fff-387d751c0bdc + - 643a03bd-6f1e-4caa-9113-c770d5229c78 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016E"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016D"}}' Date: - - Wed, 14 Feb 2024 18:06:21 GMT + - Wed, 24 Apr 2024 12:19:37 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:06:19Z","eTag":"\"{1C1ABE93-8FE4-4779-BDB9-2A4FD1BAAF46},1\"","id":"01AZJL5PMTXYNBZZEPPFD33OJKJ7I3VL2G","lastModifiedDateTime":"2024-02-14T18:06:19Z","name":"_=o=_ - _ _Jedi_ Project Folder ___ (333)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(333)","cTag":"\"c:{1C1ABE93-8FE4-4779-BDB9-2A4FD1BAAF46},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:06:19Z","lastModifiedDateTime":"2024-02-14T18:06:19Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:06:21 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:19:35Z","eTag":"\"{E3D59703-6D9C-46A1-A7E9-4382400BA21F},2\"","id":"01AZJL5PIDS7K6HHDNUFDKP2KDQJAAXIQ7","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:19:35Z","name":"_=o=_ + _ _Jedi_ Project Folder ___ (682)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(682)","cTag":"\"c:{E3D59703-6D9C-46A1-A7E9-4382400BA21F},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:19:35Z","lastModifiedDateTime":"2024-04-24T12:19:35Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:19:38 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PMTXYNBZZEPPFD33OJKJ7I3VL2G/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDS7K6HHDNUFDKP2KDQJAAXIQ7/permissions body: encoding: US-ASCII string: '' @@ -869,7 +775,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -879,22 +785,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 6185fc2c-8b3b-4558-926d-f7e082f0434f + - 32fedaed-e2ff-4768-8ff8-aaa62b5288d6 Client-Request-Id: - - 6185fc2c-8b3b-4558-926d-f7e082f0434f + - 32fedaed-e2ff-4768-8ff8-aaa62b5288d6 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000160"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000164"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -902,26 +804,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:06:21 GMT + - Wed, 24 Apr 2024 12:19:38 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PMTXYNBZZEPPFD33OJKJ7I3VL2G'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PIDS7K6HHDNUFDKP2KDQJAAXIQ7'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:22 GMT + recorded_at: Wed, 24 Apr 2024 12:19:39 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PMTXYNBZZEPPFD33OJKJ7I3VL2G/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDS7K6HHDNUFDKP2KDQJAAXIQ7/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -933,7 +836,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -945,8 +848,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -958,11 +859,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 48ceee77-ea37-4a0f-aee1-0a004876ae67 + - 1c891e44-a4b3-4823-86c4-96c3acb3682e Client-Request-Id: - - 48ceee77-ea37-4a0f-aee1-0a004876ae67 + - 1c891e44-a4b3-4823-86c4-96c3acb3682e X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016A"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057E"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -973,16 +874,16 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:06:22 GMT + - Wed, 24 Apr 2024 12:19:39 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test - Manager 01"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + Manager 01"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:23 GMT + recorded_at: Wed, 24 Apr 2024 12:19:40 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDKTXQPQ34OFGZMQGQLXE4Y4GS + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PP4J7YZJIZHSRGL2EJM5YEM5SQ7 body: encoding: US-ASCII string: '' @@ -994,7 +895,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1004,37 +905,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 88cfb993-0d83-45fa-be63-17cdcfd8060b + - 685d291e-6aa6-42ce-8f02-2b89d01a0e0c Client-Request-Id: - - 88cfb993-0d83-45fa-be63-17cdcfd8060b + - 685d291e-6aa6-42ce-8f02-2b89d01a0e0c X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000350"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055D"}}' Date: - - Wed, 14 Feb 2024 18:06:23 GMT + - Wed, 24 Apr 2024 12:19:40 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:06:19Z","eTag":"\"{07EF5403-7CC3-4D71-9640-D05DC9CC70D2},1\"","id":"01AZJL5PIDKTXQPQ34OFGZMQGQLXE4Y4GS","lastModifiedDateTime":"2024-02-14T18:06:19Z","name":"PUBLIC - PROJECT (335)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(335)","cTag":"\"c:{07EF5403-7CC3-4D71-9640-D05DC9CC70D2},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:06:19Z","lastModifiedDateTime":"2024-02-14T18:06:19Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:06:23 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:19:36Z","eTag":"\"{94F14FFC-27A3-4C94-BD11-2CEE08CECA1F},2\"","id":"01AZJL5PP4J7YZJIZHSRGL2EJM5YEM5SQ7","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:19:36Z","name":"PUBLIC + PROJECT (684)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(684)","cTag":"\"c:{94F14FFC-27A3-4C94-BD11-2CEE08CECA1F},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:19:36Z","lastModifiedDateTime":"2024-04-24T12:19:36Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:19:40 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDKTXQPQ34OFGZMQGQLXE4Y4GS/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PP4J7YZJIZHSRGL2EJM5YEM5SQ7/permissions body: encoding: US-ASCII string: '' @@ -1046,7 +943,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1056,22 +953,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 1eae80b6-292b-4412-b5ec-b3a821e1d50d + - 20c96f8e-460f-431c-81f7-cd6c854bf5a7 Client-Request-Id: - - 1eae80b6-292b-4412-b5ec-b3a821e1d50d + - 20c96f8e-460f-431c-81f7-cd6c854bf5a7 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016E"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000035F"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1079,26 +972,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:06:23 GMT + - Wed, 24 Apr 2024 12:19:40 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PIDKTXQPQ34OFGZMQGQLXE4Y4GS'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PP4J7YZJIZHSRGL2EJM5YEM5SQ7'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:24 GMT + recorded_at: Wed, 24 Apr 2024 12:19:41 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDKTXQPQ34OFGZMQGQLXE4Y4GS/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PP4J7YZJIZHSRGL2EJM5YEM5SQ7/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["read"],"recipients":[{"objectId":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -1110,7 +1004,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -1122,8 +1016,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -1135,11 +1027,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 75ef634b-12d8-4431-af41-272bd3962ab2 + - deb21c97-956f-4e16-80e7-3cd20829ae34 Client-Request-Id: - - 75ef634b-12d8-4431-af41-272bd3962ab2 + - deb21c97-956f-4e16-80e7-3cd20829ae34 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000311"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000164"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1150,16 +1042,16 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:06:25 GMT + - Wed, 24 Apr 2024 12:19:42 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test - user 02"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test + user 02"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:25 GMT + recorded_at: Wed, 24 Apr 2024 12:19:42 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDKTXQPQ34OFGZMQGQLXE4Y4GS/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PP4J7YZJIZHSRGL2EJM5YEM5SQ7/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"}]}' @@ -1171,7 +1063,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -1183,8 +1075,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -1196,11 +1086,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 2119dec8-3132-407b-9dd0-f978be5df101 + - 730c845b-1a20-4972-bf79-36982a06c73d Client-Request-Id: - - 2119dec8-3132-407b-9dd0-f978be5df101 + - 730c845b-1a20-4972-bf79-36982a06c73d X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000164"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055D"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1211,27 +1101,25 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:06:25 GMT + - Wed, 24 Apr 2024 12:19:43 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test Manager 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:26 GMT + recorded_at: Wed, 24 Apr 2024 12:19:43 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLFRSV4NUBEIFC3Q6B7G7CBNZXV + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKYYH55AYOPTBB2LSYU5E7ZDGMC body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1244,32 +1132,30 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 4ef7f4d7-09ea-45b8-8443-cd44f54920ac + - c7bdc675-7915-4071-a3ec-590728222de1 Client-Request-Id: - - 4ef7f4d7-09ea-45b8-8443-cd44f54920ac + - c7bdc675-7915-4071-a3ec-590728222de1 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000163"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000350"}}' Date: - - Wed, 14 Feb 2024 18:06:26 GMT + - Wed, 24 Apr 2024 12:19:44 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:06:26 GMT + recorded_at: Wed, 24 Apr 2024 12:19:44 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PMTXYNBZZEPPFD33OJKJ7I3VL2G + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDS7K6HHDNUFDKP2KDQJAAXIQ7 body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1282,32 +1168,30 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - c8914d1d-6321-48e0-91a2-2ed2aa41ae3c + - 2cb680f3-239f-4d0e-bae8-ba666954a92b Client-Request-Id: - - c8914d1d-6321-48e0-91a2-2ed2aa41ae3c + - 2cb680f3-239f-4d0e-bae8-ba666954a92b X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016D"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000166"}}' Date: - - Wed, 14 Feb 2024 18:06:26 GMT + - Wed, 24 Apr 2024 12:19:44 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:06:26 GMT + recorded_at: Wed, 24 Apr 2024 12:19:44 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDKTXQPQ34OFGZMQGQLXE4Y4GS + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PP4J7YZJIZHSRGL2EJM5YEM5SQ7 body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1320,15 +1204,15 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 47b03023-e382-40f5-a622-40ee7184ac57 + - 3904da98-28fd-4550-9617-5677a5d4db5a Client-Request-Id: - - 47b03023-e382-40f5-a622-40ee7184ac57 + - 3904da98-28fd-4550-9617-5677a5d4db5a X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000035F"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055B"}}' Date: - - Wed, 14 Feb 2024 18:06:26 GMT + - Wed, 24 Apr 2024 12:19:44 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:06:27 GMT + recorded_at: Wed, 24 Apr 2024 12:19:44 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_fail_add_user.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_fail_add_user.yml index 87d751cfe343..f1895feedf39 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_fail_add_user.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_fail_add_user.yml @@ -37,24 +37,26 @@ http_interactions: P3p: - CP="DSP CUR OTPi IND OTRi ONL FIN" X-Ms-Request-Id: - - 183447ff-07d6-47c8-bc96-5ef371b21200 + - 8a516bfc-5f16-41c0-9e2d-35136bf17300 X-Ms-Ests-Server: - - 2.1.17282.6 - SEC ProdSlices + - 2.1.17846.6 - NEULR1 ProdSlices + X-Ms-Srs: + - 1.P X-Xss-Protection: - '0' Set-Cookie: - - fpc=Ao4GIHjr_idNpKW8AKAgQwCkbDoXAQAAABD4Xt0OAAAA; expires=Fri, 15-Mar-2024 - 18:06:08 GMT; path=/; secure; HttpOnly; SameSite=None + - fpc=AiWpbluAxAhKsVZiO7VeOKukbDoXAQAAAMnvut0OAAAA; expires=Fri, 24-May-2024 + 12:19:22 GMT; path=/; secure; HttpOnly; SameSite=None - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly Date: - - Wed, 14 Feb 2024 18:06:07 GMT + - Wed, 24 Apr 2024 12:19:22 GMT Content-Length: - '1708' body: encoding: UTF-8 string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Wed, 14 Feb 2024 18:06:08 GMT + recorded_at: Wed, 24 Apr 2024 12:19:22 GMT - request: method: get uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children @@ -69,7 +71,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -79,118 +81,111 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 7e9e441d-1c36-49e4-a258-418917cd1f8d + - 834993c0-716f-4e28-b8fe-9eca0dde0e16 Client-Request-Id: - - 7e9e441d-1c36-49e4-a258-418917cd1f8d + - 834993c0-716f-4e28-b8fe-9eca0dde0e16 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000364"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057C"}}' Date: - - Wed, 14 Feb 2024 18:06:08 GMT + - Wed, 24 Apr 2024 12:19:21 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children","value":[{"createdDateTime":"2024-01-29T17:30:48Z","eTag":"\"{AA674C60-1512-4607-AC2F-7838F996B4A9},1\"","id":"01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ","lastModifiedDateTime":"2024-01-29T17:30:48Z","name":"Project - B","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20B","cTag":"\"c:{AA674C60-1512-4607-AC2F-7838F996B4A9},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:48Z","lastModifiedDateTime":"2024-01-29T17:30:48Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2024-01-29T17:30:52Z","eTag":"\"{98914E03-2109-4235-8A69-3092969D062D},1\"","id":"01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN","lastModifiedDateTime":"2024-01-29T17:30:52Z","name":"Project - C","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20C","cTag":"\"c:{98914E03-2109-4235-8A69-3092969D062D},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:52Z","lastModifiedDateTime":"2024-01-29T17:30:52Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2023-12-15T14:58:59Z","eTag":"\"{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},33\"","id":"01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM","lastModifiedDateTime":"2023-12-29T10:44:06Z","name":"Renamed - Project A (1234)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Renamed%20Project%20A%20(1234)","cTag":"\"c:{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},0\"","decorator":{"iconColor":"darkGreen"},"size":33882,"createdBy":{"user":{"email":"w.lindenthal@finnlabs.com","id":"99fb2d61-359b-4fae-91c9-1ac6c8f02b5e","displayName":"Wieland - Lindenthal"}},"lastModifiedBy":{"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2023-12-15T14:58:59Z","lastModifiedDateTime":"2023-12-29T10:44:06Z"},"folder":{"childCount":2},"shared":{"scope":"users"}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:09 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)","value":[{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-18T12:05:15Z","eTag":"\"{B94392DB-A502-4109-9EC5-17E7ABFFF461},4\"","id":"01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-18T12:05:15Z","name":"[dev] + Large (4)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5Bdev%5D%20Large%20(4)","cTag":"\"c:{B94392DB-A502-4109-9EC5-17E7ABFFF461},0\"","fileSystemInfo":{"createdDateTime":"2024-04-18T12:05:15Z","lastModifiedDateTime":"2024-04-18T12:05:15Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0},{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-03-18T18:12:55Z","eTag":"\"{D03A86A5-D563-45AC-B5FA-2A333F353BEA},275\"","id":"01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-03-18T18:12:55Z","name":"Demo + project (1)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Demo%20project%20(1)","cTag":"\"c:{D03A86A5-D563-45AC-B5FA-2A333F353BEA},0\"","fileSystemInfo":{"createdDateTime":"2024-03-18T18:12:55Z","lastModifiedDateTime":"2024-03-18T18:12:55Z"},"folder":{"childCount":1},"shared":{"scope":"users"},"size":988098560}]}' + recorded_at: Wed, 24 Apr 2024 12:19:22 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token body: - encoding: UTF-8 - string: '{"name":"[Sample] Project Name _ Ehuu (332)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded Content-Length: - - '100' + - '201' response: status: - code: 201 - message: Created + code: 200 + message: OK headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked + Pragma: + - no-cache Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Etag: - - '"{C467A03E-A374-4DA4-8E03-EC30D935CCB0},1"' - Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PJ6UBT4I5FDURGY4A7MGDMTLTFQ') - Vary: - - Accept-Encoding + - application/json; charset=utf-8 + Expires: + - "-1" Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - 8ccc50e0-562c-44c5-bb37-e29c33db75c3 - Client-Request-Id: - - 8ccc50e0-562c-44c5-bb37-e29c33db75c3 - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000167"}}' - Odata-Version: - - '4.0' + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - 8ac17fcf-1252-4734-b9f8-dadbd11b9700 + X-Ms-Ests-Server: + - 2.1.17846.6 - SEC ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=Au-YIg-J3QJNv_vUAdqpDoSkbDoXAQAAAMrvut0OAAAA; expires=Fri, 24-May-2024 + 12:19:22 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly Date: - - Wed, 14 Feb 2024 18:06:08 GMT + - Wed, 24 Apr 2024 12:19:22 GMT + Content-Length: + - '1735' body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{C467A03E-A374-4DA4-8E03-EC30D935CCB0},1\"","createdDateTime":"2024-02-14T18:06:09Z","eTag":"\"{C467A03E-A374-4DA4-8E03-EC30D935CCB0},1\"","id":"01AZJL5PJ6UBT4I5FDURGY4A7MGDMTLTFQ","lastModifiedDateTime":"2024-02-14T18:06:09Z","name":"[Sample] - Project Name _ Ehuu (332)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(332)","cTag":"\"c:{C467A03E-A374-4DA4-8E03-EC30D935CCB0},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject - Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:06:09Z","lastModifiedDateTime":"2024-02-14T18:06:09Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:06:09 GMT + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Wed, 24 Apr 2024 12:19:22 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"_=o=_ _ _Jedi_ Project Folder ___ (333)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"[Sample] Project Name _ Ehuu (681)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: - - '105' + - '100' + Authorization: + - Bearer response: status: code: 201 @@ -198,57 +193,55 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{DFA63B51-79D9-4071-BF2B-E682ECDE957F},1"' + - '"{5D76AE8F-9390-45AE-A628-C07242559498},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PKRHOTN7WLZOFAL6K7GQLWN5FL7') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PMPVZ3F3EETVZC2MKGAOJBFLFEY') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - a2d0acbf-5488-4f7c-9be5-f107130c3602 + - 4525871f-9d23-479d-b260-0d23f4dbeadf Client-Request-Id: - - a2d0acbf-5488-4f7c-9be5-f107130c3602 + - 4525871f-9d23-479d-b260-0d23f4dbeadf X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000164"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055D"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:06:09 GMT + - Wed, 24 Apr 2024 12:19:22 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{DFA63B51-79D9-4071-BF2B-E682ECDE957F},1\"","createdDateTime":"2024-02-14T18:06:10Z","eTag":"\"{DFA63B51-79D9-4071-BF2B-E682ECDE957F},1\"","id":"01AZJL5PKRHOTN7WLZOFAL6K7GQLWN5FL7","lastModifiedDateTime":"2024-02-14T18:06:10Z","name":"_=o=_ - _ _Jedi_ Project Folder ___ (333)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(333)","cTag":"\"c:{DFA63B51-79D9-4071-BF2B-E682ECDE957F},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{5D76AE8F-9390-45AE-A628-C07242559498},1\"","createdDateTime":"2024-04-24T12:19:23Z","eTag":"\"{5D76AE8F-9390-45AE-A628-C07242559498},1\"","id":"01AZJL5PMPVZ3F3EETVZC2MKGAOJBFLFEY","lastModifiedDateTime":"2024-04-24T12:19:23Z","name":"[Sample] + Project Name _ Ehuu (681)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(681)","cTag":"\"c:{5D76AE8F-9390-45AE-A628-C07242559498},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:06:10Z","lastModifiedDateTime":"2024-02-14T18:06:10Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:06:09 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:19:23Z","lastModifiedDateTime":"2024-04-24T12:19:23Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:19:23 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"PUBLIC PROJECT (335)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"_=o=_ _ _Jedi_ Project Folder ___ (682)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json + Authorization: + - Bearer User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: - - '86' + - '105' response: status: code: 201 @@ -256,157 +249,95 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{7692AFB3-C903-4D92-8A47-08FDD7E49569},1"' + - '"{26FB48CB-F7A2-4726-926B-89A151AE7AFC},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PNTV6JHMA6JSJGYURYI7XL6JFLJ') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5POLJD5SNIXXEZDZE24JUFI246X4') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 1ff6a47b-783c-40ca-8fce-f18ebbfb964d + - 880d615a-c9aa-40db-a0d3-796839d8a1d7 Client-Request-Id: - - 1ff6a47b-783c-40ca-8fce-f18ebbfb964d + - 880d615a-c9aa-40db-a0d3-796839d8a1d7 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000054C"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:06:09 GMT + - Wed, 24 Apr 2024 12:19:23 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{7692AFB3-C903-4D92-8A47-08FDD7E49569},1\"","createdDateTime":"2024-02-14T18:06:10Z","eTag":"\"{7692AFB3-C903-4D92-8A47-08FDD7E49569},1\"","id":"01AZJL5PNTV6JHMA6JSJGYURYI7XL6JFLJ","lastModifiedDateTime":"2024-02-14T18:06:10Z","name":"PUBLIC - PROJECT (335)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(335)","cTag":"\"c:{7692AFB3-C903-4D92-8A47-08FDD7E49569},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{26FB48CB-F7A2-4726-926B-89A151AE7AFC},1\"","createdDateTime":"2024-04-24T12:19:24Z","eTag":"\"{26FB48CB-F7A2-4726-926B-89A151AE7AFC},1\"","id":"01AZJL5POLJD5SNIXXEZDZE24JUFI246X4","lastModifiedDateTime":"2024-04-24T12:19:24Z","name":"_=o=_ + _ _Jedi_ Project Folder ___ (682)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(682)","cTag":"\"c:{26FB48CB-F7A2-4726-926B-89A151AE7AFC},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:06:10Z","lastModifiedDateTime":"2024-02-14T18:06:10Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:06:10 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:19:24Z","lastModifiedDateTime":"2024-04-24T12:19:24Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:19:23 GMT - request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ + method: post + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: - encoding: US-ASCII - string: '' + encoding: UTF-8 + string: '{"name":"PUBLIC PROJECT (684)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json - User-Agent: - - httpx.rb/1.2.2 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 200 - message: OK - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Vary: - - Accept-Encoding - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - db177b60-b094-4d1a-891f-f0cba6e38870 - Client-Request-Id: - - db177b60-b094-4d1a-891f-f0cba6e38870 - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000313"}}' - Odata-Version: - - '4.0' - Date: - - Wed, 14 Feb 2024 18:06:09 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-01-29T17:30:48Z","eTag":"\"{AA674C60-1512-4607-AC2F-7838F996B4A9},1\"","id":"01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ","lastModifiedDateTime":"2024-01-29T17:30:48Z","name":"Project - B","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20B","cTag":"\"c:{AA674C60-1512-4607-AC2F-7838F996B4A9},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:48Z","lastModifiedDateTime":"2024-01-29T17:30:48Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:06:10 GMT -- request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ/permissions - body: - encoding: US-ASCII - string: '' - headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate + Content-Length: + - '86' response: status: - code: 200 - message: OK + code: 201 + message: Created headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip + Etag: + - '"{5DCA1CF9-0FBC-4A34-827C-C5FCF4838961},1"' + Location: + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PPZDTFF3PAPGRFIE7GF7T2IHCLB') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 14ec5a98-2f93-450e-9645-7ee97ddc2837 + - 14def22a-9f63-4cd3-946c-029b90cb52d9 Client-Request-Id: - - 14ec5a98-2f93-450e-9645-7ee97ddc2837 + - 14def22a-9f63-4cd3-946c-029b90cb52d9 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000311"}}' - Link: - - ;rel="deprecation";type="text/html", - ;rel="deprecation";type="text/html" - Deprecation: - - Fri, 03 Sep 2021 23:59:59 GMT - Sunset: - - Sun, 01 Oct 2023 23:59:59 GMT + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016D"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:06:10 GMT + - Wed, 24 Apr 2024 12:19:23 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject - file storage tests Owners","id":"3","loginName":"OpenProject file storage - tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:10 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{5DCA1CF9-0FBC-4A34-827C-C5FCF4838961},1\"","createdDateTime":"2024-04-24T12:19:24Z","eTag":"\"{5DCA1CF9-0FBC-4A34-827C-C5FCF4838961},1\"","id":"01AZJL5PPZDTFF3PAPGRFIE7GF7T2IHCLB","lastModifiedDateTime":"2024-04-24T12:19:24Z","name":"PUBLIC + PROJECT (684)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(684)","cTag":"\"c:{5DCA1CF9-0FBC-4A34-827C-C5FCF4838961},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint + App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:19:24Z","lastModifiedDateTime":"2024-04-24T12:19:24Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:19:24 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB body: encoding: US-ASCII string: '' @@ -418,7 +349,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -428,37 +359,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - ff4f01ae-ddcc-4593-8efb-b29a1c4fb950 + - 214d826d-155b-4b50-ab52-33c8da3ca150 Client-Request-Id: - - ff4f01ae-ddcc-4593-8efb-b29a1c4fb950 + - 214d826d-155b-4b50-ab52-33c8da3ca150 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000167"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000169"}}' Date: - - Wed, 14 Feb 2024 18:06:10 GMT + - Wed, 24 Apr 2024 12:19:23 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-01-29T17:30:52Z","eTag":"\"{98914E03-2109-4235-8A69-3092969D062D},1\"","id":"01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN","lastModifiedDateTime":"2024-01-29T17:30:52Z","name":"Project - C","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20C","cTag":"\"c:{98914E03-2109-4235-8A69-3092969D062D},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:52Z","lastModifiedDateTime":"2024-01-29T17:30:52Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:06:10 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-18T12:05:15Z","eTag":"\"{B94392DB-A502-4109-9EC5-17E7ABFFF461},4\"","id":"01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-18T12:05:15Z","name":"[dev] + Large (4)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5Bdev%5D%20Large%20(4)","cTag":"\"c:{B94392DB-A502-4109-9EC5-17E7ABFFF461},0\"","fileSystemInfo":{"createdDateTime":"2024-04-18T12:05:15Z","lastModifiedDateTime":"2024-04-18T12:05:15Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:19:24 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB/permissions body: encoding: US-ASCII string: '' @@ -470,7 +397,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -480,22 +407,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 26c86e4a-ca40-41c9-8db6-5e7decac01c1 + - '012894c3-4636-45c7-8e19-e99b72f7c819' Client-Request-Id: - - 26c86e4a-ca40-41c9-8db6-5e7decac01c1 + - '012894c3-4636-45c7-8e19-e99b72f7c819' X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000164"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055A"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -503,26 +426,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:06:10 GMT + - Wed, 24 Apr 2024 12:19:25 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:11 GMT + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' + recorded_at: Wed, 24 Apr 2024 12:19:25 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K body: encoding: US-ASCII string: '' @@ -534,7 +458,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -544,36 +468,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 44dd2611-90f8-4de0-a17e-b344974faed1 + - 775f759b-ee26-494e-8c62-e6dde521c072 Client-Request-Id: - - 44dd2611-90f8-4de0-a17e-b344974faed1 + - 775f759b-ee26-494e-8c62-e6dde521c072 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000163"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000164"}}' Date: - - Wed, 14 Feb 2024 18:06:11 GMT + - Wed, 24 Apr 2024 12:19:25 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2023-12-15T14:58:59Z","eTag":"\"{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},33\"","id":"01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM","lastModifiedDateTime":"2023-12-29T10:44:06Z","name":"Renamed - Project A (1234)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Renamed%20Project%20A%20(1234)","cTag":"\"c:{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},0\"","decorator":{"iconColor":"darkGreen"},"size":33882,"createdBy":{"user":{"email":"w.lindenthal@finnlabs.com","id":"99fb2d61-359b-4fae-91c9-1ac6c8f02b5e","displayName":"Wieland - Lindenthal"}},"lastModifiedBy":{"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2023-12-15T14:58:59Z","lastModifiedDateTime":"2023-12-29T10:44:06Z"},"folder":{"childCount":2},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:06:11 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-03-18T18:12:55Z","eTag":"\"{D03A86A5-D563-45AC-B5FA-2A333F353BEA},275\"","id":"01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-03-18T18:12:55Z","name":"Demo + project (1)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Demo%20project%20(1)","cTag":"\"c:{D03A86A5-D563-45AC-B5FA-2A333F353BEA},0\"","fileSystemInfo":{"createdDateTime":"2024-03-18T18:12:55Z","lastModifiedDateTime":"2024-03-18T18:12:55Z"},"folder":{"childCount":1},"shared":{"scope":"users"},"size":988098560}' + recorded_at: Wed, 24 Apr 2024 12:19:25 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K/permissions body: encoding: US-ASCII string: '' @@ -585,7 +506,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -595,22 +516,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - a2bd44fa-0cf6-4487-8118-d67c89d170bc + - cd5079c6-fb57-4752-9121-c4390315d72c Client-Request-Id: - - a2bd44fa-0cf6-4487-8118-d67c89d170bc + - cd5079c6-fb57-4752-9121-c4390315d72c X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000311"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000054C"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -618,26 +535,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:06:11 GMT + - Wed, 24 Apr 2024 12:19:25 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:11 GMT + recorded_at: Wed, 24 Apr 2024 12:19:25 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJ6UBT4I5FDURGY4A7MGDMTLTFQ + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PMPVZ3F3EETVZC2MKGAOJBFLFEY body: encoding: US-ASCII string: '' @@ -649,7 +567,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -659,37 +577,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - b23dbf12-3d47-4ec4-87c3-a5cb0999f3eb + - e683eca3-2296-4284-ad96-7dbf680da9ce Client-Request-Id: - - b23dbf12-3d47-4ec4-87c3-a5cb0999f3eb + - e683eca3-2296-4284-ad96-7dbf680da9ce X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000052E"}}' Date: - - Wed, 14 Feb 2024 18:06:11 GMT + - Wed, 24 Apr 2024 12:19:26 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:06:09Z","eTag":"\"{C467A03E-A374-4DA4-8E03-EC30D935CCB0},1\"","id":"01AZJL5PJ6UBT4I5FDURGY4A7MGDMTLTFQ","lastModifiedDateTime":"2024-02-14T18:06:09Z","name":"[Sample] - Project Name _ Ehuu (332)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(332)","cTag":"\"c:{C467A03E-A374-4DA4-8E03-EC30D935CCB0},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:06:09Z","lastModifiedDateTime":"2024-02-14T18:06:09Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:06:11 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:19:23Z","eTag":"\"{5D76AE8F-9390-45AE-A628-C07242559498},2\"","id":"01AZJL5PMPVZ3F3EETVZC2MKGAOJBFLFEY","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:19:23Z","name":"[Sample] + Project Name _ Ehuu (681)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(681)","cTag":"\"c:{5D76AE8F-9390-45AE-A628-C07242559498},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:19:23Z","lastModifiedDateTime":"2024-04-24T12:19:23Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:19:26 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJ6UBT4I5FDURGY4A7MGDMTLTFQ/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PMPVZ3F3EETVZC2MKGAOJBFLFEY/permissions body: encoding: US-ASCII string: '' @@ -701,7 +615,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -711,22 +625,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - e9b18541-ad1a-4f0d-b98b-8f1fc788eece + - 5f3ee9e0-0a00-4e99-b609-7bf57bdb1157 Client-Request-Id: - - e9b18541-ad1a-4f0d-b98b-8f1fc788eece + - 5f3ee9e0-0a00-4e99-b609-7bf57bdb1157 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000169"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000035F"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -734,26 +644,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:06:11 GMT + - Wed, 24 Apr 2024 12:19:26 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PJ6UBT4I5FDURGY4A7MGDMTLTFQ'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PMPVZ3F3EETVZC2MKGAOJBFLFEY'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:12 GMT + recorded_at: Wed, 24 Apr 2024 12:19:26 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJ6UBT4I5FDURGY4A7MGDMTLTFQ/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PMPVZ3F3EETVZC2MKGAOJBFLFEY/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"},{"objectId":"my_name_is_mud"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -765,7 +676,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -777,8 +688,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json Content-Encoding: @@ -788,11 +697,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 68229734-e5b2-44bd-ac87-2f9c416e5815 + - 2962f04e-ec8e-4736-b548-dbde9eab40a9 Client-Request-Id: - - 68229734-e5b2-44bd-ac87-2f9c416e5815 + - 2962f04e-ec8e-4736-b548-dbde9eab40a9 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000311"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000169"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -801,15 +710,15 @@ http_interactions: Sunset: - Sun, 01 Oct 2023 23:59:59 GMT Date: - - Wed, 14 Feb 2024 18:06:12 GMT + - Wed, 24 Apr 2024 12:19:27 GMT body: encoding: UTF-8 string: '{"error":{"code":"noResolvedUsers","message":"One or more users could - not be resolved.","innerError":{"date":"2024-02-14T18:06:13","request-id":"68229734-e5b2-44bd-ac87-2f9c416e5815","client-request-id":"68229734-e5b2-44bd-ac87-2f9c416e5815"}}}' - recorded_at: Wed, 14 Feb 2024 18:06:13 GMT + not be resolved.","innerError":{"date":"2024-04-24T12:19:27","request-id":"2962f04e-ec8e-4736-b548-dbde9eab40a9","client-request-id":"2962f04e-ec8e-4736-b548-dbde9eab40a9"}}}' + recorded_at: Wed, 24 Apr 2024 12:19:27 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKRHOTN7WLZOFAL6K7GQLWN5FL7 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POLJD5SNIXXEZDZE24JUFI246X4 body: encoding: US-ASCII string: '' @@ -821,7 +730,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -831,37 +740,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 77c96a98-120a-4a94-b389-f6fbd1d0ff39 + - 93f2b66e-1000-483d-a773-ddc6dce3c087 Client-Request-Id: - - 77c96a98-120a-4a94-b389-f6fbd1d0ff39 + - 93f2b66e-1000-483d-a773-ddc6dce3c087 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000164"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000166"}}' Date: - - Wed, 14 Feb 2024 18:06:12 GMT + - Wed, 24 Apr 2024 12:19:27 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:06:10Z","eTag":"\"{DFA63B51-79D9-4071-BF2B-E682ECDE957F},1\"","id":"01AZJL5PKRHOTN7WLZOFAL6K7GQLWN5FL7","lastModifiedDateTime":"2024-02-14T18:06:10Z","name":"_=o=_ - _ _Jedi_ Project Folder ___ (333)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(333)","cTag":"\"c:{DFA63B51-79D9-4071-BF2B-E682ECDE957F},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:06:10Z","lastModifiedDateTime":"2024-02-14T18:06:10Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:06:13 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:19:24Z","eTag":"\"{26FB48CB-F7A2-4726-926B-89A151AE7AFC},2\"","id":"01AZJL5POLJD5SNIXXEZDZE24JUFI246X4","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:19:24Z","name":"_=o=_ + _ _Jedi_ Project Folder ___ (682)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(682)","cTag":"\"c:{26FB48CB-F7A2-4726-926B-89A151AE7AFC},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:19:24Z","lastModifiedDateTime":"2024-04-24T12:19:24Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:19:28 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKRHOTN7WLZOFAL6K7GQLWN5FL7/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POLJD5SNIXXEZDZE24JUFI246X4/permissions body: encoding: US-ASCII string: '' @@ -873,7 +778,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -883,22 +788,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - e7340865-ba92-4f38-82bf-9acea6c61b26 + - 52946f28-a83f-4965-aa67-32dc8328415b Client-Request-Id: - - e7340865-ba92-4f38-82bf-9acea6c61b26 + - 52946f28-a83f-4965-aa67-32dc8328415b X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000163"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055B"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -906,26 +807,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:06:13 GMT + - Wed, 24 Apr 2024 12:19:27 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PKRHOTN7WLZOFAL6K7GQLWN5FL7'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5POLJD5SNIXXEZDZE24JUFI246X4'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:13 GMT + recorded_at: Wed, 24 Apr 2024 12:19:28 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKRHOTN7WLZOFAL6K7GQLWN5FL7/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POLJD5SNIXXEZDZE24JUFI246X4/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -937,7 +839,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -949,8 +851,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -962,11 +862,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - d533a1b0-7a09-4cbf-a123-638418a6ec54 + - 1052823a-cd68-4445-bb9c-b5fdaad89f81 Client-Request-Id: - - d533a1b0-7a09-4cbf-a123-638418a6ec54 + - 1052823a-cd68-4445-bb9c-b5fdaad89f81 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000350"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000559"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -977,16 +877,16 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:06:14 GMT + - Wed, 24 Apr 2024 12:19:29 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test - Manager 01"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + Manager 01"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:14 GMT + recorded_at: Wed, 24 Apr 2024 12:19:29 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNTV6JHMA6JSJGYURYI7XL6JFLJ + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPZDTFF3PAPGRFIE7GF7T2IHCLB body: encoding: US-ASCII string: '' @@ -998,7 +898,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1008,37 +908,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 4d63a48f-9de8-4e7b-a691-6fca6402d3c8 + - 3d71c213-1674-42fd-8699-eb1f4187fe85 Client-Request-Id: - - 4d63a48f-9de8-4e7b-a691-6fca6402d3c8 + - 3d71c213-1674-42fd-8699-eb1f4187fe85 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000160"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000054C"}}' Date: - - Wed, 14 Feb 2024 18:06:14 GMT + - Wed, 24 Apr 2024 12:19:30 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:06:10Z","eTag":"\"{7692AFB3-C903-4D92-8A47-08FDD7E49569},1\"","id":"01AZJL5PNTV6JHMA6JSJGYURYI7XL6JFLJ","lastModifiedDateTime":"2024-02-14T18:06:10Z","name":"PUBLIC - PROJECT (335)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(335)","cTag":"\"c:{7692AFB3-C903-4D92-8A47-08FDD7E49569},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:06:10Z","lastModifiedDateTime":"2024-02-14T18:06:10Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:06:15 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:19:24Z","eTag":"\"{5DCA1CF9-0FBC-4A34-827C-C5FCF4838961},2\"","id":"01AZJL5PPZDTFF3PAPGRFIE7GF7T2IHCLB","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:19:24Z","name":"PUBLIC + PROJECT (684)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(684)","cTag":"\"c:{5DCA1CF9-0FBC-4A34-827C-C5FCF4838961},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:19:24Z","lastModifiedDateTime":"2024-04-24T12:19:24Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:19:30 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNTV6JHMA6JSJGYURYI7XL6JFLJ/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPZDTFF3PAPGRFIE7GF7T2IHCLB/permissions body: encoding: US-ASCII string: '' @@ -1050,7 +946,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1060,22 +956,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 266bf3b5-8faf-4ee1-b1c6-64ac638f588b + - 89ec0acf-d57a-46af-8eff-98f96079e6d9 Client-Request-Id: - - 266bf3b5-8faf-4ee1-b1c6-64ac638f588b + - 89ec0acf-d57a-46af-8eff-98f96079e6d9 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016D"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000310"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1083,26 +975,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:06:15 GMT + - Wed, 24 Apr 2024 12:19:29 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNTV6JHMA6JSJGYURYI7XL6JFLJ'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPZDTFF3PAPGRFIE7GF7T2IHCLB'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:15 GMT + recorded_at: Wed, 24 Apr 2024 12:19:30 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNTV6JHMA6JSJGYURYI7XL6JFLJ/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPZDTFF3PAPGRFIE7GF7T2IHCLB/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["read"],"recipients":[{"objectId":"my_name_is_mud"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -1114,7 +1007,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -1126,8 +1019,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json Content-Encoding: @@ -1137,11 +1028,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 4c5a841c-98ab-4290-9159-33bb6b1e43c6 + - 6d49b83b-a5f4-40e4-8b99-a310f597cba2 Client-Request-Id: - - 4c5a841c-98ab-4290-9159-33bb6b1e43c6 + - 6d49b83b-a5f4-40e4-8b99-a310f597cba2 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000035F"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000160"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1150,15 +1041,15 @@ http_interactions: Sunset: - Sun, 01 Oct 2023 23:59:59 GMT Date: - - Wed, 14 Feb 2024 18:06:15 GMT + - Wed, 24 Apr 2024 12:19:30 GMT body: encoding: UTF-8 string: '{"error":{"code":"noResolvedUsers","message":"One or more users could - not be resolved.","innerError":{"date":"2024-02-14T18:06:15","request-id":"4c5a841c-98ab-4290-9159-33bb6b1e43c6","client-request-id":"4c5a841c-98ab-4290-9159-33bb6b1e43c6"}}}' - recorded_at: Wed, 14 Feb 2024 18:06:15 GMT + not be resolved.","innerError":{"date":"2024-04-24T12:19:31","request-id":"6d49b83b-a5f4-40e4-8b99-a310f597cba2","client-request-id":"6d49b83b-a5f4-40e4-8b99-a310f597cba2"}}}' + recorded_at: Wed, 24 Apr 2024 12:19:31 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNTV6JHMA6JSJGYURYI7XL6JFLJ/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPZDTFF3PAPGRFIE7GF7T2IHCLB/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"}]}' @@ -1170,7 +1061,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -1182,8 +1073,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -1195,11 +1084,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 9e78a1a1-8449-4f23-a390-c729c132c11c + - f3c79181-6966-4832-94db-a9f0db61758d Client-Request-Id: - - 9e78a1a1-8449-4f23-a390-c729c132c11c + - f3c79181-6966-4832-94db-a9f0db61758d X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000034F"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000054C"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1210,27 +1099,25 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:06:16 GMT + - Wed, 24 Apr 2024 12:19:32 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test Manager 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:16 GMT + recorded_at: Wed, 24 Apr 2024 12:19:32 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJ6UBT4I5FDURGY4A7MGDMTLTFQ + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PMPVZ3F3EETVZC2MKGAOJBFLFEY body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1243,32 +1130,30 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 07723464-8fbe-433f-abc6-a8fc15bfb1de + - 2c4c1a2f-3aac-48ce-8fa9-cf815c451d65 Client-Request-Id: - - 07723464-8fbe-433f-abc6-a8fc15bfb1de + - 2c4c1a2f-3aac-48ce-8fa9-cf815c451d65 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000351"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000035F"}}' Date: - - Wed, 14 Feb 2024 18:06:16 GMT + - Wed, 24 Apr 2024 12:19:32 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:06:17 GMT + recorded_at: Wed, 24 Apr 2024 12:19:32 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKRHOTN7WLZOFAL6K7GQLWN5FL7 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POLJD5SNIXXEZDZE24JUFI246X4 body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1281,32 +1166,30 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 934b52e5-a1ed-4a54-818f-3cd30867197e + - 4875d35a-72cc-47ab-a959-a3328fc492c8 Client-Request-Id: - - 934b52e5-a1ed-4a54-818f-3cd30867197e + - 4875d35a-72cc-47ab-a959-a3328fc492c8 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000167"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055D"}}' Date: - - Wed, 14 Feb 2024 18:06:16 GMT + - Wed, 24 Apr 2024 12:19:32 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:06:17 GMT + recorded_at: Wed, 24 Apr 2024 12:19:32 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNTV6JHMA6JSJGYURYI7XL6JFLJ + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPZDTFF3PAPGRFIE7GF7T2IHCLB body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1319,15 +1202,15 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 994b918a-3842-4540-91dc-6351d6e3a071 + - 80df38a6-3ea2-4a89-8b61-50edc1975dd5 Client-Request-Id: - - 994b918a-3842-4540-91dc-6351d6e3a071 + - 80df38a6-3ea2-4a89-8b61-50edc1975dd5 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000034F"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000350"}}' Date: - - Wed, 14 Feb 2024 18:06:17 GMT + - Wed, 24 Apr 2024 12:19:33 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:06:17 GMT + recorded_at: Wed, 24 Apr 2024 12:19:33 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_hide_inactive.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_hide_inactive.yml index f9845c242cfe..37127cef50c2 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_hide_inactive.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_hide_inactive.yml @@ -4,19 +4,19 @@ http_interactions: method: post uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token body: - encoding: UTF-8 - string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB headers: User-Agent: - - Rack::OAuth2 (2.2.1) - Authorization: - - Basic - Content-Type: - - application/x-www-form-urlencoded - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + - httpx.rb/1.2.4 Accept: - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' response: status: code: 200 @@ -37,43 +37,45 @@ http_interactions: P3p: - CP="DSP CUR OTPi IND OTRi ONL FIN" X-Ms-Request-Id: - - 10b91e57-bb19-4228-b1fb-c24f44a01300 + - ff5cc116-8bcc-465e-b7e1-5688e22c7c00 X-Ms-Ests-Server: - - 2.1.17282.6 - FRC ProdSlices + - 2.1.17846.6 - WEULR1 ProdSlices + X-Ms-Srs: + - 1.P X-Xss-Protection: - '0' Set-Cookie: - - fpc=AmgA7CMaByRDlHpSdtq3URykbDoXAQAAAN_3Xt0OAAAA; expires=Fri, 15-Mar-2024 - 18:05:19 GMT; path=/; secure; HttpOnly; SameSite=None - - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly + - fpc=AtbjUPFdlLBBoXYoFBwOwn-kbDoXAQAAAIbvut0OAAAA; expires=Fri, 24-May-2024 + 12:18:15 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly Date: - - Wed, 14 Feb 2024 18:05:19 GMT + - Wed, 24 Apr 2024 12:18:14 GMT Content-Length: - - '1708' + - '1735' body: encoding: UTF-8 string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Wed, 14 Feb 2024 18:05:19 GMT + recorded_at: Wed, 24 Apr 2024 12:18:15 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"INACTIVE PROJECT! f0r r34lz (334)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"INACTIVE PROJECT! f0r r34lz (683)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: - '99' + Authorization: + - Bearer response: status: code: 201 @@ -81,41 +83,96 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{6F41CABF-A5F8-45AD-B87A-D62298CBE45E},1"' + - '"{06F66FD7-E1C4-460C-B6B5-B9C002C08CDA},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 7196c028-3b5b-4d67-aa1a-d72a72a4d617 + - 582dd3dc-3977-4b80-a341-ebce95788a56 Client-Request-Id: - - 7196c028-3b5b-4d67-aa1a-d72a72a4d617 + - 582dd3dc-3977-4b80-a341-ebce95788a56 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000311"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000035F"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:20 GMT + - Wed, 24 Apr 2024 12:18:15 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{6F41CABF-A5F8-45AD-B87A-D62298CBE45E},1\"","createdDateTime":"2024-02-14T18:05:20Z","eTag":"\"{6F41CABF-A5F8-45AD-B87A-D62298CBE45E},1\"","id":"01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6","lastModifiedDateTime":"2024-02-14T18:05:20Z","name":"INACTIVE - PROJECT! f0r r34lz (334)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/INACTIVE%20PROJECT!%20f0r%20r34lz%20(334)","cTag":"\"c:{6F41CABF-A5F8-45AD-B87A-D62298CBE45E},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{06F66FD7-E1C4-460C-B6B5-B9C002C08CDA},1\"","createdDateTime":"2024-04-24T12:18:16Z","eTag":"\"{06F66FD7-E1C4-460C-B6B5-B9C002C08CDA},1\"","id":"01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2","lastModifiedDateTime":"2024-04-24T12:18:16Z","name":"INACTIVE + PROJECT! f0r r34lz (683)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/INACTIVE%20PROJECT!%20f0r%20r34lz%20(683)","cTag":"\"c:{06F66FD7-E1C4-460C-B6B5-B9C002C08CDA},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:20Z","lastModifiedDateTime":"2024-02-14T18:05:20Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:05:20 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:16Z","lastModifiedDateTime":"2024-04-24T12:18:16Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:18:15 GMT +- request: + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token + body: + encoding: UTF-8 + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default + headers: + User-Agent: + - Rack::OAuth2 (2.2.1) + Authorization: + - Basic + Content-Type: + - application/x-www-form-urlencoded + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-store, no-cache + Pragma: + - no-cache + Content-Type: + - application/json; charset=utf-8 + Expires: + - "-1" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - d27dcc8a-6124-4aa9-9e75-9f98f2198500 + X-Ms-Ests-Server: + - 2.1.17846.6 - WEULR1 ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=AoH7KavuzZNPicSQOS90AhikbDoXAQAAAIfvut0OAAAA; expires=Fri, 24-May-2024 + 12:18:16 GMT; path=/; secure; HttpOnly; SameSite=None + - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly + - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly + Date: + - Wed, 24 Apr 2024 12:18:15 GMT + Content-Length: + - '1708' + body: + encoding: UTF-8 + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Wed, 24 Apr 2024 12:18:16 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2 body: encoding: US-ASCII string: '' @@ -127,7 +184,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -137,37 +194,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 48a3be4c-2061-4b0c-b436-1f3a56187d1c + - c223c3f1-76f2-4414-96b6-b5b59bd7f42c Client-Request-Id: - - 48a3be4c-2061-4b0c-b436-1f3a56187d1c + - c223c3f1-76f2-4414-96b6-b5b59bd7f42c X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000164"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000350"}}' Date: - - Wed, 14 Feb 2024 18:05:20 GMT + - Wed, 24 Apr 2024 12:18:15 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:05:20Z","eTag":"\"{6F41CABF-A5F8-45AD-B87A-D62298CBE45E},1\"","id":"01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6","lastModifiedDateTime":"2024-02-14T18:05:20Z","name":"INACTIVE - PROJECT! f0r r34lz (334)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/INACTIVE%20PROJECT!%20f0r%20r34lz%20(334)","cTag":"\"c:{6F41CABF-A5F8-45AD-B87A-D62298CBE45E},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:20Z","lastModifiedDateTime":"2024-02-14T18:05:20Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:20 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:16Z","eTag":"\"{06F66FD7-E1C4-460C-B6B5-B9C002C08CDA},2\"","id":"01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:16Z","name":"INACTIVE + PROJECT! f0r r34lz (683)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/INACTIVE%20PROJECT!%20f0r%20r34lz%20(683)","cTag":"\"c:{06F66FD7-E1C4-460C-B6B5-B9C002C08CDA},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:16Z","lastModifiedDateTime":"2024-04-24T12:18:16Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:18:16 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2/permissions body: encoding: US-ASCII string: '' @@ -179,7 +232,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -189,22 +242,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - aba36327-1ea5-4f5d-938e-3d08da0c7e95 + - fc07fca9-c98b-4aca-8e85-fabfb0b20334 Client-Request-Id: - - aba36327-1ea5-4f5d-938e-3d08da0c7e95 + - fc07fca9-c98b-4aca-8e85-fabfb0b20334 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016A"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000163"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -212,26 +261,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:20 GMT + - Wed, 24 Apr 2024 12:18:16 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:20 GMT + recorded_at: Wed, 24 Apr 2024 12:18:16 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["read"],"recipients":[{"objectId":"2ff33b8f-2843-40c1-9a17-d786bca17fba"}]}' @@ -243,7 +293,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -255,8 +305,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -268,11 +316,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - d49ae033-7b90-47ea-9285-c3339a0dc415 + - 99008976-eeda-47b0-a632-5459a88255f6 Client-Request-Id: - - d49ae033-7b90-47ea-9285-c3339a0dc415 + - 99008976-eeda-47b0-a632-5459a88255f6 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000169"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057E"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -283,15 +331,15 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:20 GMT + - Wed, 24 Apr 2024 12:18:17 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test user 02"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:21 GMT + recorded_at: Wed, 24 Apr 2024 12:18:17 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -303,7 +351,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -315,8 +363,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -328,11 +374,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - d8d1f157-d7c5-475e-9090-47eaf725f27c + - 32bd9991-ba12-4db9-8968-0803674cc57f Client-Request-Id: - - d8d1f157-d7c5-475e-9090-47eaf725f27c + - 32bd9991-ba12-4db9-8968-0803674cc57f X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000165"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000559"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -343,16 +389,16 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:22 GMT + - Wed, 24 Apr 2024 12:18:18 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test - Manager 01"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + Manager 01"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:22 GMT + recorded_at: Wed, 24 Apr 2024 12:18:19 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2 body: encoding: US-ASCII string: '' @@ -364,7 +410,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -374,37 +420,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - '03791900-654e-4cbf-8206-6b70d6d45322' + - e1916acd-8b43-4cf6-b560-0d98cc5b726a Client-Request-Id: - - '03791900-654e-4cbf-8206-6b70d6d45322' + - e1916acd-8b43-4cf6-b560-0d98cc5b726a X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016D"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000544"}}' Date: - - Wed, 14 Feb 2024 18:05:22 GMT + - Wed, 24 Apr 2024 12:18:19 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:05:20Z","eTag":"\"{6F41CABF-A5F8-45AD-B87A-D62298CBE45E},3\"","id":"01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6","lastModifiedDateTime":"2024-02-14T18:05:20Z","name":"INACTIVE - PROJECT! f0r r34lz (334)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/INACTIVE%20PROJECT!%20f0r%20r34lz%20(334)","cTag":"\"c:{6F41CABF-A5F8-45AD-B87A-D62298CBE45E},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:20Z","lastModifiedDateTime":"2024-02-14T18:05:20Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:23 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:16Z","eTag":"\"{06F66FD7-E1C4-460C-B6B5-B9C002C08CDA},4\"","id":"01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:16Z","name":"INACTIVE + PROJECT! f0r r34lz (683)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/INACTIVE%20PROJECT!%20f0r%20r34lz%20(683)","cTag":"\"c:{06F66FD7-E1C4-460C-B6B5-B9C002C08CDA},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:16Z","lastModifiedDateTime":"2024-04-24T12:18:16Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:18:19 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2/permissions body: encoding: US-ASCII string: '' @@ -416,7 +458,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -426,22 +468,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 1e008797-28f3-4538-bc00-8399bbe45695 + - feb61c51-4a7e-4d2e-a8eb-7f108d611c88 Client-Request-Id: - - 1e008797-28f3-4538-bc00-8399bbe45695 + - feb61c51-4a7e-4d2e-a8eb-7f108d611c88 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000035F"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -449,32 +487,36 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:22 GMT + - Wed, 24 Apr 2024 12:18:19 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test - user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"},"siteUser":{"displayName":"Test + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test user 01","email":"testuser01.op@outlook.com","id":"42","loginName":"i:0#.f|membership|testuser01.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test - user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test - user 02","email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},"siteUser":{"displayName":"Test + user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + user 02","email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test user 02","email":"testuser02.op@outlook.com","id":"43","loginName":"i:0#.f|membership|testuser02.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test - user 02","email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test - Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"},"siteUser":{"displayName":"Test + user 02","email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test Manager 01","email":"testmanager01.op@outlook.com","id":"45","loginName":"i:0#.f|membership|testmanager01.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test - Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:23 GMT + recorded_at: Wed, 24 Apr 2024 12:18:20 GMT - request: method: get uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children @@ -489,7 +531,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -499,60 +541,55 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - fb25efe1-cbcf-4822-b619-9471c4c1420d + - f9c04f79-b1a5-4510-9d47-025229781784 Client-Request-Id: - - fb25efe1-cbcf-4822-b619-9471c4c1420d + - f9c04f79-b1a5-4510-9d47-025229781784 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000310"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000035F"}}' Date: - - Wed, 14 Feb 2024 18:05:23 GMT + - Wed, 24 Apr 2024 12:18:19 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children","value":[{"createdDateTime":"2024-02-14T18:05:20Z","eTag":"\"{6F41CABF-A5F8-45AD-B87A-D62298CBE45E},3\"","id":"01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6","lastModifiedDateTime":"2024-02-14T18:05:20Z","name":"INACTIVE - PROJECT! f0r r34lz (334)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/INACTIVE%20PROJECT!%20f0r%20r34lz%20(334)","cTag":"\"c:{6F41CABF-A5F8-45AD-B87A-D62298CBE45E},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:20Z","lastModifiedDateTime":"2024-02-14T18:05:20Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2024-01-29T17:30:48Z","eTag":"\"{AA674C60-1512-4607-AC2F-7838F996B4A9},1\"","id":"01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ","lastModifiedDateTime":"2024-01-29T17:30:48Z","name":"Project - B","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20B","cTag":"\"c:{AA674C60-1512-4607-AC2F-7838F996B4A9},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:48Z","lastModifiedDateTime":"2024-01-29T17:30:48Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2024-01-29T17:30:52Z","eTag":"\"{98914E03-2109-4235-8A69-3092969D062D},1\"","id":"01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN","lastModifiedDateTime":"2024-01-29T17:30:52Z","name":"Project - C","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20C","cTag":"\"c:{98914E03-2109-4235-8A69-3092969D062D},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:52Z","lastModifiedDateTime":"2024-01-29T17:30:52Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2023-12-15T14:58:59Z","eTag":"\"{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},33\"","id":"01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM","lastModifiedDateTime":"2023-12-29T10:44:06Z","name":"Renamed - Project A (1234)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Renamed%20Project%20A%20(1234)","cTag":"\"c:{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},0\"","decorator":{"iconColor":"darkGreen"},"size":33882,"createdBy":{"user":{"email":"w.lindenthal@finnlabs.com","id":"99fb2d61-359b-4fae-91c9-1ac6c8f02b5e","displayName":"Wieland - Lindenthal"}},"lastModifiedBy":{"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2023-12-15T14:58:59Z","lastModifiedDateTime":"2023-12-29T10:44:06Z"},"folder":{"childCount":2},"shared":{"scope":"users"}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:23 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)","value":[{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-18T12:05:15Z","eTag":"\"{B94392DB-A502-4109-9EC5-17E7ABFFF461},4\"","id":"01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-18T12:05:15Z","name":"[dev] + Large (4)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5Bdev%5D%20Large%20(4)","cTag":"\"c:{B94392DB-A502-4109-9EC5-17E7ABFFF461},0\"","fileSystemInfo":{"createdDateTime":"2024-04-18T12:05:15Z","lastModifiedDateTime":"2024-04-18T12:05:15Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0},{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-03-18T18:12:55Z","eTag":"\"{D03A86A5-D563-45AC-B5FA-2A333F353BEA},275\"","id":"01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-03-18T18:12:55Z","name":"Demo + project (1)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Demo%20project%20(1)","cTag":"\"c:{D03A86A5-D563-45AC-B5FA-2A333F353BEA},0\"","fileSystemInfo":{"createdDateTime":"2024-03-18T18:12:55Z","lastModifiedDateTime":"2024-03-18T18:12:55Z"},"folder":{"childCount":1},"shared":{"scope":"users"},"size":988098560},{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:16Z","eTag":"\"{06F66FD7-E1C4-460C-B6B5-B9C002C08CDA},4\"","id":"01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:16Z","name":"INACTIVE + PROJECT! f0r r34lz (683)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/INACTIVE%20PROJECT!%20f0r%20r34lz%20(683)","cTag":"\"c:{06F66FD7-E1C4-460C-B6B5-B9C002C08CDA},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:16Z","lastModifiedDateTime":"2024-04-24T12:18:16Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}]}' + recorded_at: Wed, 24 Apr 2024 12:18:20 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"[Sample] Project Name _ Ehuu (332)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"[Sample] Project Name _ Ehuu (681)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json + Authorization: + - Bearer User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: @@ -564,53 +601,51 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{35C610D5-7EEF-4032-8AF1-C7DA901C79A0},1"' + - '"{36DB61EB-CC04-43C9-BBF4-940D59A2E681},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5POVCDDDL336GJAIV4OH3KIBY6NA') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PPLMHNTMBGMZFB3X5EUBVM2FZUB') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - c423dee4-fc49-45a8-a5a4-0dd93f4fe73c + - 1af5fbea-f301-4c3e-9521-0b97e48b9d8c Client-Request-Id: - - c423dee4-fc49-45a8-a5a4-0dd93f4fe73c + - 1af5fbea-f301-4c3e-9521-0b97e48b9d8c X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000313"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016D"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:23 GMT + - Wed, 24 Apr 2024 12:18:20 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{35C610D5-7EEF-4032-8AF1-C7DA901C79A0},1\"","createdDateTime":"2024-02-14T18:05:24Z","eTag":"\"{35C610D5-7EEF-4032-8AF1-C7DA901C79A0},1\"","id":"01AZJL5POVCDDDL336GJAIV4OH3KIBY6NA","lastModifiedDateTime":"2024-02-14T18:05:24Z","name":"[Sample] - Project Name _ Ehuu (332)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(332)","cTag":"\"c:{35C610D5-7EEF-4032-8AF1-C7DA901C79A0},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{36DB61EB-CC04-43C9-BBF4-940D59A2E681},1\"","createdDateTime":"2024-04-24T12:18:21Z","eTag":"\"{36DB61EB-CC04-43C9-BBF4-940D59A2E681},1\"","id":"01AZJL5PPLMHNTMBGMZFB3X5EUBVM2FZUB","lastModifiedDateTime":"2024-04-24T12:18:21Z","name":"[Sample] + Project Name _ Ehuu (681)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(681)","cTag":"\"c:{36DB61EB-CC04-43C9-BBF4-940D59A2E681},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:24Z","lastModifiedDateTime":"2024-02-14T18:05:24Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:05:23 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:21Z","lastModifiedDateTime":"2024-04-24T12:18:21Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:18:20 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"_=o=_ _ _Jedi_ Project Folder ___ (333)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"_=o=_ _ _Jedi_ Project Folder ___ (682)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json + Authorization: + - Bearer User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: @@ -622,53 +657,51 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{E00F7B77-1207-4A13-ADD3-69CF3CF4F418},1"' + - '"{CF681200-A49A-48BF-A006-C512D38A943D},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PLXPMH6ABYSCNFK3U3JZ46PJ5AY') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PIACJUM7GVEX5EKABWFCLJYVFB5') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 6fabe2e5-fb24-48d1-be38-454071ea65bc + - 3a108913-f1ce-4043-b8aa-07119cb3c748 Client-Request-Id: - - 6fabe2e5-fb24-48d1-be38-454071ea65bc + - 3a108913-f1ce-4043-b8aa-07119cb3c748 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000165"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057E"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:23 GMT + - Wed, 24 Apr 2024 12:18:20 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{E00F7B77-1207-4A13-ADD3-69CF3CF4F418},1\"","createdDateTime":"2024-02-14T18:05:24Z","eTag":"\"{E00F7B77-1207-4A13-ADD3-69CF3CF4F418},1\"","id":"01AZJL5PLXPMH6ABYSCNFK3U3JZ46PJ5AY","lastModifiedDateTime":"2024-02-14T18:05:24Z","name":"_=o=_ - _ _Jedi_ Project Folder ___ (333)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(333)","cTag":"\"c:{E00F7B77-1207-4A13-ADD3-69CF3CF4F418},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{CF681200-A49A-48BF-A006-C512D38A943D},1\"","createdDateTime":"2024-04-24T12:18:21Z","eTag":"\"{CF681200-A49A-48BF-A006-C512D38A943D},1\"","id":"01AZJL5PIACJUM7GVEX5EKABWFCLJYVFB5","lastModifiedDateTime":"2024-04-24T12:18:21Z","name":"_=o=_ + _ _Jedi_ Project Folder ___ (682)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(682)","cTag":"\"c:{CF681200-A49A-48BF-A006-C512D38A943D},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:24Z","lastModifiedDateTime":"2024-02-14T18:05:24Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:05:23 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:21Z","lastModifiedDateTime":"2024-04-24T12:18:21Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:18:21 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"PUBLIC PROJECT (335)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"PUBLIC PROJECT (684)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json + Authorization: + - Bearer User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: @@ -680,41 +713,39 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{92E29621-7C25-4E36-BA9E-DAA99AF787A5},1"' + - '"{E3A22ABA-6F24-4719-BE2E-7AFE3450331A},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PJBS3RJEJL4GZHLVHW2VGNPPB5F') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PN2FKROGJDPDFD34LT27Y2FAMY2') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - c2f3e083-0a7d-4498-b80a-fdd992c51dce + - a50cd834-91a0-4595-b13e-f50d96995a84 Client-Request-Id: - - c2f3e083-0a7d-4498-b80a-fdd992c51dce + - a50cd834-91a0-4595-b13e-f50d96995a84 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000167"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000559"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:23 GMT + - Wed, 24 Apr 2024 12:18:20 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{92E29621-7C25-4E36-BA9E-DAA99AF787A5},1\"","createdDateTime":"2024-02-14T18:05:24Z","eTag":"\"{92E29621-7C25-4E36-BA9E-DAA99AF787A5},1\"","id":"01AZJL5PJBS3RJEJL4GZHLVHW2VGNPPB5F","lastModifiedDateTime":"2024-02-14T18:05:24Z","name":"PUBLIC - PROJECT (335)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(335)","cTag":"\"c:{92E29621-7C25-4E36-BA9E-DAA99AF787A5},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{E3A22ABA-6F24-4719-BE2E-7AFE3450331A},1\"","createdDateTime":"2024-04-24T12:18:22Z","eTag":"\"{E3A22ABA-6F24-4719-BE2E-7AFE3450331A},1\"","id":"01AZJL5PN2FKROGJDPDFD34LT27Y2FAMY2","lastModifiedDateTime":"2024-04-24T12:18:22Z","name":"PUBLIC + PROJECT (684)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(684)","cTag":"\"c:{E3A22ABA-6F24-4719-BE2E-7AFE3450331A},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:24Z","lastModifiedDateTime":"2024-02-14T18:05:24Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:05:24 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:22Z","lastModifiedDateTime":"2024-04-24T12:18:22Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:18:21 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB body: encoding: US-ASCII string: '' @@ -726,7 +757,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -736,37 +767,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 88badaf4-dff7-42d6-8937-711f79ef464a + - 1f713e5b-6336-4bd3-a251-2f85f104c21c Client-Request-Id: - - 88badaf4-dff7-42d6-8937-711f79ef464a + - 1f713e5b-6336-4bd3-a251-2f85f104c21c X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000310"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' Date: - - Wed, 14 Feb 2024 18:05:24 GMT + - Wed, 24 Apr 2024 12:18:21 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:05:20Z","eTag":"\"{6F41CABF-A5F8-45AD-B87A-D62298CBE45E},3\"","id":"01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6","lastModifiedDateTime":"2024-02-14T18:05:20Z","name":"INACTIVE - PROJECT! f0r r34lz (334)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/INACTIVE%20PROJECT!%20f0r%20r34lz%20(334)","cTag":"\"c:{6F41CABF-A5F8-45AD-B87A-D62298CBE45E},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:20Z","lastModifiedDateTime":"2024-02-14T18:05:20Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:24 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-18T12:05:15Z","eTag":"\"{B94392DB-A502-4109-9EC5-17E7ABFFF461},4\"","id":"01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-18T12:05:15Z","name":"[dev] + Large (4)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5Bdev%5D%20Large%20(4)","cTag":"\"c:{B94392DB-A502-4109-9EC5-17E7ABFFF461},0\"","fileSystemInfo":{"createdDateTime":"2024-04-18T12:05:15Z","lastModifiedDateTime":"2024-04-18T12:05:15Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:18:22 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB/permissions body: encoding: US-ASCII string: '' @@ -778,7 +805,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -788,22 +815,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 1e38ba68-1142-4042-8efd-10e4873f3f4d + - 6a185dc2-90ca-414a-bd11-f48aa7d8cbbb Client-Request-Id: - - 1e38ba68-1142-4042-8efd-10e4873f3f4d + - 6a185dc2-90ca-414a-bd11-f48aa7d8cbbb X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000313"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -811,35 +834,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:24 GMT + - Wed, 24 Apr 2024 12:18:21 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test - user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"},"siteUser":{"displayName":"Test - user 01","email":"testuser01.op@outlook.com","id":"42","loginName":"i:0#.f|membership|testuser01.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test - user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test - user 02","email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},"siteUser":{"displayName":"Test - user 02","email":"testuser02.op@outlook.com","id":"43","loginName":"i:0#.f|membership|testuser02.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test - user 02","email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test - Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"},"siteUser":{"displayName":"Test - Manager 01","email":"testmanager01.op@outlook.com","id":"45","loginName":"i:0#.f|membership|testmanager01.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test - Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:24 GMT + recorded_at: Wed, 24 Apr 2024 12:18:22 GMT - request: - method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6/permissions/aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t + method: get + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K body: encoding: US-ASCII string: '' @@ -851,85 +866,43 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: status: - code: 204 - message: No Content + code: 200 + message: OK headers: Cache-Control: - no-store, no-cache - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - 7ffb4a6f-a68e-4d2b-b183-4d6dc71a0b13 - Client-Request-Id: - - 7ffb4a6f-a68e-4d2b-b183-4d6dc71a0b13 - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016E"}}' - Link: - - ;rel="deprecation";type="text/html", - ;rel="deprecation";type="text/html" - Deprecation: - - Fri, 03 Sep 2021 23:59:59 GMT - Sunset: - - Sun, 01 Oct 2023 23:59:59 GMT - Date: - - Wed, 14 Feb 2024 18:05:24 GMT - body: - encoding: UTF-8 - string: '' - recorded_at: Wed, 14 Feb 2024 18:05:25 GMT -- request: - method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6/permissions/aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.2 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 204 - message: No Content - headers: - Cache-Control: - - no-store, no-cache + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 + Content-Encoding: + - gzip Strict-Transport-Security: - max-age=31536000 Request-Id: - - f7ea1021-7f0d-4357-8d2c-3fd52085c550 + - 28110bc1-394e-46e1-a8d2-128486e58ab6 Client-Request-Id: - - f7ea1021-7f0d-4357-8d2c-3fd52085c550 + - 28110bc1-394e-46e1-a8d2-128486e58ab6 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016E"}}' - Link: - - ;rel="deprecation";type="text/html", - ;rel="deprecation";type="text/html" - Deprecation: - - Fri, 03 Sep 2021 23:59:59 GMT - Sunset: - - Sun, 01 Oct 2023 23:59:59 GMT + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000160"}}' Date: - - Wed, 14 Feb 2024 18:05:24 GMT + - Wed, 24 Apr 2024 12:18:22 GMT body: encoding: UTF-8 - string: '' - recorded_at: Wed, 14 Feb 2024 18:05:25 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-03-18T18:12:55Z","eTag":"\"{D03A86A5-D563-45AC-B5FA-2A333F353BEA},275\"","id":"01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-03-18T18:12:55Z","name":"Demo + project (1)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Demo%20project%20(1)","cTag":"\"c:{D03A86A5-D563-45AC-B5FA-2A333F353BEA},0\"","fileSystemInfo":{"createdDateTime":"2024-03-18T18:12:55Z","lastModifiedDateTime":"2024-03-18T18:12:55Z"},"folder":{"childCount":1},"shared":{"scope":"users"},"size":988098560}' + recorded_at: Wed, 24 Apr 2024 12:18:22 GMT - request: - method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6/permissions/aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t + method: get + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K/permissions body: encoding: US-ASCII string: '' @@ -941,24 +914,28 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: status: - code: 204 - message: No Content + code: 200 + message: OK headers: Cache-Control: - no-store, no-cache + Content-Type: + - application/json; odata.metadata=minimal; odata.streaming=true + Content-Encoding: + - gzip Strict-Transport-Security: - max-age=31536000 Request-Id: - - b9cf4f46-98d5-4d26-a5b0-19b45335b7f9 + - 9385978b-8e85-47c6-afd7-7a3920e518ed Client-Request-Id: - - b9cf4f46-98d5-4d26-a5b0-19b45335b7f9 + - 9385978b-8e85-47c6-afd7-7a3920e518ed X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000169"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016A"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -967,14 +944,26 @@ http_interactions: Sunset: - Sun, 01 Oct 2023 23:59:59 GMT Date: - - Wed, 14 Feb 2024 18:05:24 GMT + - Wed, 24 Apr 2024 12:18:22 GMT body: encoding: UTF-8 - string: '' - recorded_at: Wed, 14 Feb 2024 18:05:25 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","id":"3","loginName":"OpenProject file storage + tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' + recorded_at: Wed, 24 Apr 2024 12:18:23 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2 body: encoding: US-ASCII string: '' @@ -986,7 +975,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -996,37 +985,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 552048f8-5059-4338-b630-a6d9f4a230ad + - 65526095-2baf-46bd-98cc-f146c6f898a8 Client-Request-Id: - - 552048f8-5059-4338-b630-a6d9f4a230ad + - 65526095-2baf-46bd-98cc-f146c6f898a8 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000035F"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055A"}}' Date: - - Wed, 14 Feb 2024 18:05:25 GMT + - Wed, 24 Apr 2024 12:18:22 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-01-29T17:30:48Z","eTag":"\"{AA674C60-1512-4607-AC2F-7838F996B4A9},1\"","id":"01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ","lastModifiedDateTime":"2024-01-29T17:30:48Z","name":"Project - B","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20B","cTag":"\"c:{AA674C60-1512-4607-AC2F-7838F996B4A9},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:48Z","lastModifiedDateTime":"2024-01-29T17:30:48Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:26 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:16Z","eTag":"\"{06F66FD7-E1C4-460C-B6B5-B9C002C08CDA},4\"","id":"01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:16Z","name":"INACTIVE + PROJECT! f0r r34lz (683)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/INACTIVE%20PROJECT!%20f0r%20r34lz%20(683)","cTag":"\"c:{06F66FD7-E1C4-460C-B6B5-B9C002C08CDA},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:16Z","lastModifiedDateTime":"2024-04-24T12:18:16Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:18:23 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2/permissions body: encoding: US-ASCII string: '' @@ -1038,7 +1023,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1048,22 +1033,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 10c46432-54ca-45fa-a1ea-8e469762da8c + - b38daa4f-68a0-4bf2-8415-a41f8e27426b Client-Request-Id: - - 10c46432-54ca-45fa-a1ea-8e469762da8c + - b38daa4f-68a0-4bf2-8415-a41f8e27426b X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000351"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000311"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1071,26 +1052,39 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:26 GMT + - Wed, 24 Apr 2024 12:18:23 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + user 01","email":"testuser01.op@outlook.com","id":"42","loginName":"i:0#.f|membership|testuser01.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test + user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + user 02","email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + user 02","email":"testuser02.op@outlook.com","id":"43","loginName":"i:0#.f|membership|testuser02.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test + user 02","email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + Manager 01","email":"testmanager01.op@outlook.com","id":"45","loginName":"i:0#.f|membership|testmanager01.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test + Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:26 GMT + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' + recorded_at: Wed, 24 Apr 2024 12:18:24 GMT - request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN + method: delete + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2/permissions/aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t body: encoding: US-ASCII string: '' @@ -1102,47 +1096,40 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: status: - code: 200 - message: OK + code: 204 + message: No Content headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - c1212cfb-4fd7-4c4d-ad4f-e808c09e4767 + - a967fa96-66f1-4ff8-a8eb-285a52c6d2d1 Client-Request-Id: - - c1212cfb-4fd7-4c4d-ad4f-e808c09e4767 + - a967fa96-66f1-4ff8-a8eb-285a52c6d2d1 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000169"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057D"}}' + Link: + - ;rel="deprecation";type="text/html", + ;rel="deprecation";type="text/html" + Deprecation: + - Fri, 03 Sep 2021 23:59:59 GMT + Sunset: + - Sun, 01 Oct 2023 23:59:59 GMT Date: - - Wed, 14 Feb 2024 18:05:25 GMT + - Wed, 24 Apr 2024 12:18:24 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-01-29T17:30:52Z","eTag":"\"{98914E03-2109-4235-8A69-3092969D062D},1\"","id":"01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN","lastModifiedDateTime":"2024-01-29T17:30:52Z","name":"Project - C","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20C","cTag":"\"c:{98914E03-2109-4235-8A69-3092969D062D},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:52Z","lastModifiedDateTime":"2024-01-29T17:30:52Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:26 GMT + string: '' + recorded_at: Wed, 24 Apr 2024 12:18:24 GMT - request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN/permissions + method: delete + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2/permissions/aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t body: encoding: US-ASCII string: '' @@ -1154,32 +1141,24 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: status: - code: 200 - message: OK + code: 204 + message: No Content headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 13236d39-24f1-4172-91cf-e0ed24c809d2 + - 9ce77326-0970-4342-9535-9c0c6a69cc9c Client-Request-Id: - - 13236d39-24f1-4172-91cf-e0ed24c809d2 + - 9ce77326-0970-4342-9535-9c0c6a69cc9c X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000167"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016A"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1187,77 +1166,15 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:26 GMT + - Wed, 24 Apr 2024 12:18:24 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject - file storage tests Owners","id":"3","loginName":"OpenProject file storage - tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:26 GMT -- request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM - body: - encoding: US-ASCII string: '' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.2 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 200 - message: OK - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Vary: - - Accept-Encoding - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - 26235683-3cf0-4024-8c7b-9e82b68d6d3e - Client-Request-Id: - - 26235683-3cf0-4024-8c7b-9e82b68d6d3e - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' - Odata-Version: - - '4.0' - Date: - - Wed, 14 Feb 2024 18:05:26 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2023-12-15T14:58:59Z","eTag":"\"{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},33\"","id":"01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM","lastModifiedDateTime":"2023-12-29T10:44:06Z","name":"Renamed - Project A (1234)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Renamed%20Project%20A%20(1234)","cTag":"\"c:{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},0\"","decorator":{"iconColor":"darkGreen"},"size":33882,"createdBy":{"user":{"email":"w.lindenthal@finnlabs.com","id":"99fb2d61-359b-4fae-91c9-1ac6c8f02b5e","displayName":"Wieland - Lindenthal"}},"lastModifiedBy":{"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2023-12-15T14:58:59Z","lastModifiedDateTime":"2023-12-29T10:44:06Z"},"folder":{"childCount":2},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:27 GMT + recorded_at: Wed, 24 Apr 2024 12:18:25 GMT - request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM/permissions + method: delete + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2/permissions/aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t body: encoding: US-ASCII string: '' @@ -1269,32 +1186,24 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: status: - code: 200 - message: OK + code: 204 + message: No Content headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 52a55223-3990-4daa-bc71-7077e951aef0 + - '079330e3-48f2-4ce0-b185-5b3e980daa18' Client-Request-Id: - - 52a55223-3990-4daa-bc71-7077e951aef0 + - '079330e3-48f2-4ce0-b185-5b3e980daa18' X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000313"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055E"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1302,26 +1211,15 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:26 GMT + - Wed, 24 Apr 2024 12:18:25 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject - file storage tests Owners","id":"3","loginName":"OpenProject file storage - tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:27 GMT + string: '' + recorded_at: Wed, 24 Apr 2024 12:18:25 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POVCDDDL336GJAIV4OH3KIBY6NA + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPLMHNTMBGMZFB3X5EUBVM2FZUB body: encoding: US-ASCII string: '' @@ -1333,7 +1231,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1343,37 +1241,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 0d2418ee-00ce-479b-875f-6b75cc2b2d29 + - 68e4723a-0553-4d0b-a9c6-4778ce0a5412 Client-Request-Id: - - 0d2418ee-00ce-479b-875f-6b75cc2b2d29 + - 68e4723a-0553-4d0b-a9c6-4778ce0a5412 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000364"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055A"}}' Date: - - Wed, 14 Feb 2024 18:05:27 GMT + - Wed, 24 Apr 2024 12:18:25 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:05:24Z","eTag":"\"{35C610D5-7EEF-4032-8AF1-C7DA901C79A0},1\"","id":"01AZJL5POVCDDDL336GJAIV4OH3KIBY6NA","lastModifiedDateTime":"2024-02-14T18:05:24Z","name":"[Sample] - Project Name _ Ehuu (332)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(332)","cTag":"\"c:{35C610D5-7EEF-4032-8AF1-C7DA901C79A0},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:24Z","lastModifiedDateTime":"2024-02-14T18:05:24Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:27 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:21Z","eTag":"\"{36DB61EB-CC04-43C9-BBF4-940D59A2E681},2\"","id":"01AZJL5PPLMHNTMBGMZFB3X5EUBVM2FZUB","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:21Z","name":"[Sample] + Project Name _ Ehuu (681)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(681)","cTag":"\"c:{36DB61EB-CC04-43C9-BBF4-940D59A2E681},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:21Z","lastModifiedDateTime":"2024-04-24T12:18:21Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:18:25 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POVCDDDL336GJAIV4OH3KIBY6NA/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPLMHNTMBGMZFB3X5EUBVM2FZUB/permissions body: encoding: US-ASCII string: '' @@ -1385,7 +1279,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1395,22 +1289,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 93cd8f8f-ca64-4dea-8bb8-4bf938dea750 + - 9bfda36a-af31-4158-8832-2867ed21f6b0 Client-Request-Id: - - 93cd8f8f-ca64-4dea-8bb8-4bf938dea750 + - 9bfda36a-af31-4158-8832-2867ed21f6b0 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000311"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057C"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1418,26 +1308,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:27 GMT + - Wed, 24 Apr 2024 12:18:25 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5POVCDDDL336GJAIV4OH3KIBY6NA'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPLMHNTMBGMZFB3X5EUBVM2FZUB'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:27 GMT + recorded_at: Wed, 24 Apr 2024 12:18:26 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POVCDDDL336GJAIV4OH3KIBY6NA/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPLMHNTMBGMZFB3X5EUBVM2FZUB/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"},{"objectId":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -1449,7 +1340,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -1461,8 +1352,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -1474,11 +1363,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - dc44170c-c0f8-42d6-a22f-756348c58a09 + - df20a157-2be5-4bb4-afa2-83a51c4fe85d Client-Request-Id: - - dc44170c-c0f8-42d6-a22f-756348c58a09 + - df20a157-2be5-4bb4-afa2-83a51c4fe85d X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000310"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000559"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1489,17 +1378,17 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:29 GMT + - Wed, 24 Apr 2024 12:18:27 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test - Manager 01"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test - user 02"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + Manager 01"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test + user 02"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:29 GMT + recorded_at: Wed, 24 Apr 2024 12:18:28 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLXPMH6ABYSCNFK3U3JZ46PJ5AY + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIACJUM7GVEX5EKABWFCLJYVFB5 body: encoding: US-ASCII string: '' @@ -1511,7 +1400,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1521,37 +1410,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 35843894-557f-4d5f-9b2d-938db1b3c042 + - dbaaefbb-643b-4724-8ea4-ed82f5c61ca3 Client-Request-Id: - - 35843894-557f-4d5f-9b2d-938db1b3c042 + - dbaaefbb-643b-4724-8ea4-ed82f5c61ca3 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000310"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000350"}}' Date: - - Wed, 14 Feb 2024 18:05:29 GMT + - Wed, 24 Apr 2024 12:18:28 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:05:24Z","eTag":"\"{E00F7B77-1207-4A13-ADD3-69CF3CF4F418},1\"","id":"01AZJL5PLXPMH6ABYSCNFK3U3JZ46PJ5AY","lastModifiedDateTime":"2024-02-14T18:05:24Z","name":"_=o=_ - _ _Jedi_ Project Folder ___ (333)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(333)","cTag":"\"c:{E00F7B77-1207-4A13-ADD3-69CF3CF4F418},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:24Z","lastModifiedDateTime":"2024-02-14T18:05:24Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:29 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:21Z","eTag":"\"{CF681200-A49A-48BF-A006-C512D38A943D},2\"","id":"01AZJL5PIACJUM7GVEX5EKABWFCLJYVFB5","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:21Z","name":"_=o=_ + _ _Jedi_ Project Folder ___ (682)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(682)","cTag":"\"c:{CF681200-A49A-48BF-A006-C512D38A943D},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:21Z","lastModifiedDateTime":"2024-04-24T12:18:21Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:18:28 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLXPMH6ABYSCNFK3U3JZ46PJ5AY/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIACJUM7GVEX5EKABWFCLJYVFB5/permissions body: encoding: US-ASCII string: '' @@ -1563,7 +1448,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1573,22 +1458,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 993cfa0e-c941-4bc2-b079-d8635f47753d + - 83f61a89-bfa4-48a1-a663-f2f98d41bea7 Client-Request-Id: - - 993cfa0e-c941-4bc2-b079-d8635f47753d + - 83f61a89-bfa4-48a1-a663-f2f98d41bea7 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016E"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000166"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1596,26 +1477,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:29 GMT + - Wed, 24 Apr 2024 12:18:28 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PLXPMH6ABYSCNFK3U3JZ46PJ5AY'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PIACJUM7GVEX5EKABWFCLJYVFB5'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:30 GMT + recorded_at: Wed, 24 Apr 2024 12:18:28 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLXPMH6ABYSCNFK3U3JZ46PJ5AY/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIACJUM7GVEX5EKABWFCLJYVFB5/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -1627,7 +1509,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -1639,8 +1521,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -1652,11 +1532,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - f6d6058e-6316-4838-9391-1371b8b8d103 + - 060ba135-9846-4bd7-ad83-dd0a980f8f6c Client-Request-Id: - - f6d6058e-6316-4838-9391-1371b8b8d103 + - 060ba135-9846-4bd7-ad83-dd0a980f8f6c X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000311"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055D"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1667,16 +1547,16 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:31 GMT + - Wed, 24 Apr 2024 12:18:29 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test - Manager 01"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + Manager 01"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:31 GMT + recorded_at: Wed, 24 Apr 2024 12:18:30 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJBS3RJEJL4GZHLVHW2VGNPPB5F + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN2FKROGJDPDFD34LT27Y2FAMY2 body: encoding: US-ASCII string: '' @@ -1688,7 +1568,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1698,37 +1578,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 3161b58d-5aa2-4ba5-b301-94f9c91bdb8c + - c894f118-4f19-42d3-9816-dce9c9519ce4 Client-Request-Id: - - 3161b58d-5aa2-4ba5-b301-94f9c91bdb8c + - c894f118-4f19-42d3-9816-dce9c9519ce4 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000035F"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000559"}}' Date: - - Wed, 14 Feb 2024 18:05:30 GMT + - Wed, 24 Apr 2024 12:18:29 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:05:24Z","eTag":"\"{92E29621-7C25-4E36-BA9E-DAA99AF787A5},1\"","id":"01AZJL5PJBS3RJEJL4GZHLVHW2VGNPPB5F","lastModifiedDateTime":"2024-02-14T18:05:24Z","name":"PUBLIC - PROJECT (335)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(335)","cTag":"\"c:{92E29621-7C25-4E36-BA9E-DAA99AF787A5},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:24Z","lastModifiedDateTime":"2024-02-14T18:05:24Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:31 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:22Z","eTag":"\"{E3A22ABA-6F24-4719-BE2E-7AFE3450331A},2\"","id":"01AZJL5PN2FKROGJDPDFD34LT27Y2FAMY2","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:22Z","name":"PUBLIC + PROJECT (684)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(684)","cTag":"\"c:{E3A22ABA-6F24-4719-BE2E-7AFE3450331A},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:22Z","lastModifiedDateTime":"2024-04-24T12:18:22Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:18:30 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJBS3RJEJL4GZHLVHW2VGNPPB5F/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN2FKROGJDPDFD34LT27Y2FAMY2/permissions body: encoding: US-ASCII string: '' @@ -1740,7 +1616,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1750,22 +1626,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 38cd4c16-e571-44cb-9351-e9648b77eb7b + - 6cb3e79d-bbb9-4ed9-971a-673eab8a1d81 Client-Request-Id: - - 38cd4c16-e571-44cb-9351-e9648b77eb7b + - 6cb3e79d-bbb9-4ed9-971a-673eab8a1d81 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000164"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000054C"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1773,26 +1645,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:31 GMT + - Wed, 24 Apr 2024 12:18:30 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PJBS3RJEJL4GZHLVHW2VGNPPB5F'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PN2FKROGJDPDFD34LT27Y2FAMY2'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:31 GMT + recorded_at: Wed, 24 Apr 2024 12:18:31 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJBS3RJEJL4GZHLVHW2VGNPPB5F/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN2FKROGJDPDFD34LT27Y2FAMY2/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["read"],"recipients":[{"objectId":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -1804,7 +1677,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -1816,8 +1689,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -1829,11 +1700,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 69c3fb02-09da-4c8d-b22a-084ed98c2c3c + - 04ce53f8-c260-4ce5-b657-53d3418fecbf Client-Request-Id: - - 69c3fb02-09da-4c8d-b22a-084ed98c2c3c + - 04ce53f8-c260-4ce5-b657-53d3418fecbf X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000351"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016D"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1844,16 +1715,16 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:32 GMT + - Wed, 24 Apr 2024 12:18:31 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test - user 02"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test + user 02"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:32 GMT + recorded_at: Wed, 24 Apr 2024 12:18:32 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJBS3RJEJL4GZHLVHW2VGNPPB5F/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN2FKROGJDPDFD34LT27Y2FAMY2/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"}]}' @@ -1865,7 +1736,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -1877,8 +1748,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -1890,11 +1759,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 3abe01b7-17f0-4788-8f93-a281d645781b + - 1a6253bd-6a6c-41e5-a60e-fdd2d62fb4c8 Client-Request-Id: - - 3abe01b7-17f0-4788-8f93-a281d645781b + - 1a6253bd-6a6c-41e5-a60e-fdd2d62fb4c8 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000165"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055D"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1905,15 +1774,15 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:33 GMT + - Wed, 24 Apr 2024 12:18:33 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test Manager 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:33 GMT + recorded_at: Wed, 24 Apr 2024 12:18:33 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2 body: encoding: US-ASCII string: '' @@ -1925,7 +1794,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1935,37 +1804,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 9241e4db-5505-49fe-871a-06691bc54b20 + - 2ed04173-f2a1-4f13-b2de-f5da185db341 Client-Request-Id: - - 9241e4db-5505-49fe-871a-06691bc54b20 + - 2ed04173-f2a1-4f13-b2de-f5da185db341 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000311"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000544"}}' Date: - - Wed, 14 Feb 2024 18:05:33 GMT + - Wed, 24 Apr 2024 12:18:33 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:05:20Z","eTag":"\"{6F41CABF-A5F8-45AD-B87A-D62298CBE45E},6\"","id":"01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6","lastModifiedDateTime":"2024-02-14T18:05:20Z","name":"INACTIVE - PROJECT! f0r r34lz (334)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/INACTIVE%20PROJECT!%20f0r%20r34lz%20(334)","cTag":"\"c:{6F41CABF-A5F8-45AD-B87A-D62298CBE45E},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:20Z","lastModifiedDateTime":"2024-02-14T18:05:20Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:33 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:16Z","eTag":"\"{06F66FD7-E1C4-460C-B6B5-B9C002C08CDA},7\"","id":"01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:16Z","name":"INACTIVE + PROJECT! f0r r34lz (683)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/INACTIVE%20PROJECT!%20f0r%20r34lz%20(683)","cTag":"\"c:{06F66FD7-E1C4-460C-B6B5-B9C002C08CDA},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:16Z","lastModifiedDateTime":"2024-04-24T12:18:16Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:18:33 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2/permissions body: encoding: US-ASCII string: '' @@ -1977,7 +1842,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1987,22 +1852,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - f5e69fd9-f4d8-414d-a1ec-fb63a667ee54 + - 43ccb49f-0c1e-4d17-81c0-272722e7a535 Client-Request-Id: - - f5e69fd9-f4d8-414d-a1ec-fb63a667ee54 + - 43ccb49f-0c1e-4d17-81c0-272722e7a535 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000310"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -2010,38 +1871,37 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:34 GMT + - Wed, 24 Apr 2024 12:18:33 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:34 GMT + recorded_at: Wed, 24 Apr 2024 12:18:34 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POVCDDDL336GJAIV4OH3KIBY6NA + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPLMHNTMBGMZFB3X5EUBVM2FZUB body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -2054,32 +1914,30 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - b10c879b-b960-4a19-b019-8edc352a00ea + - dd720e36-8407-4582-a324-dab5d7cafd24 Client-Request-Id: - - b10c879b-b960-4a19-b019-8edc352a00ea + - dd720e36-8407-4582-a324-dab5d7cafd24 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016A"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057F"}}' Date: - - Wed, 14 Feb 2024 18:05:33 GMT + - Wed, 24 Apr 2024 12:18:34 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:05:34 GMT + recorded_at: Wed, 24 Apr 2024 12:18:34 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLXPMH6ABYSCNFK3U3JZ46PJ5AY + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIACJUM7GVEX5EKABWFCLJYVFB5 body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -2092,32 +1950,30 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 74ca7c28-12f2-4433-b03f-fd345f2c6c67 + - 56351546-f070-4947-aaff-663eafb1d5cc Client-Request-Id: - - 74ca7c28-12f2-4433-b03f-fd345f2c6c67 + - 56351546-f070-4947-aaff-663eafb1d5cc X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000313"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016D"}}' Date: - - Wed, 14 Feb 2024 18:05:34 GMT + - Wed, 24 Apr 2024 12:18:34 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:05:34 GMT + recorded_at: Wed, 24 Apr 2024 12:18:35 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN7ZJAW76FFVVC3Q6WWEKMMXZC6 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POXN73ANRHBBRDLNNNZYABMBDG2 body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -2130,32 +1986,30 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 7819903f-4609-47ee-92c4-eb297f04be61 + - f33e2b87-8df3-457a-ab02-23cdbef32f5f Client-Request-Id: - - 7819903f-4609-47ee-92c4-eb297f04be61 + - f33e2b87-8df3-457a-ab02-23cdbef32f5f X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000311"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000169"}}' Date: - - Wed, 14 Feb 2024 18:05:34 GMT + - Wed, 24 Apr 2024 12:18:34 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:05:34 GMT + recorded_at: Wed, 24 Apr 2024 12:18:35 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJBS3RJEJL4GZHLVHW2VGNPPB5F + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN2FKROGJDPDFD34LT27Y2FAMY2 body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -2168,15 +2022,15 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 654e5bcd-5a0c-43a7-823a-1791cbd39827 + - 053ebc9f-ccba-46e7-b03b-5f59069f10ea Client-Request-Id: - - 654e5bcd-5a0c-43a7-823a-1791cbd39827 + - 053ebc9f-ccba-46e7-b03b-5f59069f10ea X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000034F"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000166"}}' Date: - - Wed, 14 Feb 2024 18:05:34 GMT + - Wed, 24 Apr 2024 12:18:35 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:05:34 GMT + recorded_at: Wed, 24 Apr 2024 12:18:35 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_original_folders.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_original_folders.yml index f1f1ff67923c..3cf7f3170032 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_original_folders.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_original_folders.yml @@ -37,24 +37,26 @@ http_interactions: P3p: - CP="DSP CUR OTPi IND OTRi ONL FIN" X-Ms-Request-Id: - - a76badcb-c31b-4be7-89c2-f2408c8ba000 + - 5460589a-0a3d-48b4-96c4-ecfbc3a29a00 X-Ms-Ests-Server: - - 2.1.17282.6 - WEULR1 ProdSlices + - 2.1.17846.6 - FRC ProdSlices + X-Ms-Srs: + - 1.P X-Xss-Protection: - '0' Set-Cookie: - - fpc=AuGz6i-hCuBOoDrE4_x9ozCkbDoXAQAAAMf3Xt0OAAAA; expires=Fri, 15-Mar-2024 - 18:04:56 GMT; path=/; secure; HttpOnly; SameSite=None + - fpc=Av4sLTatLVxDh3CEubHRYsekbDoXAQAAAGjvut0OAAAA; expires=Fri, 24-May-2024 + 12:17:45 GMT; path=/; secure; HttpOnly; SameSite=None - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly Date: - - Wed, 14 Feb 2024 18:04:55 GMT + - Wed, 24 Apr 2024 12:17:44 GMT Content-Length: - '1708' body: encoding: UTF-8 string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Wed, 14 Feb 2024 18:04:56 GMT + recorded_at: Wed, 24 Apr 2024 12:17:45 GMT - request: method: get uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children @@ -69,7 +71,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -79,39 +81,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 7bb08e47-dd2c-4bf8-aec3-09ae398e6fc6 + - bb28532e-2103-4e30-b5f2-682c77b039a5 Client-Request-Id: - - 7bb08e47-dd2c-4bf8-aec3-09ae398e6fc6 + - bb28532e-2103-4e30-b5f2-682c77b039a5 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016E"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000351"}}' Date: - - Wed, 14 Feb 2024 18:04:55 GMT + - Wed, 24 Apr 2024 12:17:45 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children","value":[{"createdDateTime":"2024-01-29T17:30:48Z","eTag":"\"{AA674C60-1512-4607-AC2F-7838F996B4A9},1\"","id":"01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ","lastModifiedDateTime":"2024-01-29T17:30:48Z","name":"Project - B","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20B","cTag":"\"c:{AA674C60-1512-4607-AC2F-7838F996B4A9},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:48Z","lastModifiedDateTime":"2024-01-29T17:30:48Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2024-01-29T17:30:52Z","eTag":"\"{98914E03-2109-4235-8A69-3092969D062D},1\"","id":"01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN","lastModifiedDateTime":"2024-01-29T17:30:52Z","name":"Project - C","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20C","cTag":"\"c:{98914E03-2109-4235-8A69-3092969D062D},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:52Z","lastModifiedDateTime":"2024-01-29T17:30:52Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2023-12-15T14:58:59Z","eTag":"\"{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},33\"","id":"01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM","lastModifiedDateTime":"2023-12-29T10:44:06Z","name":"Renamed - Project A (1234)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Renamed%20Project%20A%20(1234)","cTag":"\"c:{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},0\"","decorator":{"iconColor":"darkGreen"},"size":33882,"createdBy":{"user":{"email":"w.lindenthal@finnlabs.com","id":"99fb2d61-359b-4fae-91c9-1ac6c8f02b5e","displayName":"Wieland - Lindenthal"}},"lastModifiedBy":{"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2023-12-15T14:58:59Z","lastModifiedDateTime":"2023-12-29T10:44:06Z"},"folder":{"childCount":2},"shared":{"scope":"users"}}]}' - recorded_at: Wed, 14 Feb 2024 18:04:56 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)","value":[{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-18T12:05:15Z","eTag":"\"{B94392DB-A502-4109-9EC5-17E7ABFFF461},4\"","id":"01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-18T12:05:15Z","name":"[dev] + Large (4)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5Bdev%5D%20Large%20(4)","cTag":"\"c:{B94392DB-A502-4109-9EC5-17E7ABFFF461},0\"","fileSystemInfo":{"createdDateTime":"2024-04-18T12:05:15Z","lastModifiedDateTime":"2024-04-18T12:05:15Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0},{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-03-18T18:12:55Z","eTag":"\"{D03A86A5-D563-45AC-B5FA-2A333F353BEA},274\"","id":"01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-03-18T18:12:55Z","name":"Demo + project (1)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Demo%20project%20(1)","cTag":"\"c:{D03A86A5-D563-45AC-B5FA-2A333F353BEA},0\"","fileSystemInfo":{"createdDateTime":"2024-03-18T18:12:55Z","lastModifiedDateTime":"2024-03-18T18:12:55Z"},"folder":{"childCount":1},"shared":{"scope":"users"},"size":988098560}]}' + recorded_at: Wed, 24 Apr 2024 12:17:45 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_public_project.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_public_project.yml index aa24f71fb14b..7bd69b42bf1d 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_public_project.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_public_project.yml @@ -37,24 +37,26 @@ http_interactions: P3p: - CP="DSP CUR OTPi IND OTRi ONL FIN" X-Ms-Request-Id: - - 96f7e14e-57fd-44c0-b9fc-4537f40aab00 + - d0537a6f-e1be-4952-9ffc-eab693a09400 X-Ms-Ests-Server: - - 2.1.17282.6 - FRC ProdSlices + - 2.1.17846.6 - FRC ProdSlices + X-Ms-Srs: + - 1.P X-Xss-Protection: - '0' Set-Cookie: - - fpc=Atcfo1kw8eBKmruSnrS7oc-kbDoXAQAAAO73Xt0OAAAA; expires=Fri, 15-Mar-2024 - 18:05:35 GMT; path=/; secure; HttpOnly; SameSite=None + - fpc=AhFfNPFGhXlLqELe_jXpmWOkbDoXAQAAAGnvut0OAAAA; expires=Fri, 24-May-2024 + 12:17:46 GMT; path=/; secure; HttpOnly; SameSite=None - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly Date: - - Wed, 14 Feb 2024 18:05:35 GMT + - Wed, 24 Apr 2024 12:17:46 GMT Content-Length: - '1708' body: encoding: UTF-8 string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Wed, 14 Feb 2024 18:05:35 GMT + recorded_at: Wed, 24 Apr 2024 12:17:46 GMT - request: method: get uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children @@ -69,7 +71,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -79,60 +81,111 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 313424bf-1c54-4d3a-b4c1-39d602a2abed + - 5e6b2c1e-56c1-439f-90e6-631c3b0389f1 Client-Request-Id: - - 313424bf-1c54-4d3a-b4c1-39d602a2abed + - 5e6b2c1e-56c1-439f-90e6-631c3b0389f1 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000052E"}}' Date: - - Wed, 14 Feb 2024 18:05:35 GMT + - Wed, 24 Apr 2024 12:17:45 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children","value":[{"createdDateTime":"2024-01-29T17:30:48Z","eTag":"\"{AA674C60-1512-4607-AC2F-7838F996B4A9},1\"","id":"01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ","lastModifiedDateTime":"2024-01-29T17:30:48Z","name":"Project - B","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20B","cTag":"\"c:{AA674C60-1512-4607-AC2F-7838F996B4A9},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:48Z","lastModifiedDateTime":"2024-01-29T17:30:48Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2024-01-29T17:30:52Z","eTag":"\"{98914E03-2109-4235-8A69-3092969D062D},1\"","id":"01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN","lastModifiedDateTime":"2024-01-29T17:30:52Z","name":"Project - C","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20C","cTag":"\"c:{98914E03-2109-4235-8A69-3092969D062D},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:52Z","lastModifiedDateTime":"2024-01-29T17:30:52Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2023-12-15T14:58:59Z","eTag":"\"{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},33\"","id":"01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM","lastModifiedDateTime":"2023-12-29T10:44:06Z","name":"Renamed - Project A (1234)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Renamed%20Project%20A%20(1234)","cTag":"\"c:{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},0\"","decorator":{"iconColor":"darkGreen"},"size":33882,"createdBy":{"user":{"email":"w.lindenthal@finnlabs.com","id":"99fb2d61-359b-4fae-91c9-1ac6c8f02b5e","displayName":"Wieland - Lindenthal"}},"lastModifiedBy":{"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2023-12-15T14:58:59Z","lastModifiedDateTime":"2023-12-29T10:44:06Z"},"folder":{"childCount":2},"shared":{"scope":"users"}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:35 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)","value":[{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-18T12:05:15Z","eTag":"\"{B94392DB-A502-4109-9EC5-17E7ABFFF461},4\"","id":"01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-18T12:05:15Z","name":"[dev] + Large (4)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5Bdev%5D%20Large%20(4)","cTag":"\"c:{B94392DB-A502-4109-9EC5-17E7ABFFF461},0\"","fileSystemInfo":{"createdDateTime":"2024-04-18T12:05:15Z","lastModifiedDateTime":"2024-04-18T12:05:15Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0},{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-03-18T18:12:55Z","eTag":"\"{D03A86A5-D563-45AC-B5FA-2A333F353BEA},274\"","id":"01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-03-18T18:12:55Z","name":"Demo + project (1)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Demo%20project%20(1)","cTag":"\"c:{D03A86A5-D563-45AC-B5FA-2A333F353BEA},0\"","fileSystemInfo":{"createdDateTime":"2024-03-18T18:12:55Z","lastModifiedDateTime":"2024-03-18T18:12:55Z"},"folder":{"childCount":1},"shared":{"scope":"users"},"size":988098560}]}' + recorded_at: Wed, 24 Apr 2024 12:17:46 GMT +- request: + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token + body: + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB + headers: + User-Agent: + - httpx.rb/1.2.4 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-store, no-cache + Pragma: + - no-cache + Content-Type: + - application/json; charset=utf-8 + Expires: + - "-1" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - 5666a629-8942-4a40-9aed-f98b95e46800 + X-Ms-Ests-Server: + - 2.1.17846.6 - WEULR1 ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=ApMWYcKv97pNh7jryFE2cUmkbDoXAQAAAGrvut0OAAAA; expires=Fri, 24-May-2024 + 12:17:47 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly + Date: + - Wed, 24 Apr 2024 12:17:46 GMT + Content-Length: + - '1735' + body: + encoding: UTF-8 + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Wed, 24 Apr 2024 12:17:47 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"[Sample] Project Name _ Ehuu (332)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"[Sample] Project Name _ Ehuu (681)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: - '100' + Authorization: + - Bearer response: status: code: 201 @@ -140,53 +193,51 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{2896099C-3123-4193-A570-9D0B9010EABD},1"' + - '"{D0A03CAF-B699-4D53-965A-65B6A48EC228},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PM4BGLCQIZRSNA2K4E5BOIBB2V5') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PNPHSQNBGNWKNGZMWTFW2SI5QRI') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 5558a434-3448-4b3c-bcf9-4877451308a4 + - 7e064c9f-7283-4ad3-b59f-24bb76f7b0c3 Client-Request-Id: - - 5558a434-3448-4b3c-bcf9-4877451308a4 + - 7e064c9f-7283-4ad3-b59f-24bb76f7b0c3 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000169"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:34 GMT + - Wed, 24 Apr 2024 12:17:46 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{2896099C-3123-4193-A570-9D0B9010EABD},1\"","createdDateTime":"2024-02-14T18:05:36Z","eTag":"\"{2896099C-3123-4193-A570-9D0B9010EABD},1\"","id":"01AZJL5PM4BGLCQIZRSNA2K4E5BOIBB2V5","lastModifiedDateTime":"2024-02-14T18:05:36Z","name":"[Sample] - Project Name _ Ehuu (332)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(332)","cTag":"\"c:{2896099C-3123-4193-A570-9D0B9010EABD},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{D0A03CAF-B699-4D53-965A-65B6A48EC228},1\"","createdDateTime":"2024-04-24T12:17:47Z","eTag":"\"{D0A03CAF-B699-4D53-965A-65B6A48EC228},1\"","id":"01AZJL5PNPHSQNBGNWKNGZMWTFW2SI5QRI","lastModifiedDateTime":"2024-04-24T12:17:47Z","name":"[Sample] + Project Name _ Ehuu (681)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(681)","cTag":"\"c:{D0A03CAF-B699-4D53-965A-65B6A48EC228},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:36Z","lastModifiedDateTime":"2024-02-14T18:05:36Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:05:35 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:17:47Z","lastModifiedDateTime":"2024-04-24T12:17:47Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:17:47 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"_=o=_ _ _Jedi_ Project Folder ___ (333)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"_=o=_ _ _Jedi_ Project Folder ___ (682)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json + Authorization: + - Bearer User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: @@ -198,53 +249,51 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{D48D998A-1D48-4EB7-AD5D-29130B42521B},1"' + - '"{F7BED3EF-4315-4441-B4BB-9F6A52821FC4},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PMKTGG5ISA5W5HK2XJJCMFUEUQ3') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PPP2O7POFKDIFCLJO47NJJIEH6E') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - d9ed8261-6596-4111-b5d3-1fd418c9ffe5 + - 70895b3c-a1c2-48fb-b91f-87c891d3c888 Client-Request-Id: - - d9ed8261-6596-4111-b5d3-1fd418c9ffe5 + - 70895b3c-a1c2-48fb-b91f-87c891d3c888 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016D"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000164"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:35 GMT + - Wed, 24 Apr 2024 12:17:47 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{D48D998A-1D48-4EB7-AD5D-29130B42521B},1\"","createdDateTime":"2024-02-14T18:05:36Z","eTag":"\"{D48D998A-1D48-4EB7-AD5D-29130B42521B},1\"","id":"01AZJL5PMKTGG5ISA5W5HK2XJJCMFUEUQ3","lastModifiedDateTime":"2024-02-14T18:05:36Z","name":"_=o=_ - _ _Jedi_ Project Folder ___ (333)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(333)","cTag":"\"c:{D48D998A-1D48-4EB7-AD5D-29130B42521B},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{F7BED3EF-4315-4441-B4BB-9F6A52821FC4},1\"","createdDateTime":"2024-04-24T12:17:48Z","eTag":"\"{F7BED3EF-4315-4441-B4BB-9F6A52821FC4},1\"","id":"01AZJL5PPP2O7POFKDIFCLJO47NJJIEH6E","lastModifiedDateTime":"2024-04-24T12:17:48Z","name":"_=o=_ + _ _Jedi_ Project Folder ___ (682)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(682)","cTag":"\"c:{F7BED3EF-4315-4441-B4BB-9F6A52821FC4},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:36Z","lastModifiedDateTime":"2024-02-14T18:05:36Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:05:35 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:17:48Z","lastModifiedDateTime":"2024-04-24T12:17:48Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:17:48 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"PUBLIC PROJECT (335)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"PUBLIC PROJECT (684)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json + Authorization: + - Bearer User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: @@ -256,41 +305,39 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{C1BE9AF0-236D-4E44-809D-69A7A0116786},1"' + - '"{F26BCD79-C0EA-4D0A-8C35-9C3D3E0393B1},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PPQTK7MC3JDIRHIBHLJU6QBCZ4G') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PLZZVV7F2WABJGYYNM4HU7AHE5R') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 9f23be99-94d4-4ac9-bf8a-ee86c9bf4ff1 + - 6cfbd2d6-2b23-440a-8ec5-1bdbf7a5f37f Client-Request-Id: - - 9f23be99-94d4-4ac9-bf8a-ee86c9bf4ff1 + - 6cfbd2d6-2b23-440a-8ec5-1bdbf7a5f37f X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000164"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057E"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:35 GMT + - Wed, 24 Apr 2024 12:17:48 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{C1BE9AF0-236D-4E44-809D-69A7A0116786},1\"","createdDateTime":"2024-02-14T18:05:36Z","eTag":"\"{C1BE9AF0-236D-4E44-809D-69A7A0116786},1\"","id":"01AZJL5PPQTK7MC3JDIRHIBHLJU6QBCZ4G","lastModifiedDateTime":"2024-02-14T18:05:36Z","name":"PUBLIC - PROJECT (335)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(335)","cTag":"\"c:{C1BE9AF0-236D-4E44-809D-69A7A0116786},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{F26BCD79-C0EA-4D0A-8C35-9C3D3E0393B1},1\"","createdDateTime":"2024-04-24T12:17:48Z","eTag":"\"{F26BCD79-C0EA-4D0A-8C35-9C3D3E0393B1},1\"","id":"01AZJL5PLZZVV7F2WABJGYYNM4HU7AHE5R","lastModifiedDateTime":"2024-04-24T12:17:48Z","name":"PUBLIC + PROJECT (684)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(684)","cTag":"\"c:{F26BCD79-C0EA-4D0A-8C35-9C3D3E0393B1},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:36Z","lastModifiedDateTime":"2024-02-14T18:05:36Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:05:36 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:17:48Z","lastModifiedDateTime":"2024-04-24T12:17:48Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:17:48 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB body: encoding: US-ASCII string: '' @@ -302,7 +349,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -312,37 +359,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 190b87e5-948c-4a1b-b3b0-dd12ae9c6994 + - 74a444cf-205b-46f9-ad9a-91b6b9e9d920 Client-Request-Id: - - 190b87e5-948c-4a1b-b3b0-dd12ae9c6994 + - 74a444cf-205b-46f9-ad9a-91b6b9e9d920 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000310"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000054C"}}' Date: - - Wed, 14 Feb 2024 18:05:36 GMT + - Wed, 24 Apr 2024 12:17:48 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-01-29T17:30:48Z","eTag":"\"{AA674C60-1512-4607-AC2F-7838F996B4A9},1\"","id":"01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ","lastModifiedDateTime":"2024-01-29T17:30:48Z","name":"Project - B","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20B","cTag":"\"c:{AA674C60-1512-4607-AC2F-7838F996B4A9},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:48Z","lastModifiedDateTime":"2024-01-29T17:30:48Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:36 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-18T12:05:15Z","eTag":"\"{B94392DB-A502-4109-9EC5-17E7ABFFF461},4\"","id":"01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-18T12:05:15Z","name":"[dev] + Large (4)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5Bdev%5D%20Large%20(4)","cTag":"\"c:{B94392DB-A502-4109-9EC5-17E7ABFFF461},0\"","fileSystemInfo":{"createdDateTime":"2024-04-18T12:05:15Z","lastModifiedDateTime":"2024-04-18T12:05:15Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:17:48 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB/permissions body: encoding: US-ASCII string: '' @@ -354,7 +397,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -364,22 +407,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 2c36057d-e7c6-4302-a3ad-2d7e3e149384 + - 980d9ba6-6364-4cf1-9751-fcb31194b06f Client-Request-Id: - - 2c36057d-e7c6-4302-a3ad-2d7e3e149384 + - 980d9ba6-6364-4cf1-9751-fcb31194b06f X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000313"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -387,26 +426,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:36 GMT + - Wed, 24 Apr 2024 12:17:48 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:36 GMT + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' + recorded_at: Wed, 24 Apr 2024 12:17:49 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K body: encoding: US-ASCII string: '' @@ -418,7 +458,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -428,37 +468,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 6fcd6ba2-490f-4cfc-9b14-2cb17b1d3602 + - eeb7cd1a-910b-4d80-bd67-9028f72ded66 Client-Request-Id: - - 6fcd6ba2-490f-4cfc-9b14-2cb17b1d3602 + - eeb7cd1a-910b-4d80-bd67-9028f72ded66 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000163"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016D"}}' Date: - - Wed, 14 Feb 2024 18:05:35 GMT + - Wed, 24 Apr 2024 12:17:49 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-01-29T17:30:52Z","eTag":"\"{98914E03-2109-4235-8A69-3092969D062D},1\"","id":"01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN","lastModifiedDateTime":"2024-01-29T17:30:52Z","name":"Project - C","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20C","cTag":"\"c:{98914E03-2109-4235-8A69-3092969D062D},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:52Z","lastModifiedDateTime":"2024-01-29T17:30:52Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:36 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-03-18T18:12:55Z","eTag":"\"{D03A86A5-D563-45AC-B5FA-2A333F353BEA},274\"","id":"01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-03-18T18:12:55Z","name":"Demo + project (1)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Demo%20project%20(1)","cTag":"\"c:{D03A86A5-D563-45AC-B5FA-2A333F353BEA},0\"","fileSystemInfo":{"createdDateTime":"2024-03-18T18:12:55Z","lastModifiedDateTime":"2024-03-18T18:12:55Z"},"folder":{"childCount":1},"shared":{"scope":"users"},"size":988098560}' + recorded_at: Wed, 24 Apr 2024 12:17:49 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K/permissions body: encoding: US-ASCII string: '' @@ -470,7 +506,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -480,22 +516,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - b710cddb-8f80-46a0-b8e0-664f0c608a10 + - cfd73266-a3ba-41ba-9df6-38eb36e4fc36 Client-Request-Id: - - b710cddb-8f80-46a0-b8e0-664f0c608a10 + - cfd73266-a3ba-41ba-9df6-38eb36e4fc36 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000166"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057C"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -503,77 +535,31 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:36 GMT + - Wed, 24 Apr 2024 12:17:49 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello + Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Marcello + Rocha","email":"mrocha.op@outlook.com","id":"24","loginName":"i:0#.f|membership|mrocha.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Marcello + Rocha","email":"mrocha.op@outlook.com","id":"d6e00f6d-1ae7-43e6-b0af-15d99a56d4ce"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:37 GMT -- request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.2 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 200 - message: OK - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Vary: - - Accept-Encoding - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - 5d05d326-9447-4633-90b1-95042c92f513 - Client-Request-Id: - - 5d05d326-9447-4633-90b1-95042c92f513 - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000163"}}' - Odata-Version: - - '4.0' - Date: - - Wed, 14 Feb 2024 18:05:36 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2023-12-15T14:58:59Z","eTag":"\"{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},33\"","id":"01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM","lastModifiedDateTime":"2023-12-29T10:44:06Z","name":"Renamed - Project A (1234)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Renamed%20Project%20A%20(1234)","cTag":"\"c:{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},0\"","decorator":{"iconColor":"darkGreen"},"size":33882,"createdBy":{"user":{"email":"w.lindenthal@finnlabs.com","id":"99fb2d61-359b-4fae-91c9-1ac6c8f02b5e","displayName":"Wieland - Lindenthal"}},"lastModifiedBy":{"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2023-12-15T14:58:59Z","lastModifiedDateTime":"2023-12-29T10:44:06Z"},"folder":{"childCount":2},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:37 GMT + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' + recorded_at: Wed, 24 Apr 2024 12:17:50 GMT - request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM/permissions + method: delete + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K/permissions/aTowIy5mfG1lbWJlcnNoaXB8bXJvY2hhLm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20 body: encoding: US-ASCII string: '' @@ -585,32 +571,24 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: status: - code: 200 - message: OK + code: 204 + message: No Content headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 7967a44e-533c-4644-a55d-fb91a501263e + - 93c23987-19e6-45c7-895b-542cd13a1015 Client-Request-Id: - - 7967a44e-533c-4644-a55d-fb91a501263e + - 93c23987-19e6-45c7-895b-542cd13a1015 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000350"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -618,26 +596,15 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:37 GMT + - Wed, 24 Apr 2024 12:17:49 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject - file storage tests Owners","id":"3","loginName":"OpenProject file storage - tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:37 GMT + string: '' + recorded_at: Wed, 24 Apr 2024 12:17:50 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PM4BGLCQIZRSNA2K4E5BOIBB2V5 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNPHSQNBGNWKNGZMWTFW2SI5QRI body: encoding: US-ASCII string: '' @@ -649,7 +616,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -659,37 +626,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 5af6811a-0a9f-4cf9-85a5-c341fd1c74d8 + - 1595c264-daab-4c09-83c8-251535f2e422 Client-Request-Id: - - 5af6811a-0a9f-4cf9-85a5-c341fd1c74d8 + - 1595c264-daab-4c09-83c8-251535f2e422 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000034F"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016D"}}' Date: - - Wed, 14 Feb 2024 18:05:37 GMT + - Wed, 24 Apr 2024 12:17:50 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:05:36Z","eTag":"\"{2896099C-3123-4193-A570-9D0B9010EABD},1\"","id":"01AZJL5PM4BGLCQIZRSNA2K4E5BOIBB2V5","lastModifiedDateTime":"2024-02-14T18:05:36Z","name":"[Sample] - Project Name _ Ehuu (332)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(332)","cTag":"\"c:{2896099C-3123-4193-A570-9D0B9010EABD},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:36Z","lastModifiedDateTime":"2024-02-14T18:05:36Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:38 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:17:47Z","eTag":"\"{D0A03CAF-B699-4D53-965A-65B6A48EC228},2\"","id":"01AZJL5PNPHSQNBGNWKNGZMWTFW2SI5QRI","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:17:47Z","name":"[Sample] + Project Name _ Ehuu (681)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(681)","cTag":"\"c:{D0A03CAF-B699-4D53-965A-65B6A48EC228},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:17:47Z","lastModifiedDateTime":"2024-04-24T12:17:47Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:17:50 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PM4BGLCQIZRSNA2K4E5BOIBB2V5/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNPHSQNBGNWKNGZMWTFW2SI5QRI/permissions body: encoding: US-ASCII string: '' @@ -701,7 +664,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -711,22 +674,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - cbc8cef8-4bc6-46bc-8087-0bfaed82afeb + - 2de462f8-f6f1-4d2f-9a68-8f2efc76ec3c Client-Request-Id: - - cbc8cef8-4bc6-46bc-8087-0bfaed82afeb + - 2de462f8-f6f1-4d2f-9a68-8f2efc76ec3c X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016A"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057E"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -734,26 +693,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:37 GMT + - Wed, 24 Apr 2024 12:17:51 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PM4BGLCQIZRSNA2K4E5BOIBB2V5'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNPHSQNBGNWKNGZMWTFW2SI5QRI'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:38 GMT + recorded_at: Wed, 24 Apr 2024 12:17:51 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PM4BGLCQIZRSNA2K4E5BOIBB2V5/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNPHSQNBGNWKNGZMWTFW2SI5QRI/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"},{"objectId":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -765,7 +725,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -777,8 +737,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -790,11 +748,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - e003ade7-9891-47f1-83f0-4aa0c382f2cc + - 6f3a6ac5-0891-48a5-a8aa-5444a7441b1b Client-Request-Id: - - e003ade7-9891-47f1-83f0-4aa0c382f2cc + - 6f3a6ac5-0891-48a5-a8aa-5444a7441b1b X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000313"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000054C"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -805,17 +763,17 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:39 GMT + - Wed, 24 Apr 2024 12:17:52 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test - Manager 01"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test - user 02"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + Manager 01"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test + user 02"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:39 GMT + recorded_at: Wed, 24 Apr 2024 12:17:53 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PMKTGG5ISA5W5HK2XJJCMFUEUQ3 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPP2O7POFKDIFCLJO47NJJIEH6E body: encoding: US-ASCII string: '' @@ -827,7 +785,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -837,37 +795,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - e5e57372-6fd2-40d2-b892-7b82ad909b0e + - 5e40f2a1-17f9-4725-9cb7-e11c880423a6 Client-Request-Id: - - e5e57372-6fd2-40d2-b892-7b82ad909b0e + - 5e40f2a1-17f9-4725-9cb7-e11c880423a6 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000160"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' Date: - - Wed, 14 Feb 2024 18:05:39 GMT + - Wed, 24 Apr 2024 12:17:52 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:05:36Z","eTag":"\"{D48D998A-1D48-4EB7-AD5D-29130B42521B},1\"","id":"01AZJL5PMKTGG5ISA5W5HK2XJJCMFUEUQ3","lastModifiedDateTime":"2024-02-14T18:05:36Z","name":"_=o=_ - _ _Jedi_ Project Folder ___ (333)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(333)","cTag":"\"c:{D48D998A-1D48-4EB7-AD5D-29130B42521B},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:36Z","lastModifiedDateTime":"2024-02-14T18:05:36Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:40 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:17:48Z","eTag":"\"{F7BED3EF-4315-4441-B4BB-9F6A52821FC4},2\"","id":"01AZJL5PPP2O7POFKDIFCLJO47NJJIEH6E","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:17:48Z","name":"_=o=_ + _ _Jedi_ Project Folder ___ (682)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(682)","cTag":"\"c:{F7BED3EF-4315-4441-B4BB-9F6A52821FC4},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:17:48Z","lastModifiedDateTime":"2024-04-24T12:17:48Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:17:53 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PMKTGG5ISA5W5HK2XJJCMFUEUQ3/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPP2O7POFKDIFCLJO47NJJIEH6E/permissions body: encoding: US-ASCII string: '' @@ -879,7 +833,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -889,22 +843,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 40b2dce0-00d5-41e6-9b3b-09e581e9e5cd + - e5397b14-458d-4e7c-9543-ffc06010477b Client-Request-Id: - - 40b2dce0-00d5-41e6-9b3b-09e581e9e5cd + - e5397b14-458d-4e7c-9543-ffc06010477b X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000035F"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000350"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -912,26 +862,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:39 GMT + - Wed, 24 Apr 2024 12:17:53 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PMKTGG5ISA5W5HK2XJJCMFUEUQ3'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPP2O7POFKDIFCLJO47NJJIEH6E'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:40 GMT + recorded_at: Wed, 24 Apr 2024 12:17:54 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PMKTGG5ISA5W5HK2XJJCMFUEUQ3/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPP2O7POFKDIFCLJO47NJJIEH6E/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -943,7 +894,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -955,8 +906,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -968,11 +917,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - a263bf9b-1695-43da-8e3f-fd9b94fec0b5 + - 26b719bc-9486-4ef7-80dc-3dff05e104df Client-Request-Id: - - a263bf9b-1695-43da-8e3f-fd9b94fec0b5 + - 26b719bc-9486-4ef7-80dc-3dff05e104df X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000034F"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000164"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -983,16 +932,16 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:41 GMT + - Wed, 24 Apr 2024 12:17:54 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test - Manager 01"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + Manager 01"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:41 GMT + recorded_at: Wed, 24 Apr 2024 12:17:55 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPQTK7MC3JDIRHIBHLJU6QBCZ4G + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLZZVV7F2WABJGYYNM4HU7AHE5R body: encoding: US-ASCII string: '' @@ -1004,7 +953,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1014,37 +963,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 1125eaff-76e3-40c4-ad6e-db5c114f2b87 + - 3c950943-5f7b-41ed-8ae2-1b5a32a0e80d Client-Request-Id: - - 1125eaff-76e3-40c4-ad6e-db5c114f2b87 + - 3c950943-5f7b-41ed-8ae2-1b5a32a0e80d X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000351"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000052E"}}' Date: - - Wed, 14 Feb 2024 18:05:41 GMT + - Wed, 24 Apr 2024 12:17:55 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:05:36Z","eTag":"\"{C1BE9AF0-236D-4E44-809D-69A7A0116786},1\"","id":"01AZJL5PPQTK7MC3JDIRHIBHLJU6QBCZ4G","lastModifiedDateTime":"2024-02-14T18:05:36Z","name":"PUBLIC - PROJECT (335)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(335)","cTag":"\"c:{C1BE9AF0-236D-4E44-809D-69A7A0116786},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:36Z","lastModifiedDateTime":"2024-02-14T18:05:36Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:41 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:17:48Z","eTag":"\"{F26BCD79-C0EA-4D0A-8C35-9C3D3E0393B1},2\"","id":"01AZJL5PLZZVV7F2WABJGYYNM4HU7AHE5R","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:17:48Z","name":"PUBLIC + PROJECT (684)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(684)","cTag":"\"c:{F26BCD79-C0EA-4D0A-8C35-9C3D3E0393B1},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:17:48Z","lastModifiedDateTime":"2024-04-24T12:17:48Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:17:56 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPQTK7MC3JDIRHIBHLJU6QBCZ4G/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLZZVV7F2WABJGYYNM4HU7AHE5R/permissions body: encoding: US-ASCII string: '' @@ -1056,7 +1001,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1066,22 +1011,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 7e0e8fb9-7ee1-443a-b302-d3596636d7de + - 34915f8f-bd49-42da-9e85-8adb8d2d2c7e Client-Request-Id: - - 7e0e8fb9-7ee1-443a-b302-d3596636d7de + - 34915f8f-bd49-42da-9e85-8adb8d2d2c7e X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000313"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000035F"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1089,26 +1030,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:41 GMT + - Wed, 24 Apr 2024 12:17:56 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPQTK7MC3JDIRHIBHLJU6QBCZ4G'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PLZZVV7F2WABJGYYNM4HU7AHE5R'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:42 GMT + recorded_at: Wed, 24 Apr 2024 12:17:56 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPQTK7MC3JDIRHIBHLJU6QBCZ4G/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLZZVV7F2WABJGYYNM4HU7AHE5R/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["read"],"recipients":[{"objectId":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -1120,7 +1062,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -1132,8 +1074,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -1145,11 +1085,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 65ba9f0f-9878-454b-8370-d2ad52fb339e + - 5fbfc7a6-cc4b-43b0-a080-e72a7c40cf93 Client-Request-Id: - - 65ba9f0f-9878-454b-8370-d2ad52fb339e + - 5fbfc7a6-cc4b-43b0-a080-e72a7c40cf93 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000350"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000310"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1160,16 +1100,16 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:42 GMT + - Wed, 24 Apr 2024 12:17:57 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test - user 02"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test + user 02"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:43 GMT + recorded_at: Wed, 24 Apr 2024 12:17:57 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPQTK7MC3JDIRHIBHLJU6QBCZ4G/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLZZVV7F2WABJGYYNM4HU7AHE5R/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"}]}' @@ -1181,7 +1121,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -1193,8 +1133,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -1206,11 +1144,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 5dd0d7cd-c5be-470a-878d-b31aa7edd8cd + - 6fd4fc9b-9c96-4e7a-a58b-cb7582bcf247 Client-Request-Id: - - 5dd0d7cd-c5be-470a-878d-b31aa7edd8cd + - 6fd4fc9b-9c96-4e7a-a58b-cb7582bcf247 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000167"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000164"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1221,15 +1159,15 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:43 GMT + - Wed, 24 Apr 2024 12:17:58 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test Manager 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:43 GMT + recorded_at: Wed, 24 Apr 2024 12:17:59 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPQTK7MC3JDIRHIBHLJU6QBCZ4G + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLZZVV7F2WABJGYYNM4HU7AHE5R body: encoding: US-ASCII string: '' @@ -1241,7 +1179,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1251,37 +1189,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 6b34874c-2117-4c8f-8574-b8b7b3f1c4b5 + - f3088cc6-a3e4-4f07-b4d5-f9d1691b1d72 Client-Request-Id: - - 6b34874c-2117-4c8f-8574-b8b7b3f1c4b5 + - f3088cc6-a3e4-4f07-b4d5-f9d1691b1d72 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000351"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000160"}}' Date: - - Wed, 14 Feb 2024 18:05:43 GMT + - Wed, 24 Apr 2024 12:17:59 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:05:36Z","eTag":"\"{C1BE9AF0-236D-4E44-809D-69A7A0116786},3\"","id":"01AZJL5PPQTK7MC3JDIRHIBHLJU6QBCZ4G","lastModifiedDateTime":"2024-02-14T18:05:36Z","name":"PUBLIC - PROJECT (335)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(335)","cTag":"\"c:{C1BE9AF0-236D-4E44-809D-69A7A0116786},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:36Z","lastModifiedDateTime":"2024-02-14T18:05:36Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:44 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:17:48Z","eTag":"\"{F26BCD79-C0EA-4D0A-8C35-9C3D3E0393B1},4\"","id":"01AZJL5PLZZVV7F2WABJGYYNM4HU7AHE5R","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:17:48Z","name":"PUBLIC + PROJECT (684)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(684)","cTag":"\"c:{F26BCD79-C0EA-4D0A-8C35-9C3D3E0393B1},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:17:48Z","lastModifiedDateTime":"2024-04-24T12:17:48Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:17:59 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPQTK7MC3JDIRHIBHLJU6QBCZ4G/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLZZVV7F2WABJGYYNM4HU7AHE5R/permissions body: encoding: US-ASCII string: '' @@ -1293,7 +1227,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1303,22 +1237,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 2cea0f37-c654-47e7-8609-90124ae26714 + - b19351e7-0685-4fa6-a5b7-75d179450f8a Client-Request-Id: - - 2cea0f37-c654-47e7-8609-90124ae26714 + - b19351e7-0685-4fa6-a5b7-75d179450f8a X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000313"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000052E"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1326,47 +1256,49 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:43 GMT + - Wed, 24 Apr 2024 12:17:58 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPQTK7MC3JDIRHIBHLJU6QBCZ4G'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PLZZVV7F2WABJGYYNM4HU7AHE5R'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test - user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"},"siteUser":{"displayName":"Test + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test user 01","email":"testuser01.op@outlook.com","id":"42","loginName":"i:0#.f|membership|testuser01.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test - user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test - user 02","email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},"siteUser":{"displayName":"Test + user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + user 02","email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test user 02","email":"testuser02.op@outlook.com","id":"43","loginName":"i:0#.f|membership|testuser02.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test - user 02","email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test - Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"},"siteUser":{"displayName":"Test + user 02","email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test Manager 01","email":"testmanager01.op@outlook.com","id":"45","loginName":"i:0#.f|membership|testmanager01.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test - Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:44 GMT + recorded_at: Wed, 24 Apr 2024 12:17:59 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PM4BGLCQIZRSNA2K4E5BOIBB2V5 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNPHSQNBGNWKNGZMWTFW2SI5QRI body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1379,32 +1311,30 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 5df83196-a99f-4251-9452-19ecf6723885 + - c89a61c8-9ba3-485a-8c61-23d02202fb3e Client-Request-Id: - - 5df83196-a99f-4251-9452-19ecf6723885 + - c89a61c8-9ba3-485a-8c61-23d02202fb3e X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000165"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000313"}}' Date: - - Wed, 14 Feb 2024 18:05:44 GMT + - Wed, 24 Apr 2024 12:17:59 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:05:44 GMT + recorded_at: Wed, 24 Apr 2024 12:18:00 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PMKTGG5ISA5W5HK2XJJCMFUEUQ3 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPP2O7POFKDIFCLJO47NJJIEH6E body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1417,32 +1347,30 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 93e1bd8c-d4e7-47e4-bc02-198f369f49d9 + - ac530df5-0419-4b2d-83d2-6a06efa99c52 Client-Request-Id: - - 93e1bd8c-d4e7-47e4-bc02-198f369f49d9 + - ac530df5-0419-4b2d-83d2-6a06efa99c52 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000310"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000166"}}' Date: - - Wed, 14 Feb 2024 18:05:44 GMT + - Wed, 24 Apr 2024 12:18:00 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:05:44 GMT + recorded_at: Wed, 24 Apr 2024 12:18:00 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPQTK7MC3JDIRHIBHLJU6QBCZ4G + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLZZVV7F2WABJGYYNM4HU7AHE5R body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1455,15 +1383,15 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - b8ad3f45-7eba-4185-a043-050d3af23f78 + - ab68d7ca-fb9d-4158-aa1f-3fe2d85b824e Client-Request-Id: - - b8ad3f45-7eba-4185-a043-050d3af23f78 + - ab68d7ca-fb9d-4158-aa1f-3fe2d85b824e X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000351"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000164"}}' Date: - - Wed, 14 Feb 2024 18:05:44 GMT + - Wed, 24 Apr 2024 12:17:59 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:05:45 GMT + recorded_at: Wed, 24 Apr 2024 12:18:00 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_rename_failed.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_rename_failed.yml index c46f6021de5c..c3f1bc97c199 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_rename_failed.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_rename_failed.yml @@ -4,19 +4,19 @@ http_interactions: method: post uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token body: - encoding: UTF-8 - string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB headers: User-Agent: - - Rack::OAuth2 (2.2.1) - Authorization: - - Basic - Content-Type: - - application/x-www-form-urlencoded - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + - httpx.rb/1.2.4 Accept: - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' response: status: code: 200 @@ -37,43 +37,45 @@ http_interactions: P3p: - CP="DSP CUR OTPi IND OTRi ONL FIN" X-Ms-Request-Id: - - f1b6a649-f21a-46a3-bad1-bb74ca62a400 + - 9a55422d-f14c-4de6-80e1-52a1a4718a00 X-Ms-Ests-Server: - - 2.1.17282.6 - SEC ProdSlices + - 2.1.17846.6 - FRC ProdSlices + X-Ms-Srs: + - 1.P X-Xss-Protection: - '0' Set-Cookie: - - fpc=Atv907d77VFFsZjKxp-kCqWkbDoXAQAAACL4Xt0OAAAA; expires=Fri, 15-Mar-2024 - 18:06:27 GMT; path=/; secure; HttpOnly; SameSite=None - - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly + - fpc=Alt2sgg7iblOtRCd9F1_1rOkbDoXAQAAALvvut0OAAAA; expires=Fri, 24-May-2024 + 12:19:07 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly Date: - - Wed, 14 Feb 2024 18:06:26 GMT + - Wed, 24 Apr 2024 12:19:06 GMT Content-Length: - - '1708' + - '1740' body: encoding: UTF-8 string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Wed, 14 Feb 2024 18:06:27 GMT + recorded_at: Wed, 24 Apr 2024 12:19:07 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"[Sample] Project Name _ Ehuu (332)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"[Sample] Project Name _ Ehuu (681)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: - '100' + Authorization: + - Bearer response: status: code: 201 @@ -81,38 +83,36 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{E48118A7-EA05-4C2D-80CC-C553FC3AA85D},1"' + - '"{EF1EB1EB-96C6-4A32-B874-287796A0A206},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PNHDCA6IBPKFVGIBTGFKP6DVKC5') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PPLWEPO7RUWGJFLQ5BIO6LKBIQG') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 40c1bd94-b74d-4a4e-865b-f254547c5c74 + - 8124710e-bf63-411c-ae60-277350b3295b Client-Request-Id: - - 40c1bd94-b74d-4a4e-865b-f254547c5c74 + - 8124710e-bf63-411c-ae60-277350b3295b X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055E"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:06:27 GMT + - Wed, 24 Apr 2024 12:19:07 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{E48118A7-EA05-4C2D-80CC-C553FC3AA85D},1\"","createdDateTime":"2024-02-14T18:06:28Z","eTag":"\"{E48118A7-EA05-4C2D-80CC-C553FC3AA85D},1\"","id":"01AZJL5PNHDCA6IBPKFVGIBTGFKP6DVKC5","lastModifiedDateTime":"2024-02-14T18:06:28Z","name":"[Sample] - Project Name _ Ehuu (332)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(332)","cTag":"\"c:{E48118A7-EA05-4C2D-80CC-C553FC3AA85D},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{EF1EB1EB-96C6-4A32-B874-287796A0A206},1\"","createdDateTime":"2024-04-24T12:19:08Z","eTag":"\"{EF1EB1EB-96C6-4A32-B874-287796A0A206},1\"","id":"01AZJL5PPLWEPO7RUWGJFLQ5BIO6LKBIQG","lastModifiedDateTime":"2024-04-24T12:19:08Z","name":"[Sample] + Project Name _ Ehuu (681)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(681)","cTag":"\"c:{EF1EB1EB-96C6-4A32-B874-287796A0A206},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:06:28Z","lastModifiedDateTime":"2024-02-14T18:06:28Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:06:27 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:19:08Z","lastModifiedDateTime":"2024-04-24T12:19:08Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:19:07 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children @@ -120,14 +120,14 @@ http_interactions: encoding: UTF-8 string: '{"name":"Flawless Death Star Blueprints","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json + Authorization: + - Bearer User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: @@ -139,38 +139,93 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{22CA54F5-B6C1-4018-BDDB-CA40FFD887F7},1"' + - '"{F29392F9-2759-43AE-A0D7-FBEB9EA8C2FE},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PPVKTFCFQNWDBAL3W6KID75RB7X') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PPZSKJ7EWJHVZB2BV735OPKRQX6') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - b3e5662f-6f6d-4026-ae44-a4799c09f214 + - 7bfcb873-94cf-4f9d-90b1-74b407cf2d3d Client-Request-Id: - - b3e5662f-6f6d-4026-ae44-a4799c09f214 + - 7bfcb873-94cf-4f9d-90b1-74b407cf2d3d X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016A"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000052A"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:06:27 GMT + - Wed, 24 Apr 2024 12:19:07 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{22CA54F5-B6C1-4018-BDDB-CA40FFD887F7},1\"","createdDateTime":"2024-02-14T18:06:28Z","eTag":"\"{22CA54F5-B6C1-4018-BDDB-CA40FFD887F7},1\"","id":"01AZJL5PPVKTFCFQNWDBAL3W6KID75RB7X","lastModifiedDateTime":"2024-02-14T18:06:28Z","name":"Flawless - Death Star Blueprints","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Flawless%20Death%20Star%20Blueprints","cTag":"\"c:{22CA54F5-B6C1-4018-BDDB-CA40FFD887F7},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{F29392F9-2759-43AE-A0D7-FBEB9EA8C2FE},1\"","createdDateTime":"2024-04-24T12:19:08Z","eTag":"\"{F29392F9-2759-43AE-A0D7-FBEB9EA8C2FE},1\"","id":"01AZJL5PPZSKJ7EWJHVZB2BV735OPKRQX6","lastModifiedDateTime":"2024-04-24T12:19:08Z","name":"Flawless + Death Star Blueprints","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Flawless%20Death%20Star%20Blueprints","cTag":"\"c:{F29392F9-2759-43AE-A0D7-FBEB9EA8C2FE},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:06:28Z","lastModifiedDateTime":"2024-02-14T18:06:28Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:06:28 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:19:08Z","lastModifiedDateTime":"2024-04-24T12:19:08Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:19:08 GMT +- request: + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token + body: + encoding: UTF-8 + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default + headers: + User-Agent: + - Rack::OAuth2 (2.2.1) + Authorization: + - Basic + Content-Type: + - application/x-www-form-urlencoded + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-store, no-cache + Pragma: + - no-cache + Content-Type: + - application/json; charset=utf-8 + Expires: + - "-1" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - 77e9d738-fa4e-4036-9440-945251167e00 + X-Ms-Ests-Server: + - 2.1.17846.6 - NEULR1 ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=AstoQ_B2wEdEmIHM6sFyDRykbDoXAQAAALvvut0OAAAA; expires=Fri, 24-May-2024 + 12:19:08 GMT; path=/; secure; HttpOnly; SameSite=None + - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly + - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly + Date: + - Wed, 24 Apr 2024 12:19:08 GMT + Content-Length: + - '1708' + body: + encoding: UTF-8 + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Wed, 24 Apr 2024 12:19:08 GMT - request: method: get uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children @@ -185,7 +240,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -195,55 +250,51 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 6a0f189f-b61c-4ceb-ba7d-40efc84f3f1f + - 9621bf78-f6d8-40df-8b7e-5f0e52c3543c Client-Request-Id: - - 6a0f189f-b61c-4ceb-ba7d-40efc84f3f1f + - 9621bf78-f6d8-40df-8b7e-5f0e52c3543c X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000169"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000311"}}' Date: - - Wed, 14 Feb 2024 18:06:27 GMT + - Wed, 24 Apr 2024 12:19:08 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children","value":[{"createdDateTime":"2024-02-14T18:06:28Z","eTag":"\"{E48118A7-EA05-4C2D-80CC-C553FC3AA85D},1\"","id":"01AZJL5PNHDCA6IBPKFVGIBTGFKP6DVKC5","lastModifiedDateTime":"2024-02-14T18:06:28Z","name":"[Sample] - Project Name _ Ehuu (332)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(332)","cTag":"\"c:{E48118A7-EA05-4C2D-80CC-C553FC3AA85D},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:06:28Z","lastModifiedDateTime":"2024-02-14T18:06:28Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2024-02-14T18:06:28Z","eTag":"\"{22CA54F5-B6C1-4018-BDDB-CA40FFD887F7},1\"","id":"01AZJL5PPVKTFCFQNWDBAL3W6KID75RB7X","lastModifiedDateTime":"2024-02-14T18:06:28Z","name":"Flawless - Death Star Blueprints","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Flawless%20Death%20Star%20Blueprints","cTag":"\"c:{22CA54F5-B6C1-4018-BDDB-CA40FFD887F7},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:06:28Z","lastModifiedDateTime":"2024-02-14T18:06:28Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2024-01-29T17:30:48Z","eTag":"\"{AA674C60-1512-4607-AC2F-7838F996B4A9},1\"","id":"01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ","lastModifiedDateTime":"2024-01-29T17:30:48Z","name":"Project - B","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20B","cTag":"\"c:{AA674C60-1512-4607-AC2F-7838F996B4A9},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:48Z","lastModifiedDateTime":"2024-01-29T17:30:48Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2024-01-29T17:30:52Z","eTag":"\"{98914E03-2109-4235-8A69-3092969D062D},1\"","id":"01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN","lastModifiedDateTime":"2024-01-29T17:30:52Z","name":"Project - C","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20C","cTag":"\"c:{98914E03-2109-4235-8A69-3092969D062D},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:52Z","lastModifiedDateTime":"2024-01-29T17:30:52Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2023-12-15T14:58:59Z","eTag":"\"{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},33\"","id":"01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM","lastModifiedDateTime":"2023-12-29T10:44:06Z","name":"Renamed - Project A (1234)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Renamed%20Project%20A%20(1234)","cTag":"\"c:{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},0\"","decorator":{"iconColor":"darkGreen"},"size":33882,"createdBy":{"user":{"email":"w.lindenthal@finnlabs.com","id":"99fb2d61-359b-4fae-91c9-1ac6c8f02b5e","displayName":"Wieland - Lindenthal"}},"lastModifiedBy":{"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2023-12-15T14:58:59Z","lastModifiedDateTime":"2023-12-29T10:44:06Z"},"folder":{"childCount":2},"shared":{"scope":"users"}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:28 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)","value":[{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-18T12:05:15Z","eTag":"\"{B94392DB-A502-4109-9EC5-17E7ABFFF461},4\"","id":"01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-18T12:05:15Z","name":"[dev] + Large (4)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5Bdev%5D%20Large%20(4)","cTag":"\"c:{B94392DB-A502-4109-9EC5-17E7ABFFF461},0\"","fileSystemInfo":{"createdDateTime":"2024-04-18T12:05:15Z","lastModifiedDateTime":"2024-04-18T12:05:15Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0},{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:19:08Z","eTag":"\"{EF1EB1EB-96C6-4A32-B874-287796A0A206},2\"","id":"01AZJL5PPLWEPO7RUWGJFLQ5BIO6LKBIQG","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:19:08Z","name":"[Sample] + Project Name _ Ehuu (681)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(681)","cTag":"\"c:{EF1EB1EB-96C6-4A32-B874-287796A0A206},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:19:08Z","lastModifiedDateTime":"2024-04-24T12:19:08Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0},{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-03-18T18:12:55Z","eTag":"\"{D03A86A5-D563-45AC-B5FA-2A333F353BEA},275\"","id":"01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-03-18T18:12:55Z","name":"Demo + project (1)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Demo%20project%20(1)","cTag":"\"c:{D03A86A5-D563-45AC-B5FA-2A333F353BEA},0\"","fileSystemInfo":{"createdDateTime":"2024-03-18T18:12:55Z","lastModifiedDateTime":"2024-03-18T18:12:55Z"},"folder":{"childCount":1},"shared":{"scope":"users"},"size":988098560},{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:19:08Z","eTag":"\"{F29392F9-2759-43AE-A0D7-FBEB9EA8C2FE},2\"","id":"01AZJL5PPZSKJ7EWJHVZB2BV735OPKRQX6","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:19:08Z","name":"Flawless + Death Star Blueprints","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Flawless%20Death%20Star%20Blueprints","cTag":"\"c:{F29392F9-2759-43AE-A0D7-FBEB9EA8C2FE},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:19:08Z","lastModifiedDateTime":"2024-04-24T12:19:08Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}]}' + recorded_at: Wed, 24 Apr 2024 12:19:08 GMT - request: method: patch - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPVKTFCFQNWDBAL3W6KID75RB7X + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPZSKJ7EWJHVZB2BV735OPKRQX6 body: encoding: UTF-8 - string: '{"name":"[Sample] Project Name _ Ehuu (332)"}' + string: '{"name":"[Sample] Project Name _ Ehuu (681)"}' headers: Authorization: - Bearer @@ -252,7 +303,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -264,8 +315,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json Content-Encoding: @@ -275,32 +324,32 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - dec2afae-6af4-48d5-91a9-15be419172c5 + - 40945f75-7a11-4d70-83ee-23870cf82570 Client-Request-Id: - - dec2afae-6af4-48d5-91a9-15be419172c5 + - 40945f75-7a11-4d70-83ee-23870cf82570 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000034F"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057F"}}' Date: - - Wed, 14 Feb 2024 18:06:28 GMT + - Wed, 24 Apr 2024 12:19:09 GMT body: encoding: UTF-8 - string: '{"error":{"code":"nameAlreadyExists","message":"Name already exists","innerError":{"date":"2024-02-14T18:06:28","request-id":"dec2afae-6af4-48d5-91a9-15be419172c5","client-request-id":"dec2afae-6af4-48d5-91a9-15be419172c5"}}}' - recorded_at: Wed, 14 Feb 2024 18:06:28 GMT + string: '{"error":{"code":"nameAlreadyExists","message":"Name already exists","innerError":{"date":"2024-04-24T12:19:09","request-id":"40945f75-7a11-4d70-83ee-23870cf82570","client-request-id":"40945f75-7a11-4d70-83ee-23870cf82570"}}}' + recorded_at: Wed, 24 Apr 2024 12:19:09 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"_=o=_ _ _Jedi_ Project Folder ___ (333)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"_=o=_ _ _Jedi_ Project Folder ___ (682)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json + Authorization: + - Bearer User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: @@ -312,53 +361,51 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{3C128FE7-1D4D-454D-B1F7-68EE11C7992A},1"' + - '"{7039114F-01EF-46DC-918E-FCAEBD2A9994},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PPHR4JDYTI5JVC3D53I5YI4PGJK') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PKPCE4XB3YB3RDJDDX4V26SVGMU') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 19ffade6-cb52-4f79-9b7b-9357dfbf9e02 + - a9cfe318-b1bc-4827-ad0f-94135c1193e6 Client-Request-Id: - - 19ffade6-cb52-4f79-9b7b-9357dfbf9e02 + - a9cfe318-b1bc-4827-ad0f-94135c1193e6 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000166"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055A"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:06:28 GMT + - Wed, 24 Apr 2024 12:19:09 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{3C128FE7-1D4D-454D-B1F7-68EE11C7992A},1\"","createdDateTime":"2024-02-14T18:06:29Z","eTag":"\"{3C128FE7-1D4D-454D-B1F7-68EE11C7992A},1\"","id":"01AZJL5PPHR4JDYTI5JVC3D53I5YI4PGJK","lastModifiedDateTime":"2024-02-14T18:06:29Z","name":"_=o=_ - _ _Jedi_ Project Folder ___ (333)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(333)","cTag":"\"c:{3C128FE7-1D4D-454D-B1F7-68EE11C7992A},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{7039114F-01EF-46DC-918E-FCAEBD2A9994},1\"","createdDateTime":"2024-04-24T12:19:10Z","eTag":"\"{7039114F-01EF-46DC-918E-FCAEBD2A9994},1\"","id":"01AZJL5PKPCE4XB3YB3RDJDDX4V26SVGMU","lastModifiedDateTime":"2024-04-24T12:19:10Z","name":"_=o=_ + _ _Jedi_ Project Folder ___ (682)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(682)","cTag":"\"c:{7039114F-01EF-46DC-918E-FCAEBD2A9994},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:06:29Z","lastModifiedDateTime":"2024-02-14T18:06:29Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:06:29 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:19:10Z","lastModifiedDateTime":"2024-04-24T12:19:10Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:19:09 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"PUBLIC PROJECT (335)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"PUBLIC PROJECT (684)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json + Authorization: + - Bearer User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: @@ -370,41 +417,39 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{1BD42CF3-16C8-4943-A0B7-8E08CF0E725A},1"' + - '"{464FA0F3-D7E6-498D-82CB-6C82D533D679},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PPTFTKBXSAWINE2BN4OBDHQ44S2') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PPTUBHUNZWXRVEYFS3MQLKTHVTZ') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 9d4beff3-63e0-436b-9d73-813c5a51e03c + - 7bca38ff-22e4-44d2-a74b-36412256e06e Client-Request-Id: - - 9d4beff3-63e0-436b-9d73-813c5a51e03c + - 7bca38ff-22e4-44d2-a74b-36412256e06e X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000311"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000034F"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:06:29 GMT + - Wed, 24 Apr 2024 12:19:09 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{1BD42CF3-16C8-4943-A0B7-8E08CF0E725A},1\"","createdDateTime":"2024-02-14T18:06:29Z","eTag":"\"{1BD42CF3-16C8-4943-A0B7-8E08CF0E725A},1\"","id":"01AZJL5PPTFTKBXSAWINE2BN4OBDHQ44S2","lastModifiedDateTime":"2024-02-14T18:06:29Z","name":"PUBLIC - PROJECT (335)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(335)","cTag":"\"c:{1BD42CF3-16C8-4943-A0B7-8E08CF0E725A},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{464FA0F3-D7E6-498D-82CB-6C82D533D679},1\"","createdDateTime":"2024-04-24T12:19:10Z","eTag":"\"{464FA0F3-D7E6-498D-82CB-6C82D533D679},1\"","id":"01AZJL5PPTUBHUNZWXRVEYFS3MQLKTHVTZ","lastModifiedDateTime":"2024-04-24T12:19:10Z","name":"PUBLIC + PROJECT (684)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(684)","cTag":"\"c:{464FA0F3-D7E6-498D-82CB-6C82D533D679},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:06:29Z","lastModifiedDateTime":"2024-02-14T18:06:29Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:06:29 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:19:10Z","lastModifiedDateTime":"2024-04-24T12:19:10Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:19:10 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNHDCA6IBPKFVGIBTGFKP6DVKC5 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB body: encoding: US-ASCII string: '' @@ -416,7 +461,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -426,37 +471,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 8dce6002-9061-4fb3-b2c6-c7cf46ab1d42 + - dc2ea152-8e86-4611-96f1-87f9eae094f6 Client-Request-Id: - - 8dce6002-9061-4fb3-b2c6-c7cf46ab1d42 + - dc2ea152-8e86-4611-96f1-87f9eae094f6 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016E"}}' Date: - - Wed, 14 Feb 2024 18:06:29 GMT + - Wed, 24 Apr 2024 12:19:09 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:06:28Z","eTag":"\"{E48118A7-EA05-4C2D-80CC-C553FC3AA85D},1\"","id":"01AZJL5PNHDCA6IBPKFVGIBTGFKP6DVKC5","lastModifiedDateTime":"2024-02-14T18:06:28Z","name":"[Sample] - Project Name _ Ehuu (332)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(332)","cTag":"\"c:{E48118A7-EA05-4C2D-80CC-C553FC3AA85D},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:06:28Z","lastModifiedDateTime":"2024-02-14T18:06:28Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:06:29 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-18T12:05:15Z","eTag":"\"{B94392DB-A502-4109-9EC5-17E7ABFFF461},4\"","id":"01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-18T12:05:15Z","name":"[dev] + Large (4)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5Bdev%5D%20Large%20(4)","cTag":"\"c:{B94392DB-A502-4109-9EC5-17E7ABFFF461},0\"","fileSystemInfo":{"createdDateTime":"2024-04-18T12:05:15Z","lastModifiedDateTime":"2024-04-18T12:05:15Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:19:10 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNHDCA6IBPKFVGIBTGFKP6DVKC5/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB/permissions body: encoding: US-ASCII string: '' @@ -468,7 +509,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -478,22 +519,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 9882733a-0e3f-49d1-bd76-103fc40df319 + - fc037c33-4ad6-454d-9a44-fd420b738fbf Client-Request-Id: - - 9882733a-0e3f-49d1-bd76-103fc40df319 + - fc037c33-4ad6-454d-9a44-fd420b738fbf X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000313"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057D"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -501,142 +538,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:06:29 GMT + - Wed, 24 Apr 2024 12:19:10 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNHDCA6IBPKFVGIBTGFKP6DVKC5'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:29 GMT -- request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.2 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 200 - message: OK - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Vary: - - Accept-Encoding - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - 3e40c8da-2df8-46dd-af22-8592e35238a2 - Client-Request-Id: - - 3e40c8da-2df8-46dd-af22-8592e35238a2 - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000165"}}' - Odata-Version: - - '4.0' - Date: - - Wed, 14 Feb 2024 18:06:29 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-01-29T17:30:48Z","eTag":"\"{AA674C60-1512-4607-AC2F-7838F996B4A9},1\"","id":"01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ","lastModifiedDateTime":"2024-01-29T17:30:48Z","name":"Project - B","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20B","cTag":"\"c:{AA674C60-1512-4607-AC2F-7838F996B4A9},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:48Z","lastModifiedDateTime":"2024-01-29T17:30:48Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:06:30 GMT -- request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ/permissions - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.2 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 200 - message: OK - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Vary: - - Accept-Encoding - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - 442adbc2-df50-4826-969a-ac4526a7ba69 - Client-Request-Id: - - 442adbc2-df50-4826-969a-ac4526a7ba69 - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000034F"}}' - Link: - - ;rel="deprecation";type="text/html", - ;rel="deprecation";type="text/html" - Deprecation: - - Fri, 03 Sep 2021 23:59:59 GMT - Sunset: - - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' - Date: - - Wed, 14 Feb 2024 18:06:29 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject - file storage tests Owners","id":"3","loginName":"OpenProject file storage - tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:30 GMT + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' + recorded_at: Wed, 24 Apr 2024 12:19:10 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPLWEPO7RUWGJFLQ5BIO6LKBIQG body: encoding: US-ASCII string: '' @@ -648,7 +570,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -658,37 +580,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 1636a2b6-b704-4de3-935b-04b6219da3c6 + - 60a6f29e-31c0-439a-b44f-f3370719cc62 Client-Request-Id: - - 1636a2b6-b704-4de3-935b-04b6219da3c6 + - 60a6f29e-31c0-439a-b44f-f3370719cc62 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000310"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000558"}}' Date: - - Wed, 14 Feb 2024 18:06:30 GMT + - Wed, 24 Apr 2024 12:19:10 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-01-29T17:30:52Z","eTag":"\"{98914E03-2109-4235-8A69-3092969D062D},1\"","id":"01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN","lastModifiedDateTime":"2024-01-29T17:30:52Z","name":"Project - C","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20C","cTag":"\"c:{98914E03-2109-4235-8A69-3092969D062D},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:52Z","lastModifiedDateTime":"2024-01-29T17:30:52Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:06:30 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:19:08Z","eTag":"\"{EF1EB1EB-96C6-4A32-B874-287796A0A206},2\"","id":"01AZJL5PPLWEPO7RUWGJFLQ5BIO6LKBIQG","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:19:08Z","name":"[Sample] + Project Name _ Ehuu (681)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(681)","cTag":"\"c:{EF1EB1EB-96C6-4A32-B874-287796A0A206},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:19:08Z","lastModifiedDateTime":"2024-04-24T12:19:08Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:19:11 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPLWEPO7RUWGJFLQ5BIO6LKBIQG/permissions body: encoding: US-ASCII string: '' @@ -700,7 +618,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -710,22 +628,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 93fa8133-752e-4117-91d9-a2db08de2016 + - 158dca52-997f-4860-b366-855a3523c8f4 Client-Request-Id: - - 93fa8133-752e-4117-91d9-a2db08de2016 + - 158dca52-997f-4860-b366-855a3523c8f4 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000166"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000351"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -733,26 +647,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:06:30 GMT + - Wed, 24 Apr 2024 12:19:11 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPLWEPO7RUWGJFLQ5BIO6LKBIQG'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:31 GMT + recorded_at: Wed, 24 Apr 2024 12:19:11 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K body: encoding: US-ASCII string: '' @@ -764,7 +679,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -774,36 +689,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - cd69f1ae-339e-4a8a-92e0-aa009e119e6e + - c5716ca1-f8dd-42fd-ab7d-f90d9c448170 Client-Request-Id: - - cd69f1ae-339e-4a8a-92e0-aa009e119e6e + - c5716ca1-f8dd-42fd-ab7d-f90d9c448170 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000313"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000034F"}}' Date: - - Wed, 14 Feb 2024 18:06:30 GMT + - Wed, 24 Apr 2024 12:19:11 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2023-12-15T14:58:59Z","eTag":"\"{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},33\"","id":"01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM","lastModifiedDateTime":"2023-12-29T10:44:06Z","name":"Renamed - Project A (1234)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Renamed%20Project%20A%20(1234)","cTag":"\"c:{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},0\"","decorator":{"iconColor":"darkGreen"},"size":33882,"createdBy":{"user":{"email":"w.lindenthal@finnlabs.com","id":"99fb2d61-359b-4fae-91c9-1ac6c8f02b5e","displayName":"Wieland - Lindenthal"}},"lastModifiedBy":{"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2023-12-15T14:58:59Z","lastModifiedDateTime":"2023-12-29T10:44:06Z"},"folder":{"childCount":2},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:06:31 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-03-18T18:12:55Z","eTag":"\"{D03A86A5-D563-45AC-B5FA-2A333F353BEA},275\"","id":"01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-03-18T18:12:55Z","name":"Demo + project (1)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Demo%20project%20(1)","cTag":"\"c:{D03A86A5-D563-45AC-B5FA-2A333F353BEA},0\"","fileSystemInfo":{"createdDateTime":"2024-03-18T18:12:55Z","lastModifiedDateTime":"2024-03-18T18:12:55Z"},"folder":{"childCount":1},"shared":{"scope":"users"},"size":988098560}' + recorded_at: Wed, 24 Apr 2024 12:19:12 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K/permissions body: encoding: US-ASCII string: '' @@ -815,7 +727,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -825,22 +737,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - b3ca9836-a2f1-4a1b-9804-3e11468f1968 + - c30919b6-0ade-4514-9297-16658125a881 Client-Request-Id: - - b3ca9836-a2f1-4a1b-9804-3e11468f1968 + - c30919b6-0ade-4514-9297-16658125a881 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000311"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000165"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -848,26 +756,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:06:31 GMT + - Wed, 24 Apr 2024 12:19:12 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:31 GMT + recorded_at: Wed, 24 Apr 2024 12:19:12 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPVKTFCFQNWDBAL3W6KID75RB7X + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPZSKJ7EWJHVZB2BV735OPKRQX6 body: encoding: US-ASCII string: '' @@ -879,7 +788,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -889,37 +798,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - b09cc702-9949-43d1-bfb5-59fa208c37b4 + - f31ff0c2-0495-4627-aa1e-950dd542f553 Client-Request-Id: - - b09cc702-9949-43d1-bfb5-59fa208c37b4 + - f31ff0c2-0495-4627-aa1e-950dd542f553 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000160"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000035F"}}' Date: - - Wed, 14 Feb 2024 18:06:31 GMT + - Wed, 24 Apr 2024 12:19:12 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:06:28Z","eTag":"\"{22CA54F5-B6C1-4018-BDDB-CA40FFD887F7},1\"","id":"01AZJL5PPVKTFCFQNWDBAL3W6KID75RB7X","lastModifiedDateTime":"2024-02-14T18:06:28Z","name":"Flawless - Death Star Blueprints","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Flawless%20Death%20Star%20Blueprints","cTag":"\"c:{22CA54F5-B6C1-4018-BDDB-CA40FFD887F7},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:06:28Z","lastModifiedDateTime":"2024-02-14T18:06:28Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:06:31 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:19:08Z","eTag":"\"{F29392F9-2759-43AE-A0D7-FBEB9EA8C2FE},2\"","id":"01AZJL5PPZSKJ7EWJHVZB2BV735OPKRQX6","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:19:08Z","name":"Flawless + Death Star Blueprints","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Flawless%20Death%20Star%20Blueprints","cTag":"\"c:{F29392F9-2759-43AE-A0D7-FBEB9EA8C2FE},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:19:08Z","lastModifiedDateTime":"2024-04-24T12:19:08Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:19:12 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPVKTFCFQNWDBAL3W6KID75RB7X/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPZSKJ7EWJHVZB2BV735OPKRQX6/permissions body: encoding: US-ASCII string: '' @@ -931,7 +836,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -941,22 +846,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 29b5e39d-6952-491e-b723-6d6ad688297c + - ff00c186-5edd-4e18-ba19-9bb4f66fa641 Client-Request-Id: - - 29b5e39d-6952-491e-b723-6d6ad688297c + - ff00c186-5edd-4e18-ba19-9bb4f66fa641 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000310"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000160"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -964,26 +865,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:06:32 GMT + - Wed, 24 Apr 2024 12:19:12 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPVKTFCFQNWDBAL3W6KID75RB7X'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPZSKJ7EWJHVZB2BV735OPKRQX6'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:32 GMT + recorded_at: Wed, 24 Apr 2024 12:19:13 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPVKTFCFQNWDBAL3W6KID75RB7X/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPZSKJ7EWJHVZB2BV735OPKRQX6/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"},{"objectId":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -995,7 +897,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -1007,8 +909,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -1020,11 +920,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 87ec68d0-3934-4262-a107-1b1d3bfadcf7 + - 679b825d-0a55-4996-a4f3-eebf33062987 Client-Request-Id: - - 87ec68d0-3934-4262-a107-1b1d3bfadcf7 + - 679b825d-0a55-4996-a4f3-eebf33062987 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000559"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1035,17 +935,17 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:06:33 GMT + - Wed, 24 Apr 2024 12:19:14 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test - Manager 01"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test - user 02"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + Manager 01"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test + user 02"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:33 GMT + recorded_at: Wed, 24 Apr 2024 12:19:14 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPHR4JDYTI5JVC3D53I5YI4PGJK + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKPCE4XB3YB3RDJDDX4V26SVGMU body: encoding: US-ASCII string: '' @@ -1057,7 +957,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1067,37 +967,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - a6708062-9cb9-4340-a470-8f6dade610f0 + - fddcc690-e3a6-45e6-8ef7-fe0206af8e83 Client-Request-Id: - - a6708062-9cb9-4340-a470-8f6dade610f0 + - fddcc690-e3a6-45e6-8ef7-fe0206af8e83 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000163"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000313"}}' Date: - - Wed, 14 Feb 2024 18:06:33 GMT + - Wed, 24 Apr 2024 12:19:14 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:06:29Z","eTag":"\"{3C128FE7-1D4D-454D-B1F7-68EE11C7992A},1\"","id":"01AZJL5PPHR4JDYTI5JVC3D53I5YI4PGJK","lastModifiedDateTime":"2024-02-14T18:06:29Z","name":"_=o=_ - _ _Jedi_ Project Folder ___ (333)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(333)","cTag":"\"c:{3C128FE7-1D4D-454D-B1F7-68EE11C7992A},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:06:29Z","lastModifiedDateTime":"2024-02-14T18:06:29Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:06:33 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:19:10Z","eTag":"\"{7039114F-01EF-46DC-918E-FCAEBD2A9994},2\"","id":"01AZJL5PKPCE4XB3YB3RDJDDX4V26SVGMU","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:19:10Z","name":"_=o=_ + _ _Jedi_ Project Folder ___ (682)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(682)","cTag":"\"c:{7039114F-01EF-46DC-918E-FCAEBD2A9994},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:19:10Z","lastModifiedDateTime":"2024-04-24T12:19:10Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:19:15 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPHR4JDYTI5JVC3D53I5YI4PGJK/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKPCE4XB3YB3RDJDDX4V26SVGMU/permissions body: encoding: US-ASCII string: '' @@ -1109,7 +1005,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1119,22 +1015,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 800d8d76-5e71-41b2-93ea-63f7a55383f3 + - 931a00c5-0f3d-4a4c-aeec-2136e9a3c10d Client-Request-Id: - - 800d8d76-5e71-41b2-93ea-63f7a55383f3 + - 931a00c5-0f3d-4a4c-aeec-2136e9a3c10d X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000169"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000166"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1142,26 +1034,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:06:33 GMT + - Wed, 24 Apr 2024 12:19:15 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPHR4JDYTI5JVC3D53I5YI4PGJK'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PKPCE4XB3YB3RDJDDX4V26SVGMU'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:34 GMT + recorded_at: Wed, 24 Apr 2024 12:19:15 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPHR4JDYTI5JVC3D53I5YI4PGJK/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKPCE4XB3YB3RDJDDX4V26SVGMU/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -1173,7 +1066,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -1185,8 +1078,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -1198,11 +1089,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 45d4d534-5c54-495f-8526-133f156e488e + - 48923173-e8e7-44dc-8587-a7bfef563705 Client-Request-Id: - - 45d4d534-5c54-495f-8526-133f156e488e + - 48923173-e8e7-44dc-8587-a7bfef563705 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000035F"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057C"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1213,16 +1104,16 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:06:35 GMT + - Wed, 24 Apr 2024 12:19:16 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test - Manager 01"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + Manager 01"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:35 GMT + recorded_at: Wed, 24 Apr 2024 12:19:17 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPTFTKBXSAWINE2BN4OBDHQ44S2 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPTUBHUNZWXRVEYFS3MQLKTHVTZ body: encoding: US-ASCII string: '' @@ -1234,7 +1125,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1244,37 +1135,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - e6aa646d-34c9-43ee-8967-8f980b46280b + - ed436186-6e65-40f8-b96b-f2c07d565c4a Client-Request-Id: - - e6aa646d-34c9-43ee-8967-8f980b46280b + - ed436186-6e65-40f8-b96b-f2c07d565c4a X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000351"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000559"}}' Date: - - Wed, 14 Feb 2024 18:06:35 GMT + - Wed, 24 Apr 2024 12:19:17 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:06:29Z","eTag":"\"{1BD42CF3-16C8-4943-A0B7-8E08CF0E725A},1\"","id":"01AZJL5PPTFTKBXSAWINE2BN4OBDHQ44S2","lastModifiedDateTime":"2024-02-14T18:06:29Z","name":"PUBLIC - PROJECT (335)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(335)","cTag":"\"c:{1BD42CF3-16C8-4943-A0B7-8E08CF0E725A},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:06:29Z","lastModifiedDateTime":"2024-02-14T18:06:29Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:06:35 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:19:10Z","eTag":"\"{464FA0F3-D7E6-498D-82CB-6C82D533D679},2\"","id":"01AZJL5PPTUBHUNZWXRVEYFS3MQLKTHVTZ","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:19:10Z","name":"PUBLIC + PROJECT (684)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(684)","cTag":"\"c:{464FA0F3-D7E6-498D-82CB-6C82D533D679},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:19:10Z","lastModifiedDateTime":"2024-04-24T12:19:10Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:19:17 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPTFTKBXSAWINE2BN4OBDHQ44S2/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPTUBHUNZWXRVEYFS3MQLKTHVTZ/permissions body: encoding: US-ASCII string: '' @@ -1286,7 +1173,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1296,22 +1183,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 5fd28047-fb1c-466f-b7b4-7a3d6654a48d + - c8ae0ed6-4fbd-4331-a48a-0bf4270e9c14 Client-Request-Id: - - 5fd28047-fb1c-466f-b7b4-7a3d6654a48d + - c8ae0ed6-4fbd-4331-a48a-0bf4270e9c14 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000166"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000350"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1319,26 +1202,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:06:35 GMT + - Wed, 24 Apr 2024 12:19:17 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPTFTKBXSAWINE2BN4OBDHQ44S2'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPTUBHUNZWXRVEYFS3MQLKTHVTZ'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:35 GMT + recorded_at: Wed, 24 Apr 2024 12:19:17 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPTFTKBXSAWINE2BN4OBDHQ44S2/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPTUBHUNZWXRVEYFS3MQLKTHVTZ/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["read"],"recipients":[{"objectId":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -1350,7 +1234,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -1362,8 +1246,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -1375,11 +1257,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 2793887d-b1e4-4be8-8ba0-0f55f03b4394 + - 1e179291-e902-4111-b917-96e59eabc5b6 Client-Request-Id: - - 2793887d-b1e4-4be8-8ba0-0f55f03b4394 + - 1e179291-e902-4111-b917-96e59eabc5b6 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000163"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000166"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1390,16 +1272,16 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:06:36 GMT + - Wed, 24 Apr 2024 12:19:18 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test - user 02"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test + user 02"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:37 GMT + recorded_at: Wed, 24 Apr 2024 12:19:19 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPTFTKBXSAWINE2BN4OBDHQ44S2/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPTUBHUNZWXRVEYFS3MQLKTHVTZ/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"}]}' @@ -1411,7 +1293,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -1423,8 +1305,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -1436,11 +1316,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - a7e53f60-4617-458d-a011-d72fde563309 + - d70a5b60-eb97-476f-8771-94438670e1e2 Client-Request-Id: - - a7e53f60-4617-458d-a011-d72fde563309 + - d70a5b60-eb97-476f-8771-94438670e1e2 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016D"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057C"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1451,27 +1331,25 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:06:37 GMT + - Wed, 24 Apr 2024 12:19:19 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test Manager 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:06:37 GMT + recorded_at: Wed, 24 Apr 2024 12:19:20 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNHDCA6IBPKFVGIBTGFKP6DVKC5 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPLWEPO7RUWGJFLQ5BIO6LKBIQG body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1484,32 +1362,30 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 632ffbdf-abff-4fe9-9055-2ce705c891b4 + - f6aa085c-308c-4747-b38d-aef925aaed0e Client-Request-Id: - - 632ffbdf-abff-4fe9-9055-2ce705c891b4 + - f6aa085c-308c-4747-b38d-aef925aaed0e X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000167"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000054C"}}' Date: - - Wed, 14 Feb 2024 18:06:37 GMT + - Wed, 24 Apr 2024 12:19:19 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:06:38 GMT + recorded_at: Wed, 24 Apr 2024 12:19:20 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPVKTFCFQNWDBAL3W6KID75RB7X + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPZSKJ7EWJHVZB2BV735OPKRQX6 body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1522,32 +1398,30 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 4fad61c2-827d-4f24-8196-8d23079cb5cc + - d5c8d14f-66af-48e3-b206-6b9dd5a722a1 Client-Request-Id: - - 4fad61c2-827d-4f24-8196-8d23079cb5cc + - d5c8d14f-66af-48e3-b206-6b9dd5a722a1 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000166"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000350"}}' Date: - - Wed, 14 Feb 2024 18:06:37 GMT + - Wed, 24 Apr 2024 12:19:20 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:06:38 GMT + recorded_at: Wed, 24 Apr 2024 12:19:20 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPHR4JDYTI5JVC3D53I5YI4PGJK + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKPCE4XB3YB3RDJDDX4V26SVGMU body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1560,32 +1434,30 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 43a4d04e-88d0-4834-a37b-0639886d31e1 + - 55afc69b-b954-4a1a-abfc-ccb94b21511e Client-Request-Id: - - 43a4d04e-88d0-4834-a37b-0639886d31e1 + - 55afc69b-b954-4a1a-abfc-ccb94b21511e X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000364"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057E"}}' Date: - - Wed, 14 Feb 2024 18:06:38 GMT + - Wed, 24 Apr 2024 12:19:20 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:06:38 GMT + recorded_at: Wed, 24 Apr 2024 12:19:21 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPTFTKBXSAWINE2BN4OBDHQ44S2 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPTUBHUNZWXRVEYFS3MQLKTHVTZ body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1598,15 +1470,15 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - b2fe454d-0ed2-41d1-bc6d-4cebff3cc486 + - 192b6e3e-8664-445e-8688-73d7624604c2 Client-Request-Id: - - b2fe454d-0ed2-41d1-bc6d-4cebff3cc486 + - 192b6e3e-8664-445e-8688-73d7624604c2 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000034F"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' Date: - - Wed, 14 Feb 2024 18:06:38 GMT + - Wed, 24 Apr 2024 12:19:20 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:06:38 GMT + recorded_at: Wed, 24 Apr 2024 12:19:21 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_rename_folder.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_rename_folder.yml index 1828eb8556bd..4994e27652f0 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_rename_folder.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_rename_folder.yml @@ -4,19 +4,19 @@ http_interactions: method: post uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token body: - encoding: UTF-8 - string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB headers: User-Agent: - - Rack::OAuth2 (2.2.1) - Authorization: - - Basic - Content-Type: - - application/x-www-form-urlencoded - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + - httpx.rb/1.2.4 Accept: - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' response: status: code: 200 @@ -37,24 +37,26 @@ http_interactions: P3p: - CP="DSP CUR OTPi IND OTRi ONL FIN" X-Ms-Request-Id: - - fd771411-00bc-4f14-ace4-288893c8b100 + - 3a039c32-884e-4699-9f8b-ac6ceba47800 X-Ms-Ests-Server: - - 2.1.17282.6 - FRC ProdSlices + - 2.1.17846.6 - WEULR1 ProdSlices + X-Ms-Srs: + - 1.P X-Xss-Protection: - '0' Set-Cookie: - - fpc=AuFBY0jNFKJPqHIRDrrt4MekbDoXAQAAAMj3Xt0OAAAA; expires=Fri, 15-Mar-2024 - 18:04:56 GMT; path=/; secure; HttpOnly; SameSite=None - - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly + - fpc=AnfwjTFeabRKrkP41k3ckbikbDoXAQAAAHjvut0OAAAA; expires=Fri, 24-May-2024 + 12:18:01 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly Date: - - Wed, 14 Feb 2024 18:04:56 GMT + - Wed, 24 Apr 2024 12:18:01 GMT Content-Length: - - '1708' + - '1740' body: encoding: UTF-8 string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Wed, 14 Feb 2024 18:04:56 GMT + recorded_at: Wed, 24 Apr 2024 12:18:01 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children @@ -62,18 +64,18 @@ http_interactions: encoding: UTF-8 string: '{"name":"Old Jedi Project","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: - '82' + Authorization: + - Bearer response: status: code: 201 @@ -81,38 +83,93 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{FB395C48-600D-42C5-8FA4-F8C385A54584},1"' + - '"{A7161CC3-CC6D-4B7A-B979-26C191EDF14D},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PKILQ47WDLAYVBI7JHYYOC2KRME') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PODDQLKO3OMPJF3S6JGYGI634KN') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - f0ee3c12-2e39-4fc0-84a0-5f7764564ac2 + - cfd2392b-5dd8-4081-b523-3d5dd7b069c2 Client-Request-Id: - - f0ee3c12-2e39-4fc0-84a0-5f7764564ac2 + - cfd2392b-5dd8-4081-b523-3d5dd7b069c2 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016D"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000559"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:04:56 GMT + - Wed, 24 Apr 2024 12:18:00 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{FB395C48-600D-42C5-8FA4-F8C385A54584},1\"","createdDateTime":"2024-02-14T18:04:57Z","eTag":"\"{FB395C48-600D-42C5-8FA4-F8C385A54584},1\"","id":"01AZJL5PKILQ47WDLAYVBI7JHYYOC2KRME","lastModifiedDateTime":"2024-02-14T18:04:57Z","name":"Old - Jedi Project","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Old%20Jedi%20Project","cTag":"\"c:{FB395C48-600D-42C5-8FA4-F8C385A54584},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{A7161CC3-CC6D-4B7A-B979-26C191EDF14D},1\"","createdDateTime":"2024-04-24T12:18:02Z","eTag":"\"{A7161CC3-CC6D-4B7A-B979-26C191EDF14D},1\"","id":"01AZJL5PODDQLKO3OMPJF3S6JGYGI634KN","lastModifiedDateTime":"2024-04-24T12:18:02Z","name":"Old + Jedi Project","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Old%20Jedi%20Project","cTag":"\"c:{A7161CC3-CC6D-4B7A-B979-26C191EDF14D},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:04:57Z","lastModifiedDateTime":"2024-02-14T18:04:57Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:04:57 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:02Z","lastModifiedDateTime":"2024-04-24T12:18:02Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:18:01 GMT +- request: + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token + body: + encoding: UTF-8 + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default + headers: + User-Agent: + - Rack::OAuth2 (2.2.1) + Authorization: + - Basic + Content-Type: + - application/x-www-form-urlencoded + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-store, no-cache + Pragma: + - no-cache + Content-Type: + - application/json; charset=utf-8 + Expires: + - "-1" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - 7e92a6c6-9c73-440b-bbe5-9d38e4216200 + X-Ms-Ests-Server: + - 2.1.17846.6 - FRC ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=ArCDpWb__cxGvJBsXA0ofRGkbDoXAQAAAHnvut0OAAAA; expires=Fri, 24-May-2024 + 12:18:01 GMT; path=/; secure; HttpOnly; SameSite=None + - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly + - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly + Date: + - Wed, 24 Apr 2024 12:18:01 GMT + Content-Length: + - '1708' + body: + encoding: UTF-8 + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Wed, 24 Apr 2024 12:18:01 GMT - request: method: get uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children @@ -127,7 +184,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -137,60 +194,55 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - e21caceb-048d-4691-a143-2227dedeae4b + - 57f5aab7-4d45-4d96-aadf-f1df73478cbb Client-Request-Id: - - e21caceb-048d-4691-a143-2227dedeae4b + - 57f5aab7-4d45-4d96-aadf-f1df73478cbb X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000313"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000313"}}' Date: - - Wed, 14 Feb 2024 18:04:57 GMT + - Wed, 24 Apr 2024 12:18:01 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children","value":[{"createdDateTime":"2024-02-14T18:04:57Z","eTag":"\"{FB395C48-600D-42C5-8FA4-F8C385A54584},1\"","id":"01AZJL5PKILQ47WDLAYVBI7JHYYOC2KRME","lastModifiedDateTime":"2024-02-14T18:04:57Z","name":"Old - Jedi Project","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Old%20Jedi%20Project","cTag":"\"c:{FB395C48-600D-42C5-8FA4-F8C385A54584},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:04:57Z","lastModifiedDateTime":"2024-02-14T18:04:57Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2024-01-29T17:30:48Z","eTag":"\"{AA674C60-1512-4607-AC2F-7838F996B4A9},1\"","id":"01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ","lastModifiedDateTime":"2024-01-29T17:30:48Z","name":"Project - B","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20B","cTag":"\"c:{AA674C60-1512-4607-AC2F-7838F996B4A9},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:48Z","lastModifiedDateTime":"2024-01-29T17:30:48Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2024-01-29T17:30:52Z","eTag":"\"{98914E03-2109-4235-8A69-3092969D062D},1\"","id":"01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN","lastModifiedDateTime":"2024-01-29T17:30:52Z","name":"Project - C","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20C","cTag":"\"c:{98914E03-2109-4235-8A69-3092969D062D},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:52Z","lastModifiedDateTime":"2024-01-29T17:30:52Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2023-12-15T14:58:59Z","eTag":"\"{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},33\"","id":"01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM","lastModifiedDateTime":"2023-12-29T10:44:06Z","name":"Renamed - Project A (1234)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Renamed%20Project%20A%20(1234)","cTag":"\"c:{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},0\"","decorator":{"iconColor":"darkGreen"},"size":33882,"createdBy":{"user":{"email":"w.lindenthal@finnlabs.com","id":"99fb2d61-359b-4fae-91c9-1ac6c8f02b5e","displayName":"Wieland - Lindenthal"}},"lastModifiedBy":{"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2023-12-15T14:58:59Z","lastModifiedDateTime":"2023-12-29T10:44:06Z"},"folder":{"childCount":2},"shared":{"scope":"users"}}]}' - recorded_at: Wed, 14 Feb 2024 18:04:57 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)","value":[{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-18T12:05:15Z","eTag":"\"{B94392DB-A502-4109-9EC5-17E7ABFFF461},4\"","id":"01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-18T12:05:15Z","name":"[dev] + Large (4)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5Bdev%5D%20Large%20(4)","cTag":"\"c:{B94392DB-A502-4109-9EC5-17E7ABFFF461},0\"","fileSystemInfo":{"createdDateTime":"2024-04-18T12:05:15Z","lastModifiedDateTime":"2024-04-18T12:05:15Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0},{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-03-18T18:12:55Z","eTag":"\"{D03A86A5-D563-45AC-B5FA-2A333F353BEA},275\"","id":"01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-03-18T18:12:55Z","name":"Demo + project (1)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Demo%20project%20(1)","cTag":"\"c:{D03A86A5-D563-45AC-B5FA-2A333F353BEA},0\"","fileSystemInfo":{"createdDateTime":"2024-03-18T18:12:55Z","lastModifiedDateTime":"2024-03-18T18:12:55Z"},"folder":{"childCount":1},"shared":{"scope":"users"},"size":988098560},{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:02Z","eTag":"\"{A7161CC3-CC6D-4B7A-B979-26C191EDF14D},2\"","id":"01AZJL5PODDQLKO3OMPJF3S6JGYGI634KN","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:02Z","name":"Old + Jedi Project","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Old%20Jedi%20Project","cTag":"\"c:{A7161CC3-CC6D-4B7A-B979-26C191EDF14D},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:02Z","lastModifiedDateTime":"2024-04-24T12:18:02Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}]}' + recorded_at: Wed, 24 Apr 2024 12:18:02 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"[Sample] Project Name _ Ehuu (332)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"[Sample] Project Name _ Ehuu (681)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json + Authorization: + - Bearer User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: @@ -202,44 +254,42 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{5554B029-0CE5-474F-8D77-E9A7A290285B},1"' + - '"{45AE1D4A-10C5-4FA5-AA82-0F0C29E8EC44},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PJJWBKFLZIMJ5DY257JU6RJAKC3') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PKKDWXELRIQUVH2VAQPBQU6R3CE') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - f0dccb8e-c036-4d6f-aeff-3efa4c1ece1a + - 80447c31-6988-42fa-bbf8-08f3d3f45e7e Client-Request-Id: - - f0dccb8e-c036-4d6f-aeff-3efa4c1ece1a + - 80447c31-6988-42fa-bbf8-08f3d3f45e7e X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000163"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057E"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:04:56 GMT + - Wed, 24 Apr 2024 12:18:02 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{5554B029-0CE5-474F-8D77-E9A7A290285B},1\"","createdDateTime":"2024-02-14T18:04:58Z","eTag":"\"{5554B029-0CE5-474F-8D77-E9A7A290285B},1\"","id":"01AZJL5PJJWBKFLZIMJ5DY257JU6RJAKC3","lastModifiedDateTime":"2024-02-14T18:04:58Z","name":"[Sample] - Project Name _ Ehuu (332)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(332)","cTag":"\"c:{5554B029-0CE5-474F-8D77-E9A7A290285B},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{45AE1D4A-10C5-4FA5-AA82-0F0C29E8EC44},1\"","createdDateTime":"2024-04-24T12:18:03Z","eTag":"\"{45AE1D4A-10C5-4FA5-AA82-0F0C29E8EC44},1\"","id":"01AZJL5PKKDWXELRIQUVH2VAQPBQU6R3CE","lastModifiedDateTime":"2024-04-24T12:18:03Z","name":"[Sample] + Project Name _ Ehuu (681)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(681)","cTag":"\"c:{45AE1D4A-10C5-4FA5-AA82-0F0C29E8EC44},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:04:58Z","lastModifiedDateTime":"2024-02-14T18:04:58Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:04:57 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:03Z","lastModifiedDateTime":"2024-04-24T12:18:03Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:18:02 GMT - request: method: patch - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKILQ47WDLAYVBI7JHYYOC2KRME + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PODDQLKO3OMPJF3S6JGYGI634KN body: encoding: UTF-8 - string: '{"name":"_=o=_ _ _Jedi_ Project Folder ___ (333)"}' + string: '{"name":"_=o=_ _ _Jedi_ Project Folder ___ (682)"}' headers: Authorization: - Bearer @@ -248,7 +298,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -260,8 +310,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -271,38 +319,38 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 22d5a908-72d7-4022-8728-13d2003f5935 + - 2301b481-3c56-442e-9725-7fdad903d51f Client-Request-Id: - - 22d5a908-72d7-4022-8728-13d2003f5935 + - 2301b481-3c56-442e-9725-7fdad903d51f X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000169"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000167"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:04:57 GMT + - Wed, 24 Apr 2024 12:18:03 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:04:57Z","eTag":"\"{FB395C48-600D-42C5-8FA4-F8C385A54584},2\"","id":"01AZJL5PKILQ47WDLAYVBI7JHYYOC2KRME","lastModifiedDateTime":"2024-02-14T18:04:58Z","name":"_=o=_ - _ _Jedi_ Project Folder ___ (333)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(333)","cTag":"\"c:{FB395C48-600D-42C5-8FA4-F8C385A54584},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-04-24T12:18:02Z","eTag":"\"{A7161CC3-CC6D-4B7A-B979-26C191EDF14D},3\"","id":"01AZJL5PODDQLKO3OMPJF3S6JGYGI634KN","lastModifiedDateTime":"2024-04-24T12:18:03Z","name":"_=o=_ + _ _Jedi_ Project Folder ___ (682)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(682)","cTag":"\"c:{A7161CC3-CC6D-4B7A-B979-26C191EDF14D},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:04:57Z","lastModifiedDateTime":"2024-02-14T18:04:58Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:04:58 GMT + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:02Z","lastModifiedDateTime":"2024-04-24T12:18:03Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' + recorded_at: Wed, 24 Apr 2024 12:18:03 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"PUBLIC PROJECT (335)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"PUBLIC PROJECT (684)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json + Authorization: + - Bearer User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: @@ -314,93 +362,39 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{686F53EB-AAE8-4183-BD01-44818ED038CE},1"' + - '"{6EC79B18-C327-4FB3-A164-1F255A8446AA},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PPLKNXWR2FKQNA32AKEQGHNAOGO') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PIYTPDW4J6DWNH2CZA7EVNIIRVK') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 1bf1f7a1-90c1-4449-979a-0dcb15f2c60d + - 733435f4-7e66-42e2-b491-6b63341cadd5 Client-Request-Id: - - 1bf1f7a1-90c1-4449-979a-0dcb15f2c60d + - 733435f4-7e66-42e2-b491-6b63341cadd5 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016D"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000165"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:04:58 GMT + - Wed, 24 Apr 2024 12:18:03 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{686F53EB-AAE8-4183-BD01-44818ED038CE},1\"","createdDateTime":"2024-02-14T18:04:58Z","eTag":"\"{686F53EB-AAE8-4183-BD01-44818ED038CE},1\"","id":"01AZJL5PPLKNXWR2FKQNA32AKEQGHNAOGO","lastModifiedDateTime":"2024-02-14T18:04:58Z","name":"PUBLIC - PROJECT (335)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(335)","cTag":"\"c:{686F53EB-AAE8-4183-BD01-44818ED038CE},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{6EC79B18-C327-4FB3-A164-1F255A8446AA},1\"","createdDateTime":"2024-04-24T12:18:04Z","eTag":"\"{6EC79B18-C327-4FB3-A164-1F255A8446AA},1\"","id":"01AZJL5PIYTPDW4J6DWNH2CZA7EVNIIRVK","lastModifiedDateTime":"2024-04-24T12:18:04Z","name":"PUBLIC + PROJECT (684)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(684)","cTag":"\"c:{6EC79B18-C327-4FB3-A164-1F255A8446AA},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:04:58Z","lastModifiedDateTime":"2024-02-14T18:04:58Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:04:58 GMT -- request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.2 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 200 - message: OK - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Vary: - - Accept-Encoding - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - 1f774a21-ef61-4f2b-984e-aa7d3f7a27b5 - Client-Request-Id: - - 1f774a21-ef61-4f2b-984e-aa7d3f7a27b5 - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' - Odata-Version: - - '4.0' - Date: - - Wed, 14 Feb 2024 18:04:58 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-01-29T17:30:48Z","eTag":"\"{AA674C60-1512-4607-AC2F-7838F996B4A9},1\"","id":"01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ","lastModifiedDateTime":"2024-01-29T17:30:48Z","name":"Project - B","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20B","cTag":"\"c:{AA674C60-1512-4607-AC2F-7838F996B4A9},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:48Z","lastModifiedDateTime":"2024-01-29T17:30:48Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:04:58 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:04Z","lastModifiedDateTime":"2024-04-24T12:18:04Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:18:03 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB body: encoding: US-ASCII string: '' @@ -412,7 +406,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -422,49 +416,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 05b41630-b23a-4dd9-9765-fc899a83553f + - 809a677e-b6ea-4193-83e6-aece1144a3d6 Client-Request-Id: - - 05b41630-b23a-4dd9-9765-fc899a83553f + - 809a677e-b6ea-4193-83e6-aece1144a3d6 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000313"}}' - Link: - - ;rel="deprecation";type="text/html", - ;rel="deprecation";type="text/html" - Deprecation: - - Fri, 03 Sep 2021 23:59:59 GMT - Sunset: - - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000163"}}' Date: - - Wed, 14 Feb 2024 18:04:58 GMT + - Wed, 24 Apr 2024 12:18:03 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject - file storage tests Owners","id":"3","loginName":"OpenProject file storage - tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:04:59 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-18T12:05:15Z","eTag":"\"{B94392DB-A502-4109-9EC5-17E7ABFFF461},4\"","id":"01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-18T12:05:15Z","name":"[dev] + Large (4)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5Bdev%5D%20Large%20(4)","cTag":"\"c:{B94392DB-A502-4109-9EC5-17E7ABFFF461},0\"","fileSystemInfo":{"createdDateTime":"2024-04-18T12:05:15Z","lastModifiedDateTime":"2024-04-18T12:05:15Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:18:04 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB/permissions body: encoding: US-ASCII string: '' @@ -476,7 +454,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -486,74 +464,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - e7e48850-abf4-45e6-98eb-009123921953 + - e134208d-acc2-4f9a-b402-e18a891e5b66 Client-Request-Id: - - e7e48850-abf4-45e6-98eb-009123921953 + - e134208d-acc2-4f9a-b402-e18a891e5b66 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000160"}}' - Odata-Version: - - '4.0' - Date: - - Wed, 14 Feb 2024 18:04:58 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-01-29T17:30:52Z","eTag":"\"{98914E03-2109-4235-8A69-3092969D062D},1\"","id":"01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN","lastModifiedDateTime":"2024-01-29T17:30:52Z","name":"Project - C","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20C","cTag":"\"c:{98914E03-2109-4235-8A69-3092969D062D},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:52Z","lastModifiedDateTime":"2024-01-29T17:30:52Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:04:59 GMT -- request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN/permissions - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - Bearer - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.2 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 200 - message: OK - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Vary: - - Accept-Encoding - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - 89b4dda0-522c-48c4-8ba9-60f25ab7129a - Client-Request-Id: - - 89b4dda0-522c-48c4-8ba9-60f25ab7129a - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000034F"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057D"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -561,26 +483,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:04:59 GMT + - Wed, 24 Apr 2024 12:18:04 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:04:59 GMT + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' + recorded_at: Wed, 24 Apr 2024 12:18:04 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K body: encoding: US-ASCII string: '' @@ -592,7 +515,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -602,36 +525,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - e8ddf8d0-8818-44cd-958c-763072e13a4e + - 3c24989c-926e-4091-b153-e31a4c207260 Client-Request-Id: - - e8ddf8d0-8818-44cd-958c-763072e13a4e + - 3c24989c-926e-4091-b153-e31a4c207260 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055A"}}' Date: - - Wed, 14 Feb 2024 18:04:59 GMT + - Wed, 24 Apr 2024 12:18:04 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2023-12-15T14:58:59Z","eTag":"\"{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},33\"","id":"01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM","lastModifiedDateTime":"2023-12-29T10:44:06Z","name":"Renamed - Project A (1234)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Renamed%20Project%20A%20(1234)","cTag":"\"c:{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},0\"","decorator":{"iconColor":"darkGreen"},"size":33882,"createdBy":{"user":{"email":"w.lindenthal@finnlabs.com","id":"99fb2d61-359b-4fae-91c9-1ac6c8f02b5e","displayName":"Wieland - Lindenthal"}},"lastModifiedBy":{"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2023-12-15T14:58:59Z","lastModifiedDateTime":"2023-12-29T10:44:06Z"},"folder":{"childCount":2},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:04:59 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-03-18T18:12:55Z","eTag":"\"{D03A86A5-D563-45AC-B5FA-2A333F353BEA},275\"","id":"01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-03-18T18:12:55Z","name":"Demo + project (1)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Demo%20project%20(1)","cTag":"\"c:{D03A86A5-D563-45AC-B5FA-2A333F353BEA},0\"","fileSystemInfo":{"createdDateTime":"2024-03-18T18:12:55Z","lastModifiedDateTime":"2024-03-18T18:12:55Z"},"folder":{"childCount":1},"shared":{"scope":"users"},"size":988098560}' + recorded_at: Wed, 24 Apr 2024 12:18:04 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K/permissions body: encoding: US-ASCII string: '' @@ -643,7 +563,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -653,22 +573,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 64624cb7-b3fd-4305-915e-1777e878261a + - f882d88d-5e7d-4db1-b35f-fdff71812094 Client-Request-Id: - - 64624cb7-b3fd-4305-915e-1777e878261a + - f882d88d-5e7d-4db1-b35f-fdff71812094 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000351"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000351"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -676,26 +592,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:04:59 GMT + - Wed, 24 Apr 2024 12:18:05 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:00 GMT + recorded_at: Wed, 24 Apr 2024 12:18:05 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJJWBKFLZIMJ5DY257JU6RJAKC3 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKKDWXELRIQUVH2VAQPBQU6R3CE body: encoding: US-ASCII string: '' @@ -707,7 +624,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -717,37 +634,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - e5ad6c70-bb73-4958-a478-7930ccdfd341 + - 9b91ba32-3f62-4c6f-ad35-05971af04a7a Client-Request-Id: - - e5ad6c70-bb73-4958-a478-7930ccdfd341 + - 9b91ba32-3f62-4c6f-ad35-05971af04a7a X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000163"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000163"}}' Date: - - Wed, 14 Feb 2024 18:04:59 GMT + - Wed, 24 Apr 2024 12:18:04 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:04:58Z","eTag":"\"{5554B029-0CE5-474F-8D77-E9A7A290285B},1\"","id":"01AZJL5PJJWBKFLZIMJ5DY257JU6RJAKC3","lastModifiedDateTime":"2024-02-14T18:04:58Z","name":"[Sample] - Project Name _ Ehuu (332)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(332)","cTag":"\"c:{5554B029-0CE5-474F-8D77-E9A7A290285B},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:04:58Z","lastModifiedDateTime":"2024-02-14T18:04:58Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:00 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:03Z","eTag":"\"{45AE1D4A-10C5-4FA5-AA82-0F0C29E8EC44},2\"","id":"01AZJL5PKKDWXELRIQUVH2VAQPBQU6R3CE","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:03Z","name":"[Sample] + Project Name _ Ehuu (681)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(681)","cTag":"\"c:{45AE1D4A-10C5-4FA5-AA82-0F0C29E8EC44},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:03Z","lastModifiedDateTime":"2024-04-24T12:18:03Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:18:05 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJJWBKFLZIMJ5DY257JU6RJAKC3/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKKDWXELRIQUVH2VAQPBQU6R3CE/permissions body: encoding: US-ASCII string: '' @@ -759,7 +672,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -769,22 +682,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - c56d7c20-02bf-4528-9944-58f8cab346a3 + - cce8688f-80c2-4a67-83fb-b15147fd3c63 Client-Request-Id: - - c56d7c20-02bf-4528-9944-58f8cab346a3 + - cce8688f-80c2-4a67-83fb-b15147fd3c63 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000165"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000558"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -792,26 +701,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:00 GMT + - Wed, 24 Apr 2024 12:18:05 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PJJWBKFLZIMJ5DY257JU6RJAKC3'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PKKDWXELRIQUVH2VAQPBQU6R3CE'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:00 GMT + recorded_at: Wed, 24 Apr 2024 12:18:06 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJJWBKFLZIMJ5DY257JU6RJAKC3/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKKDWXELRIQUVH2VAQPBQU6R3CE/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"},{"objectId":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -823,7 +733,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -835,8 +745,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -848,11 +756,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - d0593f80-a1ae-457c-a172-fa47a927d534 + - 3674360b-ba18-4e1b-ab40-836b5ea656ea Client-Request-Id: - - d0593f80-a1ae-457c-a172-fa47a927d534 + - 3674360b-ba18-4e1b-ab40-836b5ea656ea X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000167"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000364"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -863,17 +771,17 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:02 GMT + - Wed, 24 Apr 2024 12:18:08 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test - Manager 01"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test - user 02"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + Manager 01"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test + user 02"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:02 GMT + recorded_at: Wed, 24 Apr 2024 12:18:08 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKILQ47WDLAYVBI7JHYYOC2KRME + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PODDQLKO3OMPJF3S6JGYGI634KN body: encoding: US-ASCII string: '' @@ -885,7 +793,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -895,37 +803,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 3e53e336-9c16-44e6-8b42-08cc78482f90 + - a0352064-fc87-4bce-929b-ddb7d1e886f9 Client-Request-Id: - - 3e53e336-9c16-44e6-8b42-08cc78482f90 + - a0352064-fc87-4bce-929b-ddb7d1e886f9 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000313"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000311"}}' Date: - - Wed, 14 Feb 2024 18:05:02 GMT + - Wed, 24 Apr 2024 12:18:07 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:04:57Z","eTag":"\"{FB395C48-600D-42C5-8FA4-F8C385A54584},2\"","id":"01AZJL5PKILQ47WDLAYVBI7JHYYOC2KRME","lastModifiedDateTime":"2024-02-14T18:04:58Z","name":"_=o=_ - _ _Jedi_ Project Folder ___ (333)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(333)","cTag":"\"c:{FB395C48-600D-42C5-8FA4-F8C385A54584},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:04:57Z","lastModifiedDateTime":"2024-02-14T18:04:58Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:02 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:02Z","eTag":"\"{A7161CC3-CC6D-4B7A-B979-26C191EDF14D},3\"","id":"01AZJL5PODDQLKO3OMPJF3S6JGYGI634KN","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:03Z","name":"_=o=_ + _ _Jedi_ Project Folder ___ (682)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(682)","cTag":"\"c:{A7161CC3-CC6D-4B7A-B979-26C191EDF14D},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:02Z","lastModifiedDateTime":"2024-04-24T12:18:03Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:18:08 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKILQ47WDLAYVBI7JHYYOC2KRME/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PODDQLKO3OMPJF3S6JGYGI634KN/permissions body: encoding: US-ASCII string: '' @@ -937,7 +841,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -947,22 +851,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 2888898f-5b76-49b5-8d12-71d7c7cd3895 + - cbdc366d-47aa-4e06-8f7e-14404af13b4a Client-Request-Id: - - 2888898f-5b76-49b5-8d12-71d7c7cd3895 + - cbdc366d-47aa-4e06-8f7e-14404af13b4a X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016E"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016E"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -970,26 +870,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:02 GMT + - Wed, 24 Apr 2024 12:18:08 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PKILQ47WDLAYVBI7JHYYOC2KRME'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PODDQLKO3OMPJF3S6JGYGI634KN'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:03 GMT + recorded_at: Wed, 24 Apr 2024 12:18:08 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKILQ47WDLAYVBI7JHYYOC2KRME/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PODDQLKO3OMPJF3S6JGYGI634KN/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -1001,7 +902,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -1013,8 +914,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -1026,11 +925,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 8e1d0ec1-4088-4c29-85db-46f642872520 + - 1f848f92-2aeb-4bb2-bfbc-402ed000db6c Client-Request-Id: - - 8e1d0ec1-4088-4c29-85db-46f642872520 + - 1f848f92-2aeb-4bb2-bfbc-402ed000db6c X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000311"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055C"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1041,16 +940,16 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:04 GMT + - Wed, 24 Apr 2024 12:18:09 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test - Manager 01"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + Manager 01"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:04 GMT + recorded_at: Wed, 24 Apr 2024 12:18:10 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPLKNXWR2FKQNA32AKEQGHNAOGO + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIYTPDW4J6DWNH2CZA7EVNIIRVK body: encoding: US-ASCII string: '' @@ -1062,7 +961,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1072,37 +971,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 15105525-b167-4dc7-8dd6-1067a8302e60 + - f7f44d3a-375c-4d58-abc9-8ebf06395ced Client-Request-Id: - - 15105525-b167-4dc7-8dd6-1067a8302e60 + - f7f44d3a-375c-4d58-abc9-8ebf06395ced X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000034F"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000054B"}}' Date: - - Wed, 14 Feb 2024 18:05:04 GMT + - Wed, 24 Apr 2024 12:18:10 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:04:58Z","eTag":"\"{686F53EB-AAE8-4183-BD01-44818ED038CE},1\"","id":"01AZJL5PPLKNXWR2FKQNA32AKEQGHNAOGO","lastModifiedDateTime":"2024-02-14T18:04:58Z","name":"PUBLIC - PROJECT (335)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(335)","cTag":"\"c:{686F53EB-AAE8-4183-BD01-44818ED038CE},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:04:58Z","lastModifiedDateTime":"2024-02-14T18:04:58Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:04 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:04Z","eTag":"\"{6EC79B18-C327-4FB3-A164-1F255A8446AA},2\"","id":"01AZJL5PIYTPDW4J6DWNH2CZA7EVNIIRVK","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:04Z","name":"PUBLIC + PROJECT (684)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(684)","cTag":"\"c:{6EC79B18-C327-4FB3-A164-1F255A8446AA},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:04Z","lastModifiedDateTime":"2024-04-24T12:18:04Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:18:10 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPLKNXWR2FKQNA32AKEQGHNAOGO/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIYTPDW4J6DWNH2CZA7EVNIIRVK/permissions body: encoding: US-ASCII string: '' @@ -1114,7 +1009,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1124,22 +1019,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - a32ce750-60fb-46d7-bcb1-d48d94f1beb8 + - e53b1e0a-af13-4bce-b95d-e2ab9bf8dde8 Client-Request-Id: - - a32ce750-60fb-46d7-bcb1-d48d94f1beb8 + - e53b1e0a-af13-4bce-b95d-e2ab9bf8dde8 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057C"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1147,26 +1038,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:04 GMT + - Wed, 24 Apr 2024 12:18:10 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPLKNXWR2FKQNA32AKEQGHNAOGO'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PIYTPDW4J6DWNH2CZA7EVNIIRVK'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:04 GMT + recorded_at: Wed, 24 Apr 2024 12:18:11 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPLKNXWR2FKQNA32AKEQGHNAOGO/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIYTPDW4J6DWNH2CZA7EVNIIRVK/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["read"],"recipients":[{"objectId":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -1178,7 +1070,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -1190,8 +1082,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -1203,11 +1093,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - b8498deb-833e-4afc-b80e-822eeb0e7fa7 + - 810723d0-bac5-405a-8ddc-974b57e43dee Client-Request-Id: - - b8498deb-833e-4afc-b80e-822eeb0e7fa7 + - 810723d0-bac5-405a-8ddc-974b57e43dee X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016A"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055B"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1218,16 +1108,16 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:05 GMT + - Wed, 24 Apr 2024 12:18:11 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test - user 02"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test + user 02"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:05 GMT + recorded_at: Wed, 24 Apr 2024 12:18:12 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPLKNXWR2FKQNA32AKEQGHNAOGO/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIYTPDW4J6DWNH2CZA7EVNIIRVK/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"}]}' @@ -1239,7 +1129,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -1251,8 +1141,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -1264,11 +1152,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 3b8e6508-89b9-48d9-81b6-7821b77fa3a5 + - c36b1e91-df3d-423f-a058-58b77e2674df Client-Request-Id: - - 3b8e6508-89b9-48d9-81b6-7821b77fa3a5 + - c36b1e91-df3d-423f-a058-58b77e2674df X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000163"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1279,15 +1167,15 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:05 GMT + - Wed, 24 Apr 2024 12:18:12 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test Manager 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:06 GMT + recorded_at: Wed, 24 Apr 2024 12:18:13 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKILQ47WDLAYVBI7JHYYOC2KRME + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PODDQLKO3OMPJF3S6JGYGI634KN body: encoding: US-ASCII string: '' @@ -1299,7 +1187,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1309,49 +1197,43 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 58b803cb-5b5c-419f-a0fb-081eaa3c62c4 + - 17138fe3-f00c-4d41-b903-685e8d0e0eab Client-Request-Id: - - 58b803cb-5b5c-419f-a0fb-081eaa3c62c4 + - 17138fe3-f00c-4d41-b903-685e8d0e0eab X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000350"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016D"}}' Date: - - Wed, 14 Feb 2024 18:05:06 GMT + - Wed, 24 Apr 2024 12:18:13 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:04:57Z","eTag":"\"{FB395C48-600D-42C5-8FA4-F8C385A54584},3\"","id":"01AZJL5PKILQ47WDLAYVBI7JHYYOC2KRME","lastModifiedDateTime":"2024-02-14T18:04:58Z","name":"_=o=_ - _ _Jedi_ Project Folder ___ (333)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(333)","cTag":"\"c:{FB395C48-600D-42C5-8FA4-F8C385A54584},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:04:57Z","lastModifiedDateTime":"2024-02-14T18:04:58Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:06 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:02Z","eTag":"\"{A7161CC3-CC6D-4B7A-B979-26C191EDF14D},4\"","id":"01AZJL5PODDQLKO3OMPJF3S6JGYGI634KN","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:03Z","name":"_=o=_ + _ _Jedi_ Project Folder ___ (682)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(682)","cTag":"\"c:{A7161CC3-CC6D-4B7A-B979-26C191EDF14D},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:02Z","lastModifiedDateTime":"2024-04-24T12:18:03Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:18:13 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJJWBKFLZIMJ5DY257JU6RJAKC3 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKKDWXELRIQUVH2VAQPBQU6R3CE body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1364,32 +1246,30 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 62525205-500c-437b-b089-c178ca942948 + - 0e5323d3-14be-4ca2-b30d-d673ed26a1d4 Client-Request-Id: - - 62525205-500c-437b-b089-c178ca942948 + - 0e5323d3-14be-4ca2-b30d-d673ed26a1d4 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016E"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000169"}}' Date: - - Wed, 14 Feb 2024 18:05:06 GMT + - Wed, 24 Apr 2024 12:18:13 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:05:07 GMT + recorded_at: Wed, 24 Apr 2024 12:18:14 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PKILQ47WDLAYVBI7JHYYOC2KRME + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PODDQLKO3OMPJF3S6JGYGI634KN body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1402,32 +1282,30 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 269d379e-456d-42dc-b45c-df9ee2d48d94 + - 4aa31aca-9100-4906-8ad3-86bb5ac20a60 Client-Request-Id: - - 269d379e-456d-42dc-b45c-df9ee2d48d94 + - 4aa31aca-9100-4906-8ad3-86bb5ac20a60 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000350"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055D"}}' Date: - - Wed, 14 Feb 2024 18:05:07 GMT + - Wed, 24 Apr 2024 12:18:14 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:05:07 GMT + recorded_at: Wed, 24 Apr 2024 12:18:14 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPLKNXWR2FKQNA32AKEQGHNAOGO + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIYTPDW4J6DWNH2CZA7EVNIIRVK body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1440,15 +1318,15 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - f8aea19e-b527-4c63-a49f-d9c77f1ec692 + - a0f5a03f-c590-491d-8aa2-be8fed73abb6 Client-Request-Id: - - f8aea19e-b527-4c63-a49f-d9c77f1ec692 + - a0f5a03f-c590-491d-8aa2-be8fed73abb6 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000160"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055B"}}' Date: - - Wed, 14 Feb 2024 18:05:07 GMT + - Wed, 24 Apr 2024 12:18:14 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:05:07 GMT + recorded_at: Wed, 24 Apr 2024 12:18:15 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_root_read_failure.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_root_read_failure.yml index 71a0ac0f8d64..514953472a98 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_root_read_failure.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_root_read_failure.yml @@ -37,24 +37,26 @@ http_interactions: P3p: - CP="DSP CUR OTPi IND OTRi ONL FIN" X-Ms-Request-Id: - - 76b17450-1dfe-419b-9152-9a113e63be00 + - 865b5057-3482-45a6-9d1c-d90835e39f00 X-Ms-Ests-Server: - - 2.1.17282.6 - FRC ProdSlices + - 2.1.17846.6 - SEC ProdSlices + X-Ms-Srs: + - 1.P X-Xss-Protection: - '0' Set-Cookie: - - fpc=AokVI2gc9RtEpXdh6MBn5eykbDoXAQAAAA_4Xt0OAAAA; expires=Fri, 15-Mar-2024 - 18:06:08 GMT; path=/; secure; HttpOnly; SameSite=None + - fpc=AjiXIrmpaqNLqKzohFuYn-OkbDoXAQAAAMnvut0OAAAA; expires=Fri, 24-May-2024 + 12:19:21 GMT; path=/; secure; HttpOnly; SameSite=None - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly Date: - - Wed, 14 Feb 2024 18:06:08 GMT + - Wed, 24 Apr 2024 12:19:21 GMT Content-Length: - '1708' body: encoding: UTF-8 string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Wed, 14 Feb 2024 18:06:08 GMT + recorded_at: Wed, 24 Apr 2024 12:19:21 GMT - request: method: get uri: https://graph.microsoft.com/v1.0/drives/THIS-IS-NOT-A-DRIVE-ID/root/children @@ -69,7 +71,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -79,10 +81,9 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip Vary: @@ -90,16 +91,16 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - dc640ba4-6220-42d5-ad89-ac3b48215995 + - 2c56d97a-af7c-41db-8a1b-e13f513a3c0b Client-Request-Id: - - dc640ba4-6220-42d5-ad89-ac3b48215995 + - 2c56d97a-af7c-41db-8a1b-e13f513a3c0b X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000166"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000313"}}' Date: - - Wed, 14 Feb 2024 18:06:07 GMT + - Wed, 24 Apr 2024 12:19:21 GMT body: encoding: UTF-8 string: '{"error":{"code":"invalidRequest","message":"The provided drive id - appears to be malformed, or does not represent a valid drive.","innerError":{"date":"2024-02-14T18:06:08","request-id":"dc640ba4-6220-42d5-ad89-ac3b48215995","client-request-id":"dc640ba4-6220-42d5-ad89-ac3b48215995"}}}' - recorded_at: Wed, 14 Feb 2024 18:06:08 GMT + appears to be malformed, or does not represent a valid drive."}}' + recorded_at: Wed, 24 Apr 2024 12:19:21 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_set_permissions.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_set_permissions.yml index 4587fd8b9188..8b0f0ea1a7bc 100644 --- a/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_set_permissions.yml +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/one_drive/sync_service_set_permissions.yml @@ -4,19 +4,19 @@ http_interactions: method: post uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token body: - encoding: UTF-8 - string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default + encoding: ASCII-8BIT + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default+offline_access&client_id=4262df2b-77bb-49c2-a5df-28355da676d2&client_secret=Vwk8Q%7EJTuPh.pAjvPiWBQBdTFMDK%7EAIwxbj9_axB headers: User-Agent: - - Rack::OAuth2 (2.2.1) - Authorization: - - Basic - Content-Type: - - application/x-www-form-urlencoded - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + - httpx.rb/1.2.4 Accept: - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '201' response: status: code: 200 @@ -37,43 +37,45 @@ http_interactions: P3p: - CP="DSP CUR OTPi IND OTRi ONL FIN" X-Ms-Request-Id: - - 55f12125-45f7-40a4-abc7-c16eb8129300 + - d9cc4cd1-ac91-4899-8bdf-8cf38048af00 X-Ms-Ests-Server: - - 2.1.17282.6 - SEC ProdSlices + - 2.1.17846.6 - SEC ProdSlices + X-Ms-Srs: + - 1.P X-Xss-Protection: - '0' Set-Cookie: - - fpc=Ao9CzyPsu15MhL_gz43dES-kbDoXAQAAAPn3Xt0OAAAA; expires=Fri, 15-Mar-2024 - 18:05:45 GMT; path=/; secure; HttpOnly; SameSite=None - - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly - - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly + - fpc=As_TSCuO9ZdHmFeYiPlUX1qkbDoXAQAAAJvvut0OAAAA; expires=Fri, 24-May-2024 + 12:18:36 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; + path=/; secure; samesite=none; httponly, stsservicecookie=estsfd; path=/; + secure; samesite=none; httponly Date: - - Wed, 14 Feb 2024 18:05:44 GMT + - Wed, 24 Apr 2024 12:18:35 GMT Content-Length: - - '1708' + - '1740' body: encoding: UTF-8 string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' - recorded_at: Wed, 14 Feb 2024 18:05:45 GMT + recorded_at: Wed, 24 Apr 2024 12:18:36 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"INACTIVE PROJECT! f0r r34lz (334)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"INACTIVE PROJECT! f0r r34lz (683)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: - '99' + Authorization: + - Bearer response: status: code: 201 @@ -81,55 +83,53 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{919B3FF6-00D7-4384-9430-24BFF650EDED},1"' + - '"{2788B2C0-1213-4E7E-BECA-C67329784663},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PPWH6NZDVYAQRBZIMBEX73FB3PN') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5POAWKECOEYSPZHL5SWGOMUXQRTD') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 54595cba-7431-49fc-ac1b-1931dc442b52 + - eedb851d-114e-4935-8507-88955e326f89 Client-Request-Id: - - 54595cba-7431-49fc-ac1b-1931dc442b52 + - eedb851d-114e-4935-8507-88955e326f89 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000364"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055D"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:45 GMT + - Wed, 24 Apr 2024 12:18:36 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{919B3FF6-00D7-4384-9430-24BFF650EDED},1\"","createdDateTime":"2024-02-14T18:05:45Z","eTag":"\"{919B3FF6-00D7-4384-9430-24BFF650EDED},1\"","id":"01AZJL5PPWH6NZDVYAQRBZIMBEX73FB3PN","lastModifiedDateTime":"2024-02-14T18:05:45Z","name":"INACTIVE - PROJECT! f0r r34lz (334)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/INACTIVE%20PROJECT!%20f0r%20r34lz%20(334)","cTag":"\"c:{919B3FF6-00D7-4384-9430-24BFF650EDED},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{2788B2C0-1213-4E7E-BECA-C67329784663},1\"","createdDateTime":"2024-04-24T12:18:36Z","eTag":"\"{2788B2C0-1213-4E7E-BECA-C67329784663},1\"","id":"01AZJL5POAWKECOEYSPZHL5SWGOMUXQRTD","lastModifiedDateTime":"2024-04-24T12:18:36Z","name":"INACTIVE + PROJECT! f0r r34lz (683)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/INACTIVE%20PROJECT!%20f0r%20r34lz%20(683)","cTag":"\"c:{2788B2C0-1213-4E7E-BECA-C67329784663},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:45Z","lastModifiedDateTime":"2024-02-14T18:05:45Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:05:45 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:36Z","lastModifiedDateTime":"2024-04-24T12:18:36Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:18:36 GMT - request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children + method: post + uri: https://login.microsoftonline.com/4d44bf36-9b56-45c0-8807-bbf386dd047f/oauth2/v2.0/token body: - encoding: US-ASCII - string: '' + encoding: UTF-8 + string: grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default headers: + User-Agent: + - Rack::OAuth2 (2.2.1) Authorization: - - Bearer - Accept: - - application/json + - Basic Content-Type: - - application/json - User-Agent: - - httpx.rb/1.2.2 + - application/x-www-form-urlencoded Accept-Encoding: - - gzip, deflate + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" response: status: code: 200 @@ -137,51 +137,45 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked + Pragma: + - no-cache Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Vary: - - Accept-Encoding + - application/json; charset=utf-8 + Expires: + - "-1" Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - adce7f06-b45a-4573-8559-d5b0e0453c83 - Client-Request-Id: - - adce7f06-b45a-4573-8559-d5b0e0453c83 - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000350"}}' - Odata-Version: - - '4.0' + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + P3p: + - CP="DSP CUR OTPi IND OTRi ONL FIN" + X-Ms-Request-Id: + - c70b6496-c0dc-4a46-b982-3acd4f37ac00 + X-Ms-Ests-Server: + - 2.1.17846.6 - SEC ProdSlices + X-Ms-Srs: + - 1.P + X-Xss-Protection: + - '0' + Set-Cookie: + - fpc=AmgLLz11nkNOpo2KhNOAUpmkbDoXAQAAAJzvut0OAAAA; expires=Fri, 24-May-2024 + 12:18:36 GMT; path=/; secure; HttpOnly; SameSite=None + - stsservicecookie=estsfd; path=/; secure; samesite=none; httponly + - x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly Date: - - Wed, 14 Feb 2024 18:05:45 GMT + - Wed, 24 Apr 2024 12:18:36 GMT + Content-Length: + - '1708' body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children","value":[{"createdDateTime":"2024-02-14T18:05:45Z","eTag":"\"{919B3FF6-00D7-4384-9430-24BFF650EDED},1\"","id":"01AZJL5PPWH6NZDVYAQRBZIMBEX73FB3PN","lastModifiedDateTime":"2024-02-14T18:05:45Z","name":"INACTIVE - PROJECT! f0r r34lz (334)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/INACTIVE%20PROJECT!%20f0r%20r34lz%20(334)","cTag":"\"c:{919B3FF6-00D7-4384-9430-24BFF650EDED},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:45Z","lastModifiedDateTime":"2024-02-14T18:05:45Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2024-01-29T17:30:48Z","eTag":"\"{AA674C60-1512-4607-AC2F-7838F996B4A9},1\"","id":"01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ","lastModifiedDateTime":"2024-01-29T17:30:48Z","name":"Project - B","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20B","cTag":"\"c:{AA674C60-1512-4607-AC2F-7838F996B4A9},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:48Z","lastModifiedDateTime":"2024-01-29T17:30:48Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2024-01-29T17:30:52Z","eTag":"\"{98914E03-2109-4235-8A69-3092969D062D},1\"","id":"01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN","lastModifiedDateTime":"2024-01-29T17:30:52Z","name":"Project - C","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20C","cTag":"\"c:{98914E03-2109-4235-8A69-3092969D062D},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:52Z","lastModifiedDateTime":"2024-01-29T17:30:52Z"},"folder":{"childCount":0},"shared":{"scope":"users"}},{"createdDateTime":"2023-12-15T14:58:59Z","eTag":"\"{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},33\"","id":"01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM","lastModifiedDateTime":"2023-12-29T10:44:06Z","name":"Renamed - Project A (1234)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Renamed%20Project%20A%20(1234)","cTag":"\"c:{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},0\"","decorator":{"iconColor":"darkGreen"},"size":33882,"createdBy":{"user":{"email":"w.lindenthal@finnlabs.com","id":"99fb2d61-359b-4fae-91c9-1ac6c8f02b5e","displayName":"Wieland - Lindenthal"}},"lastModifiedBy":{"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2023-12-15T14:58:59Z","lastModifiedDateTime":"2023-12-29T10:44:06Z"},"folder":{"childCount":2},"shared":{"scope":"users"}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:45 GMT + string: '{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":""}' + recorded_at: Wed, 24 Apr 2024 12:18:36 GMT - request: - method: post + method: get uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: - encoding: UTF-8 - string: '{"name":"[Sample] Project Name _ Ehuu (332)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + encoding: US-ASCII + string: '' headers: Authorization: - Bearer @@ -190,69 +184,69 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate - Content-Length: - - '100' response: status: - code: 201 - message: Created + code: 200 + message: OK headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Etag: - - '"{CB60B6BA-45CF-4621-AA4A-C04A96CB9653},1"' - Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PN2WZQMXT2FEFDKUSWAJKLMXFST') - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 25039fee-8609-4879-9fa9-9f30ce821378 + - 5e5a579e-20d5-4365-8ea7-8be334ebfa16 Client-Request-Id: - - 25039fee-8609-4879-9fa9-9f30ce821378 + - 5e5a579e-20d5-4365-8ea7-8be334ebfa16 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000035F"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' Date: - - Wed, 14 Feb 2024 18:05:45 GMT + - Wed, 24 Apr 2024 12:18:36 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{CB60B6BA-45CF-4621-AA4A-C04A96CB9653},1\"","createdDateTime":"2024-02-14T18:05:46Z","eTag":"\"{CB60B6BA-45CF-4621-AA4A-C04A96CB9653},1\"","id":"01AZJL5PN2WZQMXT2FEFDKUSWAJKLMXFST","lastModifiedDateTime":"2024-02-14T18:05:46Z","name":"[Sample] - Project Name _ Ehuu (332)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(332)","cTag":"\"c:{CB60B6BA-45CF-4621-AA4A-C04A96CB9653},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject - Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:46Z","lastModifiedDateTime":"2024-02-14T18:05:46Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:05:46 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)","value":[{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-18T12:05:15Z","eTag":"\"{B94392DB-A502-4109-9EC5-17E7ABFFF461},4\"","id":"01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-18T12:05:15Z","name":"[dev] + Large (4)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5Bdev%5D%20Large%20(4)","cTag":"\"c:{B94392DB-A502-4109-9EC5-17E7ABFFF461},0\"","fileSystemInfo":{"createdDateTime":"2024-04-18T12:05:15Z","lastModifiedDateTime":"2024-04-18T12:05:15Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0},{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-03-18T18:12:55Z","eTag":"\"{D03A86A5-D563-45AC-B5FA-2A333F353BEA},275\"","id":"01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-03-18T18:12:55Z","name":"Demo + project (1)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Demo%20project%20(1)","cTag":"\"c:{D03A86A5-D563-45AC-B5FA-2A333F353BEA},0\"","fileSystemInfo":{"createdDateTime":"2024-03-18T18:12:55Z","lastModifiedDateTime":"2024-03-18T18:12:55Z"},"folder":{"childCount":1},"shared":{"scope":"users"},"size":988098560},{"@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:36Z","eTag":"\"{2788B2C0-1213-4E7E-BECA-C67329784663},2\"","id":"01AZJL5POAWKECOEYSPZHL5SWGOMUXQRTD","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:36Z","name":"INACTIVE + PROJECT! f0r r34lz (683)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/INACTIVE%20PROJECT!%20f0r%20r34lz%20(683)","cTag":"\"c:{2788B2C0-1213-4E7E-BECA-C67329784663},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:36Z","lastModifiedDateTime":"2024-04-24T12:18:36Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}]}' + recorded_at: Wed, 24 Apr 2024 12:18:37 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"_=o=_ _ _Jedi_ Project Folder ___ (333)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"[Sample] Project Name _ Ehuu (681)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json + Authorization: + - Bearer User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: - - '105' + - '100' response: status: code: 201 @@ -260,57 +254,55 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{889649ED-34E3-4B4C-82F2-74B424177054},1"' + - '"{C6A371F6-1A71-43F1-805A-2EACEC090138},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PPNJGLIRYZUJRFYF4TUWQSBO4CU') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PPWOGR4M4I26FBYAWROVTWASAJY') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 69802dba-6612-440e-ad3a-4102a6d43673 + - 86683aa2-370b-4439-86e4-091e9f64147e Client-Request-Id: - - 69802dba-6612-440e-ad3a-4102a6d43673 + - 86683aa2-370b-4439-86e4-091e9f64147e X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000034F"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000164"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:45 GMT + - Wed, 24 Apr 2024 12:18:37 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{889649ED-34E3-4B4C-82F2-74B424177054},1\"","createdDateTime":"2024-02-14T18:05:46Z","eTag":"\"{889649ED-34E3-4B4C-82F2-74B424177054},1\"","id":"01AZJL5PPNJGLIRYZUJRFYF4TUWQSBO4CU","lastModifiedDateTime":"2024-02-14T18:05:46Z","name":"_=o=_ - _ _Jedi_ Project Folder ___ (333)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(333)","cTag":"\"c:{889649ED-34E3-4B4C-82F2-74B424177054},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{C6A371F6-1A71-43F1-805A-2EACEC090138},1\"","createdDateTime":"2024-04-24T12:18:37Z","eTag":"\"{C6A371F6-1A71-43F1-805A-2EACEC090138},1\"","id":"01AZJL5PPWOGR4M4I26FBYAWROVTWASAJY","lastModifiedDateTime":"2024-04-24T12:18:37Z","name":"[Sample] + Project Name _ Ehuu (681)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(681)","cTag":"\"c:{C6A371F6-1A71-43F1-805A-2EACEC090138},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:46Z","lastModifiedDateTime":"2024-02-14T18:05:46Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:05:46 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:37Z","lastModifiedDateTime":"2024-04-24T12:18:37Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:18:37 GMT - request: method: post uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: encoding: UTF-8 - string: '{"name":"PUBLIC PROJECT (335)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' + string: '{"name":"_=o=_ _ _Jedi_ Project Folder ___ (682)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json + Authorization: + - Bearer User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate Content-Length: - - '86' + - '105' response: status: code: 201 @@ -318,157 +310,95 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip Etag: - - '"{06F86924-B7B7-40DE-A389-2F255283E8FF},1"' + - '"{0824093D-45B0-49E9-8E0A-2E46945FAB19},1"' Location: - - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PJENH4ANN5X3ZAKHCJPEVJIH2H7') + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PJ5BESARMCF5FEY4CROI2KF7KYZ') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 46195377-09f2-4474-850f-05761670619b + - e2b829ee-39db-40f1-be57-06a47cff23a9 Client-Request-Id: - - 46195377-09f2-4474-850f-05761670619b + - e2b829ee-39db-40f1-be57-06a47cff23a9 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000351"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000544"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:46 GMT + - Wed, 24 Apr 2024 12:18:37 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{06F86924-B7B7-40DE-A389-2F255283E8FF},1\"","createdDateTime":"2024-02-14T18:05:47Z","eTag":"\"{06F86924-B7B7-40DE-A389-2F255283E8FF},1\"","id":"01AZJL5PJENH4ANN5X3ZAKHCJPEVJIH2H7","lastModifiedDateTime":"2024-02-14T18:05:47Z","name":"PUBLIC - PROJECT (335)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(335)","cTag":"\"c:{06F86924-B7B7-40DE-A389-2F255283E8FF},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{0824093D-45B0-49E9-8E0A-2E46945FAB19},1\"","createdDateTime":"2024-04-24T12:18:38Z","eTag":"\"{0824093D-45B0-49E9-8E0A-2E46945FAB19},1\"","id":"01AZJL5PJ5BESARMCF5FEY4CROI2KF7KYZ","lastModifiedDateTime":"2024-04-24T12:18:38Z","name":"_=o=_ + _ _Jedi_ Project Folder ___ (682)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(682)","cTag":"\"c:{0824093D-45B0-49E9-8E0A-2E46945FAB19},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint - App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:47Z","lastModifiedDateTime":"2024-02-14T18:05:47Z"},"folder":{"childCount":0}}' - recorded_at: Wed, 14 Feb 2024 18:05:46 GMT + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:38Z","lastModifiedDateTime":"2024-04-24T12:18:38Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:18:38 GMT - request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPWH6NZDVYAQRBZIMBEX73FB3PN + method: post + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root/children body: - encoding: US-ASCII - string: '' + encoding: UTF-8 + string: '{"name":"PUBLIC PROJECT (684)","folder":{},"@microsoft.graph.conflictBehavior":"fail"}' headers: - Authorization: - - Bearer - Accept: - - application/json Content-Type: - application/json - User-Agent: - - httpx.rb/1.2.2 - Accept-Encoding: - - gzip, deflate - response: - status: - code: 200 - message: OK - headers: - Cache-Control: - - no-store, no-cache - Transfer-Encoding: - - chunked - Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 - Content-Encoding: - - gzip - Vary: - - Accept-Encoding - Strict-Transport-Security: - - max-age=31536000 - Request-Id: - - e072cde9-e3f5-4500-b99b-0509384d6fba - Client-Request-Id: - - e072cde9-e3f5-4500-b99b-0509384d6fba - X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000166"}}' - Odata-Version: - - '4.0' - Date: - - Wed, 14 Feb 2024 18:05:46 GMT - body: - encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:05:45Z","eTag":"\"{919B3FF6-00D7-4384-9430-24BFF650EDED},1\"","id":"01AZJL5PPWH6NZDVYAQRBZIMBEX73FB3PN","lastModifiedDateTime":"2024-02-14T18:05:45Z","name":"INACTIVE - PROJECT! f0r r34lz (334)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/INACTIVE%20PROJECT!%20f0r%20r34lz%20(334)","cTag":"\"c:{919B3FF6-00D7-4384-9430-24BFF650EDED},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:45Z","lastModifiedDateTime":"2024-02-14T18:05:45Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:47 GMT -- request: - method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPWH6NZDVYAQRBZIMBEX73FB3PN/permissions - body: - encoding: US-ASCII - string: '' - headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate + Content-Length: + - '86' response: status: - code: 200 - message: OK + code: 201 + message: Created headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: - gzip + Etag: + - '"{1CD8820F-B4B5-4434-AAEE-5678F8633874},1"' + Location: + - https://finn.sharepoint.com/_api/v2.0/drives('b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy')/items('root')/children('01AZJL5PIPQLMBZNNUGRCKV3SWPD4GGODU') Vary: - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 6c903cf1-071e-4372-9a76-1f7b64f582ee + - 41a3120f-a6b1-405a-8728-b8584c96bf61 Client-Request-Id: - - 6c903cf1-071e-4372-9a76-1f7b64f582ee + - 41a3120f-a6b1-405a-8728-b8584c96bf61 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000166"}}' - Link: - - ;rel="deprecation";type="text/html", - ;rel="deprecation";type="text/html" - Deprecation: - - Fri, 03 Sep 2021 23:59:59 GMT - Sunset: - - Sun, 01 Oct 2023 23:59:59 GMT + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055A"}}' Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:46 GMT + - Wed, 24 Apr 2024 12:18:37 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPWH6NZDVYAQRBZIMBEX73FB3PN'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject - file storage tests Owners","id":"3","loginName":"OpenProject file storage - tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:47 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/root/children/$entity","@odata.etag":"\"{1CD8820F-B4B5-4434-AAEE-5678F8633874},1\"","createdDateTime":"2024-04-24T12:18:38Z","eTag":"\"{1CD8820F-B4B5-4434-AAEE-5678F8633874},1\"","id":"01AZJL5PIPQLMBZNNUGRCKV3SWPD4GGODU","lastModifiedDateTime":"2024-04-24T12:18:38Z","name":"PUBLIC + PROJECT (684)","size":0,"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(684)","cTag":"\"c:{1CD8820F-B4B5-4434-AAEE-5678F8633874},0\"","commentSettings":{"commentingDisabled":{"isDisabled":false}},"createdBy":{"application":{"displayName":"OpenProject + Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint + App"}},"lastModifiedBy":{"application":{"displayName":"OpenProject Dev App","id":"4262df2b-77bb-49c2-a5df-28355da676d2"},"user":{"displayName":"SharePoint + App"}},"parentReference":{"driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","driveType":"documentLibrary","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","sharepointIds":{"listId":"f7f90ed1-a285-40e2-8841-e5460d76a332","listItemUniqueId":"a7a7b4ec-acc5-4a83-a405-2cd7418e7467","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50","siteUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests","tenantId":"4d44bf36-9b56-45c0-8807-bbf386dd047f","webId":"7ef259e8-8eed-4645-920a-8b367bb0d8e0"}},"fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:38Z","lastModifiedDateTime":"2024-04-24T12:18:38Z"},"folder":{"childCount":0},"shared":{"scope":"unknown"}}' + recorded_at: Wed, 24 Apr 2024 12:18:38 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB body: encoding: US-ASCII string: '' @@ -480,7 +410,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -490,37 +420,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - d9208c3d-118e-4a47-9da0-cff50d4934bd + - dc879c51-0da4-41ac-9ea2-6bb75e31d72f Client-Request-Id: - - d9208c3d-118e-4a47-9da0-cff50d4934bd + - dc879c51-0da4-41ac-9ea2-6bb75e31d72f X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000313"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000034F"}}' Date: - - Wed, 14 Feb 2024 18:05:47 GMT + - Wed, 24 Apr 2024 12:18:38 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-01-29T17:30:48Z","eTag":"\"{AA674C60-1512-4607-AC2F-7838F996B4A9},1\"","id":"01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ","lastModifiedDateTime":"2024-01-29T17:30:48Z","name":"Project - B","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20B","cTag":"\"c:{AA674C60-1512-4607-AC2F-7838F996B4A9},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:48Z","lastModifiedDateTime":"2024-01-29T17:30:48Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:47 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-18T12:05:15Z","eTag":"\"{B94392DB-A502-4109-9EC5-17E7ABFFF461},4\"","id":"01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-18T12:05:15Z","name":"[dev] + Large (4)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5Bdev%5D%20Large%20(4)","cTag":"\"c:{B94392DB-A502-4109-9EC5-17E7ABFFF461},0\"","fileSystemInfo":{"createdDateTime":"2024-04-18T12:05:15Z","lastModifiedDateTime":"2024-04-18T12:05:15Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:18:38 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB/permissions body: encoding: US-ASCII string: '' @@ -532,7 +458,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -542,22 +468,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 2a379c20-bfee-47c5-916c-2e3db5d42b70 + - 7fc7d3a8-d5af-4c64-a661-bbd2f9097aa0 Client-Request-Id: - - 2a379c20-bfee-47c5-916c-2e3db5d42b70 + - 7fc7d3a8-d5af-4c64-a661-bbd2f9097aa0 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000311"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016E"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -565,26 +487,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:47 GMT + - Wed, 24 Apr 2024 12:18:38 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PLAJRT2UEQVA5DKYL3YHD4ZNNFJ'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PO3SJB3SAVFBFAZ5RIX46V775DB'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:47 GMT + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' + recorded_at: Wed, 24 Apr 2024 12:18:39 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K body: encoding: US-ASCII string: '' @@ -596,7 +519,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -606,37 +529,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - f7b9ebbb-4351-493c-b73e-f4411fbe113e + - bc644557-6748-40f2-b6ff-c25322a4ab51 Client-Request-Id: - - f7b9ebbb-4351-493c-b73e-f4411fbe113e + - bc644557-6748-40f2-b6ff-c25322a4ab51 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000160"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000165"}}' Date: - - Wed, 14 Feb 2024 18:05:47 GMT + - Wed, 24 Apr 2024 12:18:39 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-01-29T17:30:52Z","eTag":"\"{98914E03-2109-4235-8A69-3092969D062D},1\"","id":"01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN","lastModifiedDateTime":"2024-01-29T17:30:52Z","name":"Project - C","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Project%20C","cTag":"\"c:{98914E03-2109-4235-8A69-3092969D062D},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-01-29T17:30:52Z","lastModifiedDateTime":"2024-01-29T17:30:52Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:48 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-03-18T18:12:55Z","eTag":"\"{D03A86A5-D563-45AC-B5FA-2A333F353BEA},275\"","id":"01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-03-18T18:12:55Z","name":"Demo + project (1)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Demo%20project%20(1)","cTag":"\"c:{D03A86A5-D563-45AC-B5FA-2A333F353BEA},0\"","fileSystemInfo":{"createdDateTime":"2024-03-18T18:12:55Z","lastModifiedDateTime":"2024-03-18T18:12:55Z"},"folder":{"childCount":1},"shared":{"scope":"users"},"size":988098560}' + recorded_at: Wed, 24 Apr 2024 12:18:39 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K/permissions body: encoding: US-ASCII string: '' @@ -648,7 +567,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -658,22 +577,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 81fa569e-fcd5-4d4c-ba1f-2415b1f33301 + - d2df36cb-4b4c-46df-8913-e00438b18888 Client-Request-Id: - - 81fa569e-fcd5-4d4c-ba1f-2415b1f33301 + - d2df36cb-4b4c-46df-8913-e00438b18888 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000310"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000055C"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -681,26 +596,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:48 GMT + - Wed, 24 Apr 2024 12:18:39 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PIDJ2IZQCJBGVBIU2JQSKLJ2BRN'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNFQY5NAY6VVRC3L6RKGM7TKO7K'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:48 GMT + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' + recorded_at: Wed, 24 Apr 2024 12:18:39 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POAWKECOEYSPZHL5SWGOMUXQRTD body: encoding: US-ASCII string: '' @@ -712,7 +628,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -722,36 +638,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 936bd1b7-94c9-4973-84c5-5aaee2eb827a + - dbe2417a-4854-486b-8aba-2cc113d8ef20 Client-Request-Id: - - 936bd1b7-94c9-4973-84c5-5aaee2eb827a + - dbe2417a-4854-486b-8aba-2cc113d8ef20 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000166"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000054B"}}' Date: - - Wed, 14 Feb 2024 18:05:47 GMT + - Wed, 24 Apr 2024 12:18:39 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2023-12-15T14:58:59Z","eTag":"\"{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},33\"","id":"01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM","lastModifiedDateTime":"2023-12-29T10:44:06Z","name":"Renamed - Project A (1234)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/Renamed%20Project%20A%20(1234)","cTag":"\"c:{A8F9D7A4-3A1C-4488-B85B-6F75B01AA48C},0\"","decorator":{"iconColor":"darkGreen"},"size":33882,"createdBy":{"user":{"email":"w.lindenthal@finnlabs.com","id":"99fb2d61-359b-4fae-91c9-1ac6c8f02b5e","displayName":"Wieland - Lindenthal"}},"lastModifiedBy":{"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2023-12-15T14:58:59Z","lastModifiedDateTime":"2023-12-29T10:44:06Z"},"folder":{"childCount":2},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:48 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:36Z","eTag":"\"{2788B2C0-1213-4E7E-BECA-C67329784663},2\"","id":"01AZJL5POAWKECOEYSPZHL5SWGOMUXQRTD","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:36Z","name":"INACTIVE + PROJECT! f0r r34lz (683)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/INACTIVE%20PROJECT!%20f0r%20r34lz%20(683)","cTag":"\"c:{2788B2C0-1213-4E7E-BECA-C67329784663},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:36Z","lastModifiedDateTime":"2024-04-24T12:18:36Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:18:40 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POAWKECOEYSPZHL5SWGOMUXQRTD/permissions body: encoding: US-ASCII string: '' @@ -763,7 +676,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -773,22 +686,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 22e03a80-705c-46d7-b8e9-4379c494e3bf + - 653048ef-c5da-4ba2-ac75-4f8cd615fc82 Client-Request-Id: - - 22e03a80-705c-46d7-b8e9-4379c494e3bf + - 653048ef-c5da-4ba2-ac75-4f8cd615fc82 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016E"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000052A"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -796,26 +705,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:48 GMT + - Wed, 24 Apr 2024 12:18:40 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PNE2742QHB2RBCLQW3POWYBVJEM'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5POAWKECOEYSPZHL5SWGOMUXQRTD'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:48 GMT + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' + recorded_at: Wed, 24 Apr 2024 12:18:40 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN2WZQMXT2FEFDKUSWAJKLMXFST + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPWOGR4M4I26FBYAWROVTWASAJY body: encoding: US-ASCII string: '' @@ -827,7 +737,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -837,37 +747,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - e0700d87-0f51-4992-911e-37e2efdd7e86 + - 4a7749f0-90c7-41f8-86b1-116a9bfe6d56 Client-Request-Id: - - e0700d87-0f51-4992-911e-37e2efdd7e86 + - 4a7749f0-90c7-41f8-86b1-116a9bfe6d56 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000364"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016E"}}' Date: - - Wed, 14 Feb 2024 18:05:48 GMT + - Wed, 24 Apr 2024 12:18:40 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:05:46Z","eTag":"\"{CB60B6BA-45CF-4621-AA4A-C04A96CB9653},1\"","id":"01AZJL5PN2WZQMXT2FEFDKUSWAJKLMXFST","lastModifiedDateTime":"2024-02-14T18:05:46Z","name":"[Sample] - Project Name _ Ehuu (332)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(332)","cTag":"\"c:{CB60B6BA-45CF-4621-AA4A-C04A96CB9653},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:46Z","lastModifiedDateTime":"2024-02-14T18:05:46Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:49 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:37Z","eTag":"\"{C6A371F6-1A71-43F1-805A-2EACEC090138},2\"","id":"01AZJL5PPWOGR4M4I26FBYAWROVTWASAJY","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:37Z","name":"[Sample] + Project Name _ Ehuu (681)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(681)","cTag":"\"c:{C6A371F6-1A71-43F1-805A-2EACEC090138},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:37Z","lastModifiedDateTime":"2024-04-24T12:18:37Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:18:41 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN2WZQMXT2FEFDKUSWAJKLMXFST/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPWOGR4M4I26FBYAWROVTWASAJY/permissions body: encoding: US-ASCII string: '' @@ -879,7 +785,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -889,22 +795,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 94853067-44cf-482a-91c9-80737d09a0e0 + - fe93a158-2dea-46a9-9cd3-000bc252416b Client-Request-Id: - - 94853067-44cf-482a-91c9-80737d09a0e0 + - fe93a158-2dea-46a9-9cd3-000bc252416b X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016D"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057F"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -912,26 +814,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:49 GMT + - Wed, 24 Apr 2024 12:18:41 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PN2WZQMXT2FEFDKUSWAJKLMXFST'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPWOGR4M4I26FBYAWROVTWASAJY'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:49 GMT + recorded_at: Wed, 24 Apr 2024 12:18:41 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN2WZQMXT2FEFDKUSWAJKLMXFST/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPWOGR4M4I26FBYAWROVTWASAJY/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"},{"objectId":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -943,7 +846,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -955,8 +858,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -968,11 +869,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 0ba83226-e447-4b47-bbbd-50611f07d58e + - f1041b51-3fa9-4fe0-a8fc-d66b3ece4d79 Client-Request-Id: - - 0ba83226-e447-4b47-bbbd-50611f07d58e + - f1041b51-3fa9-4fe0-a8fc-d66b3ece4d79 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000351"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000530"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -983,17 +884,17 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:50 GMT + - Wed, 24 Apr 2024 12:18:43 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test - Manager 01"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test - user 02"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + Manager 01"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test + user 02"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:50 GMT + recorded_at: Wed, 24 Apr 2024 12:18:43 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPNJGLIRYZUJRFYF4TUWQSBO4CU + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJ5BESARMCF5FEY4CROI2KF7KYZ body: encoding: US-ASCII string: '' @@ -1005,7 +906,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1015,37 +916,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 4fe58417-4313-42a2-8a22-5e52a307b40d + - 2cbd4caf-1ad7-4be9-9f58-52069287b5ba Client-Request-Id: - - 4fe58417-4313-42a2-8a22-5e52a307b40d + - 2cbd4caf-1ad7-4be9-9f58-52069287b5ba X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000163"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000034F"}}' Date: - - Wed, 14 Feb 2024 18:05:50 GMT + - Wed, 24 Apr 2024 12:18:43 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:05:46Z","eTag":"\"{889649ED-34E3-4B4C-82F2-74B424177054},1\"","id":"01AZJL5PPNJGLIRYZUJRFYF4TUWQSBO4CU","lastModifiedDateTime":"2024-02-14T18:05:46Z","name":"_=o=_ - _ _Jedi_ Project Folder ___ (333)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(333)","cTag":"\"c:{889649ED-34E3-4B4C-82F2-74B424177054},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:46Z","lastModifiedDateTime":"2024-02-14T18:05:46Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:51 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:38Z","eTag":"\"{0824093D-45B0-49E9-8E0A-2E46945FAB19},2\"","id":"01AZJL5PJ5BESARMCF5FEY4CROI2KF7KYZ","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:38Z","name":"_=o=_ + _ _Jedi_ Project Folder ___ (682)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(682)","cTag":"\"c:{0824093D-45B0-49E9-8E0A-2E46945FAB19},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:38Z","lastModifiedDateTime":"2024-04-24T12:18:38Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:18:43 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPNJGLIRYZUJRFYF4TUWQSBO4CU/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJ5BESARMCF5FEY4CROI2KF7KYZ/permissions body: encoding: US-ASCII string: '' @@ -1057,7 +954,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1067,22 +964,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 46d46144-9f18-4e75-b8eb-672dd8fc30e2 + - e2a3a376-d297-40b0-a1d7-5e1af871278d Client-Request-Id: - - 46d46144-9f18-4e75-b8eb-672dd8fc30e2 + - e2a3a376-d297-40b0-a1d7-5e1af871278d X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000165"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057F"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1090,26 +983,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:51 GMT + - Wed, 24 Apr 2024 12:18:44 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPNJGLIRYZUJRFYF4TUWQSBO4CU'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PJ5BESARMCF5FEY4CROI2KF7KYZ'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:51 GMT + recorded_at: Wed, 24 Apr 2024 12:18:44 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPNJGLIRYZUJRFYF4TUWQSBO4CU/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJ5BESARMCF5FEY4CROI2KF7KYZ/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -1121,7 +1015,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -1133,8 +1027,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -1146,11 +1038,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 9deefcd1-4632-4abd-8649-822df75f16c7 + - bd78123e-88c9-4387-adee-4ce734e7f01e Client-Request-Id: - - 9deefcd1-4632-4abd-8649-822df75f16c7 + - bd78123e-88c9-4387-adee-4ce734e7f01e X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000310"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000558"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1161,16 +1053,16 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:52 GMT + - Wed, 24 Apr 2024 12:18:44 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test - Manager 01"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + Manager 01"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:52 GMT + recorded_at: Wed, 24 Apr 2024 12:18:45 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJENH4ANN5X3ZAKHCJPEVJIH2H7 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIPQLMBZNNUGRCKV3SWPD4GGODU body: encoding: US-ASCII string: '' @@ -1182,7 +1074,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1192,37 +1084,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - e8c35a09-dc1c-45a6-8246-3fe709ff0f86 + - f73b16a2-2c1a-49b5-8c95-6eda6ef58a8c Client-Request-Id: - - e8c35a09-dc1c-45a6-8246-3fe709ff0f86 + - f73b16a2-2c1a-49b5-8c95-6eda6ef58a8c X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000166"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000057D"}}' Date: - - Wed, 14 Feb 2024 18:05:52 GMT + - Wed, 24 Apr 2024 12:18:45 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:05:47Z","eTag":"\"{06F86924-B7B7-40DE-A389-2F255283E8FF},1\"","id":"01AZJL5PJENH4ANN5X3ZAKHCJPEVJIH2H7","lastModifiedDateTime":"2024-02-14T18:05:47Z","name":"PUBLIC - PROJECT (335)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(335)","cTag":"\"c:{06F86924-B7B7-40DE-A389-2F255283E8FF},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:47Z","lastModifiedDateTime":"2024-02-14T18:05:47Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:52 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:38Z","eTag":"\"{1CD8820F-B4B5-4434-AAEE-5678F8633874},2\"","id":"01AZJL5PIPQLMBZNNUGRCKV3SWPD4GGODU","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:38Z","name":"PUBLIC + PROJECT (684)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/PUBLIC%20PROJECT%20(684)","cTag":"\"c:{1CD8820F-B4B5-4434-AAEE-5678F8633874},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:38Z","lastModifiedDateTime":"2024-04-24T12:18:38Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:18:46 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJENH4ANN5X3ZAKHCJPEVJIH2H7/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIPQLMBZNNUGRCKV3SWPD4GGODU/permissions body: encoding: US-ASCII string: '' @@ -1234,7 +1122,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1244,22 +1132,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 4c35754a-7f2a-4f50-8555-c5e8fb427d60 + - d766c65c-5658-4dff-96cb-baa98f37d406 Client-Request-Id: - - 4c35754a-7f2a-4f50-8555-c5e8fb427d60 + - d766c65c-5658-4dff-96cb-baa98f37d406 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000364"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000364"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1267,26 +1151,27 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:52 GMT + - Wed, 24 Apr 2024 12:18:46 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PJENH4ANN5X3ZAKHCJPEVJIH2H7'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PIPQLMBZNNUGRCKV3SWPD4GGODU'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:53 GMT + recorded_at: Wed, 24 Apr 2024 12:18:46 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJENH4ANN5X3ZAKHCJPEVJIH2H7/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIPQLMBZNNUGRCKV3SWPD4GGODU/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["read"],"recipients":[{"objectId":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},{"objectId":"248aeb72-b231-4e71-a466-67fa7df2a285"}]}' @@ -1298,7 +1183,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -1310,8 +1195,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -1323,11 +1206,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 1396a4ad-5fea-405c-9423-3013ee46bb3b + - 4a14af4a-61fb-4a32-b73e-5c0119b48c95 Client-Request-Id: - - 1396a4ad-5fea-405c-9423-3013ee46bb3b + - 4a14af4a-61fb-4a32-b73e-5c0119b48c95 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016D"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000163"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1338,16 +1221,16 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:53 GMT + - Wed, 24 Apr 2024 12:18:47 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test - user 02"}}},{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba","displayName":"Test + user 02"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["read"],"grantedTo":{"user":{"email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285","displayName":"Test user 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:54 GMT + recorded_at: Wed, 24 Apr 2024 12:18:47 GMT - request: method: post - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJENH4ANN5X3ZAKHCJPEVJIH2H7/invite + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIPQLMBZNNUGRCKV3SWPD4GGODU/invite body: encoding: UTF-8 string: '{"requireSignIn":true,"sendInvitation":false,"roles":["write"],"recipients":[{"objectId":"33db2c84-275d-46af-afb0-c26eb786b194"}]}' @@ -1359,7 +1242,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate Content-Length: @@ -1371,8 +1254,6 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 Content-Encoding: @@ -1384,11 +1265,11 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 3b86f030-e21c-4398-8f0d-aed782eaccf0 + - aab64c73-7d5d-472e-b4e4-a3494675d2d1 Client-Request-Id: - - 3b86f030-e21c-4398-8f0d-aed782eaccf0 + - aab64c73-7d5d-472e-b4e4-a3494675d2d1 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000351"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000558"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1399,15 +1280,15 @@ http_interactions: Odata-Version: - '4.0' Date: - - Wed, 14 Feb 2024 18:05:54 GMT + - Wed, 24 Apr 2024 12:18:48 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)","value":[{"@odata.type":"#microsoft.graph.permission","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.permission)","value":[{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"grantedTo":{"user":{"email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194","displayName":"Test Manager 01"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:55 GMT + recorded_at: Wed, 24 Apr 2024 12:18:49 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN2WZQMXT2FEFDKUSWAJKLMXFST + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPWOGR4M4I26FBYAWROVTWASAJY body: encoding: US-ASCII string: '' @@ -1419,7 +1300,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1429,37 +1310,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - bb2f41ff-242e-41ad-a845-ecd29bbdfd87 + - e50e54a9-1dba-40fb-99d7-85029e8cbd36 Client-Request-Id: - - bb2f41ff-242e-41ad-a845-ecd29bbdfd87 + - e50e54a9-1dba-40fb-99d7-85029e8cbd36 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000313"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000034F"}}' Date: - - Wed, 14 Feb 2024 18:05:54 GMT + - Wed, 24 Apr 2024 12:18:48 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:05:46Z","eTag":"\"{CB60B6BA-45CF-4621-AA4A-C04A96CB9653},2\"","id":"01AZJL5PN2WZQMXT2FEFDKUSWAJKLMXFST","lastModifiedDateTime":"2024-02-14T18:05:46Z","name":"[Sample] - Project Name _ Ehuu (332)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(332)","cTag":"\"c:{CB60B6BA-45CF-4621-AA4A-C04A96CB9653},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:46Z","lastModifiedDateTime":"2024-02-14T18:05:46Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:55 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:37Z","eTag":"\"{C6A371F6-1A71-43F1-805A-2EACEC090138},3\"","id":"01AZJL5PPWOGR4M4I26FBYAWROVTWASAJY","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:37Z","name":"[Sample] + Project Name _ Ehuu (681)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/%5BSample%5D%20Project%20Name%20_%20Ehuu%20(681)","cTag":"\"c:{C6A371F6-1A71-43F1-805A-2EACEC090138},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:37Z","lastModifiedDateTime":"2024-04-24T12:18:37Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:18:49 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN2WZQMXT2FEFDKUSWAJKLMXFST/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPWOGR4M4I26FBYAWROVTWASAJY/permissions body: encoding: US-ASCII string: '' @@ -1471,7 +1348,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1481,22 +1358,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 56754ad0-d941-4686-a270-d1e1b5981961 + - a52c505a-5ef8-4cf6-b41a-395092d398b3 Client-Request-Id: - - 56754ad0-d941-4686-a270-d1e1b5981961 + - a52c505a-5ef8-4cf6-b41a-395092d398b3 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000160"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000311"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1504,35 +1377,39 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:54 GMT + - Wed, 24 Apr 2024 12:18:49 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PN2WZQMXT2FEFDKUSWAJKLMXFST'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPWOGR4M4I26FBYAWROVTWASAJY'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test - user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"},"siteUser":{"displayName":"Test + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test user 01","email":"testuser01.op@outlook.com","id":"42","loginName":"i:0#.f|membership|testuser01.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test - user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test - user 02","email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},"siteUser":{"displayName":"Test + user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMi5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + user 02","email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test user 02","email":"testuser02.op@outlook.com","id":"43","loginName":"i:0#.f|membership|testuser02.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test - user 02","email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test - Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"},"siteUser":{"displayName":"Test + user 02","email":"testuser02.op@outlook.com","id":"2ff33b8f-2843-40c1-9a17-d786bca17fba"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test Manager 01","email":"testmanager01.op@outlook.com","id":"45","loginName":"i:0#.f|membership|testmanager01.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test - Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:55 GMT + recorded_at: Wed, 24 Apr 2024 12:18:49 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPNJGLIRYZUJRFYF4TUWQSBO4CU + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJ5BESARMCF5FEY4CROI2KF7KYZ body: encoding: US-ASCII string: '' @@ -1544,7 +1421,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1554,37 +1431,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 25de0e6e-31c5-423d-b2bc-9df4001d7f57 + - 8202e2b7-ca87-4b92-b0f9-cd63e4331924 Client-Request-Id: - - 25de0e6e-31c5-423d-b2bc-9df4001d7f57 + - 8202e2b7-ca87-4b92-b0f9-cd63e4331924 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000310"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000163"}}' Date: - - Wed, 14 Feb 2024 18:05:55 GMT + - Wed, 24 Apr 2024 12:18:49 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:05:46Z","eTag":"\"{889649ED-34E3-4B4C-82F2-74B424177054},2\"","id":"01AZJL5PPNJGLIRYZUJRFYF4TUWQSBO4CU","lastModifiedDateTime":"2024-02-14T18:05:46Z","name":"_=o=_ - _ _Jedi_ Project Folder ___ (333)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(333)","cTag":"\"c:{889649ED-34E3-4B4C-82F2-74B424177054},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:46Z","lastModifiedDateTime":"2024-02-14T18:05:46Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:55 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:38Z","eTag":"\"{0824093D-45B0-49E9-8E0A-2E46945FAB19},3\"","id":"01AZJL5PJ5BESARMCF5FEY4CROI2KF7KYZ","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:38Z","name":"_=o=_ + _ _Jedi_ Project Folder ___ (682)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/_=o=_%20_%20_Jedi_%20Project%20Folder%20___%20(682)","cTag":"\"c:{0824093D-45B0-49E9-8E0A-2E46945FAB19},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:38Z","lastModifiedDateTime":"2024-04-24T12:18:38Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:18:50 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPNJGLIRYZUJRFYF4TUWQSBO4CU/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJ5BESARMCF5FEY4CROI2KF7KYZ/permissions body: encoding: US-ASCII string: '' @@ -1596,7 +1469,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1606,22 +1479,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - d4b288c7-2c10-4400-be25-bf4ea0059096 + - 69553186-b054-42dc-9afb-7f4055dd2e99 Client-Request-Id: - - d4b288c7-2c10-4400-be25-bf4ea0059096 + - 69553186-b054-42dc-9afb-7f4055dd2e99 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000036E"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000054B"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1629,32 +1498,35 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:55 GMT + - Wed, 24 Apr 2024 12:18:50 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPNJGLIRYZUJRFYF4TUWQSBO4CU'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PJ5BESARMCF5FEY4CROI2KF7KYZ'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test - user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"},"siteUser":{"displayName":"Test + tests Owners"}}},{"@deprecated.GrantedTo":"GrantedTo has been deprecated. + Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdHVzZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test user 01","email":"testuser01.op@outlook.com","id":"42","loginName":"i:0#.f|membership|testuser01.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test - user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test - Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"},"siteUser":{"displayName":"Test + user 01","email":"testuser01.op@outlook.com","id":"248aeb72-b231-4e71-a466-67fa7df2a285"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","roles":["write"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8dGVzdG1hbmFnZXIwMS5vcF9vdXRsb29rLmNvbSNleHQjQGZpbm4ub25taWNyb3NvZnQuY29t","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test + Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Test Manager 01","email":"testmanager01.op@outlook.com","id":"45","loginName":"i:0#.f|membership|testmanager01.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Test - Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"}}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + Manager 01","email":"testmanager01.op@outlook.com","id":"33db2c84-275d-46af-afb0-c26eb786b194"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:56 GMT + recorded_at: Wed, 24 Apr 2024 12:18:50 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPWH6NZDVYAQRBZIMBEX73FB3PN + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POAWKECOEYSPZHL5SWGOMUXQRTD body: encoding: US-ASCII string: '' @@ -1666,7 +1538,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1676,37 +1548,33 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 13f06b5a-a508-4f8d-9757-3278c1973506 + - b9dea28c-7967-4a77-97e5-b0e084801ad1 Client-Request-Id: - - 13f06b5a-a508-4f8d-9757-3278c1973506 + - b9dea28c-7967-4a77-97e5-b0e084801ad1 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000169"}}' - Odata-Version: - - '4.0' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000364"}}' Date: - - Wed, 14 Feb 2024 18:05:55 GMT + - Wed, 24 Apr 2024 12:18:50 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items/$entity","createdDateTime":"2024-02-14T18:05:45Z","eTag":"\"{919B3FF6-00D7-4384-9430-24BFF650EDED},1\"","id":"01AZJL5PPWH6NZDVYAQRBZIMBEX73FB3PN","lastModifiedDateTime":"2024-02-14T18:05:45Z","name":"INACTIVE - PROJECT! f0r r34lz (334)","webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/INACTIVE%20PROJECT!%20f0r%20r34lz%20(334)","cTag":"\"c:{919B3FF6-00D7-4384-9430-24BFF650EDED},0\"","size":0,"createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject - Dev App"},"user":{"displayName":"SharePoint App"}},"parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual - Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"fileSystemInfo":{"createdDateTime":"2024-02-14T18:05:45Z","lastModifiedDateTime":"2024-02-14T18:05:45Z"},"folder":{"childCount":0},"shared":{"scope":"users"}}' - recorded_at: Wed, 14 Feb 2024 18:05:56 GMT + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)/$entity","@microsoft.graph.Decorator":"decorator + has been deprecated. Refer to folder.decorator","createdBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2024-04-24T12:18:36Z","eTag":"\"{2788B2C0-1213-4E7E-BECA-C67329784663},2\"","id":"01AZJL5POAWKECOEYSPZHL5SWGOMUXQRTD","lastModifiedBy":{"application":{"id":"4262df2b-77bb-49c2-a5df-28355da676d2","displayName":"OpenProject + Dev App"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"2024-04-24T12:18:36Z","name":"INACTIVE + PROJECT! f0r r34lz (683)","parentReference":{"driveType":"documentLibrary","driveId":"b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy","id":"01AZJL5PN6Y2GOVW7725BZO354PWSELRRZ","name":"Manual + Sharing Test","path":"/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/root:","siteId":"1b4b6576-906d-4d94-8f49-6d00a9507b50"},"webUrl":"https://finn.sharepoint.com/sites/openprojectfilestoragetests/Manual%20Sharing%20Test/INACTIVE%20PROJECT!%20f0r%20r34lz%20(683)","cTag":"\"c:{2788B2C0-1213-4E7E-BECA-C67329784663},0\"","fileSystemInfo":{"createdDateTime":"2024-04-24T12:18:36Z","lastModifiedDateTime":"2024-04-24T12:18:36Z"},"folder":{"childCount":0},"shared":{"scope":"users"},"size":0}' + recorded_at: Wed, 24 Apr 2024 12:18:50 GMT - request: method: get - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPWH6NZDVYAQRBZIMBEX73FB3PN/permissions + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POAWKECOEYSPZHL5SWGOMUXQRTD/permissions body: encoding: US-ASCII string: '' @@ -1718,7 +1586,7 @@ http_interactions: Content-Type: - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 Accept-Encoding: - gzip, deflate response: @@ -1728,22 +1596,18 @@ http_interactions: headers: Cache-Control: - no-store, no-cache - Transfer-Encoding: - - chunked Content-Type: - - application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 + - application/json; odata.metadata=minimal; odata.streaming=true Content-Encoding: - gzip - Vary: - - Accept-Encoding Strict-Transport-Security: - max-age=31536000 Request-Id: - - 51342e0f-8c70-4d0b-b7de-31ab21d64d38 + - ac7137c9-f892-4af3-9247-3f4eaed0d876 Client-Request-Id: - - 51342e0f-8c70-4d0b-b7de-31ab21d64d38 + - ac7137c9-f892-4af3-9247-3f4eaed0d876 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000165"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000165"}}' Link: - ;rel="deprecation";type="text/html", ;rel="deprecation";type="text/html" @@ -1751,38 +1615,37 @@ http_interactions: - Fri, 03 Sep 2021 23:59:59 GMT Sunset: - Sun, 01 Oct 2023 23:59:59 GMT - Odata-Version: - - '4.0' Date: - - Wed, 14 Feb 2024 18:05:56 GMT + - Wed, 24 Apr 2024 12:18:50 GMT body: encoding: UTF-8 - string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b%21dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5PPWH6NZDVYAQRBZIMBEX73FB3PN'')/permissions","value":[{"id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"displayName":"OpenProject + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#drives(''b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy'')/items(''01AZJL5POAWKECOEYSPZHL5SWGOMUXQRTD'')/permissions","value":[{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","roles":["owner"],"shareId":"T3BlblByb2plY3QgZmlsZSBzdG9yYWdlIHRlc3RzIE93bmVycw","grantedToV2":{"siteGroup":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","id":"3","loginName":"OpenProject file storage tests Owners"}},"grantedTo":{"user":{"displayName":"OpenProject file storage - tests Owners"}},"inheritedFrom":{}},{"id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"displayName":"Eric + tests Owners"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo has + been deprecated. Refer to GrantedToV2","id":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","roles":["owner"],"shareId":"aTowIy5mfG1lbWJlcnNoaXB8ZXNjaHViZXJ0Lm9wX291dGxvb2suY29tI2V4dCNAZmlubi5vbm1pY3Jvc29mdC5jb20","grantedToV2":{"user":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"Eric Schubert","email":"eschubert.op@outlook.com","id":"12","loginName":"i:0#.f|membership|eschubert.op_outlook.com#ext#@finn.onmicrosoft.com"}},"grantedTo":{"user":{"displayName":"Eric - Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject - file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"displayName":"OpenProject + Schubert","email":"eschubert.op@outlook.com","id":"0a0d38a9-a59b-4245-93fa-0d2cf727f17a"}},"inheritedFrom":{}},{"@deprecated.GrantedTo":"GrantedTo + has been deprecated. Refer to GrantedToV2","id":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","roles":["owner"],"shareId":"Yzowby5jfGZlZGVyYXRlZGRpcmVjdG9yeWNsYWltcHJvdmlkZXJ8NTg1NGI4YTYtNzg5Yi00M2E1LWI3Y2QtMWYwMGFkNGJkMDMwX28","grantedToV2":{"group":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject + file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"},"siteUser":{"@odata.type":"#microsoft.graph.sharePointIdentity","displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"6","loginName":"c:0o.c|federateddirectoryclaimprovider|5854b8a6-789b-43a5-b7cd-1f00ad4bd030_o"}},"grantedTo":{"user":{"displayName":"OpenProject file storage tests Owners","email":"openprojectfilestoragetests@finn.onmicrosoft.com","id":"5854b8a6-789b-43a5-b7cd-1f00ad4bd030"}},"inheritedFrom":{}}]}' - recorded_at: Wed, 14 Feb 2024 18:05:56 GMT + recorded_at: Wed, 24 Apr 2024 12:18:51 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PN2WZQMXT2FEFDKUSWAJKLMXFST + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPWOGR4M4I26FBYAWROVTWASAJY body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1795,32 +1658,30 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - 59bbd5d7-2d1b-49af-9909-b259fe21f512 + - a670c79c-f859-4636-a0e0-7c299f8bbd2a Client-Request-Id: - - 59bbd5d7-2d1b-49af-9909-b259fe21f512 + - a670c79c-f859-4636-a0e0-7c299f8bbd2a X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000167"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000054B"}}' Date: - - Wed, 14 Feb 2024 18:05:56 GMT + - Wed, 24 Apr 2024 12:18:51 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:05:56 GMT + recorded_at: Wed, 24 Apr 2024 12:18:51 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPNJGLIRYZUJRFYF4TUWQSBO4CU + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJ5BESARMCF5FEY4CROI2KF7KYZ body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1833,32 +1694,30 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - e2b4c2fb-9218-4874-9403-7cba9168e362 + - 648feb3c-b6f2-46f0-ac67-410346be808e Client-Request-Id: - - e2b4c2fb-9218-4874-9403-7cba9168e362 + - 648feb3c-b6f2-46f0-ac67-410346be808e X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF0000016A"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF0000052A"}}' Date: - - Wed, 14 Feb 2024 18:05:56 GMT + - Wed, 24 Apr 2024 12:18:51 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:05:57 GMT + recorded_at: Wed, 24 Apr 2024 12:18:51 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PPWH6NZDVYAQRBZIMBEX73FB3PN + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5POAWKECOEYSPZHL5SWGOMUXQRTD body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1871,32 +1730,30 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - ced507ba-0f9d-4c44-a19f-f8c5b0e7070c + - f79cb498-1f79-4d8e-a27d-496ab32a29a8 Client-Request-Id: - - ced507ba-0f9d-4c44-a19f-f8c5b0e7070c + - f79cb498-1f79-4d8e-a27d-496ab32a29a8 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000350"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000167"}}' Date: - - Wed, 14 Feb 2024 18:05:57 GMT + - Wed, 24 Apr 2024 12:18:52 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:05:57 GMT + recorded_at: Wed, 24 Apr 2024 12:18:52 GMT - request: method: delete - uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PJENH4ANN5X3ZAKHCJPEVJIH2H7 + uri: https://graph.microsoft.com/v1.0/drives/b!dmVLG22QlE2PSW0AqVB7UOhZ8n7tjkVGkgqLNnuw2ODRDvn3haLiQIhB5UYNdqMy/items/01AZJL5PIPQLMBZNNUGRCKV3SWPD4GGODU body: encoding: US-ASCII string: '' headers: Authorization: - Bearer - Accept: - - application/json - Content-Type: - - application/json User-Agent: - - httpx.rb/1.2.2 + - httpx.rb/1.2.4 + Accept: + - "*/*" Accept-Encoding: - gzip, deflate response: @@ -1909,15 +1766,15 @@ http_interactions: Strict-Transport-Security: - max-age=31536000 Request-Id: - - '014999e3-eed0-4d97-a359-081c49b3bbf5' + - 9b24719a-3d84-481b-8b14-149d53328734 Client-Request-Id: - - '014999e3-eed0-4d97-a359-081c49b3bbf5' + - 9b24719a-3d84-481b-8b14-149d53328734 X-Ms-Ags-Diagnostic: - - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"5","ScaleUnit":"002","RoleInstance":"FR3PEPF00000160"}}' + - '{"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000558"}}' Date: - - Wed, 14 Feb 2024 18:05:56 GMT + - Wed, 24 Apr 2024 12:18:51 GMT body: encoding: UTF-8 string: '' - recorded_at: Wed, 14 Feb 2024 18:05:57 GMT + recorded_at: Wed, 24 Apr 2024 12:18:52 GMT recorded_with: VCR 6.2.0 diff --git a/modules/storages/spec/support/shared_examples_for_adapters/create_folder_command_examples.rb b/modules/storages/spec/support/shared_examples_for_adapters/create_folder_command_examples.rb new file mode 100644 index 000000000000..823dfc1eebfa --- /dev/null +++ b/modules/storages/spec/support/shared_examples_for_adapters/create_folder_command_examples.rb @@ -0,0 +1,85 @@ +# frozen_string_literal: true + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +RSpec.shared_examples_for "create_folder_command: basic command setup" do + it "is registered as commands.create_folder" do + expect(Storages::Peripherals::Registry + .resolve("#{storage.short_provider_type}.commands.create_folder")).to eq(described_class) + end + + it "responds to #call with correct parameters" do + expect(described_class).to respond_to(:call) + + method = described_class.method(:call) + expect(method.parameters).to contain_exactly(%i[keyreq storage], + %i[keyreq auth_strategy], + %i[keyreq folder_name], + %i[keyreq parent_location]) + end +end + +RSpec.shared_examples_for "create_folder_command: successful folder creation" do + it "creates a folder" do + result = described_class.call(storage:, auth_strategy:, folder_name:, parent_location:) + + expect(result).to be_success + + response = result.result + expect(response).to be_a(Storages::StorageFile) + expect(response.name).to eq(folder_name) + expect(response.location).to eq(path) + ensure + delete_created_folder(response) + end +end + +RSpec.shared_examples_for "create_folder_command: parent not found" do + it "returns a failure" do + result = described_class.call(storage:, auth_strategy:, folder_name:, parent_location:) + + expect(result).to be_failure + + error = result.errors + expect(error.code).to eq(:not_found) + expect(error.data.source).to eq(error_source) + end +end + +RSpec.shared_examples_for "create_folder_command: folder already exists" do + it "returns a failure" do + result = described_class.call(storage:, auth_strategy:, folder_name:, parent_location:) + + expect(result).to be_failure + + error = result.errors + expect(error.code).to eq(:conflict) + expect(error.data.source).to eq(error_source) + end +end diff --git a/modules/storages/spec/support/shared_examples_for_adapters/file_path_to_id_map_query_examples.rb b/modules/storages/spec/support/shared_examples_for_adapters/file_path_to_id_map_query_examples.rb new file mode 100644 index 000000000000..394f61d60c63 --- /dev/null +++ b/modules/storages/spec/support/shared_examples_for_adapters/file_path_to_id_map_query_examples.rb @@ -0,0 +1,68 @@ +# frozen_string_literal: true + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +RSpec.shared_examples_for "file_path_to_id_map_query: basic query setup" do + it "is registered as queries.file_path_to_id_map" do + expect(Storages::Peripherals::Registry + .resolve("#{storage.short_provider_type}.queries.file_path_to_id_map")).to eq(described_class) + end + + it "responds to #call with correct parameters" do + expect(described_class).to respond_to(:call) + + method = described_class.method(:call) + expect(method.parameters).to contain_exactly(%i[keyreq storage], + %i[keyreq auth_strategy], + %i[keyreq folder]) + end +end + +RSpec.shared_examples_for "file_path_to_id_map_query: successful query" do + it "returns a map of locations to file ids" do + result = described_class.call(storage:, auth_strategy:, folder:) + + expect(result).to be_success + + response = result.result + expect(response.transform_values(&:id)).to eq(expected_ids) + end +end + +RSpec.shared_examples_for "file_path_to_id_map_query: not found" do + it "returns a failure" do + result = described_class.call(storage:, auth_strategy:, folder:) + + expect(result).to be_failure + + error = result.errors + expect(error.code).to eq(:not_found) + expect(error.data.source).to eq(error_source) + end +end diff --git a/modules/storages/spec/workers/storages/copy_project_folders_job_spec.rb b/modules/storages/spec/workers/storages/copy_project_folders_job_spec.rb index 5132c6491ba2..7ed8bdc9090a 100644 --- a/modules/storages/spec/workers/storages/copy_project_folders_job_spec.rb +++ b/modules/storages/spec/workers/storages/copy_project_folders_job_spec.rb @@ -123,7 +123,7 @@ describe "managed project folders" do before do Storages::Peripherals::Registry - .stub("#{storage.short_provider_type}.queries.folder_files_file_ids_deep_query", ->(storage:, folder:) { + .stub("#{storage.short_provider_type}.queries.file_path_to_id_map", ->(storage:, auth_strategy:, folder:) { ServiceResult.success(result: target_deep_file_ids) }) @@ -177,7 +177,7 @@ }) Storages::Peripherals::Registry - .stub("#{storage.short_provider_type}.queries.folder_files_file_ids_deep_query", ->(storage:, folder:) { + .stub("#{storage.short_provider_type}.queries.file_path_to_id_map", ->(storage:, auth_strategy:, folder:) { ServiceResult.success(result: target_deep_file_ids) }) diff --git a/modules/team_planner/app/views/team_planner/team_planner/_form.html.erb b/modules/team_planner/app/views/team_planner/team_planner/_form.html.erb index 47bcb4e1e545..a009468393ea 100644 --- a/modules/team_planner/app/views/team_planner/team_planner/_form.html.erb +++ b/modules/team_planner/app/views/team_planner/team_planner/_form.html.erb @@ -79,7 +79,7 @@ See COPYRIGHT and LICENSE files for more details.
    <%= styled_label_tag 'query[starred]', - t(:label_favoured) %> + t(:label_favorite) %>
    <%= styled_check_box_tag 'query[starred]', '1', diff --git a/modules/team_planner/config/locales/crowdin/js-ms.yml b/modules/team_planner/config/locales/crowdin/js-ms.yml index 3348c0647093..71cb84a1d92e 100644 --- a/modules/team_planner/config/locales/crowdin/js-ms.yml +++ b/modules/team_planner/config/locales/crowdin/js-ms.yml @@ -20,9 +20,9 @@ ms: cannot_drag_here: 'Tidak boleh memadam pakej kerja disebabkan batasan kebenaran atau pengeditan.' cannot_drag_to_non_working_day: 'Pakej kerja ini tidak boleh mula/habis pada hari tidak bekerja.' quick_add: - empty_state: 'Guna medan carian untuk mencari pakej kerja dan tarik mereka ke perancang untuk menugaskannya ke seseorang dan tetapkan tarikh mula dan habis.' + empty_state: 'Guna ruang carian untuk mencari pakej kerja dan tarik mereka ke perancang untuk menugaskannya ke seseorang dan tetapkan tarikh mula dan habis.' search_placeholder: 'Cari...' modify: errors: permission_denied: 'Anda tidak mempunyai kebenaran yang diperlukan untuk mengubah suai ini.' - fallback: 'Pakej kerja ini tidak boleh disunting.' + fallback: 'Pakej kerja ini tidak boleh diedit.' diff --git a/modules/team_planner/config/locales/crowdin/ms.yml b/modules/team_planner/config/locales/crowdin/ms.yml index 16c2d35467de..a8d068ff59ec 100644 --- a/modules/team_planner/config/locales/crowdin/ms.yml +++ b/modules/team_planner/config/locales/crowdin/ms.yml @@ -2,8 +2,8 @@ ms: plugin_openproject_team_planner: name: "Pasukan Perancangan OpenProject" - description: "Menyediakan paparan pasukan perancangan" - permission_view_team_planner: "Paparkan perancang pasukan" + description: "Menyediakan paparan pasukan perancangan." + permission_view_team_planner: "Lihat perancang pasukan" permission_manage_team_planner: "Urus perancang pasukan" project_module_team_planner_view: "Perancang pasukan" team_planner: @@ -14,4 +14,4 @@ ms: label_assignees: "Penerima tugasan" upsale: title: "Perancang pasukan" - description: "Dapatkan ringkasan lengkap perancangan pasukan anda dengan Perancang Pasukan. Renggangkan, pendekkan, dan tarik dan lepas pakej kerja untuk mengubah tarikh, memindahkan mereka, atau menukar penerima tugasan." + description: "Dapatkan gambaran keseluruhan lengkap perancangan pasukan anda dengan Perancang Pasukan. Renggangkan, pendekkan, dan tarik dan lepas pakej kerja untuk mengubah tarikh, memindahkan mereka, atau menukar penerima tugasan." diff --git a/modules/team_planner/spec/support/pages/team_planner.rb b/modules/team_planner/spec/support/pages/team_planner.rb index 6332f6a38663..a6e1b1e1fa00 100644 --- a/modules/team_planner/spec/support/pages/team_planner.rb +++ b/modules/team_planner/spec/support/pages/team_planner.rb @@ -217,7 +217,7 @@ def set_public end def set_favoured - check "Favoured" + check "Favorite" end def click_on_submit @@ -232,6 +232,7 @@ def add_assignee(name) page.find("#{page.test_selector('tp-add-assignee')} input") select_user_to_add(name) end + expect_and_dismiss_toaster end def search_assignee(name) diff --git a/modules/two_factor_authentication/config/locales/crowdin/ms.yml b/modules/two_factor_authentication/config/locales/crowdin/ms.yml index 7cfa37d712cb..b08615086025 100644 --- a/modules/two_factor_authentication/config/locales/crowdin/ms.yml +++ b/modules/two_factor_authentication/config/locales/crowdin/ms.yml @@ -3,7 +3,7 @@ ms: plugin_openproject_two_factor_authentication: name: "Pengesahan Dua Faktor OpenProject" description: >- - Plugin OpenProject ini mengesahkan pengguna anda menggunakan pengesahan dua faktor melalui kata laluan sekali sahaja melalui standard TOTP (Google Authenticator) atau dihantar ke telefon bimbit pengguna melalui SMS atau panggilan suara. + Plugin OpenProject ini mengesahkan pengguna anda menggunakan pengesahan dua faktor melalui kata laluan sekali sahaja melalui standard TOTP (Google Authenticator) atau ianya dihantar ke telefon bimbit pengguna melalui SMS atau panggilan suara. activerecord: attributes: two_factor_authentication/device: @@ -26,14 +26,14 @@ ms: two_factor_authentication/device/webauthn: "WebAuthn" two_factor_authentication: error_2fa_disabled: "Penghantaran 2FA telah dimatikan." - error_no_device: "Tiada peranti 2FA berdaftar yang dijumpai untuk pengguna ini, walaupun diperlukan untuk keadaan ini." - error_no_matching_strategy: "Tiada strategi 2FA yang tersedia untuk pengguna ini. Sila hubungi pentadbir anda." + error_no_device: "Tiada peranti 2FA berdaftar yang dijumpai untuk pengguna ini, walaupun diperlukan untuk contoh ini." + error_no_matching_strategy: "Tiada strategi 2FA yang sepadan tersedia untuk pengguna ini. Sila hubungi pentadbir anda." error_is_enforced_not_active: "Ralat konfigurasi: Pengesahan Dua Faktor telah dikuatkuasakan, tetapi masih belum ada strategi sedia ada yang aktif." - error_invalid_backup_code: "Kod sokongan 2FA tidak sah" + error_invalid_backup_code: "Kod sandaran 2FA tidak sah" channel_unavailable: "Saluran penghantaran %{channel} tidak tersedia." no_valid_phone_number: "Tiada nombor telefon yang sah wujud." label_pwd_confirmation: "Kata Laluan" - notice_pwd_confirmation: "Anda perlu mengesahkan kata laluan anda apabila membuat perubahan kepada seting ini." + notice_pwd_confirmation: "Anda perlu mengesahkan kata laluan anda apabila membuat perubahan kepada tetapan ini." label_device_type: "Jenis peranti" label_default_device: "Peranti default 2FA " label_device: "Peranti 2FA " @@ -44,20 +44,20 @@ ms: text_otp_delivery_message_sms: "Kata laluan satu kali %{app_title} anda adalah %{token}" text_otp_delivery_message_voice: "Kata laluan satu kali %{app_title} anda adalah: %{pause} %{token}. Saya ulang: %{pause} %{token}" text_enter_2fa: "Sila masukkan kata laluan satu kali daripada peranti anda." - text_2fa_enabled: "Setiap kali log masuk, anda akan diminta untuk memasukkan token OTP daripada peranti 2FA asas anda." - text_2fa_disabled: "Untuk membolehkan pengesahan dua faktor, guna butang di atas untuk daftar peranti 2FA yang baru. Jika anda sudah mempunyai peranti, anda perlu menjadikannya default." + text_2fa_enabled: "Setiap kali log masuk, anda akan diminta untuk memasukkan token OTP daripada peranti 2FA default anda." + text_2fa_disabled: "Untuk membenarkan pengesahan dua faktor, guna butang di atas untuk daftar peranti 2FA yang baharu. Jika anda sudah mempunyai peranti, anda perlu menjadikannya default." login: - enter_backup_code_title: Masukkan kod sokongan - enter_backup_code_text: Sila masukkan kod sokongan yang sah daripada senarai kod anda sekiranya anda tidak lagi dapat mengakses peranti 2FA berdaftar anda. - other_device: "Guna peranti lain atau kod sokongan" + enter_backup_code_title: Masukkan kod sandaran + enter_backup_code_text: Sila masukkan kod sandaran yang sah daripada senarai kod anda sekiranya anda tidak lagi dapat mengakses peranti 2FA berdaftar anda. + other_device: "Guna peranti lain atau kod sandaran" settings: - title: "Seting 2FA" + title: "Tetapan 2FA" current_configuration: "Konfigurasi semasa" label_active_strategies: "Strategi-strategi 2FA yang aktif" label_enforced: "Kuatkuasakan 2FA" label_remember: "Ingat log masuk 2FA" text_configuration: | - Nota: Nilai-nilai ini mewakili konfigurasi seluruh aplikasi terkini. Anda tidak boleh nyahaktifkan tetapan yang dikuatkuasakan oleh konfigurasi tersebut atau mengubah strategi aktif terkini, oleh kerana mereka memerlukan server untuk dimulakan semula. + Perhatian: Nilai-nilai ini mewakili konfigurasi seluruh aplikasi terkini. Anda tidak boleh nyahaktifkan tetapan yang dikuatkuasakan oleh konfigurasi tersebut atau mengubah strategi aktif terkini, oleh kerana mereka memerlukan server untuk dimulakan semula. text_configuration_guide: Untuk maklumat lanjut, sila semak panduan konfigurasi. text_enforced: "Aktifkan tetapan ini untuk memaksa semua pengguna untuk mendaftar peranti 2FA pada log masuk mereka yang seterusnya. Hanya boleh dinyahaktifkan apabila tidak dikuatkuasakan oleh konfigurasi." text_remember: | @@ -66,39 +66,39 @@ ms: error_invalid_settings: "Strategi-strategi 2FA yang anda telah memilih adalah tidak sah." failed_to_save_settings: "Gagal untuk kemas kini tetapan 2FA: %{message}" admin: - self_edit_path: "Untuk menambah atau modifikasi peranti-peranti 2FA anda sendiri, sila kunjungi %{self_edit_link}" + self_edit_path: "Untuk menambah atau modifikasi peranti-peranti 2FA anda sendiri, sila ke %{self_edit_link}" self_edit_link_name: "Pengesahan dua faktor di halaman akaun anda" - self_edit_forbidden: "Anda tidak boleh meyunting peranti 2FA anda sendiri pada laluan ini. Sebaliknya, pergi ke Akaun Saya > Pengesahan dua faktor." - no_devices_for_user: "Tiada peranti 2FA yang telah didaftarkan kepada pengguna ini." + self_edit_forbidden: "Anda tidak boleh edit peranti 2FA anda sendiri pada laluan ini. Sebaliknya, pergi ke Akaun Saya > Pengesahan dua faktor." + no_devices_for_user: "Tiada peranti 2FA yang telah didaftarkan ke pengguna ini." all_devices_deleted: "Semua peranti 2FA pengguna ini telah dipadamkan." delete_all_are_you_sure: "Adakah anda pasti anda ingin membuang semua peranti 2FA untuk pengguna ini?" - button_delete_all_devices: "Buang peranti 2FA berdaftar" + button_delete_all_devices: "Padam peranti 2FA berdaftar" button_register_mobile_phone_for_user: "Daftar telefon bimbit" - text_2fa_enabled: "Setiap kali log masuk, pengguna ini akan diminta untuk memasukkan token OTP daripada peranti 2FA asas mereka." + text_2fa_enabled: "Setiap kali log masuk, pengguna ini akan diminta untuk memasukkan token OTP daripada peranti 2FA default mereka." text_2fa_disabled: "Pengguna ini tidak menyediakan peranti 2FA melalui 'Laman akaun saya'" only_sms_allowed: "Hanya penghantaran SMS boleh disediakan untuk pengguna-pengguna lain." upsale: title: "Pengesahan dua faktor" description: "Ketatkan keselamatan contoh OpenProject anda dengan menawarkan (atau kuatkuasakan) pengesahan dua faktor ke semua ahli-ahli projek." backup_codes: - none_found: Tiada kod sokongan sedia ada untuk akaun ini. - singular: Kod sokongan - plural: Kod sokongan + none_found: Tiada kod sandaran sedia ada untuk akaun ini. + singular: Kod sandaran + plural: Kod sandaran your_codes: untuk %{login} akaun %{app_name} anda overview_description: | Jika anda tidak boleh mengakses peranti-peranti dua faktor anda, anda boleh menggunakan kod sokongan untuk mendapatkan akses semula ke akaun anda. Gunakan butang berikutnya untuk menjana set kod sokongan baharu. generate: - title: Hasilkan kod sokongan + title: Janakan kod sandaran keep_safe_as_password: "Penting! Perlakukan kod-kod ini sebagaimana kata laluan." keep_safe_warning: "Sama ada menyimpannya dalam pengendalian kata laluan anda, atau mencetak halaman ini dan menyimpannya di tempat yang selamat." regenerate_warning: "Amaran: Jika anda telah mencipta kod sandaran sebelum ini, kod-kod tersebut akan dibatalkan dan tidak akan berfungsi lagi." devices: add_new: "Tambah peranti 2FA baharu" register: "Daftar peranti" - confirm_default: "Sahkan perubahan peranti asal" + confirm_default: "Sahkan perubahan peranti default" confirm_device: "Sahkan peranti" - confirm_now: "Tidak disahkan, klik sini untuk mengaktifkan" + confirm_now: "Tidak disahkan, klik sini untuk aktifkan" cannot_delete_default: "Tidak boleh buang peranti default" make_default_are_you_sure: "Adakah anda pasti anda ingin membuat peranti 2FA ini peranti default anda?" make_default_failed: "Gagal mengemas kini peranti default 2FA." @@ -110,18 +110,18 @@ ms: button_complete_registration: "Lengkapkan pendaftaran 2FA" text_confirm_to_complete_html: "Sila lengkapkan pendaftaran peranti %{identifier} anda dengan memasukkan kata laluan satu kali dari peranti default anda." text_confirm_to_change_default_html: "Sila sahkan perubahan peranti default ke %{new_identifier} dengan memasukkan kata laluan satu kali dari peranti default semasa anda." - text_identifier: "Anda boleh berikan peranti pengecam tersuai menggunakan medan ini." + text_identifier: "Anda boleh berikan peranti pengecam tersuai menggunakan ruangan ini." failed_to_delete: "Gagal untuk memadam peranti 2FA." is_default_cannot_delete: "Peranti ini telah dicatat sebagai default dan tidak boleh dipadam atas sebab polisi keselamatan yang sedang aktif.\nCatatkan peranti lain sebagai default sebelum memadamkannya." not_existing: "Tiada peranti 2FA yang berdaftar untuk akaun anda." 2fa_from_input: Sila masukkan kod daripada %{device_name} anda untuk sahkan identiti anda. - 2fa_from_webauthn: Sila sediakan peranti WebAuthn %{device_name}. Jika ia berdasarkan USB, sila pastikan memasang dan menyentuhnya. Lepas itu, klik butang log masuk. + 2fa_from_webauthn: Sila sediakan peranti WebAuthn %{device_name}. Jika ia berdasarkan USB, sila pastikan untuk memasang dan menyentuhnya. Selepas itu, klik butang log masuk. webauthn: title: "WebAuthn" - description: Gunakan Pengesahan Web untuk daftarkan peranti FIDO2 (seperti YubiKey) atau enclave yang selamat telefon bimbit anda sebagai faktor kedua. - further_steps: Setelah anda memilih nama, anda boleh klik butang Teruskan. Laman layar anda akan maklumkan kepada anda untuk mengemukakan peranti WebAuthn anda. Setelah berbuat demikian, pendaftaran peranti anda telah selesai. + description: Gunakan Pengesahan Web untuk daftarkan peranti FIDO2 (seperti YubiKey) atau enclave yang selamat dari telefon bimbit anda sebagai faktor kedua. + further_steps: Setelah anda memilih nama, anda boleh klik butang Teruskan. Pelayar anda akan maklumkan kepada anda untuk mengemukakan peranti WebAuthn anda. Setelah berbuat demikian, pendaftaran peranti anda telah selesai. totp: - title: "Gunakan pengesahan pangkalan aplikasi anda" + title: "Gunakan pengesahan berasaskan aplikasi anda" provisioning_uri: "Peruntukan URI" secret_key: "Kunci rahsia" time_based: "Berdasarkan masa" @@ -134,11 +134,11 @@ ms: text_cannot_scan: | Jika anda tidak dapat mengimbas kod, anda boleh memasukkan entri secara manual dengan menggunakan butiran berikut: description: | - Daftarkan pengesah aplikasi untuk digunakan bersama OpenProject menggunakan standard pengesahan kata laluan sekali masa berasaskan masa. + Daftarkan pengesahan aplikasi untuk digunakan bersama OpenProject menggunakan standard pengesahan kata laluan sekali masa berasaskan masa. Contoh biasa ialah Google Authenticator atau Authy. sms: title: "Guna telefon bimbit anda" - redacted_identifier: "Peranti (%{redacted_number})" + redacted_identifier: "Peranti mudah alih (%{redacted_number})" request_2fa_identifier: "%{redacted_identifier}, kami telah menghantarkan kod pengesahan melalui %{delivery_channel}" description: | Daftar nombor telefon bimbit anda untuk penghantaran kata laluan satu kali OpenProject. @@ -158,19 +158,19 @@ ms: required_to_add_device: "Polisi keselamatan yang aktif memerlukan anda untuk membenarkan pengesahan dua faktor. Sila gunakan borang berikut untuk daftarkan peranti." remember: active_session_notice: > - Akaun ada mempunyai simpanan kuki aktif yang sah sehingga %{expires_on}. Kuki ini membenarkan anda untuk log masuk tanpa faktor kedua ke akaun anda sehingga masa itu. + Akaun anda mempunyai simpanan kuki aktif yang sah sehingga %{expires_on}. Kuki ini membenarkan anda untuk log masuk tanpa faktor kedua ke akaun anda sehingga masa itu. other_active_session_notice: Akaun anda mempunyai simpanan kuki yang aktif pada sesi lain. label: "Ingat" clear_cookie: "Klik sini untuk buang semua sesi 2FA yang diingati." cookie_removed: "Semua sesi 2FA yang disimpan telah dipadamkan." - dont_ask_again: "Ciptakan kuki untuk menyimpan pengesahan 2FA pada pelanggan selama %{days} hari." + dont_ask_again: "Ciptakan kuki untuk menyimpan pengesahan 2FA pada klien ini selama %{days} hari." field_phone: "Telefon bimbit" field_otp: "Kata laluan satu kali" notice_account_otp_invalid: " Kata laluan satu kali tidak sah." notice_account_otp_expired: "Kata laluan satu kali yang anda masukkan telah tamat tempoh." - notice_developer_strategy_otp: "Strategi pembangunan telah generasikan kata laluan satu kali yang berikut: %{token} (Saluran: %{channel})" + notice_developer_strategy_otp: "Strategi pembangunan telah janakan kata laluan satu kali yang berikut: %{token} (Saluran: %{channel})" notice_account_otp_send_failed: "Kata laluan satu kali anda tidak dapat dihantar." - notice_account_has_no_phone: "Tiada nombor telefon bimbit yang berkaitan dengan akaun anda." + notice_account_has_no_phone: "Tiada nombor telefon bimbit yang berpaut dengan akaun anda." label_expiration_hint: "%{date} atau pada log keluar" label_actions: "Tindakan" label_confirmed: "Disahkan" diff --git a/modules/two_factor_authentication/openproject-two_factor_authentication.gemspec b/modules/two_factor_authentication/openproject-two_factor_authentication.gemspec index ed69c02057e4..79fdb2d64bde 100644 --- a/modules/two_factor_authentication/openproject-two_factor_authentication.gemspec +++ b/modules/two_factor_authentication/openproject-two_factor_authentication.gemspec @@ -14,6 +14,6 @@ Gem::Specification.new do |s| s.add_dependency "rotp", "~> 6.1" s.add_dependency "webauthn", "~> 3.0" - s.add_dependency "aws-sdk-sns", "~> 1.72.0" + s.add_dependency "aws-sdk-sns", "~> 1.74.0" s.metadata["rubygems_mfa_required"] = "true" end diff --git a/modules/webhooks/config/locales/crowdin/ms.yml b/modules/webhooks/config/locales/crowdin/ms.yml index 4dbebea68dec..4c542fa4a2a0 100644 --- a/modules/webhooks/config/locales/crowdin/ms.yml +++ b/modules/webhooks/config/locales/crowdin/ms.yml @@ -1,21 +1,21 @@ ms: plugin_openproject_webhooks: name: "Webhook OpenProject" - description: "Menyediakan API plug-in untuk menyokong webhook OpenProject membolehkan integrasi pihak ketiga yang lebih baik." + description: "Menyediakan API plug-in untuk menyokong webhook OpenProject untuk integrasi pihak ketiga yang lebih baik." activerecord: attributes: webhooks/webhook: url: 'Muatan URL' secret: 'Rahsia tandatangan' - events: 'Kejadian-kejadian' - projects: 'Projek yang diaktifkan' + events: 'Peristiwa' + projects: 'Projek yang didayakan' webhooks/log: - event_name: 'Nama kejadian' + event_name: 'Nama peristiwa' url: 'Muatan URL' response_code: 'Kod maklum balas' response_body: 'Maklum balas' models: - webhooks/outgoing_webhook: "Webhook keluaran" + webhooks/outgoing_webhook: "Webhook yang keluar" webhooks: singular: Webhook plural: Webhook @@ -23,39 +23,39 @@ ms: time_entry: name: "Entri masa" outgoing: - no_results_table: Tiada webhook yang ditetapkan lagi. + no_results_table: Tiada webhook yang ditakrifkan lagi. label_add_new: Tambah webhook baru label_edit: Edit webhook - label_event_resources: Sumber-sumber kejadian + label_event_resources: Sumber-sumber peristiwa events: created: "Dicipta" updated: "Telah dikemas kini" explanation: text: > - Apabila berlakunya peristiwa seperti terciptanya pakej kerja, atau projek yang telah dikemas kini, OpenProject akan menghantar permintaan POST kepada titik akhir web yang dikonfigurasikan. Selalunya peristiwa tersebut akan dihantar selepas %{link} telah lepas. - link: Tempoh penerimaan yang dikonfigurasikan + Apabila berlakunya peristiwa seperti ciptaan pakej kerja, atau projek yang telah dikemas kini, OpenProject akan menghantar permintaan POST kepada titik akhir web yang telah dikonfigurasi. Selalunya peristiwa tersebut akan dihantar selepas %{link} telah lepas. + link: tempoh pengumpulan yang dikonfigurasi status: - enabled: 'Webhook telah diaktifkan' - disabled: 'Wekbook telah dinyahaktifkan' - enabled_text: 'Webhook akan mengeluarkan muatan data untuk acara yang ditakrifkan dibawah.' + enabled: 'Webhook telah didayakan' + disabled: 'Wekbook telah dinyahdayakan' + enabled_text: 'Webhook akan mengeluarkan muatan data untuk peristiwa yang ditakrifkan dibawah.' disabled_text: 'Klik butang edit untuk mengaktifkan webhook.' deliveries: - no_results_table: Tiada penghantaran yang telah dibuat untuk webhook ini dalam beberapa hari yang lepas. + no_results_table: Tiada penghantaran yang telah dibuat pada webhook ini dalam beberapa hari yang lepas. title: 'Penghantaran terkini' time: 'Masa penghantaran' form: introduction: > Hantar permintaan POST ke muatan URL di bawah untuk sebarang peristiwa dalam projek yang telah anda langgan. Muatan akan bersepadan dengan objek dari perwakilan APIv3 yang sedang diubah suai. - apiv3_doc_url: Lawati dokumentasi API untuk maklumat lanjut + apiv3_doc_url: Kunjungi dokumentasi API untuk maklumat lanjut description: - placeholder: 'Deskripsi pilihan untuk webhook' + placeholder: 'Deskripsi pilihan untuk webhook.' enabled: description: > Webhook akan petik peristiwa tertentu apabila ditandakan. Nyahtandakan untuk nyahaktifkan webhook. events: - title: 'Kejadian yang dibenarkan' + title: 'Peristiwa yang dibenarkan' project_ids: - title: 'Projek yang diaktifkan' + title: 'Projek yang dibenarkan' description: 'Pilih projek untuk webhook ini dilaksanakan.' all: 'Semua projek' selected: 'Projek yang dipilih sahaja' @@ -63,4 +63,4 @@ ms: title: 'Projek yang dipilih' secret: description: > - Jika telah ditetapkan, nilai rahsia ini digunakan oleh OpenProject untuk menandatangani muatan webhook. + Jika ditetapkan, nilai rahsia ini digunakan oleh OpenProject untuk menandatangani muatan webhook. diff --git a/modules/xls_export/config/locales/crowdin/ms.yml b/modules/xls_export/config/locales/crowdin/ms.yml index aa8f3de4a5d9..6a1e4f755cda 100644 --- a/modules/xls_export/config/locales/crowdin/ms.yml +++ b/modules/xls_export/config/locales/crowdin/ms.yml @@ -2,15 +2,15 @@ ms: plugin_openproject_xls_export: name: "Eksport XLS OpenProject" description: "Eksport senarai isu sebagai hamparan Excel (.xls)." - export_to_excel: "Eksport ke XLS" - print_with_description: "Cetak previu dengan penerangan" + export_to_excel: "Eksport XLS" + print_with_description: "Cetak previu serta deskripsi" sentence_separator_or: "atau" different_formats: Format berbeza export: format: xls: "XLS" - xls_with_descriptions: "XLS dengan penerangan" - xls_with_relations: "XLS dengan hubungan" + xls_with_descriptions: "XLS serta deskripsi" + xls_with_relations: "XLS serta hubungan" xls_export: child_of: anak kepada parent_of: induk kepada diff --git a/nix/gemset.nix b/nix/gemset.nix index 083761afe57b..701134df1c6d 100644 --- a/nix/gemset.nix +++ b/nix/gemset.nix @@ -3314,10 +3314,10 @@ platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "0flmg6f444liaxjgdwdrwcfwyyhc54a7wp26kqih2cklwll5gp40"; + sha256 = "03f49f54837e407d43ee93ec733a8a94dc1bcf8185647ac61606e63aaedaa0db"; type = "gem"; }; - version = "1.0.7"; + version = "1.0.8"; }; stackprof = { groups = ["development" "test"]; diff --git a/script/github_pr_errors b/script/github_pr_errors index a5e10629c9db..3bd6042f2009 100755 --- a/script/github_pr_errors +++ b/script/github_pr_errors @@ -283,7 +283,7 @@ end # rubocop:disable Layout/LineLength # Looks like this in the job log: -# Process 28: TEST_ENV_NUMBER=28 RUBYOPT=-I/usr/local/bundle/bundler/gems/turbo_tests-3148ae6c3482/lib -r/usr/local/bundle/gems/bundler-2.5.5/lib/bundler/setup -W0 RSPEC_SILENCE_FILTER_ANNOUNCEMENTS=1 /usr/local/bundle/gems/bundler-2.5.5/exe/bundle exec rspec --seed 52674 --format TurboTests::JsonRowsFormatter --out tmp/test-pipes/subprocess-28 --format ParallelTests::RSpec::RuntimeLogger --out spec/support/turbo_runtime_features.log spec/features/api_docs/index_spec.rb spec/features/custom_fields/reorder_options_spec.rb spec/features/projects/projects_portfolio_spec.rb spec/features/projects/template_spec.rb spec/features/versions/edit_spec.rb spec/features/work_packages/details/markdown/description_editor_spec.rb spec/features/work_packages/table/hierarchy/hierarchy_parent_below_spec.rb spec/features/work_packages/table/inline_create/inline_create_refresh_spec.rb spec/features/work_packages/table/invalid_query_spec.rb spec/features/work_packages/tabs/activity_revisions_spec.rb +# Process 28: TEST_ENV_NUMBER=28 RUBYOPT=-I/usr/local/bundle/bundler/gems/turbo_tests-3148ae6c3482/lib -r/usr/local/bundle/gems/bundler-2.5.10/lib/bundler/setup -W0 RSPEC_SILENCE_FILTER_ANNOUNCEMENTS=1 /usr/local/bundle/gems/bundler-2.5.10/exe/bundle exec rspec --seed 52674 --format TurboTests::JsonRowsFormatter --out tmp/test-pipes/subprocess-28 --format ParallelTests::RSpec::RuntimeLogger --out spec/support/turbo_runtime_features.log spec/features/api_docs/index_spec.rb spec/features/custom_fields/reorder_options_spec.rb spec/features/projects/projects_portfolio_spec.rb spec/features/projects/template_spec.rb spec/features/versions/edit_spec.rb spec/features/work_packages/details/markdown/description_editor_spec.rb spec/features/work_packages/table/hierarchy/hierarchy_parent_below_spec.rb spec/features/work_packages/table/inline_create/inline_create_refresh_spec.rb spec/features/work_packages/table/invalid_query_spec.rb spec/features/work_packages/tabs/activity_revisions_spec.rb # rubocop:enable Layout/LineLength class TestsGroup attr_accessor :test_env_number, :seed, :files diff --git a/spec/contracts/queries/projects/project_queries/update_contract_spec.rb b/spec/contracts/queries/projects/project_queries/update_contract_spec.rb new file mode 100644 index 000000000000..384e76874c97 --- /dev/null +++ b/spec/contracts/queries/projects/project_queries/update_contract_spec.rb @@ -0,0 +1,48 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +require "spec_helper" +require_relative "shared_contract_examples" + +RSpec.describe Queries::Projects::ProjectQueries::UpdateContract do + it_behaves_like "project queries contract" do + let(:query) do + Queries::Projects::ProjectQuery.new(name: query_name).tap do |query| + query.extend(OpenProject::ChangedBySystem) + + query.change_by_system do + query.user = query_user + end + + query.select(*query_selects) + end + end + + let(:contract) { described_class.new(query, current_user) } + end +end diff --git a/spec/controllers/projects/queries_controller_spec.rb b/spec/controllers/projects/queries_controller_spec.rb new file mode 100644 index 000000000000..ad5214713acb --- /dev/null +++ b/spec/controllers/projects/queries_controller_spec.rb @@ -0,0 +1,246 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +require "rails_helper" + +RSpec.describe Projects::QueriesController do + shared_let(:user) { create(:user) } + + describe "#new" do + it "requires login" do + get "new" + + expect(response).not_to be_successful + end + + context "when logged in" do + let(:query) { build_stubbed(:project_query) } + let(:query_id) { "42" } + let(:query_params) { double } + + before do + allow(controller).to receive(:permitted_query_params).and_return(query_params) + allow(Queries::Projects::Factory).to receive(:find) + .with(query_id, user:, params: query_params, duplicate: true).and_return(query) + + login_as user + end + + it "renders projects/index" do + get "new", params: { query_id: 42 } + + expect(response).to render_template("projects/index") + end + + it "passes variables to template" do + allow(controller).to receive(:render).and_call_original + + get "new", params: { query_id: 42 } + + expect(controller).to have_received(:render).with(include(locals: { query:, state: :edit })) + end + end + end + + describe "#create" do + let(:service_class) { Queries::Projects::ProjectQueries::CreateService } + + it "requires login" do + post "create" + + expect(response).not_to be_successful + end + + context "when logged in" do + let(:query) { build_stubbed(:project_query) } + let(:query_params) { double } + let(:service_instance) { instance_double(service_class) } + let(:service_result) { instance_double(ServiceResult, success?: success?, result: query) } + let(:success?) { true } + + before do + allow(controller).to receive(:permitted_query_params).and_return(query_params) + allow(Queries::Projects::Factory).to receive(:find) + .with(nil, user:, params: query_params, duplicate: true).and_return(query) + allow(service_class).to receive(:new).with(from: query, user:).and_return(service_instance) + allow(service_instance).to receive(:call).with(query_params).and_return(service_result) + + login_as user + end + + it "calls update service on query" do + post "create" + + expect(service_instance).to have_received(:call).with(query_params) + end + + context "when service call succeeds" do + it "redirects to projects" do + allow(I18n).to receive(:t).with("lists.create.success").and_return("foo") + + post "create" + + expect(flash[:notice]).to eq("foo") + expect(response).to redirect_to(projects_path(query_id: query.id)) + end + end + + context "when service call fails" do + let(:success?) { false } + let(:errors) { instance_double(ActiveModel::Errors, full_messages: ["something", "went", "wrong"]) } + + before do + allow(service_result).to receive(:errors).and_return(errors) + end + + it "renders projects/index" do + allow(I18n).to receive(:t).with("lists.create.failure", errors: "something\nwent\nwrong").and_return("bar") + + post "create" + + expect(flash[:error]).to eq("bar") + expect(response).to render_template("projects/index") + end + + it "passes variables to template" do + allow(controller).to receive(:render).and_call_original + + post "create" + + expect(controller).to have_received(:render).with(include(locals: { query:, state: :edit })) + end + end + end + end + + describe "#update" do + let(:service_class) { Queries::Projects::ProjectQueries::UpdateService } + + it "requires login" do + put "update", params: { id: 42 } + + expect(response).not_to be_successful + end + + context "when logged in" do + let(:query) { build_stubbed(:project_query) } + let(:query_id) { "42" } + let(:query_params) { double } + let(:service_instance) { instance_double(service_class) } + let(:service_result) { instance_double(ServiceResult, success?: success?, result: query) } + let(:success?) { true } + + before do + allow(controller).to receive(:permitted_query_params).and_return(query_params) + allow(Queries::Projects::ProjectQuery).to receive(:find).with(query_id).and_return(query) + allow(service_class).to receive(:new).with(model: query, user:).and_return(service_instance) + allow(service_instance).to receive(:call).with(query_params).and_return(service_result) + + login_as user + end + + it "calls update service on query" do + put "update", params: { id: 42 } + + expect(service_instance).to have_received(:call).with(query_params) + end + + context "when service call succeeds" do + it "redirects to projects" do + allow(I18n).to receive(:t).with("lists.update.success").and_return("foo") + + put "update", params: { id: 42 } + + expect(flash[:notice]).to eq("foo") + expect(response).to redirect_to(projects_path(query_id: query.id)) + end + end + + context "when service call fails" do + let(:success?) { false } + let(:errors) { instance_double(ActiveModel::Errors, full_messages: ["something", "went", "wrong"]) } + + before do + allow(service_result).to receive(:errors).and_return(errors) + end + + it "renders projects/index" do + allow(I18n).to receive(:t).with("lists.update.failure", errors: "something\nwent\nwrong").and_return("bar") + + put "update", params: { id: 42 } + + expect(flash[:error]).to eq("bar") + expect(response).to render_template("projects/index") + end + + it "passes variables to template" do + allow(controller).to receive(:render).and_call_original + + put "update", params: { id: 42 } + + expect(controller).to have_received(:render).with(include(locals: { query:, state: :edit })) + end + end + end + end + + describe "#destroy" do + let(:service_class) { Queries::Projects::ProjectQueries::DeleteService } + + it "requires login" do + delete "destroy", params: { id: 42 } + + expect(response).not_to be_successful + end + + context "when logged in" do + let(:query) { build_stubbed(:project_query) } + let(:query_id) { "42" } + let(:service_instance) { instance_spy(service_class) } + + before do + allow(Queries::Projects::ProjectQuery).to receive(:find).with(query_id).and_return(query) + allow(service_class).to receive(:new).with(model: query, user:).and_return(service_instance) + + login_as user + end + + it "calls delete service on query" do + delete "destroy", params: { id: 42 } + + expect(service_instance).to have_received(:call) + end + + it "redirects to projects" do + delete "destroy", params: { id: 42 } + + expect(response).to redirect_to(:projects) + end + end + end +end diff --git a/spec/factories/custom_field_factory.rb b/spec/factories/custom_field_factory.rb index 1c4616222b0e..61c6c45deed7 100644 --- a/spec/factories/custom_field_factory.rb +++ b/spec/factories/custom_field_factory.rb @@ -157,6 +157,10 @@ multi_value { true } end + trait :link do + field_format { "link" } + end + factory :project_custom_field, class: "ProjectCustomField" do project_custom_field_section @@ -185,6 +189,7 @@ factory :list_project_custom_field, traits: [:list] factory :version_project_custom_field, traits: [:version] factory :user_project_custom_field, traits: [:user] + factory :link_project_custom_field, traits: [:link] end factory :user_custom_field, class: "UserCustomField" @@ -214,6 +219,7 @@ factory :list_wp_custom_field, traits: [:list] factory :version_wp_custom_field, traits: [:version] factory :user_wp_custom_field, traits: [:user] + factory :link_wp_custom_field, traits: [:link] end factory :issue_custom_field, class: "WorkPackageCustomField" do diff --git a/spec/factories/user_factory.rb b/spec/factories/user_factory.rb index 4010ffbeb462..ece978101bc5 100644 --- a/spec/factories/user_factory.rb +++ b/spec/factories/user_factory.rb @@ -62,7 +62,11 @@ callback(:after_stub) do |user, evaluator| if evaluator.preferences.present? - user.preference = build_stubbed(:user_preference, user:, settings: evaluator.preferences) + # The assign_attributes workaround is required, because assigning user.preference will trigger + # creating a new database record, which raises an error in the build_stubbed context + user.pref.assign_attributes( + build_stubbed(:user_preference, user:, settings: evaluator.preferences).attributes + ) end end diff --git a/spec/features/admin/custom_fields/link_custom_field_spec.rb b/spec/features/admin/custom_fields/link_custom_field_spec.rb new file mode 100644 index 000000000000..c5b062959468 --- /dev/null +++ b/spec/features/admin/custom_fields/link_custom_field_spec.rb @@ -0,0 +1,70 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +require "spec_helper" + +RSpec.describe "Link custom fields edit", :js, :with_cuprite do + shared_let(:admin) { create(:admin) } + let(:cf_page) { Pages::CustomFields.new } + + before do + login_as(admin) + visit custom_fields_path + end + + it "can create and edit user custom fields" do + # Create CF + click_link "Create a new custom field" + + wait_for_reload + + fill_in "custom_field_name", with: "My Link CF" + select "Link (URL)", from: "custom_field_field_format" + + expect(page).to have_no_field("custom_field_custom_options_attributes_0_value") + + click_on "Save" + + # Expect field to be created + cf = CustomField.last + expect(cf.name).to eq("My Link CF") + expect(cf.field_format).to eq 'link' + + # Edit again + find("a", text: "My Link CF").click + + expect(page).to have_no_field("custom_field_custom_options_attributes_0_value") + fill_in "custom_field_name", with: "My Link CF (edited)" + + click_on "Save" + + # Expect field to be saved + cf = CustomField.last + expect(cf.name).to eq("My Link CF (edited)") + end +end diff --git a/spec/features/menu_items/admin_menu_item_spec.rb b/spec/features/menu_items/admin_menu_item_spec.rb index df9495763285..38c3346a11bb 100644 --- a/spec/features/menu_items/admin_menu_item_spec.rb +++ b/spec/features/menu_items/admin_menu_item_spec.rb @@ -45,8 +45,8 @@ context "without having any menu items hidden in configuration" do it "must display all menu items" do expect(page).to have_test_selector("menu-blocks--container") - expect(page).to have_test_selector("menu-block", count: 22) - expect(page).to have_test_selector("op-menu--item-action", count: 23) # All plus 'overview' + expect(page).to have_test_selector("menu-block", count: 21) + expect(page).to have_test_selector("op-menu--item-action", count: 22) # All plus 'overview' end end @@ -56,10 +56,10 @@ } do it "must not display the hidden menu items and blocks" do expect(page).to have_test_selector("menu-blocks--container") - expect(page).to have_test_selector("menu-block", count: 21) + expect(page).to have_test_selector("menu-block", count: 20) expect(page).not_to have_test_selector("menu-block", text: I18n.t(:label_color_plural)) - expect(page).to have_test_selector("op-menu--item-action", count: 22) # All plus 'overview' + expect(page).to have_test_selector("op-menu--item-action", count: 21) # All plus 'overview' expect(page).not_to have_test_selector("op-menu--item-action", text: I18n.t(:label_color_plural)) end end diff --git a/spec/features/notifications/reminder_mail_spec.rb b/spec/features/notifications/reminder_mail_spec.rb index 06f6364a7b82..d2e8dbde9f04 100644 --- a/spec/features/notifications/reminder_mail_spec.rb +++ b/spec/features/notifications/reminder_mail_spec.rb @@ -1,7 +1,7 @@ require "spec_helper" require_relative "../users/notifications/shared_examples" -RSpec.describe "Reminder email sending", :js, :with_cuprite do +RSpec.describe "Reminder email sending", js: false do let!(:project) { create(:project, members: { current_user => role }) } let!(:mute_project) { create(:project, members: { current_user => role }) } let(:role) { create(:project_role, permissions: %i[view_work_packages]) } @@ -9,17 +9,26 @@ let(:work_package) { create(:work_package, project:) } let(:watched_work_package) { create(:work_package, project:, watcher_users: [current_user]) } let(:involved_work_package) { create(:work_package, project:, assigned_to: current_user) } - # ApplicationJob#job_scheduled_at is used for scheduling the reminder mails - # needs to be within a time frame eligible for sending out mails for the chose - # time zone. For the time zone Hawaii (UTC-10) this means between 8:00:00 and 8:14:59 UTC. - # The job is scheduled to run every 15 min so the scheduled_at will in production always move between the quarters of an hour. - # The current time can be way behind that. - let(:current_utc_time) { ActiveSupport::TimeZone["Pacific/Honolulu"].parse("2021-09-30T08:34:10").utc } + # GoodJob::Job#cron_at is used for scheduling the reminder mails. + # It needs to be within a time frame eligible for sending out mails for the chosen + # time zone. For the time zone Hawaii (UTC-10) this means 8:00:00 as the job has a cron tab to be run every 15 min. let(:job_run_at) { ActiveSupport::TimeZone["Pacific/Honolulu"].parse("2021-09-30T08:00:00").utc } - # Fix the time of the specs to ensure a consistent run + let(:scheduled_job) do + Notifications::ScheduleReminderMailsJob.perform_later.tap do |job| + GoodJob::Job + .where(id: job.job_id) + .update_all(cron_at: job_run_at) + end + end + + # The reminder mail is sent out after notifications have been created which might have happened way earlier. + # This spec will be fixed to this time ensure a consistent run and to mimic the time that typically has passed + # between the changes to a work package and the reminder mail being sent out. + let(:work_package_update_time) { ActiveSupport::TimeZone["Pacific/Honolulu"].parse("2021-09-30T01:50:34").utc } + around do |example| - Timecop.travel(current_utc_time) do + Timecop.travel(work_package_update_time) do example.run end end @@ -31,7 +40,7 @@ time_zone: "Pacific/Honolulu", daily_reminders: { enabled: true, - times: [hitting_reminder_slot_for("Pacific/Honolulu", current_utc_time)] + times: [hitting_reminder_slot_for("Pacific/Honolulu", job_run_at)] }, immediate_reminders: { mentioned: false @@ -59,8 +68,7 @@ ActiveJob::Base.disable_test_adapter - scheduled_job = Notifications::ScheduleReminderMailsJob.perform_later - GoodJob::Job.where(id: scheduled_job.job_id).update_all(scheduled_at: job_run_at) + scheduled_job end it "sends a digest mail based on the configuration", with_settings: { journal_aggregation_time_minutes: 0 } do diff --git a/spec/features/projects/favorite_spec.rb b/spec/features/projects/favorite_spec.rb new file mode 100644 index 000000000000..30e5f606b39a --- /dev/null +++ b/spec/features/projects/favorite_spec.rb @@ -0,0 +1,143 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +require "spec_helper" +require_relative "../../../modules/my_page/spec/support/pages/my/page" + +RSpec.describe "Favorite projects", :js do + shared_let(:project) { create(:project, name: "My favorite!", enabled_module_names: []) } + shared_let(:other_project) { create(:project, name: "Other project", enabled_module_names: []) } + shared_let(:user) do + create(:user, + member_with_permissions: { + project => %i(edit_project select_project_modules view_work_packages), + other_project => %i(edit_project select_project_modules view_work_packages) + }) + end + let(:projects_page) { Pages::Projects::Index.new } + let(:top_menu) { Components::Projects::TopMenu.new } + let(:my_page) do + Pages::My::Page.new + end + + before do + login_as user + end + + it "allows favoriting and unfavoriting projects" do + visit project_path(project) + expect(page).to have_selector 'a', accessible_name: "Add to favorites" + + click_link_or_button(accessible_name: "Add to favorites") + + expect(page).to have_selector 'a', accessible_name: "Remove from favorite" + + project.reload + expect(project).to be_favored_by(user) + + projects_page.visit! + projects_page.open_filters + projects_page.filter_by_favored "yes" + + expect(page).to have_text 'My favorite!' + + projects_page.visit! + projects_page.open_filters + projects_page.filter_by_favored "no" + + expect(page).to have_no_text 'My favorite!' + + visit home_path + + expect(page).to have_text 'Favorite projects' + expect(page).to have_test_selector 'favorite-project', text: 'My favorite!' + + retry_block do + top_menu.toggle unless top_menu.open? + top_menu.expect_open + + # projects are displayed initially + top_menu.expect_result project.name + top_menu.expect_result other_project.name + end + + top_menu.switch_mode "Favorites" + + top_menu.expect_result project.name + top_menu.expect_no_result other_project.name + end + + context "when projct is favored" do + before do + project.add_favoring_user(user) + other_project.add_favoring_user(user) + other_project.update! active: false + end + + it "does not show archived projects" do + visit home_path + + expect(page).to have_text 'Favorite projects' + expect(page).to have_test_selector 'favorite-project', text: 'My favorite!' + expect(page).to have_no_text 'Other project' + + my_page.visit! + my_page.add_widget(1, 1, :within, "Favorite projects") + expect(page).to have_text 'My favorite!' + end + end + + context "favoriting only one subproject" do + before do + project.update! parent: other_project + project.add_favoring_user(user) + end + + it "still shows up in top menu (Regression #54729)" do + visit home_path + + expect(page).to have_text 'Favorite projects' + expect(page).to have_test_selector 'favorite-project', text: 'My favorite!' + + retry_block do + top_menu.toggle unless top_menu.open? + top_menu.expect_open + + # projects are displayed initially + top_menu.expect_result project.name + top_menu.expect_result other_project.name + end + + top_menu.switch_mode "Favorites" + + top_menu.expect_result project.name + # Parent is also shown + top_menu.expect_result other_project.name + end + end +end diff --git a/spec/features/projects/persisted_lists_spec.rb b/spec/features/projects/persisted_lists_spec.rb index ad99676c78dd..8acc53b360a7 100644 --- a/spec/features/projects/persisted_lists_spec.rb +++ b/spec/features/projects/persisted_lists_spec.rb @@ -219,8 +219,18 @@ # The default filter is active projects_page.expect_title("Active projects") - # Since the page is unchanged, no save as button is shown - projects_page.expect_no_save_as_notification + # Since the query is static, no save button is shown + projects_page.expect_no_notification("Save") + projects_page.expect_no_menu_item("Save", visible: false) + # Since the query is unchanged, no save as button is shown + projects_page.expect_no_notification("Save as") + # But save as menu item is always present + projects_page.expect_menu_item("Save as", visible: false) + + # Default filters are applied + projects_page.expect_projects_listed(project, public_project, development_project) + projects_page.expect_columns("Name", "Status") + projects_page.expect_no_columns("Public") # Adding some filters projects_page.open_filters @@ -228,7 +238,12 @@ # By applying another filter, the title is changed as it does not longer match the default filter projects_page.expect_title("Projects") - projects_page.expect_save_as_notification + # Since the query is static, no save button is shown + projects_page.expect_no_notification("Save") + projects_page.expect_no_menu_item("Save", visible: false) + # Since the query changed, save as button is shown + projects_page.expect_notification("Save as") + projects_page.expect_menu_item("Save as", visible: false) # The filters are applied projects_page.expect_projects_listed(project, development_project) @@ -236,11 +251,11 @@ projects_page.set_columns("Name") projects_page.expect_columns("Name") - projects_page.expect_no_columns("Status") - - # Saving the query will lead to it being displayed in the sidebar - projects_page.save_query("My saved query") + projects_page.expect_no_columns("Status", "Public") + # Saving the query + projects_page.save_query_as("My saved query") + # It will be displayed in the sidebar projects_page.expect_sidebar_filter("My saved query", selected: false) # Opening the default filter again to reset the values @@ -257,21 +272,60 @@ projects_page.expect_projects_listed(project, development_project) projects_page.expect_projects_not_listed(public_project) projects_page.expect_columns("Name") + projects_page.expect_no_columns("Status", "Public") + # Since the query was not changed, no save or save as button is shown + projects_page.expect_no_notification("Save") + projects_page.expect_no_notification("Save as") + projects_page.expect_no_menu_item("Save", visible: false) + # But save as menu item is always present + projects_page.expect_menu_item("Save as", visible: false) + + # Modifying to save again + projects_page.set_columns("Name", "Public") + # Since the query was changed, there is a save button and both save and save as in the menu + projects_page.expect_notification("Save") + projects_page.expect_no_notification("Save as") + projects_page.expect_menu_item("Save", visible: false) + projects_page.expect_menu_item("Save as", visible: false) + # Save inplace + projects_page.save_query + + # Duplicating (without changes) + projects_page.save_query_as("My duplicated query") + + # Modifying to save as again + projects_page.set_columns("Name", "Status", "Public") + projects_page.save_query_as("My new saved query") + projects_page.expect_sidebar_filter("My new saved query", selected: false) + + # Checked query saved inplace + projects_page.set_sidebar_filter("My saved query") + projects_page.expect_columns("Name", "Public") + projects_page.expect_no_columns("Status") + + # Checked duplicated query + projects_page.set_sidebar_filter("My duplicated query") + projects_page.expect_columns("Name", "Public") projects_page.expect_no_columns("Status") + # Checked second saved query + projects_page.set_sidebar_filter("My new saved query") + projects_page.expect_columns("Name", "Status", "Public") + # The query can be deleted projects_page.delete_query # It will then also be removed from the sidebar - projects_page.expect_no_sidebar_filter("My saved query") + projects_page.expect_no_sidebar_filter("My new saved query") # And the default filter will be active again projects_page.expect_title("Active projects") projects_page.expect_projects_listed(project, public_project, development_project) projects_page.expect_columns("Name", "Status") + projects_page.expect_no_columns("Public") end end - describe "persisted filters" do + describe "persisted query access" do current_user { user } let(:another_project) do @@ -401,4 +455,36 @@ .to have_text("You are not authorized to access this page.") end end + + describe "persisted query access on invalid query" do + current_user { user } + + let!(:project_member) { create(:member, principal: user, project:, roles: [developer]) } + + let!(:invalid_list) do + # Faking a query that has references stored to a custom field that no longer exists (e.g. has been deleted) + create(:project_query, name: "My projects list", user:, select: %w[name created_at cf_1]) do |query| + query.where("member_of", "=", OpenProject::Database::DB_VALUE_TRUE) + query.where("cf_1", "=", 1) + query.where("created_at", "=", "2020-01-01") + + query.save(validate: false) + end + end + + it "still shows the query falling back to a valid subset" do + visit projects_path(query_id: invalid_list.id) + + # Keeps only the 'Name' column as the cf does not exist and Created on is admin only. + projects_page.expect_columns "Name" + projects_page.expect_no_columns "Created on" + + # Keeps only the 'I am member' filter as the cf does not exist and created_at is admin only. + projects_page.expect_filter_count 1 + projects_page.expect_filter_set("member_of") + + # The query is still valid, therefore it is executed, and returns the project the user is member in. + projects_page.expect_projects_listed(project) + end + end end diff --git a/spec/features/projects/project_custom_fields/overview_page/dialog/inputs_spec.rb b/spec/features/projects/project_custom_fields/overview_page/dialog/inputs_spec.rb index 0d4b5f53637d..f86a22cf0ff3 100644 --- a/spec/features/projects/project_custom_fields/overview_page/dialog/inputs_spec.rb +++ b/spec/features/projects/project_custom_fields/overview_page/dialog/inputs_spec.rb @@ -193,6 +193,22 @@ it_behaves_like "a custom field input" end + describe "with link CF" do + let(:custom_field) { link_project_custom_field } + let(:default_value) { "https://openproject.org" } + let(:expected_blank_value) { "" } + let(:expected_initial_value) { "https://www.openproject.org" } + let(:field) { FormFields::Primerized::InputField.new(custom_field) } + + it_behaves_like "a custom field input" + + it "renders the custom field as a link" do + page.within_test_selector "project-custom-field-#{link_project_custom_field.id}" do + expect(page).to have_link("https://www.openproject.org", href: "https://www.openproject.org") + end + end + end + describe "with text CF" do let(:custom_field) { text_project_custom_field } let(:field) { FormFields::Primerized::EditorFormField.new(custom_field) } diff --git a/spec/features/projects/project_custom_fields/overview_page/dialog/render_spec.rb b/spec/features/projects/project_custom_fields/overview_page/dialog/render_spec.rb index 80523365044d..ab2c95fb43bb 100644 --- a/spec/features/projects/project_custom_fields/overview_page/dialog/render_spec.rb +++ b/spec/features/projects/project_custom_fields/overview_page/dialog/render_spec.rb @@ -121,7 +121,8 @@ expect(containers[2].text).to include("Integer field") expect(containers[3].text).to include("Float field") expect(containers[4].text).to include("Date field") - expect(containers[5].text).to include("Text field") + expect(containers[5].text).to include("Link field") + expect(containers[6].text).to include("Text field") end boolean_project_custom_field.move_to_bottom @@ -135,8 +136,9 @@ expect(containers[1].text).to include("Integer field") expect(containers[2].text).to include("Float field") expect(containers[3].text).to include("Date field") - expect(containers[4].text).to include("Text field") - expect(containers[5].text).to include("Boolean field") + expect(containers[4].text).to include("Link field") + expect(containers[5].text).to include("Text field") + expect(containers[6].text).to include("Boolean field") end end diff --git a/spec/features/projects/project_custom_fields/overview_page/dialog/validation_spec.rb b/spec/features/projects/project_custom_fields/overview_page/dialog/validation_spec.rb index 833cc8063f63..568c7e73155e 100644 --- a/spec/features/projects/project_custom_fields/overview_page/dialog/validation_spec.rb +++ b/spec/features/projects/project_custom_fields/overview_page/dialog/validation_spec.rb @@ -59,7 +59,8 @@ expect(containers[2].text).to include("Integer field") expect(containers[3].text).to include("Float field") expect(containers[4].text).to include("Date field") - expect(containers[5].text).to include("Text field") + expect(containers[5].text).to include("Link field") + expect(containers[6].text).to include("Text field") expect(page).to have_no_text(boolean_project_custom_field_activated_in_other_project.name) end @@ -78,7 +79,8 @@ expect(containers[2].text).to include("Integer field") expect(containers[3].text).to include("Float field") expect(containers[4].text).to include("Date field") - expect(containers[5].text).to include("Text field") + expect(containers[5].text).to include("Link field") + expect(containers[6].text).to include("Text field") expect(page).to have_no_text(boolean_project_custom_field_activated_in_other_project.name) end @@ -193,6 +195,7 @@ overview_page.open_edit_dialog_for_section(section) invalid_field.clear + valid_field.close_autocompleter valid_field.clear valid_field.select_option(first_version.name, third_version.name) diff --git a/spec/features/projects/project_custom_fields/overview_page/shared_context.rb b/spec/features/projects/project_custom_fields/overview_page/shared_context.rb index 02ff40e05266..9f21d9613ac6 100644 --- a/spec/features/projects/project_custom_fields/overview_page/shared_context.rb +++ b/spec/features/projects/project_custom_fields/overview_page/shared_context.rb @@ -127,6 +127,15 @@ field end + let!(:link_project_custom_field) do + field = create(:link_project_custom_field, projects: [project], name: "Link field", + project_custom_field_section: section_for_input_fields) + + create(:custom_value, customized: project, custom_field: field, value: "https://www.openproject.org") + + field + end + let!(:text_project_custom_field) do field = create(:text_project_custom_field, projects: [project], name: "Text field", project_custom_field_section: section_for_input_fields) @@ -205,6 +214,7 @@ integer_project_custom_field, float_project_custom_field, date_project_custom_field, + link_project_custom_field, text_project_custom_field ] end diff --git a/spec/features/projects/project_custom_fields/overview_page/sidebar_spec.rb b/spec/features/projects/project_custom_fields/overview_page/sidebar_spec.rb index 2441210c9afd..ce508d2f4631 100644 --- a/spec/features/projects/project_custom_fields/overview_page/sidebar_spec.rb +++ b/spec/features/projects/project_custom_fields/overview_page/sidebar_spec.rb @@ -82,14 +82,15 @@ overview_page.within_custom_field_section_container(section_for_input_fields) do fields = page.all(".op-project-custom-field-container") - expect(fields.size).to eq(6) + expect(fields.size).to eq(7) expect(fields[0].text).to include("Boolean field") expect(fields[1].text).to include("String field") expect(fields[2].text).to include("Integer field") expect(fields[3].text).to include("Float field") expect(fields[4].text).to include("Date field") - expect(fields[5].text).to include("Text field") + expect(fields[5].text).to include("Link field") + expect(fields[6].text).to include("Text field") end overview_page.within_custom_field_section_container(section_for_select_fields) do @@ -121,14 +122,15 @@ overview_page.within_custom_field_section_container(section_for_input_fields) do fields = page.all(".op-project-custom-field-container") - expect(fields.size).to eq(6) + expect(fields.size).to eq(7) expect(fields[0].text).to include("Boolean field") expect(fields[1].text).to include("Integer field") expect(fields[2].text).to include("Float field") expect(fields[3].text).to include("Date field") - expect(fields[4].text).to include("Text field") - expect(fields[5].text).to include("String field") + expect(fields[4].text).to include("Link field") + expect(fields[5].text).to include("Text field") + expect(fields[6].text).to include("String field") end end end diff --git a/spec/features/projects/projects_index_spec.rb b/spec/features/projects/projects_index_spec.rb index f9114be18ece..5b3534a22dce 100644 --- a/spec/features/projects/projects_index_spec.rb +++ b/spec/features/projects/projects_index_spec.rb @@ -200,6 +200,47 @@ def expect_projects_in_order(*projects) end end + specify "project can be marked as favorite" do + login_as(admin) + visit projects_path + + projects_page.activate_menu_of(project) do |menu| + expect(menu).to have_text("Add to favorites") + click_link_or_button "Add to favorites" + end + + visit project_path(project) + expect(project).to be_favored_by(admin) + + visit projects_path + projects_page.activate_menu_of(project) do |menu| + expect(menu).to have_text("Remove from favorites") + click_link_or_button "Remove from favorites" + end + + visit project_path(project) + expect(project).not_to be_favored_by(admin) + + visit projects_path + projects_page.within_row(project) do + page.find_test_selector("project-list-favorite-button").click + end + + projects_page.activate_menu_of(project) do |menu| + expect(menu).to have_text("Remove from favorites") + end + expect(project).to be_favored_by(admin) + + projects_page.within_row(project) do + page.find_test_selector("project-list-favorite-button").click + end + + projects_page.activate_menu_of(project) do |menu| + expect(menu).to have_text("Add to favorites") + end + expect(project).not_to be_favored_by(admin) + end + specify "flash sortBy is being escaped" do login_as(admin) visit projects_path(sortBy: "[[\">\",\"\"]]") @@ -469,6 +510,7 @@ def expect_projects_in_order(*projects) # Test visibility of 'more' menu list items projects_page.activate_menu_of(parent_project) do |menu| + expect(menu).to have_text("Add to favorites") expect(menu).to have_text("Unarchive") expect(menu).to have_text("Delete") expect(menu).to have_no_text("Archive") @@ -900,15 +942,15 @@ def expect_projects_in_order(*projects) end it 'can see the "More" menu' do - # For a simple project member the 'More' menu is not visible. login_as(simple_member) visit projects_path expect(page).to have_text(parent_project.name) - # 'More' does not become visible - expect(page).to have_no_css('[data-test-selector="project-list-row--single-action"]') - expect(page).to have_no_css('[data-test-selector="project-list-row--action-menu"]') + projects_page.activate_menu_of(parent_project) do |menu| + expect(menu).to have_text("Add to favorites") + expect(menu).not_to have_text("Copy") + end # For a project member with :copy_projects privilege the 'More' menu is visible. login_as(can_copy_projects_manager) @@ -916,15 +958,18 @@ def expect_projects_in_order(*projects) expect(page).to have_text(parent_project.name) - # Test visibility of 'more' menu list items - expect(page).to have_css('[data-test-selector="project-list-row--single-action"] .octicon-copy') + projects_page.activate_menu_of(parent_project) do |menu| + expect(menu).to have_text("Copy") + end # For a project member with :add_subprojects privilege the 'More' menu is visible. login_as(can_add_subprojects_manager) visit projects_path - # Test visibility of 'more' menu list items - expect(page).to have_css('[data-test-selector="project-list-row--single-action"] .octicon-plus') + projects_page.activate_menu_of(parent_project) do |menu| + expect(menu).to have_text("Add to favorites") + expect(menu).to have_text("New subproject") + end # Test admin only properties are invisible within("#project-table") do @@ -1164,11 +1209,13 @@ def expect_projects_in_order(*projects) expect(page).to have_text(project.name) - expect(page).to have_css('[data-test-selector="project-list-row--single-action"] .octicon-check') + # Test visibility of 'more' menu list items + projects_page.activate_menu_of(project) do |menu| + expect(menu).to have_text("Project activity") + expect(menu).to have_text("Add to favorites") - # Clicking the menu item should redirect to project activity page - # with only project attributes displayed - page.find('[data-test-selector="project-list-row--single-action"]').click + click_link_or_button "Project activity" + end expect(page).to have_current_path(project_activity_index_path(project_with_activity_enabled), ignore_query: true) expect(page).to have_checked_field(id: "event_types_project_attributes") diff --git a/spec/features/types/form_configuration_spec.rb b/spec/features/types/form_configuration_spec.rb index b407d3a54001..2b8c93a0a32c 100644 --- a/spec/features/types/form_configuration_spec.rb +++ b/spec/features/types/form_configuration_spec.rb @@ -128,7 +128,7 @@ { key: :assignee, translation: "Assignee" }, { key: :responsible, translation: "Accountable" } - form.expect_group "estimates_and_time", + form.expect_group "estimates_and_progress", "Estimates and progress", { key: :estimated_time, translation: "Work" }, { key: :remaining_time, translation: "Remaining work" }, @@ -180,7 +180,7 @@ "Cool Stuff", { key: :responsible, translation: "Accountable" } - form.expect_group "estimates_and_time", + form.expect_group "estimates_and_progress", "Estimates and progress", { key: :estimated_time, translation: "Work" }, { key: :remaining_time, translation: "Remaining work" }, @@ -200,7 +200,7 @@ # Test the actual type backend type.reload expect(type.attribute_groups.map(&:key)) - .to include("Cool Stuff", :estimates_and_time, "Whatever", "New Group") + .to include("Cool Stuff", :estimates_and_progress, "Whatever", "New Group") # Visit work package with that type wp_page.visit! diff --git a/spec/features/work_packages/details/custom_fields/custom_field_spec.rb b/spec/features/work_packages/details/custom_fields/custom_field_spec.rb index 7443dc0953b3..c8d4a0a4b33c 100644 --- a/spec/features/work_packages/details/custom_fields/custom_field_spec.rb +++ b/spec/features/work_packages/details/custom_fields/custom_field_spec.rb @@ -236,4 +236,30 @@ def custom_value(value) end end end + + describe "link text" do + let(:custom_field) do + create(:link_wp_custom_field, :link, name: "My Link") + end + let(:initial_custom_values) { {} } + + it "can set a link" do + # Activate the field + field.expect_state_text "-" + field.update "http://example.com" + + field.expect_state_text "http://example.com" + expect(field.display_element).to have_css('a[href="http://example.com"]') + + field.update "bogus", expect_failure: true + + wp_page.expect_toast message: "My Link is not a valid URL", type: "error" + + field.set_value "community.openproject.org" + field.save! + + field.expect_state_text "http://community.openproject.org" + expect(field.display_element).to have_css('a[href="http://community.openproject.org"]') + end + end end diff --git a/spec/features/work_packages/export_spec.rb b/spec/features/work_packages/export_spec.rb index 4644baf1ff5b..74a44afc57f2 100644 --- a/spec/features/work_packages/export_spec.rb +++ b/spec/features/work_packages/export_spec.rb @@ -49,6 +49,17 @@ let(:group_by) { Components::WorkPackages::GroupBy.new } let(:hierarchies) { Components::WorkPackages::Hierarchies.new } let(:settings_menu) { Components::WorkPackages::SettingsMenu.new } + let(:query) { create(:query, user: current_user, project:) } + let!(:query_tl) do + query = build(:query_with_view_gantt, user: current_user, project:) + query.column_names = ["id", "type", "subject"] + query.filters.clear + query.timeline_visible = true + query.timeline_zoom_level = "days" + query.name = "Query with Timeline" + query.save! + query + end before do @download_list = DownloadList.new @@ -62,19 +73,21 @@ subject { @download_list.refresh_from(page).latest_downloaded_content } - def export!(expect_success = true) - work_packages_page.ensure_loaded - + def expect_export settings_menu.open_and_choose "Export" click_on export_type + expect_export_in_queue + end + def expect_export_in_queue # Expect to get a response regarding queuing expect(page).to have_content I18n.t("js.job_status.generic_messages.in_queue"), wait: 10 - # Expect title expect(page).to have_test_selector "job-status--header", text: I18n.t("export.your_work_packages_export") + end + def perform!(expect_success = true) begin perform_enqueued_jobs rescue StandardError @@ -86,6 +99,12 @@ def export!(expect_success = true) end end + def export!(expect_success = true) + work_packages_page.ensure_loaded + expect_export + perform!(expect_success) + end + after do DownloadList.clear end @@ -209,32 +228,96 @@ def export!(expect_success = true) end context "PDF export", :js do - let(:export_type) { I18n.t("export.format.pdf_overview_table") } - let(:query) do - create(:query, - user: current_user, - project:) + before do + query.column_names = query.displayable_columns.map { |c| c.name.to_s } - ["bcf_thumbnail"] + query.save! + allow_any_instance_of(WorkPackage::PDFExport::WorkPackageListToPdf) + .to receive(:export!) + .and_return( + ::Exports::Result.new format: :pdf, + title: 'foo', + content: Tempfile.new("something"), + mime_type: "application/pdf" + ) + end + + context "table" do + let(:export_type) { I18n.t("export.format.pdf_overview_table") } + context "with many columns" do + before do + # Despite attempts to provoke the error by having a lot of columns, the pdf + # is still being drawn successfully. We thus have to fake the error. + allow_any_instance_of(WorkPackage::PDFExport::WorkPackageListToPdf) + .to receive(:export!) + .and_raise(I18n.t(:error_pdf_export_too_many_columns)) + end + + it "returns the error" do + wp_table.visit_query query + export!(false) + expect(page) + .to have_content(I18n.t(:error_pdf_export_too_many_columns), wait: 10) + end + end + + it "exports a pdf table" do + wp_table.visit_query query + export! + end end - context "with many columns" do - before do - query.column_names = query.displayable_columns.map { |c| c.name.to_s } - ["bcf_thumbnail"] - query.save! + context "report" do + let(:export_type) { I18n.t("export.format.pdf_report") } - # Despite attempts to provoke the error by having a lot of columns, the pdf - # is still being drawn successfully. We thus have to fake the error. - allow_any_instance_of(WorkPackage::PDFExport::WorkPackageListToPdf) - .to receive(:export!) - .and_raise(I18n.t(:error_pdf_export_too_many_columns)) + it "exports a pdf report" do + wp_table.visit_query query + export! end + end + + context "report with images" do + let(:export_type) { I18n.t("export.format.pdf_report_with_images") } - it "returns the error" do + it "exports a pdf report with images" do wp_table.visit_query query + export! + end + end + + context "gantt" do + let(:export_type) { I18n.t("export.format.pdf_gantt") } + + context "not in module gantt and not EE" do + it "has no gantt export" do + wp_table.visit_query query + work_packages_page.ensure_loaded + settings_menu.open_and_choose "Export" + expect(page).not_to have_content(export_type) + end + end + + context "in module gantt" do + let(:wp_table) { Pages::WorkPackagesTimeline.new(project) } - export!(false) + context "EE not active" do + it "has no gantt export" do + wp_table.visit_query query_tl + settings_menu.open_and_choose "Export" + expect(page).not_to have_content(export_type) + end + end - expect(page) - .to have_content(I18n.t(:error_pdf_export_too_many_columns), wait: 10) + context "EE active", with_ee: %i[gantt_pdf_export] do + it "exports a gantt pdf" do + wp_table.visit_query query_tl + settings_menu.open_and_choose "Export" + click_on export_type + expect(page).to have_content I18n.t("js.gantt_chart.export.title").upcase + click_on I18n.t("js.gantt_chart.export.button_export") + expect_export_in_queue + perform! + end + end end end end diff --git a/spec/features/work_packages/navigation_spec.rb b/spec/features/work_packages/navigation_spec.rb index 059d7e3cae51..6364eed3f47c 100644 --- a/spec/features/work_packages/navigation_spec.rb +++ b/spec/features/work_packages/navigation_spec.rb @@ -159,7 +159,7 @@ it "access the work package views directly from a non-angular view" do visit project_path(project) - find("#main-menu-work-packages ~ .toggler").click + page.find_test_selector("main-menu-toggler--work_packages").click expect(page).to have_css(".op-view-select--search-results") find(".op-sidemenu--item-action", text: query.name).click diff --git a/spec/features/work_packages/table/context_menu/context_menu_spec.rb b/spec/features/work_packages/table/context_menu/context_menu_spec.rb index e919047e0981..33bc4e857d4b 100644 --- a/spec/features/work_packages/table/context_menu/context_menu_spec.rb +++ b/spec/features/work_packages/table/context_menu/context_menu_spec.rb @@ -74,7 +74,11 @@ # Open context menu menu.expect_closed menu.open_for(work_package) - menu.expect_options "Open details view", "Open fullscreen view", "Add predecessor", "Add follower", "Show relations" + menu.expect_options "Open details view", + "Open fullscreen view", + "Add predecessor", + "Add follower", + "Show relations" menu.expect_no_options "Log time" # Show relations tab when selecting show-relations from menu diff --git a/spec/features/work_packages/update_ancestors_spec.rb b/spec/features/work_packages/update_ancestors_spec.rb index 7a0afe6ce4ee..167457f95e21 100644 --- a/spec/features/work_packages/update_ancestors_spec.rb +++ b/spec/features/work_packages/update_ancestors_spec.rb @@ -107,7 +107,6 @@ wp_table.update_work_package_attributes(child, estimatedTime: child.estimated_hours + 1) parent.reload child.reload - # binding.irb end.to change(child, :remaining_hours).by(1) # remaining work increased as a side effect of increasing work .and change(parent, :derived_estimated_hours).by(1) .and change(parent, :derived_done_ratio).to(33) # 12h total work and 8h total remaining work => 33% complete diff --git a/spec/helpers/frontend_asset_helper_spec.rb b/spec/helpers/frontend_asset_helper_spec.rb index 0ac08a05ff76..1c4a2923a833 100644 --- a/spec/helpers/frontend_asset_helper_spec.rb +++ b/spec/helpers/frontend_asset_helper_spec.rb @@ -37,7 +37,17 @@ end it "returns the proxied frontend server" do - expect(helper.include_frontend_assets).to match(%r{script src="http://localhost:4200/assets/frontend/main(.*).js"}) + expect(helper.include_frontend_assets).to match(%r{script src="http://(frontend-test|localhost):4200/assets/frontend/main(.*).js"}) + end + + context "when using relative_url_root" do + before do + allow(Rails.application.config).to receive(:relative_url_root).and_return("/openproject") + end + + it "prepends it to the asset path" do + expect(helper.include_frontend_assets).to match(%r{script src="http://(frontend-test|localhost):4200/openproject/assets/frontend/main(.*).js"}) + end end end diff --git a/spec/httpx_spec.rb b/spec/httpx_spec.rb new file mode 100644 index 000000000000..82208747e9ee --- /dev/null +++ b/spec/httpx_spec.rb @@ -0,0 +1,29 @@ +require 'webrick' +require 'httpx' + +RSpec.describe 'HTTPX' do + describe 'persistent connections' do + it 'does not hang forever when used to request HTTP 1.1 server' do + server = WEBrick::HTTPServer.new(:Port => 8543) + server.mount_proc '/' do |req, res| + res.body = 'Response Body' + end + + Thread.new { server.start } + session = HTTPX .plugin(:persistent).with(timeout: {keep_alive_timeout: 2}) + number_of_requests_made = 0 + begin + Timeout.timeout(10) do + session.post("http://localhost:8543") + number_of_requests_made += 1 + sleep 4 + session.post("http://localhost:8543") + number_of_requests_made += 1 + end + ensure + expect(number_of_requests_made).to eq(2) + server.shutdown + end + end + end +end diff --git a/spec/i18n_spec.rb b/spec/i18n_spec.rb index df503af2c472..540315efb2c3 100644 --- a/spec/i18n_spec.rb +++ b/spec/i18n_spec.rb @@ -28,9 +28,16 @@ expect(non_normalized).to be_empty, error_message end - it 'does not have inconsistent interpolations' do - error_message = "#{inconsistent_interpolations.leaves.count} i18n keys have inconsistent interpolations.\n" \ - "Run `i18n-tasks check-consistent-interpolations' to show them" - expect(inconsistent_interpolations).to be_empty, error_message + context 'for all i18n files' do + let(:root_dir) { Pathname.new(__FILE__).dirname.join('..') } + let(:config_file) { root_dir.join('config/i18n-tasks-all-files.yml') } + let(:i18n) { I18n::Tasks::BaseTask.new(config_file:) } + + it 'does not have inconsistent interpolations' do + config_file_relative_path = config_file.relative_path_from(Dir.pwd) + error_message = "#{inconsistent_interpolations.leaves.count} i18n keys have inconsistent interpolations.\n" \ + "Run 'i18n-tasks check-consistent-interpolations --config #{config_file_relative_path}' to show them" + expect(inconsistent_interpolations).to be_empty, error_message + end end end diff --git a/spec/lib/acts_as_watchable/lib/acts_as_watchable/routes_spec.rb b/spec/lib/acts_as_watchable/lib/acts_as_watchable/routes_spec.rb index c089a1b3be9c..bc6773c8c12f 100644 --- a/spec/lib/acts_as_watchable/lib/acts_as_watchable/routes_spec.rb +++ b/spec/lib/acts_as_watchable/lib/acts_as_watchable/routes_spec.rb @@ -28,7 +28,7 @@ require "spec_helper" -RSpec.describe OpenProject::Acts::Watchable::Routes do +RSpec.describe ::OpenProject::Acts::Watchable::Routes do let(:request) do Struct.new(:type, :id) do def path_parameters @@ -43,7 +43,7 @@ def path_parameters let(:id) { "1" } it "is true" do - expect(OpenProject::Acts::Watchable::Routes.matches?(request)).to be_truthy + expect(::OpenProject::Acts::Watchable::Routes.matches?(request)).to be_truthy end end @@ -51,7 +51,7 @@ def path_parameters let(:id) { "schmu" } it "is false" do - expect(OpenProject::Acts::Watchable::Routes.matches?(request)).to be_falsey + expect(::OpenProject::Acts::Watchable::Routes.matches?(request)).to be_falsey end end end @@ -69,7 +69,7 @@ def path_parameters let(:id) { "4" } it "is false" do - expect(OpenProject::Acts::Watchable::Routes.matches?(request)).to be_falsey + expect(::OpenProject::Acts::Watchable::Routes.matches?(request)).to be_falsey end end end diff --git a/spec/lib/redmine/menu_manager/menu_helper_spec.rb b/spec/lib/redmine/menu_manager/menu_helper_spec.rb index 7ae8ab7d26db..7c11f4072f0d 100644 --- a/spec/lib/redmine/menu_manager/menu_helper_spec.rb +++ b/spec/lib/redmine/menu_manager/menu_helper_spec.rb @@ -123,7 +123,7 @@ def @controller.current_menu_item Parent node -