From e87b53639a7d90f6c213e32d7722cb756efbfdc3 Mon Sep 17 00:00:00 2001 From: Jens Ulferts Date: Wed, 12 Aug 2015 15:42:03 +0200 Subject: [PATCH 001/112] enable no_self_notification per default --- app/models/user_preference.rb | 2 +- spec/models/user_preference_spec.rb | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/models/user_preference.rb b/app/models/user_preference.rb index 148fc6b022..e8f5e74b23 100644 --- a/app/models/user_preference.rb +++ b/app/models/user_preference.rb @@ -78,6 +78,6 @@ class UserPreference < ActiveRecord::Base private def init_other_preferences - self.others ||= {} + self.others ||= { no_self_notified: true } end end diff --git a/spec/models/user_preference_spec.rb b/spec/models/user_preference_spec.rb index f451730e18..df5dbb34df 100644 --- a/spec/models/user_preference_spec.rb +++ b/spec/models/user_preference_spec.rb @@ -36,12 +36,12 @@ describe UserPreference do expect(subject.hide_mail).to eql(true) end - it 'has an empty others hash' do - expect(subject.others).to eql({}) - end - it 'disables accessibility mode' do expect(subject.impaired).to eql(false) end + + it 'activates no self notification' do + expect(subject.others[:no_self_notified]).to be_truthy + end end end From 5e5c2735cccd0c9c8ec6a400bdb6447f5d2fd840 Mon Sep 17 00:00:00 2001 From: Jonas Heinrich Date: Thu, 13 Aug 2015 17:34:41 +0200 Subject: [PATCH 002/112] Adapt version to corresponding OpenProject core version. --- lib/open_project/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/open_project/version.rb b/lib/open_project/version.rb index 62b4a621b5..bda8163b2b 100644 --- a/lib/open_project/version.rb +++ b/lib/open_project/version.rb @@ -33,7 +33,7 @@ module OpenProject module VERSION #:nodoc: MAJOR = 4 MINOR = 2 - PATCH = 6 + PATCH = 7 TINY = PATCH # Redmine compat # Used by semver to define the special version (if any). From 3aa8a144d631dae9e4f5a6e5cce1bfa3edebd42f Mon Sep 17 00:00:00 2001 From: Jens Ulferts Date: Thu, 13 Aug 2015 14:15:34 +0200 Subject: [PATCH 003/112] adapt specs to send mails on self action --- spec/controllers/news_controller_spec.rb | 8 +++++++- spec/fixtures/user_preferences.yml | 7 +++++++ spec/legacy/functional/user_mailer_spec.rb | 9 +++++++++ spec/legacy/unit/journal_observer_spec.rb | 1 + spec/legacy/unit/mail_handler_spec.rb | 2 +- spec/requests/api/v3/work_package_resource_spec.rb | 6 +++++- .../work_packages_by_project_resource_spec.rb | 5 ++++- spec/workers/mail_notification_jobs/shared_examples.rb | 8 +++++++- 8 files changed, 41 insertions(+), 5 deletions(-) diff --git a/spec/controllers/news_controller_spec.rb b/spec/controllers/news_controller_spec.rb index 1b0ba1a1d6..417a2e8d15 100644 --- a/spec/controllers/news_controller_spec.rb +++ b/spec/controllers/news_controller_spec.rb @@ -33,7 +33,13 @@ describe NewsController, type: :controller do include BecomeMember - let(:user) { FactoryGirl.create(:admin) } + let(:user) { + user = FactoryGirl.create(:admin) + + FactoryGirl.create(:user_preference, user: user, others: { no_self_notified: false }) + + user + } let(:project) { FactoryGirl.create(:project) } let(:news) { FactoryGirl.create(:news) } diff --git a/spec/fixtures/user_preferences.yml b/spec/fixtures/user_preferences.yml index 18b3807e23..596087565d 100644 --- a/spec/fixtures/user_preferences.yml +++ b/spec/fixtures/user_preferences.yml @@ -55,3 +55,10 @@ user_preferences_002: id: 2 user_id: 3 hide_mail: false +user_preferences_003: + others: | + --- + no_self_notified: false + id: 3 + user_id: 2 + hide_mail: false diff --git a/spec/legacy/functional/user_mailer_spec.rb b/spec/legacy/functional/user_mailer_spec.rb index 6fdfbc6551..dc0ba5304c 100644 --- a/spec/legacy/functional/user_mailer_spec.rb +++ b/spec/legacy/functional/user_mailer_spec.rb @@ -50,6 +50,8 @@ describe UserMailer, type: :mailer do it 'should test mail sends a simple greeting' do user = FactoryGirl.create(:user, mail: 'foo@bar.de') + FactoryGirl.create(:user_preference, user: user, others: { no_self_notified: false }) + mail = UserMailer.test_mail(user) assert mail.deliver @@ -211,6 +213,7 @@ describe UserMailer, type: :mailer do it 'should plain text mail' do Setting.plain_text_mail = 1 user = FactoryGirl.create(:user) + FactoryGirl.create(:user_preference, user: user, others: { no_self_notified: false }) issue = FactoryGirl.create(:work_package) UserMailer.work_package_added(user, issue, user).deliver mail = ActionMailer::Base.deliveries.last @@ -222,6 +225,7 @@ describe UserMailer, type: :mailer do it 'should html mail' do Setting.plain_text_mail = 0 user = FactoryGirl.create(:user) + FactoryGirl.create(:user_preference, user: user, others: { no_self_notified: false }) issue = FactoryGirl.create(:work_package) UserMailer.work_package_added(user, issue, user).deliver mail = ActionMailer::Base.deliveries.last @@ -232,6 +236,7 @@ describe UserMailer, type: :mailer do it 'should mail from with phrase' do user = FactoryGirl.create(:user) + FactoryGirl.create(:user_preference, user: user, others: { no_self_notified: false }) with_settings mail_from: 'Redmine app ' do UserMailer.test_mail(user).deliver end @@ -284,6 +289,7 @@ describe UserMailer, type: :mailer do it 'should message posted message id' do user = FactoryGirl.create(:user) + FactoryGirl.create(:user_preference, user: user, others: { no_self_notified: false }) message = FactoryGirl.create(:message) UserMailer.message_posted(user, message, user).deliver mail = ActionMailer::Base.deliveries.last @@ -298,6 +304,7 @@ describe UserMailer, type: :mailer do it 'should reply posted message id' do user = FactoryGirl.create(:user) + FactoryGirl.create(:user_preference, user: user, others: { no_self_notified: false }) parent = FactoryGirl.create(:message) message = FactoryGirl.create(:message, parent: parent) UserMailer.message_posted(user, message, user).deliver @@ -315,6 +322,7 @@ describe UserMailer, type: :mailer do it 'should change mail language depending on recipient language' do issue = FactoryGirl.create(:work_package) user = FactoryGirl.create(:user, mail: 'foo@bar.de', language: 'de') + FactoryGirl.create(:user_preference, user: user, others: { no_self_notified: false }) ActionMailer::Base.deliveries.clear with_settings available_languages: ['en', 'de'] do I18n.locale = 'en' @@ -334,6 +342,7 @@ describe UserMailer, type: :mailer do # 3. I18n.default_locale issue = FactoryGirl.create(:work_package) user = FactoryGirl.create(:user, mail: 'foo@bar.de', language: '') # (auto) + FactoryGirl.create(:user_preference, user: user, others: { no_self_notified: false }) ActionMailer::Base.deliveries.clear with_settings available_languages: ['en', 'de'], default_language: 'de' do diff --git a/spec/legacy/unit/journal_observer_spec.rb b/spec/legacy/unit/journal_observer_spec.rb index d6f78a2c37..f791e9d048 100644 --- a/spec/legacy/unit/journal_observer_spec.rb +++ b/spec/legacy/unit/journal_observer_spec.rb @@ -37,6 +37,7 @@ describe JournalObserver, type: :model do @user = FactoryGirl.create :user, mail_notification: 'all', member_in_project: @project + FactoryGirl.create(:user_preference, user: @user, others: { no_self_notified: false }) @issue = FactoryGirl.create :work_package, project: @project, author: @user, diff --git a/spec/legacy/unit/mail_handler_spec.rb b/spec/legacy/unit/mail_handler_spec.rb index 89aae35280..1707a2a0cf 100644 --- a/spec/legacy/unit/mail_handler_spec.rb +++ b/spec/legacy/unit/mail_handler_spec.rb @@ -35,7 +35,7 @@ describe MailHandler, type: :model do before do ActionMailer::Base.deliveries.clear - Setting.notified_events = Redmine::Notifiable.all.map(&:name) + allow(Setting).to receive(:notified_events).and_return(Redmine::Notifiable.all.map(&:name)) end it 'should add work package' do diff --git a/spec/requests/api/v3/work_package_resource_spec.rb b/spec/requests/api/v3/work_package_resource_spec.rb index ee0b1e4cb8..3385196a97 100644 --- a/spec/requests/api/v3/work_package_resource_spec.rb +++ b/spec/requests/api/v3/work_package_resource_spec.rb @@ -77,7 +77,11 @@ h4. things we like permissions: [:view_work_packages, :view_timelines, :edit_work_packages]) end let(:current_user) do - FactoryGirl.create(:user, member_in_project: project, member_through_role: role) + user = FactoryGirl.create(:user, member_in_project: project, member_through_role: role) + + FactoryGirl.create(:user_preference, user: user, others: { no_self_notified: false }) + + user end let(:watcher) do FactoryGirl diff --git a/spec/requests/api/v3/work_packages/work_packages_by_project_resource_spec.rb b/spec/requests/api/v3/work_packages/work_packages_by_project_resource_spec.rb index 2bff0f6d5e..4e28218b64 100644 --- a/spec/requests/api/v3/work_packages/work_packages_by_project_resource_spec.rb +++ b/spec/requests/api/v3/work_packages/work_packages_by_project_resource_spec.rb @@ -42,7 +42,10 @@ describe API::V3::WorkPackages::WorkPackagesByProjectAPI, type: :request do let(:permissions) { [:add_work_packages, :view_project] } let(:role) { FactoryGirl.create(:role, permissions: permissions) } let(:current_user) do - FactoryGirl.build(:user, member_in_project: project, member_through_role: role) + user = FactoryGirl.create(:user, member_in_project: project, member_through_role: role) + FactoryGirl.create(:user_preference, user: user, others: { no_self_notified: false }) + + user end let(:path) { api_v3_paths.work_packages_by_project project.id } diff --git a/spec/workers/mail_notification_jobs/shared_examples.rb b/spec/workers/mail_notification_jobs/shared_examples.rb index 519667f6b7..5e2b16118b 100644 --- a/spec/workers/mail_notification_jobs/shared_examples.rb +++ b/spec/workers/mail_notification_jobs/shared_examples.rb @@ -38,7 +38,13 @@ require 'spec_helper' # records are missing (e.g. the user to be notified), and that jobs with any other # sort of error fail as expected in order to be rescheduled. shared_examples 'a mail notification job' do - let!(:user) { FactoryGirl.create :user } # user to be notified + let!(:user) { + user = FactoryGirl.create :user + + FactoryGirl.create(:user_preference, user: user, others: { no_self_notified: false }) + + user + } # user to be notified context 'with all records found' do let(:mail_subject) { 'all records found!' } From 6ceb63b2b70856c63a2030f4af1d8ef7f2e9935d Mon Sep 17 00:00:00 2001 From: Evghenii Barhatov Date: Fri, 14 Aug 2015 18:38:05 +0300 Subject: [PATCH 004/112] Pass user_id instead of whole User model object in DeleteUserJob --- app/services/delete_user_service.rb | 2 +- app/workers/delete_user_job.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/services/delete_user_service.rb b/app/services/delete_user_service.rb index 0372221ff0..50a322fed5 100644 --- a/app/services/delete_user_service.rb +++ b/app/services/delete_user_service.rb @@ -39,7 +39,7 @@ class DeleteUserService < Struct.new :user, :actor # as destroying users is a lengthy process we handle it in the background # and lock the account now so that no action can be performed with it user.lock! - Delayed::Job.enqueue DeleteUserJob.new(user) + Delayed::Job.enqueue DeleteUserJob.new(user.id) logout! if self_delete? diff --git a/app/workers/delete_user_job.rb b/app/workers/delete_user_job.rb index 7d35281d21..58c735a7ab 100644 --- a/app/workers/delete_user_job.rb +++ b/app/workers/delete_user_job.rb @@ -28,8 +28,8 @@ #++ class DeleteUserJob - def initialize(user) - @user_id = user.id + def initialize(user_id) + @user_id = user_id end def perform From eba94776aed8a4bc93dab74411f13eaca09708c3 Mon Sep 17 00:00:00 2001 From: Martin Linkhorst Date: Thu, 20 Aug 2015 15:10:03 +0200 Subject: [PATCH 005/112] perm might be nil. in that case just ignore it. --- .../lib/acts_as_activity_provider.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/plugins/acts_as_activity_provider/lib/acts_as_activity_provider.rb b/lib/plugins/acts_as_activity_provider/lib/acts_as_activity_provider.rb index aad1422e6a..0ed9b2d1c9 100644 --- a/lib/plugins/acts_as_activity_provider/lib/acts_as_activity_provider.rb +++ b/lib/plugins/acts_as_activity_provider/lib/acts_as_activity_provider.rb @@ -191,13 +191,13 @@ module Redmine allowed_projects = [] user.projects_by_role.each do |role, projects| - allowed_projects << projects.map(&:id) if role.allowed_to?(perm.name) + allowed_projects << projects.map(&:id) if perm && role.allowed_to?(perm.name) end stmt = projects_table[:id].in(allowed_projects.uniq) end - if (Role.anonymous.allowed_to?(perm.name) || Role.non_member.allowed_to?(perm.name)) && !is_member + if perm && (Role.anonymous.allowed_to?(perm.name) || Role.non_member.allowed_to?(perm.name)) && !is_member public_project = projects_table[:is_public].eq(true) stmt = stmt ? stmt.or(public_project) : public_project From 209804d91937db840578e14f5558981e5e5427ae Mon Sep 17 00:00:00 2001 From: Jens Ulferts Date: Fri, 21 Aug 2015 10:24:48 +0200 Subject: [PATCH 006/112] fix sprockets/sprockets-rails dependency The 2_2_2_backport2 at https://github.com/tessi/sprockets/tree/2_2_2_backport2 actually has the version 2.2.3 leading to an invalid dependency with sprockets-rails. This fix relies on a clone of the repo to fix the branch structure. Note, that this is discontinued in OP 5.0 where we again rely on the standard sprockets. --- Gemfile | 6 ++++-- Gemfile.lock | 28 ++++++++++++++-------------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/Gemfile b/Gemfile index 0d633062b3..1ae3f85925 100644 --- a/Gemfile +++ b/Gemfile @@ -102,8 +102,10 @@ group :production do gem 'dalli', '~> 2.7.2' end -gem 'sprockets', git: 'https://github.com/tessi/sprockets.git', branch: '2_2_2_backport2' -gem 'sprockets-rails', git: 'https://github.com/finnlabs/sprockets-rails.git', branch: 'backport' +gem 'sprockets', git: 'https://github.com/finnlabs/sprockets.git', + branch: '2_2_3_backport2' +gem 'sprockets-rails', git: 'https://github.com/finnlabs/sprockets-rails.git', + branch: 'backport_w_2_2_3_sprockets' gem 'non-stupid-digest-assets' gem 'sass-rails', git: 'https://github.com/guilleiguaran/sass-rails.git', branch: 'backport' gem 'sass', '~> 3.4.12' diff --git a/Gemfile.lock b/Gemfile.lock index faf51f98a7..8a98b0ba32 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -22,13 +22,24 @@ GIT GIT remote: https://github.com/finnlabs/sprockets-rails.git - revision: e069c097056e28e3cd4adc4ee8bb2a895c71bfc1 - branch: backport + revision: 7599ca4e7c5ff3cad552591e0e990570d34863d7 + branch: backport_w_2_2_3_sprockets specs: sprockets-rails (2.0.1) actionpack (>= 3.0) activesupport (>= 3.0) - sprockets (= 2.2.2.backport2) + sprockets (= 2.2.3.backport2) + +GIT + remote: https://github.com/finnlabs/sprockets.git + revision: be18cf9420ea5606b0824dae1bc6965505f7c82b + branch: 2_2_3_backport2 + specs: + sprockets (2.2.3.backport2) + hike (~> 1.2) + multi_json (~> 1.0) + rack (~> 1.0) + tilt (~> 1.1, != 1.3.0) GIT remote: https://github.com/guilleiguaran/sass-rails.git @@ -57,17 +68,6 @@ GIT specs: prototype_legacy_helper (0.0.0) -GIT - remote: https://github.com/tessi/sprockets.git - revision: 1e56fd0a92a9fda93dab4550ab3cf82138d097ac - branch: 2_2_2_backport2 - specs: - sprockets (2.2.2.backport2) - hike (~> 1.2) - multi_json (~> 1.0) - rack (~> 1.0) - tilt (~> 1.1, != 1.3.0) - GEM remote: https://rubygems.org/ specs: From 8ae95e1f7f83efd9dfcc2063e263589552c0cd7b Mon Sep 17 00:00:00 2001 From: Jens Ulferts Date: Fri, 21 Aug 2015 10:25:07 +0200 Subject: [PATCH 007/112] update bundler version in gemfile --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 8a98b0ba32..26aaaf5dc9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -551,8 +551,8 @@ DEPENDENCIES pry-stack_explorer quiet_assets rabl (= 0.9.3) - rack-attack rack (~> 1.4.7) + rack-attack rack-protection! rack-test (~> 0.6.2) rack_session_access @@ -594,4 +594,4 @@ DEPENDENCIES will_paginate (~> 3.0) BUNDLED WITH - 1.10.5 + 1.10.6 From b679f2b04cee6ac5e8ffcd8f417c96abf1941a6e Mon Sep 17 00:00:00 2001 From: Continuous Integration Date: Fri, 21 Aug 2015 11:58:41 +0200 Subject: [PATCH 008/112] Update reference to OpenProject-Translations --- Gemfile.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index faf51f98a7..e1df08de89 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -42,10 +42,10 @@ GIT GIT remote: https://github.com/opf/openproject-translations.git - revision: a9a5a4b2090d182a183586bf97b18e9ef5d2b043 + revision: b18a2db77c885391f332c7c4166800903536c9e1 branch: release/4.2 specs: - openproject-translations (4.2.6) + openproject-translations (4.2.7) crowdin-api (~> 0.2.4) mixlib-shellout (~> 2.1.0) rails (~> 3.2.14) @@ -551,8 +551,8 @@ DEPENDENCIES pry-stack_explorer quiet_assets rabl (= 0.9.3) - rack-attack rack (~> 1.4.7) + rack-attack rack-protection! rack-test (~> 0.6.2) rack_session_access @@ -594,4 +594,4 @@ DEPENDENCIES will_paginate (~> 3.0) BUNDLED WITH - 1.10.5 + 1.10.6 From 9082645f54d66bae255caa0b4184119d6639c5c9 Mon Sep 17 00:00:00 2001 From: Continuous Integration Date: Sat, 22 Aug 2015 02:46:53 +0200 Subject: [PATCH 009/112] Update reference to OpenProject-Translations --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 6fe6a8ad52..26e60df9f2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -53,7 +53,7 @@ GIT GIT remote: https://github.com/opf/openproject-translations.git - revision: b18a2db77c885391f332c7c4166800903536c9e1 + revision: 2adb127f7bdccde37b4b85fafe5f249e4bc181e4 branch: release/4.2 specs: openproject-translations (4.2.7) From 6357843bee11db4b6de85cbcb72aee19a8504338 Mon Sep 17 00:00:00 2001 From: Continuous Integration Date: Sun, 23 Aug 2015 02:46:36 +0200 Subject: [PATCH 010/112] Update reference to OpenProject-Translations --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 26e60df9f2..425ee5d5bc 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -53,7 +53,7 @@ GIT GIT remote: https://github.com/opf/openproject-translations.git - revision: 2adb127f7bdccde37b4b85fafe5f249e4bc181e4 + revision: d411e1ce2c91e14ddfa37120e6f1af1674eecd5e branch: release/4.2 specs: openproject-translations (4.2.7) From 60bf6090e20a21ffe22647bd22d0769380f4be22 Mon Sep 17 00:00:00 2001 From: Continuous Integration Date: Tue, 25 Aug 2015 02:46:40 +0200 Subject: [PATCH 011/112] Update reference to OpenProject-Translations --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 425ee5d5bc..f3ac612e90 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -53,7 +53,7 @@ GIT GIT remote: https://github.com/opf/openproject-translations.git - revision: d411e1ce2c91e14ddfa37120e6f1af1674eecd5e + revision: c945406eb11befd7294c7ed137477dbf60d8bebe branch: release/4.2 specs: openproject-translations (4.2.7) From 45e10276737129439416960b06c0c1e341e60c50 Mon Sep 17 00:00:00 2001 From: Stefan Botzenhart Date: Tue, 25 Aug 2015 16:00:50 +0200 Subject: [PATCH 012/112] Increase padding for flash messages --- app/assets/stylesheets/content/_flash_messages.sass | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/stylesheets/content/_flash_messages.sass b/app/assets/stylesheets/content/_flash_messages.sass index 1188796738..da2f1943e7 100644 --- a/app/assets/stylesheets/content/_flash_messages.sass +++ b/app/assets/stylesheets/content/_flash_messages.sass @@ -42,6 +42,7 @@ .flash display: none + padding: 15px 5px &.ng-leave @include animation(0.5s fade-out) From f3caaa3c9bdf9525dcf85e083628bf65631e1f02 Mon Sep 17 00:00:00 2001 From: Continuous Integration Date: Wed, 26 Aug 2015 02:47:36 +0200 Subject: [PATCH 013/112] Update reference to OpenProject-Translations --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index f3ac612e90..080aa0e314 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -53,7 +53,7 @@ GIT GIT remote: https://github.com/opf/openproject-translations.git - revision: c945406eb11befd7294c7ed137477dbf60d8bebe + revision: 17c21a226320cf3b06028a2279eb7d305d0d907f branch: release/4.2 specs: openproject-translations (4.2.7) From e95fd2221887fbc8dd16e51b150a45fd33c7184a Mon Sep 17 00:00:00 2001 From: Stefan Botzenhart Date: Tue, 25 Aug 2015 16:01:37 +0200 Subject: [PATCH 014/112] Move custom field selection for a project to its own tab * edit_project permission shall apply * add notice if action fails --- app/controllers/projects_controller.rb | 11 +++++ app/helpers/projects_helper.rb | 1 + app/views/projects/_form.html.erb | 6 --- .../projects/settings/_custom_fields.html.erb | 43 +++++++++++++++++++ config/locales/en.yml | 1 + config/routes.rb | 1 + features/projects/copy_project.feature | 10 ++--- features/projects/settings.feature | 10 ++--- .../projects/project_settings_page.rb | 8 +--- 9 files changed, 68 insertions(+), 23 deletions(-) create mode 100644 app/views/projects/settings/_custom_fields.html.erb diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 2a7d6bd98c..44ce639f8f 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -188,6 +188,17 @@ class ProjectsController < ApplicationController redirect_to action: 'settings', id: @project, tab: 'modules' end + def custom_fields + @project.work_package_custom_field_ids = params[:project][:work_package_custom_field_ids] + if @project.save + flash[:notice] = l(:notice_successful_update) + else + flash[:error] = l(:notice_project_cannot_update_custom_fields) + end + + redirect_to action: 'settings', id: @project, tab: 'custom_fields' + end + def archive flash[:error] = l(:error_can_not_archive_project) unless @project.archive redirect_to(url_for(controller: '/admin', action: 'projects', status: params[:status])) diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index e5791d7794..bc602cfc7d 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -39,6 +39,7 @@ module ProjectsHelper tabs = [{ name: 'info', action: :edit_project, partial: 'projects/edit', label: :label_information_plural }, { name: 'modules', action: :select_project_modules, partial: 'projects/settings/modules', label: :label_module_plural }, { name: 'members', action: :manage_members, partial: 'projects/settings/members', label: :label_member_plural }, + { name: 'custom_fields', action: :edit_project, partial: 'projects/settings/custom_fields', label: :label_custom_field_plural }, { name: 'versions', action: :manage_versions, partial: 'projects/settings/versions', label: :label_version_plural }, { name: 'categories', action: :manage_categories, partial: 'projects/settings/categories', label: :label_work_package_category_plural }, { name: 'repository', action: :manage_repository, partial: 'repositories/settings', label: :label_repository }, diff --git a/app/views/projects/_form.html.erb b/app/views/projects/_form.html.erb index cc134c1ef4..732968112f 100644 --- a/app/views/projects/_form.html.erb +++ b/app/views/projects/_form.html.erb @@ -63,10 +63,4 @@ See doc/COPYRIGHT.rdoc for more details. <% end %> -<% unless @issue_custom_fields.empty? %> - <%= render partial: "projects/form/custom_fields", - locals: { project: project, - form: f, - work_package_custom_fields: @issue_custom_fields } %> -<% end %> diff --git a/app/views/projects/settings/_custom_fields.html.erb b/app/views/projects/settings/_custom_fields.html.erb new file mode 100644 index 0000000000..76795617a3 --- /dev/null +++ b/app/views/projects/settings/_custom_fields.html.erb @@ -0,0 +1,43 @@ +<%#-- copyright +OpenProject is a project management system. +Copyright (C) 2012-2015 the OpenProject Foundation (OPF) + +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 doc/COPYRIGHT.rdoc for more details. + +++#%> + +<%= labelled_tabular_form_for @project, + url: { action: 'custom_fields', id: @project }, + method: :put, + html: { id: 'modules-form' } do |form| %> + + <%= render partial: "projects/form/custom_fields", + locals: { + project: @project, + form: form, + work_package_custom_fields: @issue_custom_fields + } %> + +

<%= form.button l(:button_save), class: 'button -highlight -with-icon icon-yes' %>

+<% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 6ffb037ced..58300c5c6f 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1179,6 +1179,7 @@ en: notice_automatic_set_of_standard_type: "Set standard type automatically." notice_logged_out: "You have been logged out." error_types_in_use_by_work_packages: "The following types are still referenced by work packages: %{types}" + notice_project_cannot_update_custom_fields: "You cannot update the project's available custom fields." # Default format for numbers number: diff --git a/config/routes.rb b/config/routes.rb index 04779f8670..ca4ace2cc7 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -232,6 +232,7 @@ OpenProject::Application.routes.draw do constraints: { coming_from: /(admin|settings)/ } match 'copy' => 'copy_projects#copy', via: :post put :modules + put :custom_fields put :archive put :unarchive patch :types diff --git a/features/projects/copy_project.feature b/features/projects/copy_project.feature index cdb7ef53dc..939b399375 100644 --- a/features/projects/copy_project.feature +++ b/features/projects/copy_project.feature @@ -125,15 +125,15 @@ Feature: Project Settings | name | type | editable | is_for_all | | cfBug | int | true | false | And I am already admin - And I go to the settings page of the project "project1" - And I check "cfBug" within "#content" - And I press "Save" within "#content" - And I follow "Copy" within "#content" + And I go to the custom_fields tab of the settings page of the project "project1" + And I check "cfBug" + And I press "Save" + And I follow "Copy" And I fill in "Name" with "Copied Project" And I fill in "Identifier" with "cp" And I click on "Copy" Then I should see "Started to copy project" - And I go to the settings page of the project "cp" + And I go to the custom_fields tab of the settings page of the project "cp" Then the "cfBug" checkbox should be checked @javascript diff --git a/features/projects/settings.feature b/features/projects/settings.feature index e391bf88c5..1573ffc998 100644 --- a/features/projects/settings.feature +++ b/features/projects/settings.feature @@ -74,19 +74,19 @@ Feature: Project Settings And I should see "Bob Bobbit" within ".generic-table" And I should see "alpha" within ".generic-table" - @javascript + Scenario: Changing members per page keeps us on the members tab When I go to the settings page of the project "project1" And I follow "Members" within ".tabs" And I follow "20" within ".per_page_options" within "#tab-content-members" Then I should be on the members tab of the settings page of the project "project1" - @javascript + Scenario: Adding a Work Package custom field to the project When the following issue custom fields are defined: | name | type | is_for_all | | My Custom Field | text | false | - And I go to the settings page of the project "project1" - And I check "My Custom Field" within "#tab-content-info" - And I press "Save" within "#tab-content-info" + And I go to the custom_fields tab of the settings page of the project "project1" + And I check "My Custom Field" + And I press "Save" Then the "My Custom Field" checkbox should be checked diff --git a/spec/features/projects/project_settings_page.rb b/spec/features/projects/project_settings_page.rb index 8ecc1244f1..31b882788d 100644 --- a/spec/features/projects/project_settings_page.rb +++ b/spec/features/projects/project_settings_page.rb @@ -35,16 +35,10 @@ class ProjectSettingsPage end def visit_settings - visit settings_path + visit settings_project_path(@project, tab: 'custom_fields') end def fieldset_label find 'fieldset#project_issue_custom_fields label' end - - private - - def settings_path - settings_project_path(@project) - end end From e6a0e696c6c1823f621a3e8ad4d5e0959a03fc06 Mon Sep 17 00:00:00 2001 From: Stefan Botzenhart Date: Tue, 25 Aug 2015 20:17:37 +0200 Subject: [PATCH 015/112] Rewrite checkAll to jQuery --- app/assets/javascripts/application.js.erb | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/app/assets/javascripts/application.js.erb b/app/assets/javascripts/application.js.erb index 261a21c29f..53e3cd4dbf 100644 --- a/app/assets/javascripts/application.js.erb +++ b/app/assets/javascripts/application.js.erb @@ -95,13 +95,10 @@ jQuery(document).ready(function ($) { }); }); -function checkAll (id, checked) { - var els = Element.descendants(id); - for (var i = 0; i < els.length; i++) { - if (els[i].disabled === false) { - els[i].checked = checked; - } - } +function checkAll(selector, checked) { + jQuery('#' + selector + ' input:checkbox').each(function() { + this.checked = checked; + }); } function toggleCheckboxesBySelector(selector) { From 8f1fed83fb95651181e74dec0cf6b8ab2fed6dbd Mon Sep 17 00:00:00 2001 From: Stefan Botzenhart Date: Tue, 25 Aug 2015 20:18:00 +0200 Subject: [PATCH 016/112] Use checkboxes with leading labels --- .../projects/form/_custom_fields.html.erb | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/app/views/projects/form/_custom_fields.html.erb b/app/views/projects/form/_custom_fields.html.erb index 5dc016c325..5a87e8ebbd 100644 --- a/app/views/projects/form/_custom_fields.html.erb +++ b/app/views/projects/form/_custom_fields.html.erb @@ -35,21 +35,18 @@ See doc/COPYRIGHT.rdoc for more details. -
    <% work_package_custom_fields.each do |custom_field| %> -
  • - - <% - css_classes = custom_field.is_for_all? ? { disabled: "disabled" } : {} - css_classes[:lang] = custom_field.name_locale - %> - - <%= form.collection_check_box :work_package_custom_field_ids, - custom_field.id, - @project.all_work_package_custom_fields.include?(custom_field), - custom_field.name, - css_classes %> -
  • - <% end %> -
+ <% + css_classes = custom_field.is_for_all? ? { disabled: "disabled" } : {} + css_classes[:lang] = custom_field.name_locale + %> + +
+ <%= form.collection_check_box :work_package_custom_field_ids, + custom_field.id, + @project.all_work_package_custom_fields.include?(custom_field), + custom_field.name, + css_classes %> +
+ <% end %> From b4b37e840c463d9851c5979140206fd3c293bfd0 Mon Sep 17 00:00:00 2001 From: Stefan Botzenhart Date: Tue, 25 Aug 2015 20:40:59 +0200 Subject: [PATCH 017/112] Use check_all_links helper in type settings --- app/views/projects/form/_types.html.erb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/projects/form/_types.html.erb b/app/views/projects/form/_types.html.erb index 2518eedc54..bd3b0605b6 100644 --- a/app/views/projects/form/_types.html.erb +++ b/app/views/projects/form/_types.html.erb @@ -39,12 +39,12 @@ See doc/COPYRIGHT.rdoc for more details. <%=l(:label_type_plural)%>
- (<%= link_to(l(:button_check_all), "#", id: "check_all_types") + ' | ' + link_to(l(:button_uncheck_all), "#", id: "uncheck_all_types") %>) + (<%= check_all_links 'types-form' %>)
- +
From b63816f2b3e26543c0736496d39820717a2bcf0b Mon Sep 17 00:00:00 2001 From: Stefan Botzenhart Date: Tue, 25 Aug 2015 20:47:57 +0200 Subject: [PATCH 018/112] Change headline for project custom fields tab --- app/views/projects/form/_custom_fields.html.erb | 2 +- config/locales/en.yml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/views/projects/form/_custom_fields.html.erb b/app/views/projects/form/_custom_fields.html.erb index 5a87e8ebbd..4589935639 100644 --- a/app/views/projects/form/_custom_fields.html.erb +++ b/app/views/projects/form/_custom_fields.html.erb @@ -28,7 +28,7 @@ See doc/COPYRIGHT.rdoc for more details. ++#%>
- <%=l(:label_custom_field_plural)%> + <%=l(:label_enabled_project_custom_fields)%>
(<%= check_all_links 'project_issue_custom_fields' %>) diff --git a/config/locales/en.yml b/config/locales/en.yml index 58300c5c6f..80fdd4cab4 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -751,6 +751,7 @@ en: label_duplicates: "duplicates" label_edit: "Edit" label_enable_multi_select: "Toggle multiselect" + label_enabled_project_custom_fields: 'Enabled custom fields' label_end_to_end: "end to end" label_end_to_start: "end to start" label_enumeration_new: "New enumeration value" From fd029efd060df7c04846674754ca2729f4f4584b Mon Sep 17 00:00:00 2001 From: Stefan Botzenhart Date: Tue, 25 Aug 2015 20:48:41 +0200 Subject: [PATCH 019/112] Change headline for project types tab --- app/views/projects/form/_types.html.erb | 2 +- config/locales/en.yml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/views/projects/form/_types.html.erb b/app/views/projects/form/_types.html.erb index bd3b0605b6..9d7c791f52 100644 --- a/app/views/projects/form/_types.html.erb +++ b/app/views/projects/form/_types.html.erb @@ -36,7 +36,7 @@ See doc/COPYRIGHT.rdoc for more details. class: "ignored-by-flash-activation" %>
- <%=l(:label_type_plural)%> + <%=l(:label_enabled_project_types)%>
(<%= check_all_links 'types-form' %>) diff --git a/config/locales/en.yml b/config/locales/en.yml index 80fdd4cab4..8a5a75fe8d 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -752,6 +752,7 @@ en: label_edit: "Edit" label_enable_multi_select: "Toggle multiselect" label_enabled_project_custom_fields: 'Enabled custom fields' + label_enabled_project_types: 'Enabled types' label_end_to_end: "end to end" label_end_to_start: "end to start" label_enumeration_new: "New enumeration value" From ff37e615a37cc570bf8d7699be8cafa411239210 Mon Sep 17 00:00:00 2001 From: Stefan Botzenhart Date: Tue, 25 Aug 2015 21:00:10 +0200 Subject: [PATCH 020/112] Change headline for project modules tab --- app/views/projects/form/_modules.html.erb | 2 +- config/locales/en.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/projects/form/_modules.html.erb b/app/views/projects/form/_modules.html.erb index 2914d58296..de031513b5 100644 --- a/app/views/projects/form/_modules.html.erb +++ b/app/views/projects/form/_modules.html.erb @@ -32,7 +32,7 @@ See doc/COPYRIGHT.rdoc for more details. %>
- <%= l(:text_select_project_modules) %> + <%= l(:label_enabled_project_modules) %>
diff --git a/config/locales/en.yml b/config/locales/en.yml index 8a5a75fe8d..a920bb879b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -753,6 +753,7 @@ en: label_enable_multi_select: "Toggle multiselect" label_enabled_project_custom_fields: 'Enabled custom fields' label_enabled_project_types: 'Enabled types' + label_enabled_project_modules: 'Enabled modules' label_end_to_end: "end to end" label_end_to_start: "end to start" label_enumeration_new: "New enumeration value" @@ -1533,7 +1534,6 @@ en: text_regexp_info: "eg. ^[A-Z0-9]+$" text_repository_usernames_mapping: "Select or update the OpenProject user mapped to each username found in the repository log.\nUsers with the same OpenProject and repository username or email are automatically mapped." text_select_mail_notifications: "Select actions for which email notifications should be sent." - text_select_project_modules: "Select modules to enable for this project:" text_status_changed_by_changeset: "Applied in changeset %{value}." text_subprojects_destroy_warning: "Its subproject(s): %{value} will be also deleted." text_time_logged_by_changeset: "Applied in changeset %{value}." From 878a4558accc21d5004b7866d7ff9c3c9e4ccf06 Mon Sep 17 00:00:00 2001 From: Stefan Botzenhart Date: Tue, 25 Aug 2015 21:33:49 +0200 Subject: [PATCH 021/112] Clean up project activities tab --- app/views/projects/form/_activities.html.erb | 110 ++++++++++++++++++ .../projects/settings/_activities.html.erb | 95 ++------------- config/locales/en.yml | 1 + 3 files changed, 121 insertions(+), 85 deletions(-) create mode 100644 app/views/projects/form/_activities.html.erb diff --git a/app/views/projects/form/_activities.html.erb b/app/views/projects/form/_activities.html.erb new file mode 100644 index 0000000000..d0d0b27c0d --- /dev/null +++ b/app/views/projects/form/_activities.html.erb @@ -0,0 +1,110 @@ +<%#-- copyright +OpenProject is a project management system. +Copyright (C) 2012-2015 the OpenProject Foundation (OPF) + +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 doc/COPYRIGHT.rdoc for more details. + +++#%> + +
+ <%=l(:label_enabled_project_activities)%> + +
+
+
+ + + + + <% TimeEntryActivity.new.available_custom_fields.each do |value| %> + + <% end %> + + + + + + + <% TimeEntryActivity.new.available_custom_fields.each do |value| %> + + <% end %> + + + <% @project.activities(true).each do |enumeration| %> + <%= fields_for "enumerations[#{enumeration.id}]", enumeration do |ff| %> + + + + + <% enumeration.custom_field_values.each do |value| %> + + <% end %> + + <% end %> + <% end %> +
+
+
+ + <%= Enumeration.human_attribute_name(:active) %> + +
+
+
+
+
+ + <%= Enumeration.human_attribute_name(:name) %> + +
+
+
+
+
+ + <%= l(:enumeration_system_activity) %> + +
+
+
+
+
+ + <%= h value.name %> + +
+
+
+ <%= label_tag "enumerations_#{enumeration.id}_active", "#{h(enumeration.name)} #{l(:description_active)}", :class => "hidden-for-sighted" %> + <%= ff.check_box :active %> + + <%= ff.hidden_field :parent_id, :value => enumeration.id unless enumeration.project %> + <%= h(enumeration) %> + <%= checked_image !enumeration.project %> + <%= custom_field_tag "enumerations[#{enumeration.id}]", value %> +
+
+
+
+ diff --git a/app/views/projects/settings/_activities.html.erb b/app/views/projects/settings/_activities.html.erb index 510d04d9a6..3e01fea1c6 100644 --- a/app/views/projects/settings/_activities.html.erb +++ b/app/views/projects/settings/_activities.html.erb @@ -26,89 +26,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. See doc/COPYRIGHT.rdoc for more details. ++#%> -<%= form_tag(project_enumerations_path(@project), :method => :put, :class => "tabular") do %> -
-
- - - - - - <% TimeEntryActivity.new.available_custom_fields.each do |value| %> - - <% end %> - - - - - - - <% TimeEntryActivity.new.available_custom_fields.each do |value| %> - - <% end %> - - - <% @project.activities(true).each do |enumeration| %> - <%= fields_for "enumerations[#{enumeration.id}]", enumeration do |ff| %> - - - - - <% enumeration.custom_field_values.each do |value| %> - - <% end %> - - <% end %> - <% end %> -
-
-
- - <%= Enumeration.human_attribute_name(:active) %> - -
-
-
-
-
- - <%= Enumeration.human_attribute_name(:name) %> - -
-
-
-
-
- - <%= l(:enumeration_system_activity) %> - -
-
-
-
-
- - <%= h value.name %> - -
-
-
- <%= label_tag "enumerations_#{enumeration.id}_active", "#{h(enumeration.name)} #{l(:description_active)}", :class => "hidden-for-sighted" %> - <%= ff.check_box :active %> - - <%= ff.hidden_field :parent_id, :value => enumeration.id unless enumeration.project %> - <%= h(enumeration) %> - <%= checked_image !enumeration.project %> - <%= custom_field_tag "enumerations[#{enumeration.id}]", value %> -
-
-
-
-
- <%= link_to(l(:button_reset), project_enumerations_path(@project), - :method => :delete, - data: { confirm: l(:text_are_you_sure) }, - :class => 'icon icon-delete') %> -
- <%= styled_button_tag l(:button_save), class: '-highlight -with-icon icon-yes' %> + +<%= form_tag project_enumerations_path(@project), + method: :put, + class: "tabular" do %> + + <%= render partial: 'projects/form/activities', locals: { project: @project } %> + +

<%= styled_button_tag l(:button_save), class: '-highlight -with-icon icon-yes' %>

<% end %> + +
diff --git a/config/locales/en.yml b/config/locales/en.yml index a920bb879b..bc6ef904f2 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -754,6 +754,7 @@ en: label_enabled_project_custom_fields: 'Enabled custom fields' label_enabled_project_types: 'Enabled types' label_enabled_project_modules: 'Enabled modules' + label_enabled_project_activities: 'Enabled time tracking activities' label_end_to_end: "end to end" label_end_to_start: "end to start" label_enumeration_new: "New enumeration value" From 7b90b0fd705dfe530ce549f3abe773856e1ee102 Mon Sep 17 00:00:00 2001 From: Stefan Botzenhart Date: Wed, 26 Aug 2015 08:40:05 +0200 Subject: [PATCH 022/112] Remove javascript tags and speed up copy project feature --- features/projects/copy_project.feature | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/features/projects/copy_project.feature b/features/projects/copy_project.feature index 939b399375..47a75de7d2 100644 --- a/features/projects/copy_project.feature +++ b/features/projects/copy_project.feature @@ -85,7 +85,7 @@ Feature: Project Settings Then the "Identifier" field should not contain "project1" within "#content" And the "Name" field should not contain "project1" within "#content" - @javascript + Scenario: Copy a project with parent Given there are the following projects of type "Copy Project": | project2 | @@ -101,7 +101,7 @@ Feature: Project Settings And I go to the settings page of the project "cp" And I should see "project2" within "#project_parent_id" - @javascript + Scenario: Copy a project with types Given the following types are enabled for the project called "project1": | Name | @@ -119,7 +119,7 @@ Feature: Project Settings Then the "Phase1" checkbox should be checked And the "Phase2" checkbox should be checked - @javascript + Scenario: Copy a project with Custom Fields Given the following work package custom fields are defined: | name | type | editable | is_for_all | @@ -154,7 +154,7 @@ Feature: Project Settings Then I should see "issue1" within "#content" And I should see "issue2" within "#content" - @javascript + Scenario: Copying a project with some planning elements Given there are the following work packages in project "project1": | subject | start_date | due_date | From b3d15949de9ad517cbb010cf5ebfb00f4a42ff78 Mon Sep 17 00:00:00 2001 From: Stefan Botzenhart Date: Wed, 26 Aug 2015 09:23:37 +0200 Subject: [PATCH 023/112] Add headline to work package categories settings page --- .../projects/settings/_categories.html.erb | 139 ++++++++++-------- config/locales/en.yml | 1 + 2 files changed, 76 insertions(+), 64 deletions(-) diff --git a/app/views/projects/settings/_categories.html.erb b/app/views/projects/settings/_categories.html.erb index 2d8909a5a0..6ffa04d5a9 100644 --- a/app/views/projects/settings/_categories.html.erb +++ b/app/views/projects/settings/_categories.html.erb @@ -26,73 +26,84 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. See doc/COPYRIGHT.rdoc for more details. ++#%> -<% if @project.categories.any? %> -
-
- - - - - - - - -
-
-
- - <%= Category.model_name.human %> - +
+ + <%= l(:label_available_project_work_package_categories) %> + + + <% if @project.categories.any? %> +
+
+ + + + + + + + + - + - - - - - <% for category in @project.categories %> - <% unless category.new_record? %> - - - - - + + + + + + <% for category in @project.categories %> + <% unless category.new_record? %> + + + + + + <% end %> <% end %> - <% end %> - -
+
+
+ + <%= Category.model_name.human %> + +
- -
-
-
- - <%= Category.human_attribute_name(:assigned_to) %> - +
+
+
+ + <%= Category.human_attribute_name(:assigned_to) %> + +
- -
<%=h(category.name) %><%=h(category.assigned_to.name) if category.assigned_to %> - <%= link_to_if_authorized l(:button_edit), { :controller => '/categories', :action => 'edit', :id => category }, :class => 'icon icon-edit' %> - <%= link_to_if_authorized l(:button_delete), - { :controller => '/categories', - :action => 'destroy', - :id => category }, - data: { confirm: l(:text_are_you_sure) }, - method: :delete, - :class => 'icon icon-delete' %> -
<%=h(category.name) %><%=h(category.assigned_to.name) if category.assigned_to %> + <%= link_to_if_authorized l(:button_edit), + { controller: '/categories', action: 'edit', id: category }, + class: 'icon icon-edit' %> + + <%= link_to_if_authorized l(:button_delete), + { controller: '/categories', action: 'destroy', id: category }, + data: { confirm: l(:text_are_you_sure) }, + method: :delete, + class: 'icon icon-delete' %> +
-
+ +
+
+
- -<% else %> -
-
-

- - <%= l(:label_nothing_display) %> -

-
-

<%= l(:label_no_data) %>

+ <% else %> +
+
+

+ + <%= l(:label_nothing_display) %> +

+
+

<%= l(:label_no_data) %>

+
-
-<% end %> -

<%= link_to_if_authorized l(:label_work_package_category_new), :controller => '/categories', :action => 'new', :project_id => @project %>

+ <% end %> + + <%= link_to_if_authorized l(:label_work_package_category_new), + controller: '/categories', action: 'new', + project_id: @project %> +

diff --git a/config/locales/en.yml b/config/locales/en.yml index bc6ef904f2..e0f80336a4 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -676,6 +676,7 @@ en: label_auth_source_new: "New authentication mode" label_auth_source_plural: "Authentication modes" label_authentication: "Authentication" + label_available_project_work_package_categories: 'Available work package categories' label_blocked_by: "blocked by" label_blocks: "blocks" label_board_locked: "Locked" From 394c0d08a35d44c53797dc336bfb1b3fd8aaf33d Mon Sep 17 00:00:00 2001 From: Stefan Botzenhart Date: Wed, 26 Aug 2015 09:35:46 +0200 Subject: [PATCH 024/112] Authorize custom fields controller method --- app/controllers/projects_controller.rb | 2 +- config/initializers/permissions.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 44ce639f8f..ccc3b9dd94 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -36,7 +36,7 @@ class ProjectsController < ApplicationController before_filter :disable_api before_filter :find_project, except: [:index, :level_list, :new, :create] - before_filter :authorize, only: [:show, :settings, :edit, :update, :modules, :types] + before_filter :authorize, only: [:show, :settings, :edit, :update, :modules, :types, :custom_fields] before_filter :authorize_global, only: [:new, :create] before_filter :require_admin, only: [:archive, :unarchive, :destroy, :destroy_info] before_filter :jump_to_project_menu_item, only: :show diff --git a/config/initializers/permissions.rb b/config/initializers/permissions.rb index 30578d598e..2320c3d210 100644 --- a/config/initializers/permissions.rb +++ b/config/initializers/permissions.rb @@ -45,7 +45,7 @@ Redmine::AccessControl.map do |map| require: :loggedin map.permission :edit_project, - { projects: [:settings, :edit, :update], + { projects: [:settings, :edit, :update, :custom_fields], members: [:paginate_users] }, require: :member From c715295dd47836696b5926d2655f786e730a1f8a Mon Sep 17 00:00:00 2001 From: Stefan Botzenhart Date: Wed, 26 Aug 2015 09:36:03 +0200 Subject: [PATCH 025/112] Add headline to boards tab --- app/views/projects/settings/_boards.html.erb | 162 +++++++++++-------- config/locales/en.yml | 1 + 2 files changed, 92 insertions(+), 71 deletions(-) diff --git a/app/views/projects/settings/_boards.html.erb b/app/views/projects/settings/_boards.html.erb index e0b29d0183..23ce6227d2 100644 --- a/app/views/projects/settings/_boards.html.erb +++ b/app/views/projects/settings/_boards.html.erb @@ -26,81 +26,101 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. See doc/COPYRIGHT.rdoc for more details. ++#%> -<% if @project.boards.any? %> -
-
- - - - - - - - - - + + <% @project.boards.each do |board| + next if board.new_record? %> + + + + + + + <% end %> + +
-
-
- - <%= Board.model_name.human %> - + +
+ + <%= l(:label_available_project_boards) %> + + + <% if @project.boards.any? %> +
+
+ + + + + + + + + + - + - + - - - - - <% @project.boards.each do |board| - next if board.new_record? %> - - - - - + + - <% end %> - -
+
+
+ + <%= Board.model_name.human %> + +
- -
-
-
- - <%= Board.human_attribute_name(:description) %> - +
+
+
+ + <%= Board.human_attribute_name(:description) %> + +
- -
-
-
- - <%=l(:button_sort)%> - +
+
+
+ + <%=l(:button_sort)%> + +
- -
<%=h board.name %><%=h board.description %> - <% if authorize_for("boards", "edit") %> - <%= reorder_links('board', {:controller => '/boards', :action => 'move', :project_id => @project, :id => board}) %> - <% end %> - - <%= link_to_if_authorized l(:button_edit), {:controller => '/boards', :action => 'edit', :project_id => @project, :id => board}, :class => 'icon icon-edit' %> - <%= link_to_if_authorized l(:button_delete), {:controller => '/boards', :action => 'destroy', :project_id => @project, :id => board}, data: { confirm: l(:text_are_you_sure) }, :method => :delete, :class => 'icon icon-delete' %> -
-
+
<%=h board.name %><%=h board.description %> + <% if authorize_for 'boards', 'edit' %> + <%= reorder_links 'board', controller: '/boards', + action: 'move', + project_id: @project, + id: board %> + <% end %> + + <%= link_to_if_authorized l(:button_edit), + { controller: '/boards', action: 'edit', project_id: @project, id: board }, + class: 'icon icon-edit' %> + <%= link_to_if_authorized l(:button_delete), + { controller: '/boards', action: 'destroy', project_id: @project, id: board }, + data: { confirm: l(:text_are_you_sure) }, + method: :delete, + class: 'icon icon-delete' %> +
+
+
-
-<% else %> -
-
-

- - <%= l(:label_nothing_display) %> -

-
-

<%= l(:label_no_data) %>

+ <% else %> +
+
+

+ + <%= l(:label_nothing_display) %> +

+
+

<%= l(:label_no_data) %>

+
-
-<% end %> -

<%= link_to_if_authorized l(:label_board_new), {:controller => '/boards', :action => 'new', :project_id => @project} %>

+ <% end %> + +

+ <%= link_to_if_authorized l(:label_board_new), controller: '/boards', + action: 'new', + project_id: @project %> +

diff --git a/config/locales/en.yml b/config/locales/en.yml index e0f80336a4..650f569e43 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -677,6 +677,7 @@ en: label_auth_source_plural: "Authentication modes" label_authentication: "Authentication" label_available_project_work_package_categories: 'Available work package categories' + label_available_project_boards: 'Available boards' label_blocked_by: "blocked by" label_blocks: "blocks" label_board_locked: "Locked" From ad350744e471a65035d508a08da28bba5e4100db Mon Sep 17 00:00:00 2001 From: Stefan Botzenhart Date: Wed, 26 Aug 2015 10:13:20 +0200 Subject: [PATCH 026/112] Add headline to versions tab --- .../projects/settings/_versions.html.erb | 248 ++++++++++-------- config/locales/en.yml | 1 + 2 files changed, 140 insertions(+), 109 deletions(-) diff --git a/app/views/projects/settings/_versions.html.erb b/app/views/projects/settings/_versions.html.erb index 8f77158c8e..0ef340896c 100644 --- a/app/views/projects/settings/_versions.html.erb +++ b/app/views/projects/settings/_versions.html.erb @@ -26,127 +26,157 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. See doc/COPYRIGHT.rdoc for more details. ++#%> -<% if @project.shared_versions.any? %> -
-
- - - - - - - - - - - - - - + + <% for version in @project.shared_versions.sort %> + + + + + + + + + + + <% end %> + +
-
-
- - <%= Version.model_name.human %> - + +
+ + <%= l(:label_available_project_versions) %> + + + <% if @project.shared_versions.any? %> +
+
+ + + + + + + + + + + + + + - + - + - + - + - + - + - - - - - <% for version in @project.shared_versions.sort %> - - - - - - - - - + + - <% end %> - -
+
+
+ + <%= Version.model_name.human %> + +
- -
-
-
- - <%= Version.human_attribute_name(:start_date) %> - +
+
+
+ + <%= Version.human_attribute_name(:start_date) %> + +
- -
-
-
- - <%= Version.human_attribute_name(:effective_date) %> - +
+
+
+ + <%= Version.human_attribute_name(:effective_date) %> + +
- -
-
-
- - <%= Version.human_attribute_name(:description) %> - +
+
+
+ + <%= Version.human_attribute_name(:description) %> + +
- -
-
-
- - <%= Version.human_attribute_name(:status) %> - +
+
+
+ + <%= Version.human_attribute_name(:status) %> + +
- -
-
-
- - <%= Version.human_attribute_name(:sharing) %> - +
+
+
+ + <%= Version.human_attribute_name(:sharing) %> + +
- -
-
-
- - <%= WikiPage.model_name.human %> - +
+
+
+ + <%= WikiPage.model_name.human %> + +
- -
<%= link_to_version version %><%= format_date(version.start_date) %><%= format_date(version.effective_date) %><%=h version.description %><%= l("version_status_#{version.status}") %><%= link_to_if_authorized(h(version.wiki_page_title), {:controller => '/wiki', :action => 'show', :project_id => version.project, :id => Wiki.titleize(version.wiki_page_title)}) || h(version.wiki_page_title) unless version.wiki_page_title.blank? || version.project.wiki.nil? %> - <% if version.project == @project %> - <%= link_to_if_authorized l(:button_edit), {:controller => '/versions', :action => 'edit', :id => version }, :class => 'icon icon-edit' %> - <%= link_to_if_authorized l(:button_delete), {:controller => '/versions', :action => 'destroy', :id => version}, data: { confirm: l(:text_are_you_sure) }, :method => :delete, :class => 'icon icon-delete' %> - <% end %> -
-
+
+ <%= link_to_version version %> + <%= format_date(version.start_date) %><%= format_date(version.effective_date) %><%=h version.description %><%= l("version_status_#{version.status}") %> + <%= link_to_if_authorized( h(version.wiki_page_title), + { controller: '/wiki', + action: 'show', + project_id: version.project, + id: Wiki.titleize(version.wiki_page_title) }) || + h(version.wiki_page_title) unless version.wiki_page_title.blank? || version.project.wiki.nil? %> + + <% if version.project == @project %> + <%= link_to_if_authorized l(:button_edit), + { controller: '/versions', action: 'edit', id: version }, + class: 'icon icon-edit' %> + <%= link_to_if_authorized l(:button_delete), + { controller: '/versions', action: 'destroy', id: version }, + data: { confirm: l(:text_are_you_sure) }, + method: :delete, + class: 'icon icon-delete' %> + <% end %> +
+
+
-
-<% else %> -
-
-

- - <%= l(:label_nothing_display) %> -

-
-

<%= l(:label_no_data) %>

+ <% else %> +
+
+

+ + <%= l(:label_nothing_display) %> +

+
+

<%= l(:label_no_data) %>

+
-
-<% end %> + <% end %> + +
<% if @project.versions.any? %> - <%= link_to l(:label_close_versions), close_completed_project_versions_path(@project), :method => :put %> + <%= link_to l(:label_close_versions), + close_completed_project_versions_path(@project), + method: :put %> <% end %>
-

<%= link_to_if_authorized l(:label_version_new), :controller => '/versions', :action => 'new', :project_id => @project %>

+ +

+ <%= link_to_if_authorized l(:label_version_new), + { controller: '/versions', action: 'new', project_id: @project }, + class: 'button -alt-highlight' %> +

diff --git a/config/locales/en.yml b/config/locales/en.yml index 650f569e43..6081689bb0 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -678,6 +678,7 @@ en: label_authentication: "Authentication" label_available_project_work_package_categories: 'Available work package categories' label_available_project_boards: 'Available boards' + label_available_project_versions: 'Available versions' label_blocked_by: "blocked by" label_blocks: "blocks" label_board_locked: "Locked" From 521545c309b592cfb5f02751a7e7141d4aebb691 Mon Sep 17 00:00:00 2001 From: Stefan Botzenhart Date: Wed, 26 Aug 2015 10:13:47 +0200 Subject: [PATCH 027/112] Format 'new' links as buttons --- app/views/projects/settings/_boards.html.erb | 6 +++--- app/views/projects/settings/_categories.html.erb | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/app/views/projects/settings/_boards.html.erb b/app/views/projects/settings/_boards.html.erb index 23ce6227d2..8779cea3c7 100644 --- a/app/views/projects/settings/_boards.html.erb +++ b/app/views/projects/settings/_boards.html.erb @@ -120,7 +120,7 @@ See doc/COPYRIGHT.rdoc for more details. <% end %>

- <%= link_to_if_authorized l(:label_board_new), controller: '/boards', - action: 'new', - project_id: @project %> + <%= link_to_if_authorized l(:label_board_new), + { controller: '/boards', action: 'new', project_id: @project }, + class: 'button -alt-highlight' %>

diff --git a/app/views/projects/settings/_categories.html.erb b/app/views/projects/settings/_categories.html.erb index 6ffa04d5a9..e5ff8ef044 100644 --- a/app/views/projects/settings/_categories.html.erb +++ b/app/views/projects/settings/_categories.html.erb @@ -26,6 +26,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. See doc/COPYRIGHT.rdoc for more details. ++#%> +
<%= l(:label_available_project_work_package_categories) %> @@ -104,6 +105,6 @@ See doc/COPYRIGHT.rdoc for more details.
<%= link_to_if_authorized l(:label_work_package_category_new), - controller: '/categories', action: 'new', - project_id: @project %> + { controller: '/categories', action: 'new', project_id: @project }, + class: 'button -alt-highlight' %>

From fbf5ead35174f965ff19dea50e6bdd3e9aeeb34f Mon Sep 17 00:00:00 2001 From: Stefan Botzenhart Date: Wed, 26 Aug 2015 10:29:08 +0200 Subject: [PATCH 028/112] Add headline to repositories tab --- app/views/repositories/_settings.html.erb | 10 ++++++++-- config/locales/en.yml | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/views/repositories/_settings.html.erb b/app/views/repositories/_settings.html.erb index 9e333003e5..3433531c83 100644 --- a/app/views/repositories/_settings.html.erb +++ b/app/views/repositories/_settings.html.erb @@ -27,7 +27,6 @@ See doc/COPYRIGHT.rdoc for more details. ++#%> - <% is_creation_form = @repository.nil? || @repository.new_record? %> <%= form_for :repository, remote: true, @@ -37,6 +36,12 @@ See doc/COPYRIGHT.rdoc for more details. method: is_creation_form ? 'POST' : 'PUT', builder: TabularFormBuilder, html: { class: 'form' } do |f| %> + +
+ + <%= l(:label_available_project_repositories) %> + + <%= error_messages_for 'repository' %> <%# Hide the select for existing repositories %> <% if is_creation_form %> @@ -55,7 +60,7 @@ See doc/COPYRIGHT.rdoc for more details. <%= render partial: "/repositories/settings/vendor_form", locals: { form: f, repository: @repository } %> <% end %> - + <%# Allow plugins to add additional information %> <%= call_hook :repository_settings_fields, repository: @repository, form: f %> @@ -64,4 +69,5 @@ See doc/COPYRIGHT.rdoc for more details. <%= render partial: "/repositories/settings/submit", locals: { form: f, is_creation_form: is_creation_form, project: @project } %> <% end %> +
<% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 6081689bb0..1a315a4673 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -679,6 +679,7 @@ en: label_available_project_work_package_categories: 'Available work package categories' label_available_project_boards: 'Available boards' label_available_project_versions: 'Available versions' + label_available_project_repositories: 'Available repositories' label_blocked_by: "blocked by" label_blocks: "blocks" label_board_locked: "Locked" From 406d365546c85293136f0ad770057cae8523ca69 Mon Sep 17 00:00:00 2001 From: Stefan Botzenhart Date: Wed, 26 Aug 2015 10:41:34 +0200 Subject: [PATCH 029/112] Add routing specs for settings --- spec/routing/project_routing_spec.rb | 57 ++++++++++++++++------------ 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/spec/routing/project_routing_spec.rb b/spec/routing/project_routing_spec.rb index b3cc7445d3..d61834f2c4 100644 --- a/spec/routing/project_routing_spec.rb +++ b/spec/routing/project_routing_spec.rb @@ -30,29 +30,29 @@ require 'spec_helper' describe ProjectsController, type: :routing do describe 'index' do - it { expect(get('/projects')).to route_to(controller: 'projects', action: 'index') } - it { expect(get('/projects.atom')).to route_to(controller: 'projects', action: 'index', format: 'atom') } - it { expect(get('/projects.xml')).to route_to(controller: 'projects', action: 'index', format: 'xml') } + it { expect(get('/projects')).to route_to(controller: 'projects', action: 'index') } + it { expect(get('/projects.atom')).to route_to(controller: 'projects', action: 'index', format: 'atom') } + it { expect(get('/projects.xml')).to route_to(controller: 'projects', action: 'index', format: 'xml') } end describe 'show' do - it { expect(get('/projects/1')).to route_to(controller: 'projects', action: 'show', id: '1') } - it { expect(get('/projects/1.xml')).to route_to(controller: 'projects', action: 'show', id: '1', format: 'xml') } - it { expect(get('/projects/test')).to route_to(controller: 'projects', action: 'show', id: 'test') } + it { expect(get('/projects/1')).to route_to(controller: 'projects', action: 'show', id: '1') } + it { expect(get('/projects/1.xml')).to route_to(controller: 'projects', action: 'show', id: '1', format: 'xml') } + it { expect(get('/projects/test')).to route_to(controller: 'projects', action: 'show', id: 'test') } end describe 'new' do - it { expect(get('/projects/new')).to route_to(controller: 'projects', action: 'new') } + it { expect(get('/projects/new')).to route_to(controller: 'projects', action: 'new') } end describe 'create' do - it { expect(post('/projects')).to route_to(controller: 'projects', action: 'create') } - it { expect(post('/projects.xml')).to route_to(controller: 'projects', action: 'create', format: 'xml') } + it { expect(post('/projects')).to route_to(controller: 'projects', action: 'create') } + it { expect(post('/projects.xml')).to route_to(controller: 'projects', action: 'create', format: 'xml') } end describe 'update' do - it { expect(put('/projects/123')).to route_to(controller: 'projects', action: 'update', id: '123') } - it { expect(put('/projects/123.xml')).to route_to(controller: 'projects', action: 'update', id: '123', format: 'xml') } + it { expect(put('/projects/123')).to route_to(controller: 'projects', action: 'update', id: '123') } + it { expect(put('/projects/123.xml')).to route_to(controller: 'projects', action: 'update', id: '123', format: 'xml') } end describe 'destroy_info' do @@ -60,25 +60,34 @@ describe ProjectsController, type: :routing do end describe 'delete' do - it { expect(delete('/projects/123')).to route_to(controller: 'projects', action: 'destroy', id: '123') } + it { expect(delete('/projects/123')).to route_to(controller: 'projects', action: 'destroy', id: '123') } it { expect(delete('/projects/123.xml')).to route_to(controller: 'projects', action: 'destroy', id: '123', format: 'xml') } end - describe 'miscellanous' do - it { expect(get('/projects/123/settings')).to route_to(controller: 'projects', action: 'settings', id: '123') } - it { expect(get('/projects/123/settings/members')).to route_to(controller: 'projects', action: 'settings', id: '123', tab: 'members') } - it { expect(put('projects/123/modules')).to route_to(controller: 'projects', action: 'modules', id: '123') } - it { expect(put('projects/123/archive')).to route_to(controller: 'projects', action: 'archive', id: '123') } - it { expect(put('projects/123/unarchive')).to route_to(controller: 'projects', action: 'unarchive', id: '123') } + describe 'miscellaneous' do + it { expect(get('/projects/123/settings')).to route_to(controller: 'projects', action: 'settings', id: '123') } + it { expect(put('projects/123/modules')).to route_to(controller: 'projects', action: 'modules', id: '123') } + it { expect(put('projects/123/custom_fields')).to route_to(controller: 'projects', action: 'custom_fields', id: '123') } + it { expect(put('projects/123/archive')).to route_to(controller: 'projects', action: 'archive', id: '123') } + it { expect(put('projects/123/unarchive')).to route_to(controller: 'projects', action: 'unarchive', id: '123') } + it { expect(post('projects/123/copy')).to route_to(controller: 'copy_projects', action: 'copy', id: '123') } it { expect(get('projects/123/copy_project_from_settings')).to route_to(controller: 'copy_projects', action: 'copy_project', id: '123', coming_from: 'settings') } - it { expect(post('projects/123/copy')).to route_to(controller: 'copy_projects', action: 'copy', id: '123') } + end + + describe 'settings' do + it { expect(get('/projects/123/settings/info')).to route_to(controller: 'projects', action: 'settings', id: '123', tab: 'info') } + it { expect(get('/projects/123/settings/modules')).to route_to(controller: 'projects', action: 'settings', id: '123', tab: 'modules') } + it { expect(get('/projects/123/settings/members')).to route_to(controller: 'projects', action: 'settings', id: '123', tab: 'members') } + it { expect(get('/projects/123/settings/custom_fields')).to route_to(controller: 'projects', action: 'settings', id: '123', tab: 'custom_fields') } + it { expect(get('/projects/123/settings/versions')).to route_to(controller: 'projects', action: 'settings', id: '123', tab: 'versions') } + it { expect(get('/projects/123/settings/categories')).to route_to(controller: 'projects', action: 'settings', id: '123', tab: 'categories') } + it { expect(get('/projects/123/settings/repositories')).to route_to(controller: 'projects', action: 'settings', id: '123', tab: 'repositories') } + it { expect(get('/projects/123/settings/boards')).to route_to(controller: 'projects', action: 'settings', id: '123', tab: 'boards') } + it { expect(get('/projects/123/settings/activities')).to route_to(controller: 'projects', action: 'settings', id: '123', tab: 'activities') } + it { expect(get('/projects/123/settings/types')).to route_to(controller: 'projects', action: 'settings', id: '123', tab: 'types') } end describe 'types' do - it do - expect(patch('/projects/123/types')).to route_to(controller: 'projects', - action: 'types', - id: '123') - end + it { expect(patch('/projects/123/types')).to route_to(controller: 'projects', action: 'types', id: '123') } end end From 984e06ea6b66cf5dfe1ac13d0e11475d44fc743f Mon Sep 17 00:00:00 2001 From: Stefan Botzenhart Date: Wed, 26 Aug 2015 10:55:11 +0200 Subject: [PATCH 030/112] Add concise method for settings page object --- spec/features/accessibility/custom_fields_spec.rb | 2 +- spec/features/projects/project_settings_page.rb | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/spec/features/accessibility/custom_fields_spec.rb b/spec/features/accessibility/custom_fields_spec.rb index 8e0dcc3c43..9f87435f52 100644 --- a/spec/features/accessibility/custom_fields_spec.rb +++ b/spec/features/accessibility/custom_fields_spec.rb @@ -161,7 +161,7 @@ describe 'Custom field accessibility', type: :feature do before do allow(I18n).to receive(:locale).and_return locale - project_settings_page.visit_settings + project_settings_page.visit_settings_tab('custom_fields') end end diff --git a/spec/features/projects/project_settings_page.rb b/spec/features/projects/project_settings_page.rb index 31b882788d..78d5e2a4bc 100644 --- a/spec/features/projects/project_settings_page.rb +++ b/spec/features/projects/project_settings_page.rb @@ -35,10 +35,20 @@ class ProjectSettingsPage end def visit_settings - visit settings_project_path(@project, tab: 'custom_fields') + visit settings_path + end + + def visit_settings_tab tab + visit settings_path(tab: tab) end def fieldset_label find 'fieldset#project_issue_custom_fields label' end + + private + + def settings_path options = {} + settings_project_path(@project, options) + end end From 911301eba7b91389347c8f2921a7d3327a5a617f Mon Sep 17 00:00:00 2001 From: Stefan Botzenhart Date: Wed, 26 Aug 2015 13:12:39 +0200 Subject: [PATCH 031/112] Do not care about disabled checkboxes when (un)checking all --- app/assets/javascripts/application.js.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/application.js.erb b/app/assets/javascripts/application.js.erb index 53e3cd4dbf..70064b7282 100644 --- a/app/assets/javascripts/application.js.erb +++ b/app/assets/javascripts/application.js.erb @@ -96,7 +96,7 @@ jQuery(document).ready(function ($) { }); function checkAll(selector, checked) { - jQuery('#' + selector + ' input:checkbox').each(function() { + jQuery('#' + selector + ' input:checkbox').not(':disabled').each(function() { this.checked = checked; }); } From a24ca294afff391149cd98ee00dbdca6c99469de Mon Sep 17 00:00:00 2001 From: kgalli Date: Wed, 26 Aug 2015 12:12:54 +0000 Subject: [PATCH 032/112] Add installation information The installation guide includes Debian 8 and SuSE 12 installation information now. Also adds disclaimer in regard to the support of website management tools like Plesk. [ci skip] --- .../packager/installation-guide.md | 62 +++++++++++++++---- 1 file changed, 51 insertions(+), 11 deletions(-) diff --git a/doc/operation_guides/packager/installation-guide.md b/doc/operation_guides/packager/installation-guide.md index e5c9ed5359..b0bee9d231 100644 --- a/doc/operation_guides/packager/installation-guide.md +++ b/doc/operation_guides/packager/installation-guide.md @@ -1,3 +1,7 @@ +*Please be aware that Web Server and Website Management Tools like Plesk +and others do not work well together with our packaged solution. We +strongly recommend to install OpenProject CE on a clean install.* + # OpenProject installation via package manager The installation of the OpenProject software can be done manually or via official software-packages build by the packager.io service. Using these software packages is highly recommended to reduce the pain of installation and configuration errors. Besides the installation via package manager is done via configuration wizard which is very helpful to get everything up and running right from the beginning. @@ -14,10 +18,17 @@ Ruby 2.1.3 (MRI) and necessary libraries to run the OpenProject source code. The installation procedure assumes the following prerequisites to be met: * A server running one of the following Linux distributions: - * _Debian 7.6 Wheezy 64 bits server_ - * _Ubuntu 14.04 Trusty 64bits server_ - * _Fedora 20 64bits server_ - * _CentOS 6 / RHEL 6 64 bits server_ + +| Distribution (64 bits only) | Identifier | init system | +| :------------------------------ | :----------- | :---------- | +| Ubuntu 14.04 Trusty | ubuntu-14.04 | upstart | +| Debian 8 Jessie | debian-8 | systemd | +| Debian 7 Wheezy | debiani-7 | sysvinit | +| CentOS/RHEL 7.x | centos-7 | systemd | +| CentOS/RHEL 6.x | centos-6 | upstart | +| Fedora 20 | fedora-20 | sysvinit | +| Suse Linux Enterprise Server 12 | sles-12 | sysvinit | + * A mail server that is accessible via SMTP that can be used for sending notification emails. OpenProject supports authentication, yet does not provide support for SMTP via SSL/TLS. If you intend to use SSL for OpenProject: @@ -27,7 +38,7 @@ If you intend to use SSL for OpenProject: The following steps have to be performed to initiate the actual installation of OpenProject via package manager. Note that all commands should either be run as root or should be prepended by sudo otherwise (typically depending what linux distribution is used). -## Debian 7.6 Wheezy 64bits server +## Debian 7 Wheezy # install https support apt-get install apt-transport-https @@ -37,15 +48,24 @@ The following steps have to be performed to initiate the actual installation of sudo apt-get update sudo apt-get install openproject -## Ubuntu 14.04 Trusty 64bits server +## Debian 8 Jessie + + # install https support + apt-get install apt-transport-https + + wget -qO - https://deb.packager.io/key | sudo apt-key add - + echo "deb https://deb.packager.io/gh/opf/openproject jessie stable/4.2" | sudo tee /etc/apt/sources.list.d/openproject.list + sudo apt-get update + sudo apt-get install openproject + +## Ubuntu 14.04 Trusty wget -qO - https://deb.packager.io/key | sudo apt-key add - - echo "deb https://deb.packager.io/gh/opf/openproject trusty stable/4.2" | - sudo tee /etc/apt/sources.list.d/openproject.list + echo "deb https://deb.packager.io/gh/opf/openproject trusty stable/4.2" | sudo tee /etc/apt/sources.list.d/openproject.list sudo apt-get update sudo apt-get install openproject -## Fedora 20 64bits server +## Fedora 20 sudo rpm --import https://rpm.packager.io/key echo "[openproject] @@ -54,7 +74,7 @@ The following steps have to be performed to initiate the actual installation of enabled=1" | sudo tee /etc/yum.repos.d/openproject.repo sudo yum install openproject -## CentOS / RHEL 6 64 bits server +## CentOS / RHEL 6.x sudo rpm --import https://rpm.packager.io/key echo "[openproject] @@ -63,6 +83,21 @@ The following steps have to be performed to initiate the actual installation of enabled=1" | sudo tee /etc/yum.repos.d/openproject.repo sudo yum install openproject +## CentOS / RHEL 7.x + + sudo rpm --import https://rpm.packager.io/key + echo "[openproject] + name=Repository for opf/openproject application. + baseurl=https://rpm.packager.io/gh/opf/openproject/centos7/stable/4.2 + enabled=1" | sudo tee /etc/yum.repos.d/openproject.repo + sudo yum install openproject + +## Suse Linux Enterprise Server 12 + + sudo rpm --import https://rpm.packager.io/key + sudo zypper addrepo "https://rpm.packager.io/gh/opf/openproject/sles12/stable/4.2" "openproject" + sudo zypper install openproject + # Post-Install Configuration After the installation of the OpenProject package the system has to be configured to use this package and operate the OpenProject application. Therefore the package includes aconfiguration wizard which can be started using the following command. @@ -135,7 +170,7 @@ The command above will bring up the installation wizard again. Please be aware t # Upgrade to a newer version -Upgrading the OpenProject is as easy as installing a newer OpenProject package and running the openproject configure command. +Upgrading the OpenProject is as easy as installing a newer OpenProject package and running the `openproject configure` command. ## Debian / Ubuntu @@ -149,3 +184,8 @@ Upgrading the OpenProject is as easy as installing a newer OpenProject package a sudo yum install openproject sudo openproject +## SuSE Enterprise Server 12 + + sudo zypper update openproject + sudo openproject configure + From 7e74650e02c8b41bd57577d250bc4f7dd82c05b6 Mon Sep 17 00:00:00 2001 From: Stefan Botzenhart Date: Wed, 26 Aug 2015 13:18:27 +0200 Subject: [PATCH 033/112] Fix rubocop concerns --- app/controllers/projects_controller.rb | 4 +- app/helpers/projects_helper.rb | 91 ++++++-- .../projects/project_settings_page.rb | 4 +- spec/routing/project_routing_spec.rb | 221 +++++++++++++++--- 4 files changed, 272 insertions(+), 48 deletions(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index ccc3b9dd94..9171fb2177 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -36,7 +36,9 @@ class ProjectsController < ApplicationController before_filter :disable_api before_filter :find_project, except: [:index, :level_list, :new, :create] - before_filter :authorize, only: [:show, :settings, :edit, :update, :modules, :types, :custom_fields] + before_filter :authorize, only: [ + :show, :settings, :edit, :update, :modules, :types, :custom_fields + ] before_filter :authorize_global, only: [:new, :create] before_filter :require_admin, only: [:archive, :unarchive, :destroy, :destroy_info] before_filter :jump_to_project_menu_item, only: :show diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index bc602cfc7d..038cd00c91 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -32,21 +32,76 @@ module ProjectsHelper def link_to_version(version, html_options = {}, options = {}) return '' unless version && version.is_a?(Version) - link_to_if version.visible?, options[:before_text].to_s.html_safe + format_version_name(version), { controller: '/versions', action: 'show', id: version }, html_options + + link_name = options[:before_text].to_s.html_safe + format_version_name(version) + link_to_if version.visible?, + link_name, + { controller: '/versions', action: 'show', id: version }, + html_options end def project_settings_tabs - tabs = [{ name: 'info', action: :edit_project, partial: 'projects/edit', label: :label_information_plural }, - { name: 'modules', action: :select_project_modules, partial: 'projects/settings/modules', label: :label_module_plural }, - { name: 'members', action: :manage_members, partial: 'projects/settings/members', label: :label_member_plural }, - { name: 'custom_fields', action: :edit_project, partial: 'projects/settings/custom_fields', label: :label_custom_field_plural }, - { name: 'versions', action: :manage_versions, partial: 'projects/settings/versions', label: :label_version_plural }, - { name: 'categories', action: :manage_categories, partial: 'projects/settings/categories', label: :label_work_package_category_plural }, - { name: 'repository', action: :manage_repository, partial: 'repositories/settings', label: :label_repository }, - { name: 'boards', action: :manage_boards, partial: 'projects/settings/boards', label: :label_board_plural }, - { name: 'activities', action: :manage_project_activities, partial: 'projects/settings/activities', label: :enumeration_activities }, - { name: 'types', action: :manage_types, partial: 'projects/settings/types', label: :label_type_plural } - ] + tabs = [ + { + name: 'info', + action: :edit_project, + partial: 'projects/edit', + label: :label_information_plural + }, + { + name: 'modules', + action: :select_project_modules, + partial: 'projects/settings/modules', + label: :label_module_plural }, + { + name: 'members', + action: :manage_members, + partial: 'projects/settings/members', + label: :label_member_plural + }, + { + name: 'custom_fields', + action: :edit_project, + partial: 'projects/settings/custom_fields', + label: :label_custom_field_plural + }, + { + name: 'versions', + action: :manage_versions, + partial: 'projects/settings/versions', + label: :label_version_plural + }, + { + name: 'categories', + action: :manage_categories, + partial: 'projects/settings/categories', + label: :label_work_package_category_plural + }, + { + name: 'repository', + action: :manage_repository, + partial: 'repositories/settings', + label: :label_repository + }, + { + name: 'boards', + action: :manage_boards, + partial: 'projects/settings/boards', + label: :label_board_plural + }, + { + name: 'activities', + action: :manage_project_activities, + partial: 'projects/settings/activities', + label: :enumeration_activities + }, + { + name: 'types', + action: :manage_types, + partial: 'projects/settings/types', + label: :label_type_plural + } + ] tabs.select { |tab| User.current.allowed_to?(tab[:action], @project) } end @@ -61,6 +116,7 @@ module ProjectsHelper Project.project_tree(projects) do |project, _level| # set the project environment to please macros. @project = project + if ancestors.empty? || project.is_descendant_of?(ancestors.last) s << "
    \n" else @@ -71,14 +127,22 @@ module ProjectsHelper s << "
\n" end end + classes = (ancestors.empty? ? 'root' : 'child') s << "
  • " + link_to_project(project, {}, { class: 'project' }, true) - s << "
    #{format_text(project.short_description, project: project)}
    " unless project.description.blank? + + unless project.description.blank? + formatted_text = format_text(project.short_description, project: project) + s << "
    #{formatted_text}
    " + end + s << "
    \n" ancestors << project end + s << ("
  • \n" * ancestors.size) + @project = original_project end s.html_safe @@ -90,6 +154,7 @@ module ProjectsHelper versions.each do |version| grouped[version.project.name] << [version.name, version.id] end + # Add in the selected if selected && !versions.include?(selected) grouped[selected.project.name] << [selected.name, selected.id] diff --git a/spec/features/projects/project_settings_page.rb b/spec/features/projects/project_settings_page.rb index 78d5e2a4bc..3f9964ef80 100644 --- a/spec/features/projects/project_settings_page.rb +++ b/spec/features/projects/project_settings_page.rb @@ -38,7 +38,7 @@ class ProjectSettingsPage visit settings_path end - def visit_settings_tab tab + def visit_settings_tab(tab) visit settings_path(tab: tab) end @@ -48,7 +48,7 @@ class ProjectSettingsPage private - def settings_path options = {} + def settings_path(options = {}) settings_project_path(@project, options) end end diff --git a/spec/routing/project_routing_spec.rb b/spec/routing/project_routing_spec.rb index d61834f2c4..72dd4e83d3 100644 --- a/spec/routing/project_routing_spec.rb +++ b/spec/routing/project_routing_spec.rb @@ -30,64 +30,221 @@ require 'spec_helper' describe ProjectsController, type: :routing do describe 'index' do - it { expect(get('/projects')).to route_to(controller: 'projects', action: 'index') } - it { expect(get('/projects.atom')).to route_to(controller: 'projects', action: 'index', format: 'atom') } - it { expect(get('/projects.xml')).to route_to(controller: 'projects', action: 'index', format: 'xml') } + it do + expect(get('/projects')).to route_to( + controller: 'projects', action: 'index' + ) + end + + it do + expect(get('/projects.atom')).to route_to( + controller: 'projects', action: 'index', format: 'atom' + ) + end + + it do + expect(get('/projects.xml')).to route_to( + controller: 'projects', action: 'index', format: 'xml' + ) + end end describe 'show' do - it { expect(get('/projects/1')).to route_to(controller: 'projects', action: 'show', id: '1') } - it { expect(get('/projects/1.xml')).to route_to(controller: 'projects', action: 'show', id: '1', format: 'xml') } - it { expect(get('/projects/test')).to route_to(controller: 'projects', action: 'show', id: 'test') } + it do + expect(get('/projects/1')).to route_to( + controller: 'projects', action: 'show', id: '1' + ) + end + + it do + expect(get('/projects/1.xml')).to route_to( + controller: 'projects', action: 'show', id: '1', format: 'xml' + ) + end + + it do + expect(get('/projects/test')).to route_to( + controller: 'projects', action: 'show', id: 'test' + ) + end end describe 'new' do - it { expect(get('/projects/new')).to route_to(controller: 'projects', action: 'new') } + it do + expect(get('/projects/new')).to route_to( + controller: 'projects', action: 'new' + ) + end end describe 'create' do - it { expect(post('/projects')).to route_to(controller: 'projects', action: 'create') } - it { expect(post('/projects.xml')).to route_to(controller: 'projects', action: 'create', format: 'xml') } + it do + expect(post('/projects')).to route_to( + controller: 'projects', action: 'create' + ) + end + + it do + expect(post('/projects.xml')).to route_to( + controller: 'projects', action: 'create', format: 'xml' + ) + end end describe 'update' do - it { expect(put('/projects/123')).to route_to(controller: 'projects', action: 'update', id: '123') } - it { expect(put('/projects/123.xml')).to route_to(controller: 'projects', action: 'update', id: '123', format: 'xml') } + it do + expect(put('/projects/123')).to route_to( + controller: 'projects', action: 'update', id: '123' + ) + end + + it do + expect(put('/projects/123.xml')).to route_to( + controller: 'projects', action: 'update', id: '123', format: 'xml' + ) + end end describe 'destroy_info' do - it { expect(get('/projects/123/destroy_info')).to route_to(controller: 'projects', action: 'destroy_info', id: '123') } + it do + expect(get('/projects/123/destroy_info')).to route_to( + controller: 'projects', action: 'destroy_info', id: '123' + ) + end end describe 'delete' do - it { expect(delete('/projects/123')).to route_to(controller: 'projects', action: 'destroy', id: '123') } - it { expect(delete('/projects/123.xml')).to route_to(controller: 'projects', action: 'destroy', id: '123', format: 'xml') } + it do + expect(delete('/projects/123')).to route_to( + controller: 'projects', action: 'destroy', id: '123' + ) + end + + it do + expect(delete('/projects/123.xml')).to route_to( + controller: 'projects', action: 'destroy', id: '123', format: 'xml' + ) + end end describe 'miscellaneous' do - it { expect(get('/projects/123/settings')).to route_to(controller: 'projects', action: 'settings', id: '123') } - it { expect(put('projects/123/modules')).to route_to(controller: 'projects', action: 'modules', id: '123') } - it { expect(put('projects/123/custom_fields')).to route_to(controller: 'projects', action: 'custom_fields', id: '123') } - it { expect(put('projects/123/archive')).to route_to(controller: 'projects', action: 'archive', id: '123') } - it { expect(put('projects/123/unarchive')).to route_to(controller: 'projects', action: 'unarchive', id: '123') } - it { expect(post('projects/123/copy')).to route_to(controller: 'copy_projects', action: 'copy', id: '123') } - it { expect(get('projects/123/copy_project_from_settings')).to route_to(controller: 'copy_projects', action: 'copy_project', id: '123', coming_from: 'settings') } + it do + expect(get('/projects/123/settings')).to route_to( + controller: 'projects', action: 'settings', id: '123' + ) + end + + it do + expect(put('projects/123/modules')).to route_to( + controller: 'projects', action: 'modules', id: '123' + ) + end + + it do + expect(put('projects/123/custom_fields')).to route_to( + controller: 'projects', action: 'custom_fields', id: '123' + ) + end + + it do + expect(put('projects/123/archive')).to route_to( + controller: 'projects', action: 'archive', id: '123' + ) + end + + it do + expect(put('projects/123/unarchive')).to route_to( + controller: 'projects', action: 'unarchive', id: '123' + ) + end + + it do + expect(post('projects/123/copy')).to route_to( + controller: 'copy_projects', action: 'copy', id: '123' + ) + end + + it do + expect(get('projects/123/copy_project_from_settings')).to route_to( + controller: 'copy_projects', action: 'copy_project', id: '123', + coming_from: 'settings' + ) + end end describe 'settings' do - it { expect(get('/projects/123/settings/info')).to route_to(controller: 'projects', action: 'settings', id: '123', tab: 'info') } - it { expect(get('/projects/123/settings/modules')).to route_to(controller: 'projects', action: 'settings', id: '123', tab: 'modules') } - it { expect(get('/projects/123/settings/members')).to route_to(controller: 'projects', action: 'settings', id: '123', tab: 'members') } - it { expect(get('/projects/123/settings/custom_fields')).to route_to(controller: 'projects', action: 'settings', id: '123', tab: 'custom_fields') } - it { expect(get('/projects/123/settings/versions')).to route_to(controller: 'projects', action: 'settings', id: '123', tab: 'versions') } - it { expect(get('/projects/123/settings/categories')).to route_to(controller: 'projects', action: 'settings', id: '123', tab: 'categories') } - it { expect(get('/projects/123/settings/repositories')).to route_to(controller: 'projects', action: 'settings', id: '123', tab: 'repositories') } - it { expect(get('/projects/123/settings/boards')).to route_to(controller: 'projects', action: 'settings', id: '123', tab: 'boards') } - it { expect(get('/projects/123/settings/activities')).to route_to(controller: 'projects', action: 'settings', id: '123', tab: 'activities') } - it { expect(get('/projects/123/settings/types')).to route_to(controller: 'projects', action: 'settings', id: '123', tab: 'types') } + it do + expect(get('/projects/123/settings/info')).to route_to( + controller: 'projects', action: 'settings', id: '123', tab: 'info' + ) + end + + it do + expect(get('/projects/123/settings/modules')).to route_to( + controller: 'projects', action: 'settings', id: '123', tab: 'modules' + ) + end + + it do + expect(get('/projects/123/settings/members')).to route_to( + controller: 'projects', action: 'settings', id: '123', tab: 'members' + ) + end + + it do + expect(get('/projects/123/settings/custom_fields')).to route_to( + controller: 'projects', action: 'settings', id: '123', + tab: 'custom_fields' + ) + end + + it do + expect(get('/projects/123/settings/versions')).to route_to( + controller: 'projects', action: 'settings', id: '123', + tab: 'versions' + ) + end + + it do + expect(get('/projects/123/settings/categories')).to route_to( + controller: 'projects', action: 'settings', id: '123', tab: 'categories' + ) + end + + it do + expect(get('/projects/123/settings/repositories')).to route_to( + controller: 'projects', action: 'settings', id: '123', + tab: 'repositories' + ) + end + + it do + expect(get('/projects/123/settings/boards')).to route_to( + controller: 'projects', action: 'settings', id: '123', + tab: 'boards' + ) + end + + it do + expect(get('/projects/123/settings/activities')).to route_to( + controller: 'projects', action: 'settings', id: '123', + tab: 'activities' + ) + end + + it do + expect(get('/projects/123/settings/types')).to route_to( + controller: 'projects', action: 'settings', id: '123', + tab: 'types' + ) + end end describe 'types' do - it { expect(patch('/projects/123/types')).to route_to(controller: 'projects', action: 'types', id: '123') } + it do + expect(patch('/projects/123/types')).to route_to( + controller: 'projects', action: 'types', id: '123' + ) + end end end From 4666d72e8b27f4b38d97f944e66f9e04995cb214 Mon Sep 17 00:00:00 2001 From: Stefan Botzenhart Date: Wed, 26 Aug 2015 14:52:08 +0200 Subject: [PATCH 034/112] Show custom fields when creating a project --- app/views/projects/_form.html.erb | 44 ++++++++++++++++++------------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/app/views/projects/_form.html.erb b/app/views/projects/_form.html.erb index 732968112f..062371d463 100644 --- a/app/views/projects/_form.html.erb +++ b/app/views/projects/_form.html.erb @@ -33,34 +33,42 @@ See doc/COPYRIGHT.rdoc for more details.
    <%= render partial: "projects/form/project_attributes", - locals: { project: project, - form: f } %> + locals: { project: project, form: f } %> - <%= call_hook(:view_projects_form, - project: project, - form: f) %> + <%= call_hook(:view_projects_form, project: project, form: f) %>
    +<% unless project.new_record? %> +
    + <%= render partial: "projects/form/required_storage", + locals: { project: project, storage: project.count_required_storage } %> +
    +<% end %> + <% if project.new_record? %> -
    - <%= render partial: "projects/form/modules", - locals: { form: f } %> -
    +
    + <%= render partial: "projects/form/modules", locals: { form: f } %> +
    <%= javascript_tag 'observeProjectModules();' %> -<% else %> - - <%= render partial: "projects/form/required_storage", - locals: { project: project, storage: project.count_required_storage } %> - <% end %> <% if (project.new_record? || project.module_enabled?('work_package_tracking')) && renderTypes %> -
    +
    <%= render partial: 'projects/form/types', - locals: { f: f, - project: project } %> -
    + locals: { f: f, project: project } %> + +<% end %> + +<% if project.new_record? %> +
    + <%= render partial: 'projects/form/custom_fields', + locals: { + form: f, + project: project, + work_package_custom_fields: @issue_custom_fields + } %> +
    <% end %> From 5ac99a5ed809d5ed27d1516b7f3f99155c5043a6 Mon Sep 17 00:00:00 2001 From: kgalli Date: Wed, 26 Aug 2015 13:41:20 +0000 Subject: [PATCH 035/112] Adds installation guide for OpenProject CE [ci skip] --- .../packager/installation-guide-ce.md | 191 ++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 doc/operation_guides/packager/installation-guide-ce.md diff --git a/doc/operation_guides/packager/installation-guide-ce.md b/doc/operation_guides/packager/installation-guide-ce.md new file mode 100644 index 0000000000..0aa711ae72 --- /dev/null +++ b/doc/operation_guides/packager/installation-guide-ce.md @@ -0,0 +1,191 @@ +*Please be aware that Web Server and Website Management Tools like Plesk +and others do not work well together with our packaged solution. We +strongly recommend to install OpenProject CE on a clean install.* + +# OpenProject Community Edition (CE) installation via package manager + +The installation of the OpenProject software can be done manually or via official software-packages build by the packager.io service. Using these software packages is highly recommended to reduce the pain of installation and configuration errors. Besides the installation via package manager is done via configuration wizard which is very helpful to get everything up and running right from the beginning. + +## Stack used by packager.io packages + +* Unicorn (application server) – this component hosts the actual application. Depending on the settings chosen, there are at least two unicorn processes running in parallel on the app server machine. +* Apache 2 (web server) – this component provides the external interface, handles SSL termination (if SSL is used) and distributes/forwards web requests to the unicorn processes. +* MySQL (database management system) – this component is used to store and retrieve data. +Ruby 2.1.3 (MRI) and necessary libraries to run the OpenProject source code. + +# Run Installation + +The installation procedure assumes the following prerequisites to be met: + +* A server running one of the following Linux distributions: + +| Distribution (64 bits only) | Identifier | init system | +| :------------------------------ | :----------- | :---------- | +| Ubuntu 14.04 Trusty | ubuntu-14.04 | upstart | +| Debian 8 Jessie | debian-8 | systemd | +| Debian 7 Wheezy | debiani-7 | sysvinit | +| CentOS/RHEL 7.x | centos-7 | systemd | +| CentOS/RHEL 6.x | centos-6 | upstart | +| Fedora 20 | fedora-20 | sysvinit | +| Suse Linux Enterprise Server 12 | sles-12 | sysvinit | + +* A mail server that is accessible via SMTP that can be used for sending notification emails. OpenProject supports authentication, yet does not provide support for SMTP via SSL/TLS. + +If you intend to use SSL for OpenProject CE: + +* A valid SSL certifificate along with the private key file. The files must not be protected by a pass phrase. +* Note that as the installation procedure will automatically create a separate user to run OpenProject CE as, it is not necessary to create such a user beforehand. + +The following steps have to be performed to initiate the actual installation of OpenProject CE via package manager. Note that all commands should either be run as root or should be prepended by sudo otherwise (typically depending what linux distribution is used). + +## Debian 7 Wheezy + + # install https support + apt-get install apt-transport-https + + sudo wget -qO - https://deb.packager.io/key | apt-key add - + echo "deb https://deb.packager.io/gh/finnlabs/pkgr-openproject-community wheezy stable/4.2" | sudo tee /etc/apt/sources.list.d/pkgr-openproject-community.list + sudo apt-get update + sudo apt-get install openproject-ce + +## Debian 8 Jessie + + # install https support + apt-get install apt-transport-https + + wget -qO - https://deb.packager.io/key | sudo apt-key add - + echo "deb https://deb.packager.io/gh/finnlabs/pkgr-openproject-community jessie stable/4.2" | sudo tee /etc/apt/sources.list.d/pkgr-openproject-community.list + sudo apt-get update + sudo apt-get install openproject-ce + +## Ubuntu 14.04 Trusty + + wget -qO - https://deb.packager.io/key | sudo apt-key add - + echo "deb https://deb.packager.io/gh/finnlabs/pkgr-openproject-community trusty stable/4.2" | sudo tee /etc/apt/sources.list.d/pkgr-openproject-community.list + sudo apt-get update + sudo apt-get install openproject-ce + +## Fedora 20 + + sudo rpm --import https://rpm.packager.io/key + echo "[openproject] + name=Repository for opf/openproject application. + baseurl=https://rpm.packager.io/gh/finnlabs/pkgr-openproject-community/fedora20/stable/4.2 + enabled=1" | sudo tee /etc/yum.repos.d/pkgr-openproject-community.repo + sudo yum install openproject-ce + +## CentOS / RHEL 6.x + + sudo rpm --import https://rpm.packager.io/key + echo "[openproject] + name=Repository for opf/openproject application. + baseurl=https://rpm.packager.io/gh/finnlabs/pkgr-openproject-community/centos6/stable/4.2 + enabled=1" | sudo tee /etc/yum.repos.d/pkgr-openproject-community.repo + sudo yum install openproject-ce + +## CentOS / RHEL 7.x + + sudo rpm --import https://rpm.packager.io/key + echo "[openproject] + name=Repository for opf/openproject application. + baseurl=https://rpm.packager.io/gh/finnlabs/pkgr-openproject-community/centos7/stable/4.2 + enabled=1" | sudo tee /etc/yum.repos.d/pkgr-openproject-community.repo + sudo yum install openproject-ce + +## Suse Linux Enterprise Server 12 + + sudo rpm --import https://rpm.packager.io/key + sudo zypper addrepo "https://rpm.packager.io/gh/finnlabs/pkgr-openproject-community/sles12/stable/4.2" "pkgr-openproject-community" + sudo zypper install openproject-ce + +# Post-Install Configuration + +After the installation of the OpenProject package the system has to be configured to use this package and operate the OpenProject application. Therefore the package includes aconfiguration wizard which can be started using the following command. + + openproject-ce configure + +Side note: The installer supports the configuration of necessary SSL connections too. If required the corresponding SSL certificates (incl. keys) have to be placed on the machine. +OpenProject command line tool +The openproject package comes with a command line tool to help manage important configuration settings. To see all possible command options of this tool type sudo openproject. + + admin@openproject-demo:~# sudo openproject-ce + Usage: + openproject-ce run COMMAND [options] + openproject-ce scale TYPE=NUM + openproject-ce logs [--tail|-n NUMBER] + openproject-ce config:get VAR + openproject-ce config:set VAR=VALUE + openproject-ce reconfigure + +## Set configuration options + +During the installation process a lot of settings were set to get the application runnings. But if you need to set some advanced options or you want to change some settings which were set during the installation via the installation wizard you can use config:set option. Please be aware that you have to stop and restart the application server so that the new configuration is loaded. This can be done using the service openproject [start|stop] command. See which settings can be set and an example for setting the session store below. + + DATABASE_URL=mysql2://openproject:9ScapYA1MN7JQrPR7Wkmp7y99K6mRHGU@127.0.0.1:3306/openproject + SECRET_TOKEN=c5aa99a90f9650404a885cf5ec7c28f7fe1379550bb811cb0b39058f9407eaa216b9b2b22d27f58fb15ac21adb3bd16494ebe89e39ec225ef4627db048a12530 + + ADMIN_EMAIL= + EMAIL_DELIVERY_METHOD=smtp + SMTP_DOMAIN=10.10.3.6 + SMTP_HOST=127.0.0.1 + SMTP_PASSWORD=mail + SMTP_PORT=25 + SMTP_URL=smtp://mail::25/10.10.3.6 + SMTP_USERNAME=mail + + WEB_CONCURRENCY=2 + WEB_TIMEOUT=15 + + RAILS_CACHE_STORE=memcache + SESSION_STORE=cach_store + +### Example change session store + + sudo service openproject-ce stop + sudo openproject-ce config:set SESSION_STORE="active_record_store" + sudo service openproject-ce start + +_Attention:_ Be aware that you should only set or change settings which are directly related to the openproject application/instance itself (see the list above). For example settings related to the apache web server can also be set via the config:set option but this can end up in an undesired state of the openproject application. If you want to change these settings use the reconfigure option. This will bring up the installation wizard again. See the “Reconfigure via wizard” section for more details on that. + +## Run commands like rake tasks or rails console + +The openproject command line tool supports running rake tasks and known scripts like the rails console. See example below how to do that. + + sudo openproject-ce run rails console + or rake task + sudo openproject-ce run rake db:migrate + +## Show logs + +The command line tool can also be used to see the log information. The most typically use case is to show/follow all current log entries. This can be accomplished using the the –tail flag. See example below. + + sudo openproject-ce logs --tail + +## Reconfigure via wizard +As already mentioned in section “Set configuration options” if it is necessary to reset all settings defined during the installation process the reconfigure option can be used. + + sudo openproject-ce reconfigure + +The command above will bring up the installation wizard again. Please be aware that it will start the configuration/installation process from scratch. That is why it won’t show entries you already made. So you have to fill out every form again. + +# Upgrade to a newer version + +Upgrading the OpenProject CE is as easy as installing a newer OpenProject CE package and running the `openproject-ce configure` command. + +## Debian / Ubuntu + + sudo apt-get update + sudo apt-get install --only-upgrade openproject-ce + sudo openproject-ce configure + +## Fedora / CentOS / RHEL + + sudo yum update + sudo yum install openproject-ce + sudo openproject-ce + +## SuSE Enterprise Server 12 + + sudo zypper update openproject-ce + sudo openproject-ce configure + From 1612c5f40ab6a74c40bd7d6678938e69bb020504 Mon Sep 17 00:00:00 2001 From: Stefan Botzenhart Date: Wed, 26 Aug 2015 14:52:45 +0200 Subject: [PATCH 036/112] Use create and update labels for project create and update --- app/views/projects/_edit.html.erb | 10 +++--- app/views/projects/new.html.erb | 2 +- .../project_creation_with_type.feature | 33 +++++++++---------- features/projects/copy_project.feature | 2 +- features/projects/create.feature | 20 +++++------ features/projects/default_settings.feature | 2 +- features/projects/visibility.feature | 28 ++++++++-------- 7 files changed, 47 insertions(+), 50 deletions(-) diff --git a/app/views/projects/_edit.html.erb b/app/views/projects/_edit.html.erb index f1d73372f6..ee019ea8a7 100644 --- a/app/views/projects/_edit.html.erb +++ b/app/views/projects/_edit.html.erb @@ -27,9 +27,11 @@ See doc/COPYRIGHT.rdoc for more details. ++#%> <%= labelled_tabular_form_for @altered_project, url: project_path(@project) do |f| %> - <%= render partial: 'form', locals: { f: f, - project: @altered_project, - renderTypes: false } %> + <%= render partial: 'form', locals: { + f: f, + project: @altered_project, + renderTypes: false + } %> - <%= f.button l(:button_save), class: 'button -highlight -with-icon icon-yes' %> + <%= f.button l(:button_update), class: 'button -highlight -with-icon icon-yes' %> <% end %> diff --git a/app/views/projects/new.html.erb b/app/views/projects/new.html.erb index 0598c6d7cb..590b589e74 100644 --- a/app/views/projects/new.html.erb +++ b/app/views/projects/new.html.erb @@ -30,6 +30,6 @@ See doc/COPYRIGHT.rdoc for more details. <%= toolbar title: l(:label_project_new) %> <%= labelled_tabular_form_for @project do |f| %> <%= render :partial => 'form', :locals => { :f => f, :project => @project, :renderTypes => true } %> - <%= styled_button_tag l(:button_save), class: '-highlight -with-icon icon-yes' %> + <%= styled_button_tag l(:button_create), class: '-highlight -with-icon icon-yes' %> <%= javascript_tag "Form.Element.focus('project_name');" %> <% end %> diff --git a/features/project_types/project_creation_with_type.feature b/features/project_types/project_creation_with_type.feature index 7cd82e818a..3b3f89f7f6 100644 --- a/features/project_types/project_creation_with_type.feature +++ b/features/project_types/project_creation_with_type.feature @@ -45,21 +45,18 @@ Feature: Project creation with support for project type Scenario: The admin may create a project with a project type Given I am already admin - When I go to the admin page - And I follow the first link matching "Projects" - And I follow "New project" - Then I fill in "Fancy Pants" for "Name" - And I fill in "fancy-pants" for "Identifier" - And I check "Timelines" - And I select "Standard Project" from "Project type" - And I press "Save" - - Then I should see a notice flash stating "Successful creation." - - When the following types are enabled for projects of type "Standard Project" - | Phase | - | Milestone | - And I go to the "types" tab of the settings page of the project called "Fancy Pants" - - Then the "Phase" checkbox should be checked - And the "Milestone" checkbox should be checked + When I go to the admin page + And I follow the first link matching "Projects" + And I follow "New project" + Then I fill in "Fancy Pants" for "Name" + And I fill in "fancy-pants" for "Identifier" + And I check "Timelines" + And I select "Standard Project" from "Project type" + And I press "Create" + Then I should see a notice flash stating "Successful creation." + When the following types are enabled for projects of type "Standard Project" + | Phase | + | Milestone | + And I go to the "types" tab of the settings page of the project called "Fancy Pants" + Then the "Phase" checkbox should be checked + And the "Milestone" checkbox should be checked diff --git a/features/projects/copy_project.feature b/features/projects/copy_project.feature index 47a75de7d2..025543e936 100644 --- a/features/projects/copy_project.feature +++ b/features/projects/copy_project.feature @@ -92,7 +92,7 @@ Feature: Project Settings When I am already admin And I go to the settings page of the project "project1" And I select "project2" from "Subproject of" - And I click on "Save" within "#content" + And I click on "Update" within "#content" And I follow "Copy" within "#content" And I fill in "Name" with "Copied Project" And I fill in "Identifier" with "cp" diff --git a/features/projects/create.feature b/features/projects/create.feature index cff7f75179..7921f102de 100644 --- a/features/projects/create.feature +++ b/features/projects/create.feature @@ -36,23 +36,23 @@ Feature: Creating Projects @javascript Scenario: Creating a Subproject When I go to the settings page of the project "parent" - And I follow "New subproject" - And I fill in "project_name" with "child" - And I press "Save" + And I follow "New subproject" + And I fill in "project_name" with "child" + And I press "Create" Then I should be on the settings page of the project called "child" Scenario: Creating a Subproject When I go to the settings page of the project "parent" - And I follow "New subproject" + And I follow "New subproject" Then I should not see "Responsible" @javascript Scenario: Creating a Project with an already existing identifier When I go to the projects admin page - And I follow "New project" - And I fill in "project_name" with "Parent" - And I press "Save" + And I follow "New project" + And I fill in "project_name" with "Parent" + And I press "Create" Then I should be on the projects page - And I should see "Identifier has already been taken" - And I fill in "project_name" with "Parent 2" - And the "Identifier" field should contain "parent-2" within "#content" + And I should see "Identifier has already been taken" + And I fill in "project_name" with "Parent 2" + And the "Identifier" field should contain "parent-2" within "#content" diff --git a/features/projects/default_settings.feature b/features/projects/default_settings.feature index 7fdb509b52..611728141a 100644 --- a/features/projects/default_settings.feature +++ b/features/projects/default_settings.feature @@ -58,7 +58,7 @@ Feature: Project Default Settings And I fill in "project_name" with "A New Hope" And I fill in "project_identifier" with "a-new-hope" And I uncheck "Wiki" - And I press "Save" + And I press "Create" And I go to the settings page of the project called "A New Hope" And I click on "tab-modules" Then the "Wiki" checkbox should not be checked diff --git a/features/projects/visibility.feature b/features/projects/visibility.feature index 8dd455f54d..7658891fc1 100644 --- a/features/projects/visibility.feature +++ b/features/projects/visibility.feature @@ -27,21 +27,19 @@ #++ Feature: Project Visibility - -Background: - Given there is 1 project with the following: - | name | Bob's Accounting | - | identifier | bobs-accounting | - + Background: + Given there is 1 project with the following: + | name | Bob's Accounting | + | identifier | bobs-accounting | Then the project "Bob's Accounting" is public -Scenario: A Project is visible on the landing page if it is set to public - Given I am on the login page - Then I should see "Projects" within "#top-menu-items" - When I go to the overall Projects page - Then I should see "Bob's Accounting" within "#content" + Scenario: A Project is visible on the landing page if it is set to public + Given I am on the login page + Then I should see "Projects" within "#top-menu-items" + When I go to the overall Projects page + Then I should see "Bob's Accounting" within "#content" -Scenario: Project is not visible on the landing page if it is not set to public - Given the project "Bob's Accounting" is not public - And I am on the login page - Then I should not see "Projects" within "#top-menu-items" + Scenario: Project is not visible on the landing page if it is not set to public + Given the project "Bob's Accounting" is not public + And I am on the login page + Then I should not see "Projects" within "#top-menu-items" From 398fa2dbc8967be4bf67aa3f0263638811df1e37 Mon Sep 17 00:00:00 2001 From: Continuous Integration Date: Thu, 27 Aug 2015 02:46:49 +0200 Subject: [PATCH 037/112] Update reference to OpenProject-Translations --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 080aa0e314..18586bbb10 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -53,7 +53,7 @@ GIT GIT remote: https://github.com/opf/openproject-translations.git - revision: 17c21a226320cf3b06028a2279eb7d305d0d907f + revision: 5e029fd352dfee1b4fb96d00819610be7c37b9bf branch: release/4.2 specs: openproject-translations (4.2.7) From 955de6b6f4e0ae9d1aeca81cc6e9f5ce1bf6489e Mon Sep 17 00:00:00 2001 From: Jonas Heinrich Date: Thu, 27 Aug 2015 14:16:08 +0200 Subject: [PATCH 038/112] Some small fixes --- .../packager/installation-guide-ce.md | 22 +++++++++++-------- .../packager/installation-guide.md | 4 +++- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/doc/operation_guides/packager/installation-guide-ce.md b/doc/operation_guides/packager/installation-guide-ce.md index 0aa711ae72..d09ce0eb9e 100644 --- a/doc/operation_guides/packager/installation-guide-ce.md +++ b/doc/operation_guides/packager/installation-guide-ce.md @@ -4,7 +4,7 @@ strongly recommend to install OpenProject CE on a clean install.* # OpenProject Community Edition (CE) installation via package manager -The installation of the OpenProject software can be done manually or via official software-packages build by the packager.io service. Using these software packages is highly recommended to reduce the pain of installation and configuration errors. Besides the installation via package manager is done via configuration wizard which is very helpful to get everything up and running right from the beginning. +The installation of the OpenProject software can be done manually or via official software-packages build by the packager.io service. Using these software packages is highly recommended to reduce the pain of installation and configuration errors. Additionally, the installation via package manager is done via configuration wizard which is very helpful to get everything up and running right from the beginning. ## Stack used by packager.io packages @@ -100,13 +100,15 @@ The following steps have to be performed to initiate the actual installation of # Post-Install Configuration -After the installation of the OpenProject package the system has to be configured to use this package and operate the OpenProject application. Therefore the package includes aconfiguration wizard which can be started using the following command. +After the installation of the OpenProject package the system has to be configured to use this package and operate the OpenProject application. Therefore the package includes a configuration wizard which can be started using the following command. openproject-ce configure Side note: The installer supports the configuration of necessary SSL connections too. If required the corresponding SSL certificates (incl. keys) have to be placed on the machine. -OpenProject command line tool -The openproject package comes with a command line tool to help manage important configuration settings. To see all possible command options of this tool type sudo openproject. + +# OpenProject command line tool + +The openproject package comes with a command line tool to help manage important configuration settings. To see all possible command options of this tool type `sudo openproject-ce`. admin@openproject-demo:~# sudo openproject-ce Usage: @@ -119,18 +121,20 @@ The openproject package comes with a command line tool to help manage important ## Set configuration options -During the installation process a lot of settings were set to get the application runnings. But if you need to set some advanced options or you want to change some settings which were set during the installation via the installation wizard you can use config:set option. Please be aware that you have to stop and restart the application server so that the new configuration is loaded. This can be done using the service openproject [start|stop] command. See which settings can be set and an example for setting the session store below. +During the installation process a lot of settings were set to get the application running. But if you need to set some advanced options or you want to change some settings which were set during the installation via the installation wizard you can use `config:set
    <% else %> diff --git a/app/views/work_packages/calendars/index.html.erb b/app/views/work_packages/calendars/index.html.erb index 923fc9e403..85a1f776e2 100644 --- a/app/views/work_packages/calendars/index.html.erb +++ b/app/views/work_packages/calendars/index.html.erb @@ -69,9 +69,16 @@ See doc/COPYRIGHT.rdoc for more details.

    <%= render :partial => 'common/calendar', :locals => {:calendar => @calendar} %>

    - <%= l(:text_tip_work_package_begin_day) %> - <%= l(:text_tip_work_package_end_day) %> - <%= l(:text_tip_work_package_begin_end_day) %> + + <%= l(:text_tip_work_package_begin_day) %> +

    +

    + + <%= l(:text_tip_work_package_end_day) %> +

    +

    + + <%= l(:text_tip_work_package_begin_end_day) %>

    <% end %> <% content_for :sidebar do %> diff --git a/frontend/app/templates/timelines/timeline_table.html b/frontend/app/templates/timelines/timeline_table.html index 90676248b4..f1b4aa2e70 100644 --- a/frontend/app/templates/timelines/timeline_table.html +++ b/frontend/app/templates/timelines/timeline_table.html @@ -37,7 +37,7 @@ 'tl-indent-' + indent, row.childNodes.length > 0 && (row.isExpanded() && 'tl-expanded' || 'tl-collapsed') ]"> - + diff --git a/frontend/app/templates/work_packages/work_packages_table.html b/frontend/app/templates/work_packages/work_packages_table.html index a326f57c2e..49e180487a 100644 --- a/frontend/app/templates/work_packages/work_packages_table.html +++ b/frontend/app/templates/work_packages/work_packages_table.html @@ -122,7 +122,8 @@ + display-type="{{column.meta_data.data_type}}" + ng-class="[row.level > 0 && column.name == 'subject' && 'icon-context icon-pulldown-arrow4']"/> From 1bcaf36ca5ffd9f8bbf10550665f193c40e8b934 Mon Sep 17 00:00:00 2001 From: Henriette Dinger Date: Tue, 25 Aug 2015 10:35:44 +0200 Subject: [PATCH 043/112] replaced images in Tables, Timelines, Admin/Projects, Admin/Plugin, Tabs --- app/assets/stylesheets/content/_tables.sass | 44 +--------- app/assets/stylesheets/content/_tabs.sass | 8 +- .../stylesheets/content/_timelines.scss | 80 ------------------- app/views/admin/plugins.html.erb | 2 +- app/views/admin/projects.html.erb | 2 +- app/views/common/_tabs.html.erb | 4 +- 6 files changed, 6 insertions(+), 134 deletions(-) diff --git a/app/assets/stylesheets/content/_tables.sass b/app/assets/stylesheets/content/_tables.sass index 47caba1683..e946eeea55 100644 --- a/app/assets/stylesheets/content/_tables.sass +++ b/app/assets/stylesheets/content/_tables.sass @@ -33,7 +33,7 @@ tr white-space: nowrap &.idnt td.project--hierarchy span padding-left: 16px - &.icon:before + &.icon-context:before padding: 9px 5px 0 10px &.idnt-1 td.project--hierarchy padding-left: 0.5em @@ -186,31 +186,15 @@ tr padding: 10px 10px 0 0 td &.date, &.status, &.sharing - text-align: left white-space: nowrap &.user td - width: 13% - &.email - width: 18% white-space: nowrap &.locked, &.registered, &.locked a, &.registered a color: #aaa - &.wiki-page-version td - &.updated_on, &.author - text-align: center - &.time-entry - text-align: center - white-space: nowrap - td - &.subject, &.comments - text-align: left - white-space: normal td.hours - text-align: right font-weight: bold - padding-right: 0.5em .hours-dec font-size: 0.9em @@ -224,29 +208,9 @@ table span &.name font-weight: bold - display: block - margin-bottom: 6px &.description, &.url display: block font-size: 0.9em - &.list tbody tr.group - td - padding: 0.8em 0 0.5em 0.3em - font-weight: bold - border-bottom: 1px solid #ccc - span.count - color: #aaa - font-size: 80% - -tr.group - a.toggle-all - color: #aaa - font-size: 80% - font-weight: normal - display: inline - visibility: hidden - &:hover a.toggle-all - visibility: visible a.toggle-all:hover text-decoration: none @@ -282,14 +246,8 @@ table#time-report font-size: 0.9em #content table - &.issues td - border: 0 none - vertical-align: top tr &.context-menu-selection background-color: #FFFFB2 &:hover background-color: #FFFFB2 - td - &.issue - cursor: context-menu diff --git a/app/assets/stylesheets/content/_tabs.sass b/app/assets/stylesheets/content/_tabs.sass index a5cd2f22aa..320aec667a 100644 --- a/app/assets/stylesheets/content/_tabs.sass +++ b/app/assets/stylesheets/content/_tabs.sass @@ -73,11 +73,7 @@ div.tabs-buttons position: absolute right: 0 - width: 48px - height: 24px - background: white - bottom: 0 - border-bottom: 1px solid #bbbbbb + bottom: 4px button &.tab-left, &.tab-right @@ -92,7 +88,5 @@ button bottom: -1px &.tab-left right: 20px - background: #eeeeee image-url("bullet_arrow_left.png") no-repeat 50% 50% &.tab-right right: 0 - background: #eeeeee image-url("bullet_arrow_right.png") no-repeat 50% 50% diff --git a/app/assets/stylesheets/content/_timelines.scss b/app/assets/stylesheets/content/_timelines.scss index ba20cf156b..e9fe58bbc1 100644 --- a/app/assets/stylesheets/content/_timelines.scss +++ b/app/assets/stylesheets/content/_timelines.scss @@ -26,18 +26,6 @@ // See doc/COPYRIGHT.rdoc for more details. //++ -#content table { - &.issues td.center, th.center { - text-align: center; - } -} - -.contextual .new-element { - background: url("../images/add.png") no-repeat scroll 6px center transparent; - padding-left: 16px; - font-size: 11px; -} - .timelines-contextual-fieldset { float: right; white-space: nowrap; @@ -50,7 +38,6 @@ display: inline-block; height: 12px; width: 12px; - margin-bottom: -3px; margin-right: 5px; } @@ -62,46 +49,12 @@ border-radius: 4px; } -.timelines-attributes { - th { - width: 17%; - } - td { - width: 33%; - } -} - //HACK: Use a min-height to ensure that the timeline_select select2 is not cropped at the bottom .controller-timelines #content { min-height: 700px; } -#content { - .meta table.timelines-attributes { - th, td { - padding-top: 0.5em; - padding-bottom: 0.5em; - } - } - table.timelines-rep { - width: 100%; - } -} - table.timelines-dates { - width: 100%; -} - -#content table.timelines-dates th { - text-align: left; - padding-left: 1em; - padding-right: 1em; -} - -table.timelines-dates { - td { - padding: 1em; - } tbody.timelines-current-dates td { font-weight: bold; height: 3em; @@ -110,39 +63,6 @@ table.timelines-dates { } } -#content table { - &.timelines-pt { - td, th { - border: 1px solid #E6E6E6; - padding: 6px; - position: relative; - text-align: left; - vertical-align: top; - } - } - &.timelines-pet { - td, th { - border: 1px solid #E6E6E6; - padding: 6px; - position: relative; - text-align: left; - vertical-align: top; - } - } - &.timelines-pt td { - &.timelines-pt-reorder, &.timelines-pt-allows_association, &.timelines-pt-actions { - width: 12%; - text-align: center; - } - } - &.timelines-pet td { - &.timelines-pet-color, &.timelines-pet-reorder, &.timelines-pet-is_default, &.timelines-pet-in_aggregation, &.timelines-pet-is_milestone, &.timelines-pet-actions { - width: 12%; - text-align: center; - } - } -} - .timelines-pet-properties { margin-bottom: 1em; p { diff --git a/app/views/admin/plugins.html.erb b/app/views/admin/plugins.html.erb index c1f7865301..73b9134575 100644 --- a/app/views/admin/plugins.html.erb +++ b/app/views/admin/plugins.html.erb @@ -31,7 +31,7 @@ See doc/COPYRIGHT.rdoc for more details. <% if @plugins.any? %>
    - +
    diff --git a/app/views/admin/projects.html.erb b/app/views/admin/projects.html.erb index 023f8a49de..47046a507f 100644 --- a/app/views/admin/projects.html.erb +++ b/app/views/admin/projects.html.erb @@ -120,7 +120,7 @@ See doc/COPYRIGHT.rdoc for more details. <% project_tree_when_sorted(@projects) do |project, level| %> "> - + diff --git a/app/views/common/_tabs.html.erb b/app/views/common/_tabs.html.erb index 57ae5122a8..018aedab52 100644 --- a/app/views/common/_tabs.html.erb +++ b/app/views/common/_tabs.html.erb @@ -45,8 +45,8 @@ See doc/COPYRIGHT.rdoc for more details. <% end %> From fa40630b9593ef7e94c57988d71c84f93b864710 Mon Sep 17 00:00:00 2001 From: Henriette Dinger Date: Tue, 25 Aug 2015 16:22:18 +0200 Subject: [PATCH 044/112] replaced images in Wiki, Tables, TopMenu and restructered the _tables.sass --- app/assets/stylesheets/content/_tables.sass | 226 +++++++++--------- app/assets/stylesheets/content/_wiki.sass | 62 +---- app/assets/stylesheets/layout/_top_menu.sass | 9 +- app/helpers/application_helper.rb | 8 +- lib/open_project/text_formatting.rb | 2 +- .../wiki_formatting/textile/formatter.rb | 2 +- 6 files changed, 130 insertions(+), 179 deletions(-) diff --git a/app/assets/stylesheets/content/_tables.sass b/app/assets/stylesheets/content/_tables.sass index e946eeea55..9a75dbcaab 100644 --- a/app/assets/stylesheets/content/_tables.sass +++ b/app/assets/stylesheets/content/_tables.sass @@ -26,6 +26,50 @@ // See doc/COPYRIGHT.rdoc for more details. //++ +table + td + padding: 3px 6px + p + margin: 0 + + &.files tr.file td + text-align: center + &.filename + text-align: left + padding-left: 24px + &.digest + font-size: 80% + + &.members td.roles, &.memberships td.roles + width: 45% + + &.plugins + td + vertical-align: middle + &.configure + text-align: right + padding-right: 1em + span + &.name + font-weight: bold + &.description, &.url + display: block + font-size: 0.9em + + &#time-report + tbody tr + font-style: italic + color: #333 + &.last-level + font-style: normal + color: #555 + &.total + font-style: normal + font-weight: bold + color: #555 + background-color: #EEEEEE + .hours-dec + font-size: 0.9em tr &.project @@ -53,6 +97,7 @@ tr padding-left: 11em &.idnt-9 td.project--hierarchy padding-left: 12.5em + &.issue white-space: nowrap &.sum @@ -61,79 +106,26 @@ tr td &.category white-space: normal + &.subject + text-align: left + &.idnt td.subject .icon-context:before + padding: 9px 0 0 10px -tr.issue - td - &.subject - text-align: left - &.idnt td.subject .icon-context:before - padding: 9px 0 0 10px - - -#content tr.issue - &.idnt-1 td.subject - padding-left: 0.5em - &.idnt-2 td.subject - padding-left: 2em - &.idnt-3 td.subject - padding-left: 3.5em - &.idnt-4 td.subject - padding-left: 5em - &.idnt-5 td.subject - padding-left: 6.5em - &.idnt-6 td.subject - padding-left: 8em - &.idnt-7 td.subject - padding-left: 9.5em - &.idnt-8 td.subject - padding-left: 11em - &.idnt-9 td.subject - padding-left: 12.5em - -/* Work Package hierarchy layout */ - -tr &.work-package white-space: nowrap &.sum font-weight: bold td.subject white-space: normal - -tr.work-package - td - &.subject text-align: left - &.done_ratio table.progress + td.done_ratio table.progress margin-left: auto margin-right: auto - &.idnt td.subject.icon-context - display: inherit - - &.issue td.category - white-space: normal - -#content tr.work-package - &.idnt-1 td.subject - padding-left: 0.5em - &.idnt-2 td.subject - padding-left: 2em - &.idnt-3 td.subject - padding-left: 3.5em - &.idnt-4 td.subject - padding-left: 5em - &.idnt-5 td.subject - padding-left: 6.5em - &.idnt-6 td.subject - padding-left: 8em - &.idnt-7 td.subject - padding-left: 9.5em - &.idnt-8 td.subject - padding-left: 11em - &.idnt-9 td.subject - padding-left: 12.5em + &.idnt td.subject.icon-context + display: inherit + &.issue td.category + white-space: normal -tr &.entry border: 1px solid #f8f8f8 td @@ -147,33 +139,33 @@ tr text-align: center &.age text-align: right + div.expander cursor: pointer float: left + &.open span .expand, &.closed span .collapse display: none + &.changeset td &.author, &.committed_on text-align: center width: 15% -table - &.files tr.file td - text-align: center - &.filename - text-align: left - padding-left: 24px - &.digest - font-size: 80% - &.members td.roles, &.memberships td.roles - width: 45% + td[class*=reorder] + .icon-context:before + padding: 0 0 0 0 + .up + transform: rotate(90deg) + .down + transform: rotate(270deg) -tr &.message height: 2.6em td &.created_on, &.last_message white-space: nowrap + &.version td &.closed @@ -187,6 +179,7 @@ tr td &.date, &.status, &.sharing white-space: nowrap + &.user td white-space: nowrap @@ -198,52 +191,51 @@ td.hours .hours-dec font-size: 0.9em -table - &.plugins - td - vertical-align: middle - &.configure - text-align: right - padding-right: 1em - span - &.name - font-weight: bold - &.description, &.url - display: block - font-size: 0.9em +th.hidden + display: none a.toggle-all:hover text-decoration: none -table - td - padding: 3px 6px - p - margin: 0 - -#issue_tree - table.issues - border: 0 - td.checkbox - display: none - -th.hidden - display: none +#content tr.issue + &.idnt-1 td.subject + padding-left: 0.5em + &.idnt-2 td.subject + padding-left: 2em + &.idnt-3 td.subject + padding-left: 3.5em + &.idnt-4 td.subject + padding-left: 5em + &.idnt-5 td.subject + padding-left: 6.5em + &.idnt-6 td.subject + padding-left: 8em + &.idnt-7 td.subject + padding-left: 9.5em + &.idnt-8 td.subject + padding-left: 11em + &.idnt-9 td.subject + padding-left: 12.5em -table#time-report - tbody tr - font-style: italic - color: #333 - &.last-level - font-style: normal - color: #555 - &.total - font-style: normal - font-weight: bold - color: #555 - background-color: #EEEEEE - .hours-dec - font-size: 0.9em +#content tr.work-package + &.idnt-1 td.subject + padding-left: 0.5em + &.idnt-2 td.subject + padding-left: 2em + &.idnt-3 td.subject + padding-left: 3.5em + &.idnt-4 td.subject + padding-left: 5em + &.idnt-5 td.subject + padding-left: 6.5em + &.idnt-6 td.subject + padding-left: 8em + &.idnt-7 td.subject + padding-left: 9.5em + &.idnt-8 td.subject + padding-left: 11em + &.idnt-9 td.subject + padding-left: 12.5em #content table tr @@ -251,3 +243,9 @@ table#time-report background-color: #FFFFB2 &:hover background-color: #FFFFB2 + +#issue_tree + table.issues + border: 0 + td.checkbox + display: none diff --git a/app/assets/stylesheets/content/_wiki.sass b/app/assets/stylesheets/content/_wiki.sass index 2498793365..21d1c224be 100644 --- a/app/assets/stylesheets/content/_wiki.sass +++ b/app/assets/stylesheets/content/_wiki.sass @@ -68,11 +68,8 @@ div.wiki border: 1px solid #bbb padding: 4px - .external - background-position: 0% 60% - background-repeat: no-repeat - padding-left: 12px - background-image: image-url('external.png') + .external.icon-context:before + padding: 4px 4px 0 0 pre margin: 1em 1em 1em 1.6em @@ -101,10 +98,10 @@ div.wiki width: auto a font-weight: normal - background-image: image-url('arrow-down.png') background-repeat: no-repeat background-position: 0% 60% - padding-left: 16px + &.icon-context:before + padding: 3px 3px 0 0 li list-style-type: none @@ -156,57 +153,6 @@ h1:hover, h2:hover, h3:hover padding: 4px 4px 4px 48px min-height: 33px - &.smallsee-also, &.smallcaution, &.smallimportant, &.smallinfo, &.smalltip, &.smallnote - display: block - margin-top: .5em - margin-bottom: .5em - padding: 4px 4px 4px 34px - min-height: 24px - - &.see-also - background: image-url('wiki_styles/see-also.png') 4px 4px no-repeat #f5fffa - border: 1px solid #AAB1AD - - &.smallsee-also - background: image-url('wiki_styles/see-also_small.png') 4px 4px no-repeat #f5fffa - border: 1px solid #AAB1AD - - &.caution - background: image-url('wiki_styles/caution.png') 4px 6px no-repeat #f5fffa - border: 1px solid #AAB1AD - - &.smallcaution - background: image-url('wiki_styles/caution_small.png') 4px 4px no-repeat #f5fffa - border: 1px solid #AAB1AD - - &.important - background: image-url('wiki_styles/important.png') 4px 7px no-repeat #F0F8FF - border: 1px solid #C1C8CF - - &.smallimportant - background: image-url('wiki_styles/important_small.png') 4px 6px no-repeat #F0F8FF - border: 1px solid #C1C8CF - - &.info - background: image-url('wiki_styles/info.png') 4px 4px no-repeat #FFFFE0 - border: 1px solid #FFFF00 - - &.smallinfo - background: image-url('wiki_styles/info_small.png') 4px 4px no-repeat #FFFFE0 - border: 1px solid #FFFF00 - - &.smalltip - background: image-url('wiki_styles/tip_small.png') 4px 5px no-repeat #F5FFFA - border: 1px solid #C7CFCA - - &.note - background: image-url('wiki_styles/note.png') 6px 4px no-repeat #F5FFFA - border: 1px solid #C7CFCA - - &.smallnote - background: image-url('wiki_styles/note_small.png') 5px 4px no-repeat #F5FFFA - border: 1px solid #C7CFCA - .quick_info .label background: none color: #000 diff --git a/app/assets/stylesheets/layout/_top_menu.sass b/app/assets/stylesheets/layout/_top_menu.sass index 6de81ad77a..3e89133d16 100644 --- a/app/assets/stylesheets/layout/_top_menu.sass +++ b/app/assets/stylesheets/layout/_top_menu.sass @@ -225,8 +225,15 @@ input.top-menu-search--input background: $header-drop-down-projects-search-bg-color margin: 0 0 10px 0 + .select2-search:before + content: "\e0a1" + font-family: "openproject-icon-font" + color: #E0E0E0 + position: absolute + top: 24px + right: 26px + .select2-search input - background: $header-drop-down-projects-search-input-bg-color image-url('magnifier.png') no-repeat 94% center margin: 10px 10px padding: 9px 7px 9px 10px border: none diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 0aa1406268..937092eaa6 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -345,10 +345,10 @@ module ApplicationHelper method = options[:method] || :post content_tag(:span, - link_to(image_tag('2uparrow.png', alt: l(:label_sort_highest)), url.merge("#{name}[move_to]" => 'highest'), method: method, title: l(:label_sort_highest)) + - link_to(image_tag('1uparrow.png', alt: l(:label_sort_higher)), url.merge("#{name}[move_to]" => 'higher'), method: method, title: l(:label_sort_higher)) + - link_to(image_tag('1downarrow.png', alt: l(:label_sort_lower)), url.merge("#{name}[move_to]" => 'lower'), method: method, title: l(:label_sort_lower)) + - link_to(image_tag('2downarrow.png', alt: l(:label_sort_lowest)), url.merge("#{name}[move_to]" => 'lowest'), method: method, title: l(:label_sort_lowest)), + link_to(content_tag(:span, '', class: 'up icon-context icon-arrow-right7', title: l(:label_sort_highest)), url.merge("#{name}[move_to]" => 'highest'), method: method, title: l(:label_sort_highest)) + + link_to(content_tag(:span, '', class: 'icon-context icon-pulldown-arrow1', title: l(:label_sort_higher)), url.merge("#{name}[move_to]" => 'higher'), method: method, title: l(:label_sort_higher)) + + link_to(content_tag(:span, '', class: 'icon-context icon-pulldown-arrow3', title: l(:label_sort_lower)), url.merge("#{name}[move_to]" => 'lower'), method: method, title: l(:label_sort_lower)) + + link_to(content_tag(:span, '', class: 'down icon-context icon-arrow-right7', title: l(:label_sort_lowest)), url.merge("#{name}[move_to]" => 'lowest'), method: method, title: l(:label_sort_lowest)), class: 'reorder-icons' ) end diff --git a/lib/open_project/text_formatting.rb b/lib/open_project/text_formatting.rb index 23991fc2a9..144ba5fd3f 100644 --- a/lib/open_project/text_formatting.rb +++ b/lib/open_project/text_formatting.rb @@ -428,7 +428,7 @@ module OpenProject div_class << ' right' if $1 == '>' div_class << ' left' if $1 == '<' out = "
    " - out << "#{l(:label_table_of_contents)}
    " + out << "#{l(:label_table_of_contents)}
    " out << "
    • " root = headings.map(&:first).min current = root diff --git a/lib/redmine/wiki_formatting/textile/formatter.rb b/lib/redmine/wiki_formatting/textile/formatter.rb index b9ecd383a7..f9c3e513de 100644 --- a/lib/redmine/wiki_formatting/textile/formatter.rb +++ b/lib/redmine/wiki_formatting/textile/formatter.rb @@ -113,7 +113,7 @@ module Redmine url = url[0..-2] # discard closing parenth from url post = ')' + post # add closing parenth to post end - tag = content_tag('a', proto + url, href: "#{proto == 'www.' ? 'http://www.' : proto}#{url}", class: 'external') + tag = content_tag('a', proto + url, href: "#{proto == 'www.' ? 'http://www.' : proto}#{url}", class: 'external icon-context icon-copy2') %(#{leading}#{tag}#{post}) end end From bca793ce73fc1e1a793bc1aaed8962249d6af81a Mon Sep 17 00:00:00 2001 From: Henriette Dinger Date: Wed, 26 Aug 2015 11:42:08 +0200 Subject: [PATCH 045/112] replaced images in Repository, Wiki and fixed occurred bugs --- app/assets/stylesheets/_misc_legacy.sass | 31 +--------------- app/assets/stylesheets/content/_calendar.sass | 26 +++++++------- app/assets/stylesheets/content/_tables.sass | 2 +- app/assets/stylesheets/content/_wiki.sass | 9 +++++ .../fonts/_openproject_icon_font.sass | 6 ++-- app/assets/stylesheets/scm.css.sass | 36 ++++++++----------- app/helpers/repositories_helper.rb | 11 ++++-- app/views/repositories/revision.html.erb | 10 +++--- lib/redcloth3.rb | 2 +- 9 files changed, 56 insertions(+), 77 deletions(-) diff --git a/app/assets/stylesheets/_misc_legacy.sass b/app/assets/stylesheets/_misc_legacy.sass index f057efda77..a32feff479 100644 --- a/app/assets/stylesheets/_misc_legacy.sass +++ b/app/assets/stylesheets/_misc_legacy.sass @@ -334,19 +334,6 @@ div.issue hr margin-top: -6px margin-bottom: 0 -#content div.issue table - td - background: none - border: 0 none - padding: 0 3px - padding-left: 0 - th - background: none - border: 0 none - padding: 0 3px - padding-left: 0 - font-weight: bold - .attachments h4 margin-bottom: 6px background: image-url("files-showhide.png") no-repeat right bottom @@ -357,17 +344,7 @@ div.issue hr table.files display: table -#content table.files - td - border: 0 - background: none - th - border: 0 - background: none - font-weight: bold - padding: 1px - border: 0 - background: none +#content table.filese td color: #555 padding: 1px @@ -383,10 +360,6 @@ table.files ol, ul padding-left: 22px -blockquote - font-style: italic - background: image-url("blockquote-bg.png") no-repeat 5px 3px - #project-links right: 30px color: #ccc @@ -515,8 +488,6 @@ tr.time-entry #content table .changeset td.id a:hover text-decoration: underline -#content table.files .opt-desc - width: 45% /* member settings [pc] */ diff --git a/app/assets/stylesheets/content/_calendar.sass b/app/assets/stylesheets/content/_calendar.sass index 6956985343..0d2b546f2b 100644 --- a/app/assets/stylesheets/content/_calendar.sass +++ b/app/assets/stylesheets/content/_calendar.sass @@ -63,19 +63,19 @@ table.cal &.today background: $content-calendar-cell-today-bg-color -.icon, -.icon-context - display: inline-flex - &:before - padding: 0 10px 0 10px - &.ending:before - transform: rotate(180deg) - color: #F5827E - &.diamond:before - transform: rotate(90deg) - color: #F5827E - &.starting:before - color: #A2C57A + .icon, + .icon-context + display: inline-flex + &:before + padding: 0 10px 0 10px + &.ending:before + transform: rotate(180deg) + color: #F5827E + &.diamond:before + transform: rotate(90deg) + color: #F5827E + &.starting:before + color: #A2C57A p.legend.cal margin-bottom: 0 diff --git a/app/assets/stylesheets/content/_tables.sass b/app/assets/stylesheets/content/_tables.sass index 9a75dbcaab..20f9fa2fc5 100644 --- a/app/assets/stylesheets/content/_tables.sass +++ b/app/assets/stylesheets/content/_tables.sass @@ -152,7 +152,7 @@ tr text-align: center width: 15% - td[class*=reorder] + [class*=reorder] .icon-context:before padding: 0 0 0 0 .up diff --git a/app/assets/stylesheets/content/_wiki.sass b/app/assets/stylesheets/content/_wiki.sass index 21d1c224be..4523ba315b 100644 --- a/app/assets/stylesheets/content/_wiki.sass +++ b/app/assets/stylesheets/content/_wiki.sass @@ -161,3 +161,12 @@ h1:hover, h2:hover, h3:hover .wiki-content width: 700px + +blockquote + font-style: italic + &.icon:before + color: #e0e0e0 + position: relative + bottom: 10px + right: 15px + padding: 0 0 0 0 diff --git a/app/assets/stylesheets/fonts/_openproject_icon_font.sass b/app/assets/stylesheets/fonts/_openproject_icon_font.sass index 3b1de60501..791439350e 100644 --- a/app/assets/stylesheets/fonts/_openproject_icon_font.sass +++ b/app/assets/stylesheets/fonts/_openproject_icon_font.sass @@ -43,7 +43,7 @@ $icon-font-file-formats: eot woff ttf -moz-osx-font-smoothing: grayscale @mixin icon-rules - padding: 0 5px 0 10px + padding: 10px 5px 0 10px color: $content-icon-color @mixin icon2-rules @@ -92,7 +92,7 @@ $icon-font-file-formats: eot woff ttf font-size: 50px @mixin icon-context-padding - padding: 0 10px 0 0 + padding: 10px 10px 0 0 [data-icon]:before @include icon-common @@ -192,7 +192,7 @@ $icon-font-file-formats: eot woff ttf // used for icons in the content area, which appear in context (menus) .action-menu .icon:before, .icon-context:before - padding: 0 10px 0 0 + padding: 10px 10px 0 0 .legacy-pagination .previous_page:before, .legacy-pagination .next_page:after diff --git a/app/assets/stylesheets/scm.css.sass b/app/assets/stylesheets/scm.css.sass index 69eb4a24d4..831a84e8aa 100644 --- a/app/assets/stylesheets/scm.css.sass +++ b/app/assets/stylesheets/scm.css.sass @@ -41,30 +41,22 @@ div.changeset-changes ul li.change list-style-type: none - background-image: image-url('bullet_black.png') - background-position: left center - background-repeat: no-repeat - padding-top: 1px - padding-bottom: 1px - padding-left: 20px + padding: 1px 0 1px 20px margin: 0 - &.folder - background-image: image-url('folder_open.png') - &.change-A - background-image: image-url('folder_open_add.png') - &.change-M - background-image: image-url('folder_open_orange.png') - &.change-A - background-image: image-url('bullet_add.png') - &.change-M - background-image: image-url('bullet_orange.png') - &.change-C - background-image: image-url('bullet_blue.png') - &.change-R - background-image: image-url('bullet_purple.png') - &.change-D - background-image: image-url('bullet_delete.png') + &.icon:before + position: relative + top: 2px + &.change-A.icon:before + color: green + &.change-M.icon:before + color: #FAC100 + &.change-C.icon:before + color: #65B2F8 + &.change-R.icon:before + color: #A54EFD + &.change-D.icon:before + color: red .copied-from font-style: italic diff --git a/app/helpers/repositories_helper.rb b/app/helpers/repositories_helper.rb index a8c00642d4..987988593a 100644 --- a/app/helpers/repositories_helper.rb +++ b/app/helpers/repositories_helper.rb @@ -104,7 +104,7 @@ module RepositoriesHelper project_id: @project, path: path_param, rev: @changeset.identifier) - output << "
    • #{text}
    • " + output << "
    • #{text}
    • " output << render_changes_tree(s) elsif c = tree[file][:c] style << " change-#{c.action}" @@ -123,7 +123,14 @@ module RepositoriesHelper path: path_param, rev: @changeset.identifier) + ') ') if c.action == 'M' text << raw(' ' + content_tag('span', h(c.from_path), class: 'copied-from')) unless c.from_path.blank? - output << "
    • #{text}
    • " + case c.action + when 'A' + output << "
    • #{text}
    • " + when 'D' + output << "
    • #{text}
    • " + else + output << "
    • #{text}
    • " + end end end output << '
    ' diff --git a/app/views/repositories/revision.html.erb b/app/views/repositories/revision.html.erb index c53dc36c77..ab17b87b6e 100644 --- a/app/views/repositories/revision.html.erb +++ b/app/views/repositories/revision.html.erb @@ -63,11 +63,11 @@ See doc/COPYRIGHT.rdoc for more details. <% if User.current.allowed_to?(:browse_repository, @project) %>

    <%= l(:label_attachment_plural) %>

      -
    • <%= l(:label_added) %>
    • -
    • <%= l(:label_modified) %>
    • -
    • <%= l(:label_copied) %>
    • -
    • <%= l(:label_renamed) %>
    • -
    • <%= l(:label_deleted) %>
    • +
    • <%= l(:label_added) %>
    • +
    • <%= l(:label_modified) %>
    • +
    • <%= l(:label_copied) %>
    • +
    • <%= l(:label_renamed) %>
    • +
    • <%= l(:label_deleted) %>

    <%= link_to(l(:label_view_diff), :action => 'diff', :project_id => @project, :path => nil, :rev => @changeset.identifier) if @changeset.changes.any? %>

    diff --git a/lib/redcloth3.rb b/lib/redcloth3.rb index 3f3d114f16..9dd24a9043 100644 --- a/lib/redcloth3.rb +++ b/lib/redcloth3.rb @@ -593,7 +593,7 @@ class RedCloth3 < String bq,content = $1, $2 l = bq.count('>') if l != indent - quotes << ("\n\n" + (l>indent ? '
    ' * (l-indent) : '
    ' * (indent-l)) + "\n\n") + quotes << ("\n\n" + (l>indent ? '
    ' * (l-indent) : '
    ' * (indent-l)) + "\n\n") indent = l end quotes << (content + "\n") From 3805cb3cf2dca88c56c69d03e2589bfec0390519 Mon Sep 17 00:00:00 2001 From: Henriette Dinger Date: Wed, 26 Aug 2015 13:08:17 +0200 Subject: [PATCH 046/112] replaced image DialogCloser and removed legacy code --- app/assets/javascripts/modal.js | 2 +- app/assets/stylesheets/_misc_legacy.sass | 36 ++++--------------- .../stylesheets/layout/_work_package.sass | 10 ++++++ 3 files changed, 17 insertions(+), 31 deletions(-) diff --git a/app/assets/javascripts/modal.js b/app/assets/javascripts/modal.js index 74cc6f7aca..1adb885b58 100644 --- a/app/assets/javascripts/modal.js +++ b/app/assets/javascripts/modal.js @@ -242,7 +242,7 @@ var ModalHelper = (function() { if (this._firstLoad) { //add closer - modalDiv.parent().prepend('
    ').click(jQuery.proxy(this.close, this)); + modalDiv.parent().prepend('
    ').click(jQuery.proxy(this.close, this)); jQuery('.ui-dialog-titlebar').hide(); jQuery('.ui-dialog-buttonpane').hide(); diff --git a/app/assets/stylesheets/_misc_legacy.sass b/app/assets/stylesheets/_misc_legacy.sass index a32feff479..289e6c2dd9 100644 --- a/app/assets/stylesheets/_misc_legacy.sass +++ b/app/assets/stylesheets/_misc_legacy.sass @@ -334,13 +334,6 @@ div.issue hr margin-top: -6px margin-bottom: 0 -.attachments h4 - margin-bottom: 6px - background: image-url("files-showhide.png") no-repeat right bottom - cursor: pointer - &.closed - background-position: right 5px - table.files display: table @@ -398,22 +391,6 @@ ul.projects top: 7px right: 14px -/* file table hovers */ - -a.has-thumb - img - position: absolute - display: none - border: 1px solid #a6c6cf - padding: 4px - background: #fff - border-radius: 3px - &.active - left: -10px - background: image-url("thumb-arrow-right.png") no-repeat left center - padding-left: 10px - margin-right: -10px - td.issue div.issue-wrap-outer position: relative @@ -627,8 +604,6 @@ div.indent padding-top: 0 #content - #history - background: image-url("dotted-separator.gif") repeat-x scroll 0 bottom transparent .wiki-content p, li width: 700px @@ -639,14 +614,15 @@ input::-webkit-input-placeholder, :-moz-placeholder color: #000000 #ui-dialog-closer - background-image: image-url("modal_close.png") cursor: pointer - height: 33px position: absolute - right: -15px - top: -15px - width: 33px + right: -21px + top: -17px z-index: 5000 + font-size: 2rem + + &.icon:before + color: black h4.comment margin-bottom: 8px diff --git a/app/assets/stylesheets/layout/_work_package.sass b/app/assets/stylesheets/layout/_work_package.sass index 70b3e1f2b0..7b6866737a 100644 --- a/app/assets/stylesheets/layout/_work_package.sass +++ b/app/assets/stylesheets/layout/_work_package.sass @@ -47,6 +47,16 @@ .flash ~ div[ui-view] height: calc(100% - #{($content-flash-height + $flash-margins-padding)}) + // If there are two flash messages shown: + // Subtract the height of the two flash messages + .flash:not(.ng-hide) ~ .flash:not(.ng-hide) ~ div[ui-view] + height: calc(100% - #{2 * ($content-flash-height + $flash-margins-padding)}) + + #history + border-bottom-color: rgb(221, 221, 221) + border-bottom-style: solid + border-bottom-width: 1px + // HACK: workaround to ensure correct height applied to child elements #work-packages-index height: 100% From 64ed141b16f620362eff811fa27c474dff51d3f1 Mon Sep 17 00:00:00 2001 From: Henriette Dinger Date: Wed, 26 Aug 2015 13:11:21 +0200 Subject: [PATCH 047/112] deleted the webalys folder --- app/assets/images/webalys/LICENSE.md | 24 ------------------ app/assets/images/webalys/activity_news.png | Bin 304 -> 0 bytes app/assets/images/webalys/arrow-down_2.png | Bin 214 -> 0 bytes app/assets/images/webalys/arrow_circle.png | Bin 272 -> 0 bytes .../images/webalys/arrow_left_right.png | Bin 404 -> 0 bytes app/assets/images/webalys/budget.png | Bin 160 -> 0 bytes app/assets/images/webalys/calendar.png | Bin 307 -> 0 bytes app/assets/images/webalys/cancel.png | Bin 279 -> 0 bytes app/assets/images/webalys/changeset.png | Bin 219 -> 0 bytes app/assets/images/webalys/check.png | Bin 267 -> 0 bytes app/assets/images/webalys/configure.png | Bin 292 -> 0 bytes app/assets/images/webalys/copy.png | Bin 274 -> 0 bytes app/assets/images/webalys/delete.png | Bin 209 -> 0 bytes app/assets/images/webalys/deleted.png | Bin 247 -> 0 bytes .../images/webalys/double_arrow_left.png | Bin 280 -> 0 bytes .../images/webalys/double_arrow_right.png | Bin 265 -> 0 bytes app/assets/images/webalys/duplicate.png | Bin 241 -> 0 bytes app/assets/images/webalys/edit.png | Bin 225 -> 0 bytes app/assets/images/webalys/envelope.png | Bin 238 -> 0 bytes app/assets/images/webalys/error.png | Bin 304 -> 0 bytes app/assets/images/webalys/fav.png | Bin 246 -> 0 bytes app/assets/images/webalys/feed.png | Bin 305 -> 0 bytes app/assets/images/webalys/group.png | Bin 308 -> 0 bytes app/assets/images/webalys/help.png | Bin 257 -> 0 bytes app/assets/images/webalys/history.png | Bin 263 -> 0 bytes app/assets/images/webalys/latest_news.png | Bin 300 -> 0 bytes app/assets/images/webalys/latest_projects.png | Bin 517 -> 0 bytes app/assets/images/webalys/locked.png | Bin 229 -> 0 bytes app/assets/images/webalys/locked_un.png | Bin 240 -> 0 bytes app/assets/images/webalys/move.png | Bin 240 -> 0 bytes .../images/webalys/new_planning_element.png | Bin 195 -> 0 bytes app/assets/images/webalys/news.png | Bin 243 -> 0 bytes app/assets/images/webalys/outline.png | Bin 308 -> 0 bytes app/assets/images/webalys/package.png | Bin 281 -> 0 bytes app/assets/images/webalys/plus.png | Bin 194 -> 0 bytes app/assets/images/webalys/quote.png | Bin 289 -> 0 bytes app/assets/images/webalys/red_x.png | Bin 220 -> 0 bytes app/assets/images/webalys/rename.png | Bin 214 -> 0 bytes app/assets/images/webalys/save.png | Bin 203 -> 0 bytes app/assets/images/webalys/search.png | Bin 1027 -> 0 bytes app/assets/images/webalys/stats.png | Bin 251 -> 0 bytes app/assets/images/webalys/summary.png | Bin 253 -> 0 bytes app/assets/images/webalys/ticket.png | Bin 209 -> 0 bytes app/assets/images/webalys/ticket_checked.png | Bin 265 -> 0 bytes app/assets/images/webalys/ticket_edit.png | Bin 279 -> 0 bytes app/assets/images/webalys/ticket_note.png | Bin 278 -> 0 bytes app/assets/images/webalys/time.png | Bin 298 -> 0 bytes app/assets/images/webalys/tip.png | Bin 808 -> 0 bytes app/assets/images/webalys/units.png | Bin 185 -> 0 bytes app/assets/images/webalys/user.png | Bin 228 -> 0 bytes app/assets/images/webalys/warning.png | Bin 285 -> 0 bytes app/assets/images/webalys/watch.png | Bin 301 -> 0 bytes app/assets/images/webalys/watch_b.png | Bin 275 -> 0 bytes app/assets/images/webalys/wiki_edit.png | Bin 313 -> 0 bytes app/assets/images/webalys/zoom_in.png | Bin 318 -> 0 bytes app/assets/images/webalys/zoom_out.png | Bin 302 -> 0 bytes 56 files changed, 24 deletions(-) delete mode 100644 app/assets/images/webalys/LICENSE.md delete mode 100644 app/assets/images/webalys/activity_news.png delete mode 100644 app/assets/images/webalys/arrow-down_2.png delete mode 100644 app/assets/images/webalys/arrow_circle.png delete mode 100644 app/assets/images/webalys/arrow_left_right.png delete mode 100644 app/assets/images/webalys/budget.png delete mode 100644 app/assets/images/webalys/calendar.png delete mode 100644 app/assets/images/webalys/cancel.png delete mode 100644 app/assets/images/webalys/changeset.png delete mode 100644 app/assets/images/webalys/check.png delete mode 100644 app/assets/images/webalys/configure.png delete mode 100644 app/assets/images/webalys/copy.png delete mode 100644 app/assets/images/webalys/delete.png delete mode 100644 app/assets/images/webalys/deleted.png delete mode 100644 app/assets/images/webalys/double_arrow_left.png delete mode 100644 app/assets/images/webalys/double_arrow_right.png delete mode 100644 app/assets/images/webalys/duplicate.png delete mode 100644 app/assets/images/webalys/edit.png delete mode 100644 app/assets/images/webalys/envelope.png delete mode 100644 app/assets/images/webalys/error.png delete mode 100644 app/assets/images/webalys/fav.png delete mode 100644 app/assets/images/webalys/feed.png delete mode 100644 app/assets/images/webalys/group.png delete mode 100644 app/assets/images/webalys/help.png delete mode 100644 app/assets/images/webalys/history.png delete mode 100644 app/assets/images/webalys/latest_news.png delete mode 100644 app/assets/images/webalys/latest_projects.png delete mode 100644 app/assets/images/webalys/locked.png delete mode 100644 app/assets/images/webalys/locked_un.png delete mode 100644 app/assets/images/webalys/move.png delete mode 100644 app/assets/images/webalys/new_planning_element.png delete mode 100644 app/assets/images/webalys/news.png delete mode 100644 app/assets/images/webalys/outline.png delete mode 100644 app/assets/images/webalys/package.png delete mode 100644 app/assets/images/webalys/plus.png delete mode 100644 app/assets/images/webalys/quote.png delete mode 100644 app/assets/images/webalys/red_x.png delete mode 100644 app/assets/images/webalys/rename.png delete mode 100644 app/assets/images/webalys/save.png delete mode 100644 app/assets/images/webalys/search.png delete mode 100644 app/assets/images/webalys/stats.png delete mode 100644 app/assets/images/webalys/summary.png delete mode 100644 app/assets/images/webalys/ticket.png delete mode 100644 app/assets/images/webalys/ticket_checked.png delete mode 100644 app/assets/images/webalys/ticket_edit.png delete mode 100644 app/assets/images/webalys/ticket_note.png delete mode 100644 app/assets/images/webalys/time.png delete mode 100644 app/assets/images/webalys/tip.png delete mode 100644 app/assets/images/webalys/units.png delete mode 100644 app/assets/images/webalys/user.png delete mode 100644 app/assets/images/webalys/warning.png delete mode 100644 app/assets/images/webalys/watch.png delete mode 100644 app/assets/images/webalys/watch_b.png delete mode 100644 app/assets/images/webalys/wiki_edit.png delete mode 100644 app/assets/images/webalys/zoom_in.png delete mode 100644 app/assets/images/webalys/zoom_out.png diff --git a/app/assets/images/webalys/LICENSE.md b/app/assets/images/webalys/LICENSE.md deleted file mode 100644 index 4137f05538..0000000000 --- a/app/assets/images/webalys/LICENSE.md +++ /dev/null @@ -1,24 +0,0 @@ -# All images in this directory are lincensed under the Creative Commons License - -Some images are from the "Minicons Free Vector Icons Pack by Webalys", -some from the "Minimal Vector Icons by Webalys". Detailed license for both icon sets follow. - -## Minicons - -
    -Minicons Free Vector Icons Pack by Webalys is licensed under a Creative Commons Attribution 3.0 Unported License and Free for both personal and commercial use. You can copy, adapt, remix, distribute or transmit it.
    -
    -Under this condition: provide a mention of this "Minicons Free Vector Icons Pack" and a link back to this page: http://www.webalys.com/minicons
    -
    - -License: http://www.webalys.com/minicons/license.php - -## Minimal Vector Icons - -
    -This Pack is published under a Creative Commons Attribution license and Free for both personal and commercial use. You can copy, adapt, remix, distribute or transmit it.
    -
    -Under this condition: provide a mention of this "User Interface Design framework" and a link back to this page: http://www.webalys.com/design-interface-application-framework.php
    -
    - -License: https://creativecommons.org/licenses/by/3.0/ diff --git a/app/assets/images/webalys/activity_news.png b/app/assets/images/webalys/activity_news.png deleted file mode 100644 index 41c47691f5aa6773a17afbd75c1dc23c58d7b585..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 304 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XE_u2*hE&{2N|4}CxLs<+*um_Oqh@4c&am>Q!yW!d#zHGS z89W+u*03kBs%Scktzepv$rkZNujSI`!Wps$m_G4O2yAdZ=&11Q_+yJYwH1@~7(Oz} zbn$$UNO15`usfjqoiXJA(+X{w0*zfA#~ZqR`cL~fnrSd?R2E=Y@{DVc;yctDVAu9q zVx!B=$`$+d8F6c??HwO%8}N{FL7yxk0cqwqK9) z63dakfc!+Y)CEtNmS`N6WL9XFU}I(AFksj})#}j$vt9FnzGLuo^>bP0l+XkK{SIfm diff --git a/app/assets/images/webalys/arrow-down_2.png b/app/assets/images/webalys/arrow-down_2.png deleted file mode 100644 index 93d782e666b02476bc704634ca64267578251d6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G6`n4RAr-fhro6SvJ#gTFzySxD9S4|H$^_VQ^?*WQa9ZvAZHrstR-igQu&X J%Q~loCIHGzMGyc0 diff --git a/app/assets/images/webalys/arrow_circle.png b/app/assets/images/webalys/arrow_circle.png deleted file mode 100644 index 3e389a635e64f9f7fd576cf748466dcb29f30bf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1Gn><|{Ln>}1B`63QBneM>YxS04iNg;@f%uA;v?|7Rj2f8? z!VH_38?MwSh&dQPW)NU!x?0PSS;7Crf@vdTh@sCxM}=qXNfQ*g6lOcTideAht-Fz~ zV8$gTmFK2TPaWC589N?jT~NWeDM^6AlKF{@hIs?$*|lsA!WZxIU;4uE%7>AMS0THw zMdOBo*oyXx&7lmhL?rGrWZhtQOH$%q@z5s3Sy`BKVhuw^HuFl&W=4er4EkG5zs?S+ RG6A}t!PC{xWt~$(69A8gSK0so diff --git a/app/assets/images/webalys/arrow_left_right.png b/app/assets/images/webalys/arrow_left_right.png deleted file mode 100644 index 4fb1b090b19f0a1691211e4203b979823da02a64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404 zcmV;F0c-w=P)}< zAyFp{7FM&L|NqCZFfjb|dH321tA+|5KCVSRJ!tjNs55Y5S5fkiP0 zBr{m)8750IF$9S@(k zlOW$&Zt;zmMWssRfwr@NB-pu_7#tHt=HI^XRpi3&-wsQEe+3)jktr7NVEX&}pa1_a z^?mc=!RP<~7#L+VIT_-*WgA)880(;x-3Q_wK&-&Q%_KE9|B>z8GhaW$T*8txQO+Jn z=Og`Nhp~B1Q-BGTx9AQ{)y!P0000-KS2cfWE4 z2bcU(F?Y;6bHltaZ}h<^XHeAQgV?2HHZ(?(Gg;EocO*F}49qjlhkFA~gU2002ovPDHLk FV1nB3eM0~M diff --git a/app/assets/images/webalys/cancel.png b/app/assets/images/webalys/cancel.png deleted file mode 100644 index 67268b8c87be9758eae40cf0f1221183aba47f28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^{6NgZ!3HGvIz4{^q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c747tNaSW-rm6YPZyeW3MY{Qj0HYEmbxt&f5`x>0jF?9Tn zypS`O|LPNtOFwp;`NC{A*P%3F7N>7A)0L1pQigMSmrP`Q7Qf=9Lb^P|qfUpzatpH4 zoGy2q&1ZF}kzcWn(b+hJ(QtuWhJ*bk24%5y`39@+%9E_>6!;jDSThou_8#w$OK{k4 z_-K>VtCC8EIF3s^{J9I3xhPESIDgl{RN*Xp;GACNR!b&P`2!D`Hb~WI=Gf~PK44;C aWMjzQx-%zGXokb1*8*{OyxYTIaD(UBrs?#Qh2=oO{*-> OAq<|belF{r5}E*C=}UP4 diff --git a/app/assets/images/webalys/check.png b/app/assets/images/webalys/check.png deleted file mode 100644 index af0525cbbfebdc38cca9859a2811d747bf8e523c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GYdu{YLn>}1r6@3+D4XlY5cIk62eYzZ7jMIrIt4L?k25(m z#2RMlFo=4kC?zm@Y-F6W_d(&zmrQCl%gh;8GH85f5)f~a=yB-$8lcVHs20o_+Rs$H$^|k72XqlO?PH+Ze7~`RdUnJyEndx4|mWc2ad> z0&_s2!mj%X^ZZ(>c-Z6|jv6p1N6on3UL>2y=wJ}G@Fase1BU@a%oekZ?MuXt0v*oa M>FVdQ&MBb@02%36!vFvP diff --git a/app/assets/images/webalys/configure.png b/app/assets/images/webalys/configure.png deleted file mode 100644 index 71801b6424007759ec2215e909657cd56802626f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G$2?seLn>}1r8qEeie1jzaHUe=--jJ%LIh&xv3dsD3aB$} zWC-zN(3;M$Ld|?t#05kK<1#_G<);6qR^!&)W;w_H> zuk-|wT82lQ5l46&{L)#3-e2_5W!Y8AB&Ke7AV(lUL9QmDrELPkmB$9J#U1_%Gl*I< zY`H3UB%virmw~sM)n=JGlc{b)WtH8eNBkaLdJcxnCVCGRUf~Fx(IK{b!Gp4vHi<)? m5tG<;p71zs?ABoyNMKmWV=dUvpK%K4BL+`bKbLh*2~7a>0%5`c diff --git a/app/assets/images/webalys/copy.png b/app/assets/images/webalys/copy.png deleted file mode 100644 index dd350d11d68cb7a5a0c1703aec6f9656f24924a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GTRdGHLn>}1r8qEcid`<-aHWpTr+~3TR(|@-x`f07d~yzk z92yK883op}XC|@C>dINf5VA=yBZ~P-7~_hy3LjY&c>iy_QNYk4JK;x@fv=ANtAntl zW0=xzNzUduTLo1PHa&UBqLAAE#Dv|%zLD_^8`}b2?uIK)Y)lN(dHECPxlPJ^hirK&m0nr-dud;nE()-Z+ks@}1r8G2sUNnizVU=75b3+7!)*r?WbB4mj4_`m$ zcVOxXILhXbWk1QOgyGT)jw>aNf?1y`ZMr6!N*X!Nb@VV~4)L`WzH;_R6N8w_Wyd_5 z24B$&H~9?gjSMGnILxc_Um|}%F1@MEcw+*yhqJQD35gDlYi?>8JXS&%Sh{zxC-^rf r3AiwRWHRZMUy#%mV9LY5$i~1{qCa8dhqw-)BN;qh{an^LB{Ts5CCpH$ diff --git a/app/assets/images/webalys/double_arrow_left.png b/app/assets/images/webalys/double_arrow_left.png deleted file mode 100644 index e72d839fff332925b9c4aa977b0aa7792b03bebf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GyF6VSLn>}1B`jc@@Yd=s!y%79Oag2hBR6Qw<6k1w@Pk>v ze8ETc4GNkf3_-seZ!mPoGZZQXys??WAM}PJ=r~L0nuaAmm;~6F3hjmBKNik>$(o|x zDAH^q+n{CFe}-M_A44&x@Dw|SrMwHc}1B`C0;D4VOtkQh^wa)4#&>&6}OD>Cf(>|_j_ zd`%dFem6!ibnr72DhsS{|D?~b@$qA$%lrk>4KfoJD27~OOtBJ@&ylzgz?!1oXkyDS zvt4mzRmJDE{H-sKr{>;#VOj4Lb{J?6H1`88>=b;iQwvKb92p!*fzPM4}A-v1d30urV<4Ff3W((B^q`|1Y4k89ZJ6 KT-G@yGywoHBUGRO diff --git a/app/assets/images/webalys/duplicate.png b/app/assets/images/webalys/duplicate.png deleted file mode 100644 index 3993bcba1404a844efaa2384c48bbe3af8ebe21b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GlRaG=Ln>}1O?hi|_rQSz0p}ZJbt+=gW_9QsXwu<4!awoH zKZiLCCKDJVg*UaeI&?A{@OdZ-NG!-sN;<$R$MBI+gZENMLpbvVmkGaR8+~RJvvAyO z5EWR=_+*LOiq9RF7BKLZv406T#Ng2X?XU=wqs@eT|4s4}av5emXi)nv*rCq!u_nXD mR3Y2rKw^f{rsa%GJPegdI+-oPCRRY_F?hQAxvXyX26 zM84sM;F8XX97hcpt{w4Nk|gke;nDOS7cDl%3Gy<>(0&|?rtU^p<_ W(n7g;##x|q7(8A5T-G@yGywqmFiX7v diff --git a/app/assets/images/webalys/envelope.png b/app/assets/images/webalys/envelope.png deleted file mode 100644 index 40977ec0d0b126ac3c83b2a2e7809380e2d4c25f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G6FglULn>}1B}kMs1TK8Ng=s>VLeO7kF@=l#Pgw*4Y8X1~ z4ID+e7(TMubU7BuJ7mpVz{D4j?t5TS1!D-`8zwasPUaQITvRr?tVm*>!N9$#eZf1H zpDP8muJLa@$nYwsK;tj_CGiCojH^B{PZ4Xlq`>^gQ7UqR&FqGh*$lJnUoCuf;9wL- j>2nvQM-Q1C8Wv59bQ^=GtDnm{r-UW|txr(X diff --git a/app/assets/images/webalys/error.png b/app/assets/images/webalys/error.png deleted file mode 100644 index 4c1d6125fa3c9a57e0694f4d14ace4bc9c859037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 304 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1Gmpok@Ln>}1B{VSITz8qxVaa0%ybp-ec`C##%@r^x+03rO@TS(SKW#x)&MI;U*%mplsz8T7yaSjmT}MdcR*}a zz*dPy=AuhZGP52ne8|9m)lH#};c5c^k$(qvXt{V>ZgANsuxi^xL0?9V1)mxt7{o4K zX!*$4q0V%aFTr~?Pe5mH#GIXik-{7dED{WY3eE>M{W~!O=sN~aS3j3^P6}1B`jbIcwx1c;Rx%ECo>9OcrrYy2{Jj-tiyCG zsX^}`M`;uDgrbJ7kIaT=EX5ltl&Ab<>=55@U=D9-6T_@Vwg4U`X$L8Zi8fr5X7n#% zkQA}gFrLd$E;LDP!sc&_HRBjU=5(CCe8Z>wfVkJcfb*gTe~DWM4fi`G&L diff --git a/app/assets/images/webalys/feed.png b/app/assets/images/webalys/feed.png deleted file mode 100644 index 93e9fd33347796eb10e12a2c82284c4cb5df59e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1Gmpxq^Ln>}1B`FAQXyCZH?(+Y}E9?sU7>-CcRvdh6beaE# ziGkuq)`lC59lslY*j<>wG)JmonIV&=tAZcPBj$j!e;s^3Z_HxwTEia1si4kiYR&Z0 zX@#)x1ye(%pNwn{W-Lq_nFQXq-wNX}$za+f@4%(z;9J_DRl{(kH{fU0f`v>c>TWO` zQAn3?az4e-aoyRsmSL+Z!%fe>0j}H&{jB&yQ#wS76r7n8{j?gqjxe)2s^v9wu{-c4 zG)QrLXZAVhrco;>#^k`P=P;9t=Ltgt12e-(Z>KL+*A3gTe~DWM4fQUYa} diff --git a/app/assets/images/webalys/group.png b/app/assets/images/webalys/group.png deleted file mode 100644 index 8d76f0cb68fe78f6661fd4b204052d654cdc2c3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 308 zcmV-40n7f0P)In?h|H1gI&A=?_5-m1 z5Ptw-$H!%+7w{Rtg2wNMYG#1aAig7r)85_|0Ho@n;*FJ+RSQ7kOlSrO;Ni~)Vvq|J zKy09a2G|TRz{UqE7QkgVx&a$-@D;FlAFB%{V&en-3kpc&!2AFdn}E%L2YC3%>;)*% z2#h{Z2*(3)02Zf$ys9sd4UC%REY$js4T>isK^HZ0R{ll?>17&ajRJX0000}1r8qEcid`<+5W*yI+qu<@>0{IJ)MfGsSrHNe z2P+lC93ELS6xs+#A7Ytt!NjD=hvkur!aW92V}@IA7=jO+Xkca#ZOp0Se`>`vx0GQv zufb79hb;R^7noz}5*niR%Xw-DW?1F%dOTpdqA5Rtbz>%jCd1C}OuLdcF(~u#uWzrq zB5+qMXQ2rHQpb&X4SJnt`Fk(isAJ%+PGJy8U@&6S$vwqd334ujr>mdKI;Vst05{Q7 A8UO$Q diff --git a/app/assets/images/webalys/history.png b/app/assets/images/webalys/history.png deleted file mode 100644 index 90f27e45cf277b272b6ce2af64e9e8f1ea031540..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 263 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CH!3HFy_x^nYq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6|MAiaSW-rm6RY+(h#`q^_O~uT82~m8IG{aPoJ5`P}oq! z=AgyU@pj=SJ_Fu12OWkZTn;k)Q)?K47>)=pWUFO(R3|op=fV+gk8OGkQblqe>I@qd z0^TwEFln4S&~kXC`~tRGhv^AQS1)h5-XOPzec{5%{6`ij@U~pqkYJk7$TpK%XU;{Q znEqq+2bfG%8COkY%!*>1V#}DN&3t7UbHrWFu0(~h18VF72@E0ndS@Tcty>OsG=rzB KpUXO@geCwe09nKU diff --git a/app/assets/images/webalys/latest_news.png b/app/assets/images/webalys/latest_news.png deleted file mode 100644 index cc202a06f2cee0a61c1aae495566c0a79f8e8139..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5X&Uv~xhE&{2N>C6!Q8qV>;bKopmLEgVUxzg(oEEt;DwxW5 zFfVZ8>~YB|VF>!C!0VvXpix7y*tcP5tH_+Lz(el zQVx^yG>iZIsdWrXO%^E1e^60#Rnxh5i(#oF*XxU_j%-YY3KJwbmdGaloK7{J6p zA)wd*2KlMC|BGeLnn|+FTzrhO9Vgb4ATp zamvcdOcoXvE$`pIKW%PqK2Kg%mF3s(-+zg5fj$tM0kIIs5l}IEAXWzA-(UlN{P_9L z$=aMVH6^7R#OLPb<}EKPD^ycc6L5BRR{!hA6V@_S&hAkE6k!~)dBpscLKX3k@#_v6Qp zdZ1hy)PK4_ybI(?pka>$1O#}}Qd9eZ-r35?@ZaVq6Z_dMOiaIEeiHlt|NoQCn>X)a zVPQG-_3PJ#6DCgl`Sj`2rFZY%-F@rUEe4=h*nsLxfLIEM4S-k}1r5s>P+3jb}u(C!$tbt3H;gM6COqXy&h`qpn zhDX8yiR=o~5)LIg+Ds{{iAj6Kv4pqr2cv-cgG&rd{0&|D4H6E&m?u~=#wgL=+33=+?je)OkB(~x8bsc?WdCUJXXci=&(QTT kD?{bMdG-@B4Ghc-Ig-jVrCT$e0bR%7>FVdQ&MBb@0E!z?cmMzZ diff --git a/app/assets/images/webalys/move.png b/app/assets/images/webalys/move.png deleted file mode 100644 index 3895961bb0914a5a7fc41afc49b85986d6c0126e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GlRRA}1B`63QoGP39&)=c<@nfUQ%m#ei9SmFsNx__^ zJ`5h*3|DIyIt?EhOJxaoJgl3bwu3igS(A!T!wtCYH1!yQz6Q9yU|7@1 z>RV{v$grc~4f}+X!V4BM7425&;1y+VWOexH60xC4#X)f+WA}WShAB(|d5lFi7LN)J k)vfu+Fm(Yh1BU^F*IVOy!78C(pz9bsUHx3vIVCg!0Ef3s>Hq)$ diff --git a/app/assets/images/webalys/new_planning_element.png b/app/assets/images/webalys/new_planning_element.png deleted file mode 100644 index f7c63535da77ccb34dca260db59993bbe1c9ab3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1Gsh%#5Ar-fhbWWVVudkchWcP@HiHG5^p18HWHn$ScLIzJ)KbLh*2~7a8jy^O1 diff --git a/app/assets/images/webalys/news.png b/app/assets/images/webalys/news.png deleted file mode 100644 index b82ab28f1a38953f7bb228fa156e08f384c434cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GQ$1ZALn>}1r6>rUD4T1>5X3*DGh`0Kl4;C_%F1%COb(|Q zJ3cQo;fP6K@jAn9By{15Ig_EifcOIGBP^jcjNPhiH*(UNF0prfwedL2k`wlL!_-E> zlam=8vTQs4?l?0=aQX6!PS5P8yyUo2!k`=RyRkw^cvi20>)#Vi4rjR=rYN5Hsgoha o)mUM_&4D4S>VN|u1BU^FM}~US{UG=0KnF5-y85}Sb4q9e0E-h+-~a#s diff --git a/app/assets/images/webalys/outline.png b/app/assets/images/webalys/outline.png deleted file mode 100644 index 1a808e894596e86aff5147313ce545c3110dc749..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xu6epRhE&{2N?~BSx$ZJA&yGeL0soqqv?|8gD%>HT*#DIpg-Y>Eo*giPtDzjN6aW}U* z*vMy`aN2TVn))#pHVGGuck?tt4{{(1#43u6{1-oD!M< DEHrFg diff --git a/app/assets/images/webalys/package.png b/app/assets/images/webalys/package.png deleted file mode 100644 index 0f18d9db56a8ccaa6ba1ead053b7dfdce7244de4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GyFFbTLn>}1r8qEcie1j!FvV7Y-J#Wt;p4&Msmr7jvLqV2 zxF(3yGCX2-*dy4%y5JFCfSJc-w+U_k1I~&!>=4Mf#i+CG8uLcRGi(#uoD{yb&tlu$ z%6K=^;ST>b29v3RS+f{Ig6%>cx}zOqRnntuw*%zca+i40Hk6C9X*cvP5fWhXRN zEn|FAwqUk?LNLqMU?8i47@=T+(j2;$vcR0IXuo(R-UBE6yRB{^Kd_-R1*&a bBO8NOgNyF3gyz*iZ!mbe`njxgN@xNAvA14i diff --git a/app/assets/images/webalys/plus.png b/app/assets/images/webalys/plus.png deleted file mode 100644 index 0c1775865b39e6d11352934e47079b4fd3b500de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uAB#T}@sR2@wC9V-A!TD(=<%vb942~)JNvR5+ zxryniL8*x;m4zo$ZGehWJY5_^DsCmE9AHY>?I+Ek$*A%D;A5l9>?c0?@Z4~;7kJ

    zopr0MH0SzyJUM diff --git a/app/assets/images/webalys/quote.png b/app/assets/images/webalys/quote.png deleted file mode 100644 index 0f64b7c97b6396fc689549d3bc3bcb600c016223..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1Ghdo^!Ln>}1r8qEcid`<+FolU(tK!3sGhY~c4s(P`Ff94C zQKK!J>5!qN)hPU9IKtgfp*$<8UV&|;Aj2b<32om4INcX;if@qQ4@qWN z@~!!XPrzL90!=o?6*3&$298GycFIaNTy2`iG@tB8*ebK zVoUkzvZC{&$2NI}M-FZ(lbI$su~=G&JN@0kD97(HOD16Ffsu_tXRX~5!*`csfZk#7boFyt=akR{0E)w8NB{r; diff --git a/app/assets/images/webalys/red_x.png b/app/assets/images/webalys/red_x.png deleted file mode 100644 index bfd41d08fd1990dcecf5d4fe38a92ba592092abb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1Gb)GJcAr-fh5*V63A9}>;@JFtLSKD%H$W0aVH$IE-`QzFxZ#4{W^E_ S=nSAs7(8A5T-G@yGywn-K~d@e diff --git a/app/assets/images/webalys/rename.png b/app/assets/images/webalys/rename.png deleted file mode 100644 index dfb705eb202a5eb772568df2531de61e7343aa5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G6`n4RAr-fh5)Lq>?DqT5{^;+GClV7yOcgq>Gk;`Oi0e@K z_ONi~OO_Pg|B@WdtUf#{Okyf!%7%VPj8;b(PP{yxG=o9lw)0K#hA!y@vp4NtNtYiq z=y7~H%ogey5>q&;mJTZFnGH9 KxvX{NR>J`J1Z_PJ+cvPAkS2PN0PRU4S=9ZEd5pT^%`n$p6z%oXW!UYEF*^hB5oAB8^ y*v!bn_n`11dx?L2gB7==gu`Suk8^?w2N+V1ODo;|!>$grn8DN4&t;ucLK6U&#y~*; diff --git a/app/assets/images/webalys/search.png b/app/assets/images/webalys/search.png deleted file mode 100644 index 5a8b14e8374b0d301ec66fcd5e3fffbfdd8277d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1027 zcmV+e1pNDnP)Px#24YJ`L;%nL&;ZbT>?6Ve000SaNLh0L04^f{04^f|c%?sf00007bV*G`2ipn_ z2purnQHwYL0013nR9JLFZ*6U5ZgcY8BeNK7%AYea>^v>G5gn8LrQiq@lyjkNdi>J0VIGMNt@rG#U-6)hbaG zA;d7)woRc>z%)&iAPAz1iwiVOV|sd;@$qpPAu(`{<4~*B=yW<1i$#=ry&gS3KQlW! zi>~W3LSkrq-{M%q6kiTmFG1@yjMAZqFHzO*Im~e!s?{pK?~}{rC=?2RxkrL123B@e zRpsdDh)ShGyWJ*=B6MBHvMfra5}8Z}fFKBx^`Mky(HEZQeRjI4%HiQ5mzS5guFL%V zJd2BqWV2ZwA0OG?-cADhPa%{UQG7`%l>(qvt8sUChiRH@Zf=rJrvX@5Sz&K)kK5Z@ zj*pL7U0s!CMGVf(%?+JShvnsE(&;oo5F|~^#>NJ!s#2*`q-z#~;ks^8qQfvGm&+yV zMpab_f&c*1G?QZqqUdXL^0U#=Q8Z2C`uaL4*+CGHN~LJETD043Mn*;?h@yW~RmJl> z01U$bNE(y#^K;J5&XT62)oQV`vjf1w!a_28O0y#RB7RrZ^E^_i6rD~7MNt4aIXU6< z^c2%HKVM={Rc2;pn46pHYH%co;*U$SVHmisi(wczj>G=`K91v%&1Nx86W4WVx7*mZ zO|e*HX=$lz?I=MMeVGk|AiyvTUSD51I5?ouXkgnmrBVsYvXVw7F5PhedwIelK@>fS zH>5v4KG@ye<>loC+qPL-Tf?%fBy@&hBpcpwAbTM}6#q#kli~gS9m}#NZMN6qK++~42h z`@W2d7%JcQd3bnWY-|j5VqyY-a=A>i*_6={L(yzDDVNKHVaVjh-#e xkoYo1QMx|j755*%e%LF%&$2A0rlv4WlOHO~ZsNzF@CpC`002ovPDHLkV1f!E(Cz>L diff --git a/app/assets/images/webalys/stats.png b/app/assets/images/webalys/stats.png deleted file mode 100644 index d5dc56f45068fa4d522ad7560c2535e8f464aa41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 251 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1Gb3I)gLn>}1B`63RoGP0e#&C&Kn#{oay#tgci3j@qbw|V?iT+Mwiiu45jg=2kJy}+ zZCsG~iam(mv5_^!-eHmv!>7N6SuIvCm8Yz2P|<667o%1r%&^IA0x$c*H*PA062BET wX-8Zz5t=Iyu|V*?$0Bd}39nt*8W@-vwAU*O{dDWS19T{Zr>mdKI;Vst070HrCIA2c diff --git a/app/assets/images/webalys/summary.png b/app/assets/images/webalys/summary.png deleted file mode 100644 index 4b0ffa250e6c1331d2291f7866102f7f72e92d2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G^F3W0Ln>}1r8F?zTz8q(VU>J`J;TPwkBu&KJ8b;yu#Hh5 zzM-o&A<2PZLXxw>JdPt@9gZ?OL@})B5X|ym@(|p_HX*@oidn-W=78CbZ`c)FdmI>9 z6?hN-4Dd{02-+dAL^6%}#HzmzHuAoO%2U`RL-<2C&+lw>Il#2_6N8xLnnykd0wNfA y&5|4xxu-A|?Pi|!#8D@SN#%FrHz@`t9)_98TG{_+{ow;TmBG{1&t;ucLK6T-6I8hX diff --git a/app/assets/images/webalys/ticket.png b/app/assets/images/webalys/ticket.png deleted file mode 100644 index 46d394d55404a4c0491aa86c6e6bd65837c104e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XialK%Ln>}1r7$qvTz8q*VbwfF`yC8N`ub1%*eh@w84B?8 zG*sAMFk(z`6f<#UZ!oi1^qM8>6?+h?N85o|r#0MmkBT@o;|_e_yU4~c_cp_k9tEB! zehx-0I^s1d=3*O~0-4#G8DCT$WSrsh|MFE<21Ygp={SWcE6SVC0j+27boFyt=akR{ E0Qq`Cc>n+a diff --git a/app/assets/images/webalys/ticket_checked.png b/app/assets/images/webalys/ticket_checked.png deleted file mode 100644 index 83e1506e3c5eb07570721c77db560dd55cfac7bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1Gt36#DLn>}1O?hke_P~Jy8|E`w?_fC67qIQnW24L5Iv$hw z7f7(NG~8e~X~4YTVcQ8QF(%)PhQbLsW(_ylHZ^uORxoUnjcm5NaD`1ltl^XWf=mI2 z>jDf%zAB_Mm})BQ+$$ILyf_IfQ=CRHC z#vt`h!Aju7|Auhp5Mhf=3ryG?`q--jG!&0AGb{4)1@wqBut+e>VKjC8k^f!>=xhd0 LS3j3^P6}1O?hkecRr)_4~8Rs{il8O6}XL@Ol24zHG4ez zVBLvmXwH&tOabOl|yuzZu$C72Hu!3>bN&$~X zk@@YnILd{>7(!TzF4bt5GoCn}%RDPd!XQD((NJTF%*+iMVhvt(4&gjsF0<#Di8$E4 z;<(BZB*PKZ^Cq);!N~;`6%0?C=S&6)ZrUingfp_4Swy};%Z7pX8n;99H|1!4fdq#9 XOAei{Vtf^Vo?!5F^>bP0l+XkKgF;+c diff --git a/app/assets/images/webalys/ticket_note.png b/app/assets/images/webalys/ticket_note.png deleted file mode 100644 index b8a394c80c4599b8f11f2c7e3e49198ee72d034a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GJ3L(+Ln>}1O?hkecRr(a#D^VcOax;muzJZeJZkoM^v_`q zgGmo#tgz2v#|19TJ_0KWm?qrn_Z1d4+s+_b!w}TxP{X+DB;$HE6<_I#M+>tUW@#}j zd9pBuSs|WrIopb)3GzG(7@4?QK0AD55t9*9Vfe_tV6)6b9!`d!zdPozYeL=nlE81mz2z+z|^N_VU^^+-ee9$-v0Q Z@HWUUZN{IM3xIxL@O1TaS?83{1OW9=Ul#xX diff --git a/app/assets/images/webalys/time.png b/app/assets/images/webalys/time.png deleted file mode 100644 index c1697f86582ca98c5bc819f4454d722b588f65f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 298 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GXFOdTLn>}1r8F?zTz8qvVU=75b3+7!)*r?WbB4mlkBu&~ zD=@mPNMcslD(|Ui#gJLTlC|pqhv`q7kdLeiek`5}k|y#UybEUWL@qeTpv|Ub(xSy; zd79xwK7%IHr}NIHSB)L-@-TIJ_%V3iQvR4&#OPyCet1sflQiZPlM{**3>npO>{zsB zFf0*k_``N(3WF${^cj|`oSzjoEpu8C{AJ=3yA2M9Eg7Yx+A?N|Iq+KZi{5f5+Av9` s(8pt80>{@E>?W-WhR!qAGBC0+geZht2IpLu2J{z$r>mdKI;Vst0FxeJ!~g&Q diff --git a/app/assets/images/webalys/tip.png b/app/assets/images/webalys/tip.png deleted file mode 100644 index 3c2ffacbf6f2ddbfe0cd18025e50da1121dbcd6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 808 zcmV+@1K0eCP)+N|Nr;rFB2}!Oq{%|K+F%s2sMn1j6lo)#t3y>vi%oV$@O1a3gWZibWP8B zKcJOsfK1OPRn~j|etP};@5fi482q;Ao_Zyy8xe0(_(Y$q-QCCk>Tv5G6L z12VOlc!bOzq|2WMyNH7aL`g953cdLA`VmN7JCOh5c~@{FUIRfuJa3UOkeUm`WiKbi z-C~o`l$EO4z8uKc1!A{nEuJTTJ-LpehmqI_VOKU*kt|!c4CrlBAon#8voZ6Fg}msG zI{5$h4_P3en`i?$we5Ap^A<1t`|+h7klPJ%JP^k*v2)-5aqp}?w~^OsAm0veq`&}| zk*Bd(`iuoY!<2zsP_j7%#EXHk`{K*dRZVYK)O{9?XgUrQ`$W)%JeDC=A_+Zn|9*U} z0px-Ls|JWyGjR*N`Lt(F*8BCHYti-KG?33R!C5H0e&*j#Z@0z>Vf}N}TfV>j!C6!^EzYucU|?qOw6R#FnP`;@w1&ac)z4*}Q$iB}7nL}< diff --git a/app/assets/images/webalys/user.png b/app/assets/images/webalys/user.png deleted file mode 100644 index 96a8633f726eb95d6d8d73fdb4b40c5381307fc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GZJsWUAr-fhQXH7MVwXQ>Udf{Iok4)zPQ&;w!{l_Q;5iLT zBv@oF{8%AXz`$4|^=D(ohU3d0Dv0rlPq6HXu&I@IaonkJUhB~p6A>L3GucSPE?$Sp zj?11oJG0(g%-v9-6rg+~v&W&8&0&|kRLc(r4L_;Kju4)1VP-WY(Zi2hIvZUW1QHmY XWhr>)irPN|x`@Hk)z4*}Q$iB}My^Q` diff --git a/app/assets/images/webalys/warning.png b/app/assets/images/webalys/warning.png deleted file mode 100644 index 02568e5ccc41c3a171fd24a2eaabad0bd6c9d6b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5X_ItWGhE&{2N?4#8@WLvV;n0sO29GYjVOa9bd1oL0DIflX z;NvaFKUB%&9Aab0{6~2rVi@^y#FiX5$R_lGWd-9VM&ZUE3Z0d2 gnL>+n92yuIO8)B{o&BjX59k#JPgg&ebxsLQ08RmDM*si- diff --git a/app/assets/images/webalys/watch.png b/app/assets/images/webalys/watch.png deleted file mode 100644 index 12086c3fff6032f58d5b1836f97d31535e1b6b5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G=RI8}1B}f=G2+mZ#U24VX@soKYvjDe4t3AU~dScHeu1%0A7U+j2+@mH-CCOQeb9kWUEPF$qHg9I;VV-!KhS8;Jfor;f3ow z9EuthJ(N8rGfwJeUC5@Xpw05=w?~$q!NSZW21{m7Vdg8UTp5YU2Utp_iWnM2VjYB- zB)>5DK4yw|@W!2sVZt((j0FY`%q!(jrm{DzD@tjyIxpy9>g3C=d4oT-zM*X!}1B}f=G2*x^Wd%cBuLXm^8-G?1#zA%LKI`A?& ztdj2#P3T%^a%KX%Lkx#W0&|RVfUt)%pblB~TPD|Sh_BEUgSshH1p0PU|B>=<*K)e7b|9}O^h=sf{HGs(8TiP))Sx&J$VtVz!5@+=W5z_By} z*Y|1L%f%+-8$!wJ1S|yR$2wK< z!TcbDXlY|XmhNLhcFEgB&BMvGNXSy`FvLYaY(`D38BusqvKF%Wb3OtL02m5Q4Vex! Qwg3PC07*qoM6N<$f+XvJoB#j- diff --git a/app/assets/images/webalys/zoom_out.png b/app/assets/images/webalys/zoom_out.png deleted file mode 100644 index 2e461d64de7c69848766cfd7c34709cdfdc375a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 302 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G7d%}YLn>}1r8qEeid`<-5Mn35?a(U6@bS>`)Me}rGHxbE zKR1RjF_#5!Trp`B^ekkY@QVErf51uBfR8LIEKVGANa20Iu&K@AsQ3npV*3-7Jpqi& z3Z-%#<_sU*6v7;e`A%&6>X37QNz~z6f{lRnf=mmBQY~igNlpSB3_FESGDt93USv?6 z(s0g-UzDYtt?$C^105nlpC?{v__IkMOZZHug1V$pQs5tk?&Xe2jSDU$I|k3;;HqDs v$Y@~Re1~7;HbXE_!@tfACl0YQF!3<(Zt(P8mi3zv=r;yWS3j3^P6 Date: Wed, 26 Aug 2015 14:03:16 +0200 Subject: [PATCH 048/112] made style changes to please rubocop --- app/assets/javascripts/modal.js | 3 +- app/assets/stylesheets/_misc_legacy.sass | 16 -------- app/helpers/application_helper.rb | 28 ++++++++++++-- app/helpers/repositories_helper.rb | 12 +++--- app/helpers/work_packages_helper.rb | 4 +- lib/open_project/text_formatting.rb | 8 +++- lib/redcloth3.rb | 38 +++++++++++-------- .../wiki_formatting/textile/formatter.rb | 7 +++- 8 files changed, 69 insertions(+), 47 deletions(-) diff --git a/app/assets/javascripts/modal.js b/app/assets/javascripts/modal.js index 1adb885b58..33244184eb 100644 --- a/app/assets/javascripts/modal.js +++ b/app/assets/javascripts/modal.js @@ -242,7 +242,8 @@ var ModalHelper = (function() { if (this._firstLoad) { //add closer - modalDiv.parent().prepend('

    ').click(jQuery.proxy(this.close, this)); + modalDiv.parent().prepend('
    ') + .click(jQuery.proxy(this.close, this)); jQuery('.ui-dialog-titlebar').hide(); jQuery('.ui-dialog-buttonpane').hide(); diff --git a/app/assets/stylesheets/_misc_legacy.sass b/app/assets/stylesheets/_misc_legacy.sass index 289e6c2dd9..c18b5f35db 100644 --- a/app/assets/stylesheets/_misc_legacy.sass +++ b/app/assets/stylesheets/_misc_legacy.sass @@ -334,25 +334,9 @@ div.issue hr margin-top: -6px margin-bottom: 0 -table.files - display: table - -#content table.filese - td - color: #555 - padding: 1px - .opt-desc - width: 60% - td a - position: relative - #content blockquote padding-left: 22px -.wiki - ol, ul - padding-left: 22px - #project-links right: 30px color: #ccc diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 937092eaa6..af74092e26 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -345,10 +345,30 @@ module ApplicationHelper method = options[:method] || :post content_tag(:span, - link_to(content_tag(:span, '', class: 'up icon-context icon-arrow-right7', title: l(:label_sort_highest)), url.merge("#{name}[move_to]" => 'highest'), method: method, title: l(:label_sort_highest)) + - link_to(content_tag(:span, '', class: 'icon-context icon-pulldown-arrow1', title: l(:label_sort_higher)), url.merge("#{name}[move_to]" => 'higher'), method: method, title: l(:label_sort_higher)) + - link_to(content_tag(:span, '', class: 'icon-context icon-pulldown-arrow3', title: l(:label_sort_lower)), url.merge("#{name}[move_to]" => 'lower'), method: method, title: l(:label_sort_lower)) + - link_to(content_tag(:span, '', class: 'down icon-context icon-arrow-right7', title: l(:label_sort_lowest)), url.merge("#{name}[move_to]" => 'lowest'), method: method, title: l(:label_sort_lowest)), + link_to(content_tag(:span, '', + class: 'up icon-context icon-arrow-right7', + title: l(:label_sort_highest)), + url.merge("#{name}[move_to]" => 'highest'), + method: method, + title: l(:label_sort_highest)) + + link_to(content_tag(:span, '', + class: 'icon-context icon-pulldown-arrow1', + title: l(:label_sort_higher)), + url.merge("#{name}[move_to]" => 'higher'), + method: method, + title: l(:label_sort_higher)) + + link_to(content_tag(:span, '', + class: 'icon-context icon-pulldown-arrow3', + title: l(:label_sort_lower)), + url.merge("#{name}[move_to]" => 'lower'), + method: method, + title: l(:label_sort_lower)) + + link_to(content_tag(:span, '', + class: 'down icon-context icon-arrow-right7', + title: l(:label_sort_lowest)), + url.merge("#{name}[move_to]" => 'lowest'), + method: method, + title: l(:label_sort_lowest)), class: 'reorder-icons' ) end diff --git a/app/helpers/repositories_helper.rb b/app/helpers/repositories_helper.rb index 987988593a..2fd101a4df 100644 --- a/app/helpers/repositories_helper.rb +++ b/app/helpers/repositories_helper.rb @@ -124,12 +124,12 @@ module RepositoriesHelper rev: @changeset.identifier) + ') ') if c.action == 'M' text << raw(' ' + content_tag('span', h(c.from_path), class: 'copied-from')) unless c.from_path.blank? case c.action - when 'A' - output << "
  • #{text}
  • " - when 'D' - output << "
  • #{text}
  • " - else - output << "
  • #{text}
  • " + when 'A' + output << "
  • #{text}
  • " + when 'D' + output << "
  • #{text}
  • " + else + output << "
  • #{text}
  • " end end end diff --git a/app/helpers/work_packages_helper.rb b/app/helpers/work_packages_helper.rb index e5aaaf4365..96c95c440d 100644 --- a/app/helpers/work_packages_helper.rb +++ b/app/helpers/work_packages_helper.rb @@ -251,7 +251,9 @@ module WorkPackagesHelper content_tag :tr, class: css_classes.join(' ') do concat content_tag :td, check_box_tag('ids[]', work_package.id, false, id: nil), class: 'checkbox' - concat content_tag :td, issue_text, class: 'subject ' << 'icon-context icon-pulldown-arrow4' if level > 0 + concat content_tag :td, + issue_text, + class: 'subject ' << 'icon-context icon-pulldown-arrow4' if level > 0 concat content_tag :td, h(work_package.status) concat content_tag :td, link_to_user(work_package.assigned_to) concat content_tag :td, link_to_version(work_package.fixed_version) diff --git a/lib/open_project/text_formatting.rb b/lib/open_project/text_formatting.rb index 144ba5fd3f..ab2a76fe0f 100644 --- a/lib/open_project/text_formatting.rb +++ b/lib/open_project/text_formatting.rb @@ -428,7 +428,13 @@ module OpenProject div_class << ' right' if $1 == '>' div_class << ' left' if $1 == '<' out = "
    " - out << "#{l(:label_table_of_contents)}
    " + out << " + + #{l(:label_table_of_contents)} + +
    " out << "
    • " root = headings.map(&:first).min current = root diff --git a/lib/redcloth3.rb b/lib/redcloth3.rb index 9dd24a9043..8cbeb0f054 100644 --- a/lib/redcloth3.rb +++ b/lib/redcloth3.rb @@ -549,7 +549,7 @@ class RedCloth3 < String if depth.last.length > tl.length (depth.length - 1).downto(0) do |i| break if depth[i].length == tl.length - lines[line_id - 1] << "
    • \n\t\n\t" + lines[line_id - 1] << "\n\t\n\t" depth.pop end end @@ -561,7 +561,7 @@ class RedCloth3 < String depth << tl atts = pba( atts ) atts = shelve( atts ) if atts - lines[line_id] = "\t<#{ lT(tl) }l#{ atts }>\n\t
    • #{ content }" + lines[line_id] = "\t<#{LT(tl)}l#{ atts }>\n\t
    • #{content}" else lines[line_id] = "\t\t
    • #{ content }" end @@ -572,20 +572,20 @@ class RedCloth3 < String end if line_id - last_line > 1 or line_id == lines.length - 1 depth.delete_if do |v| - lines[last_line] << "
    • \n\t" + lines[last_line] << "\n\t" end end end - lines.join( "\n" ) + lines.join("\n") end end QUOTES_RE = /(^>+([^\n]*?)(\n|$))+/m QUOTES_CONTENT_RE = /^([> ]+)(.*)$/m - def block_textile_quotes( text ) + def block_textile_quotes(text) text.gsub!( QUOTES_RE ) do |match| - lines = match.split( /\n/ ) + lines = match.split(/\n/) quotes = '' indent = 0 lines.each do |line| @@ -593,7 +593,13 @@ class RedCloth3 < String bq,content = $1, $2 l = bq.count('>') if l != indent - quotes << ("\n\n" + (l>indent ? '
      ' * (l-indent) : '
      ' * (indent-l)) + "\n\n") + quotes << ("\n\n" + + (if l > indent + '
      ' * (l - indent) + else + '
      ' * (indent - l) + end) + + "\n\n") indent = l end quotes << (content + "\n") @@ -610,25 +616,25 @@ class RedCloth3 < String @ (?=\W)/x - def inline_textile_code( text ) - text.gsub!( CODE_RE ) do |_m| - before,lang,code,after = $~[1..4] - lang = " lang=\"#{ lang }\"" if lang - rip_offtags( "#{ before }#{ code }#{ after }", false ) - end + def inline_textile_code(text) + text.gsub!(CODE_RE) do |_m| + before, lang,code, after = $~[1..4] + lang = " lang=\"#{ lang }\"" if lang + rip_offtags("#{before}#{code}#{after}", false) + end end - def lT( text ) + def LT(text) text =~ /\#$/ ? 'o' : 'u' end - def hard_break( text ) + def hard_break(text) text.gsub!( /(.)\n(?!\Z| *([#*=]+(\s|$)|[{|]))/, "\\1
      " ) if hard_breaks end BLOCKS_GROUP_RE = /\n{2,}(?! )/m - def blocks( text, deep_code = false ) + def blocks(text, deep_code = false) text.replace( text.split( BLOCKS_GROUP_RE ).map do |blk| plain = blk !~ /\A[#*> ]/ diff --git a/lib/redmine/wiki_formatting/textile/formatter.rb b/lib/redmine/wiki_formatting/textile/formatter.rb index f9c3e513de..5e66e8521c 100644 --- a/lib/redmine/wiki_formatting/textile/formatter.rb +++ b/lib/redmine/wiki_formatting/textile/formatter.rb @@ -109,11 +109,14 @@ module Redmine else # Idea below : an URL with unbalanced parethesis and # ending by ')' is put into external parenthesis - if url[-1] == ?) and ((url.count('(') - url.count(')')) < 0) + if url[-1] == ?) and ((url.count('(') - url.count(')')) < 0) url = url[0..-2] # discard closing parenth from url post = ')' + post # add closing parenth to post end - tag = content_tag('a', proto + url, href: "#{proto == 'www.' ? 'http://www.' : proto}#{url}", class: 'external icon-context icon-copy2') + tag = content_tag('a', + proto + url, + href: "#{proto == 'www.' ? 'http://www.' : proto}#{url}", + class: 'external icon-context icon-copy2') %(#{leading}#{tag}#{post}) end end From 8b2093bb997dc0ec5e8e284522d7d8fc71bc207a Mon Sep 17 00:00:00 2001 From: Henriette Dinger Date: Wed, 26 Aug 2015 16:48:01 +0200 Subject: [PATCH 049/112] restyled the dialog-closer --- app/assets/javascripts/modal.js | 2 +- app/assets/stylesheets/_misc_legacy.sass | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/app/assets/javascripts/modal.js b/app/assets/javascripts/modal.js index 33244184eb..6be29f0818 100644 --- a/app/assets/javascripts/modal.js +++ b/app/assets/javascripts/modal.js @@ -242,7 +242,7 @@ var ModalHelper = (function() { if (this._firstLoad) { //add closer - modalDiv.parent().prepend('
      ') + modalDiv.parent().prepend('
      ') .click(jQuery.proxy(this.close, this)); jQuery('.ui-dialog-titlebar').hide(); jQuery('.ui-dialog-buttonpane').hide(); diff --git a/app/assets/stylesheets/_misc_legacy.sass b/app/assets/stylesheets/_misc_legacy.sass index c18b5f35db..e179112efa 100644 --- a/app/assets/stylesheets/_misc_legacy.sass +++ b/app/assets/stylesheets/_misc_legacy.sass @@ -600,13 +600,15 @@ input::-webkit-input-placeholder, :-moz-placeholder #ui-dialog-closer cursor: pointer position: absolute - right: -21px - top: -17px + right: 0px + top: 5px z-index: 5000 - font-size: 2rem &.icon:before - color: black + color: $body-font-color + +#modalDiv + padding: 2em 0 0 1.5em h4.comment margin-bottom: 8px From ca02263058f78c99241d4cb3ba9ec5c05b711b5b Mon Sep 17 00:00:00 2001 From: Henriette Dinger Date: Thu, 27 Aug 2015 11:55:38 +0200 Subject: [PATCH 050/112] updated icon font, fixed broken specs and design bugs --- app/assets/stylesheets/content/_calendar.sass | 26 +++++---- app/assets/stylesheets/content/_tables.sass | 57 +------------------ .../stylesheets/layout/_work_package.sass | 38 +++++++++++++ app/helpers/application_helper.rb | 8 +-- app/helpers/work_packages_helper.rb | 16 ++++-- app/views/common/_calendar.html.erb | 2 +- .../work_packages/calendars/index.html.erb | 2 +- .../step_definitions/work_package_steps.rb | 2 +- .../timelines/timeline_column_data.html | 2 +- .../timeline-column-data-directive-test.js | 2 +- .../unit/helpers/application_helper_spec.rb | 44 +++++++------- .../wiki_formatting/textile_formatter_spec.rb | 6 +- spec/lib/open_project/text_formatting_spec.rb | 6 +- 13 files changed, 101 insertions(+), 110 deletions(-) diff --git a/app/assets/stylesheets/content/_calendar.sass b/app/assets/stylesheets/content/_calendar.sass index 0d2b546f2b..8c9bae7926 100644 --- a/app/assets/stylesheets/content/_calendar.sass +++ b/app/assets/stylesheets/content/_calendar.sass @@ -26,6 +26,19 @@ // See doc/COPYRIGHT.rdoc for more details. //++ +@mixin setCalendarIconValues() + display: inline-flex + &:before + padding: 0 10px 0 10px + &.ending:before + transform: rotate(180deg) + color: #F5827E + &.diamond:before + color: #F5827E + &.starting:before + color: #A2C57A + + table.cal border-collapse: collapse width: 100% @@ -65,20 +78,11 @@ table.cal .icon, .icon-context - display: inline-flex - &:before - padding: 0 10px 0 10px - &.ending:before - transform: rotate(180deg) - color: #F5827E - &.diamond:before - transform: rotate(90deg) - color: #F5827E - &.starting:before - color: #A2C57A + @include setCalendarIconValues() p.legend.cal margin-bottom: 0 .icon + @include setCalendarIconValues() vertical-align: middle diff --git a/app/assets/stylesheets/content/_tables.sass b/app/assets/stylesheets/content/_tables.sass index 20f9fa2fc5..c8746540b0 100644 --- a/app/assets/stylesheets/content/_tables.sass +++ b/app/assets/stylesheets/content/_tables.sass @@ -32,17 +32,6 @@ table p margin: 0 - &.files tr.file td - text-align: center - &.filename - text-align: left - padding-left: 24px - &.digest - font-size: 80% - - &.members td.roles, &.memberships td.roles - width: 45% - &.plugins td vertical-align: middle @@ -59,14 +48,12 @@ table &#time-report tbody tr font-style: italic - color: #333 + color: $body-font-color &.last-level font-style: normal - color: #555 &.total font-style: normal font-weight: bold - color: #555 background-color: #EEEEEE .hours-dec font-size: 0.9em @@ -111,21 +98,6 @@ tr &.idnt td.subject .icon-context:before padding: 9px 0 0 10px - &.work-package - white-space: nowrap - &.sum - font-weight: bold - td.subject - white-space: normal - text-align: left - td.done_ratio table.progress - margin-left: auto - margin-right: auto - &.idnt td.subject.icon-context - display: inherit - &.issue td.category - white-space: normal - &.entry border: 1px solid #f8f8f8 td @@ -155,10 +127,6 @@ tr [class*=reorder] .icon-context:before padding: 0 0 0 0 - .up - transform: rotate(90deg) - .down - transform: rotate(270deg) &.message height: 2.6em @@ -194,9 +162,6 @@ td.hours th.hidden display: none -a.toggle-all:hover - text-decoration: none - #content tr.issue &.idnt-1 td.subject padding-left: 0.5em @@ -217,26 +182,6 @@ a.toggle-all:hover &.idnt-9 td.subject padding-left: 12.5em -#content tr.work-package - &.idnt-1 td.subject - padding-left: 0.5em - &.idnt-2 td.subject - padding-left: 2em - &.idnt-3 td.subject - padding-left: 3.5em - &.idnt-4 td.subject - padding-left: 5em - &.idnt-5 td.subject - padding-left: 6.5em - &.idnt-6 td.subject - padding-left: 8em - &.idnt-7 td.subject - padding-left: 9.5em - &.idnt-8 td.subject - padding-left: 11em - &.idnt-9 td.subject - padding-left: 12.5em - #content table tr &.context-menu-selection diff --git a/app/assets/stylesheets/layout/_work_package.sass b/app/assets/stylesheets/layout/_work_package.sass index 7b6866737a..ec6a6ff729 100644 --- a/app/assets/stylesheets/layout/_work_package.sass +++ b/app/assets/stylesheets/layout/_work_package.sass @@ -52,11 +52,32 @@ .flash:not(.ng-hide) ~ .flash:not(.ng-hide) ~ div[ui-view] height: calc(100% - #{2 * ($content-flash-height + $flash-margins-padding)}) + //This can be deleted once the legcy WP view is gone #history border-bottom-color: rgb(221, 221, 221) border-bottom-style: solid border-bottom-width: 1px + tr.work-package + &.idnt-1 td.subject + padding-left: 0.5em + &.idnt-2 td.subject + padding-left: 2em + &.idnt-3 td.subject + padding-left: 3.5em + &.idnt-4 td.subject + padding-left: 5em + &.idnt-5 td.subject + padding-left: 6.5em + &.idnt-6 td.subject + padding-left: 8em + &.idnt-7 td.subject + padding-left: 9.5em + &.idnt-8 td.subject + padding-left: 11em + &.idnt-9 td.subject + padding-left: 12.5em + // HACK: workaround to ensure correct height applied to child elements #work-packages-index height: 100% @@ -92,6 +113,23 @@ width: 100% overflow: hidden + table + tr + &.work-package + white-space: nowrap + &.sum + font-weight: bold + td.subject + white-space: normal + text-align: left + td.done_ratio table.progress + margin-left: auto + margin-right: auto + &.idnt td.subject.icon-context + display: inherit + &.issue td.category + white-space: normal + .work-packages--list-pagination-area position: absolute bottom: 0 diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index af74092e26..90de3f949c 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -346,25 +346,25 @@ module ApplicationHelper content_tag(:span, link_to(content_tag(:span, '', - class: 'up icon-context icon-arrow-right7', + class: 'icon-context icon-sort-up', title: l(:label_sort_highest)), url.merge("#{name}[move_to]" => 'highest'), method: method, title: l(:label_sort_highest)) + link_to(content_tag(:span, '', - class: 'icon-context icon-pulldown-arrow1', + class: 'icon-context icon-arrow-right6-1', title: l(:label_sort_higher)), url.merge("#{name}[move_to]" => 'higher'), method: method, title: l(:label_sort_higher)) + link_to(content_tag(:span, '', - class: 'icon-context icon-pulldown-arrow3', + class: 'icon-context icon-arrow-right6-3', title: l(:label_sort_lower)), url.merge("#{name}[move_to]" => 'lower'), method: method, title: l(:label_sort_lower)) + link_to(content_tag(:span, '', - class: 'down icon-context icon-arrow-right7', + class: 'icon-context icon-sort-down', title: l(:label_sort_lowest)), url.merge("#{name}[move_to]" => 'lowest'), method: method, diff --git a/app/helpers/work_packages_helper.rb b/app/helpers/work_packages_helper.rb index 96c95c440d..6b2c7ccc0d 100644 --- a/app/helpers/work_packages_helper.rb +++ b/app/helpers/work_packages_helper.rb @@ -229,10 +229,6 @@ module WorkPackagesHelper end def render_work_package_tree_row(work_package, level, relation) - css_classes = ['work-package'] - css_classes << "work-package-#{work_package.id}" - css_classes << 'idnt' << "idnt-#{level}" if level > 0 - if relation == 'root' issue_text = link_to("#{work_package}", 'javascript:void(0)', @@ -249,11 +245,19 @@ module WorkPackagesHelper issue_text = link_to(work_package.to_s, work_package_path(work_package)) end - content_tag :tr, class: css_classes.join(' ') do + tr_css_classes = ['work-package', "work-package-#{work_package.id}"] + subject_css_classes = ['subject'] + + if level > 0 + tr_css_classes << 'idnt' << "idnt-#{level}" + subject_css_classes += ['icon-context', 'icon-pulldown-arrow4'] + end + + content_tag :tr, class: tr_css_classes.join(' ') do concat content_tag :td, check_box_tag('ids[]', work_package.id, false, id: nil), class: 'checkbox' concat content_tag :td, issue_text, - class: 'subject ' << 'icon-context icon-pulldown-arrow4' if level > 0 + class: subject_css_classes.join(' ') concat content_tag :td, h(work_package.status) concat content_tag :td, link_to_user(work_package.assigned_to) concat content_tag :td, link_to_version(work_package.fixed_version) diff --git a/app/views/common/_calendar.html.erb b/app/views/common/_calendar.html.erb index 525c8b47c9..ba223ba5c7 100644 --- a/app/views/common/_calendar.html.erb +++ b/app/views/common/_calendar.html.erb @@ -47,7 +47,7 @@ while day <= calendar.enddt %> <%= h("#{i.project} -") unless @project && @project == i.project %> <%# date_img = '' %> <% if day == i.start_date and day == i.due_date %> - <% date_img = content_tag(:span, '', class: "icon icon-arrow-right7 diamond") %> + <% date_img = content_tag(:span, '', class: "icon icon-milestone diamond") %> <% elsif day == i.start_date %> <% date_img = content_tag(:span, '', class: "icon icon-arrow-right7 starting") %> <% elsif day == i.due_date %> diff --git a/app/views/work_packages/calendars/index.html.erb b/app/views/work_packages/calendars/index.html.erb index 85a1f776e2..dc79335b2f 100644 --- a/app/views/work_packages/calendars/index.html.erb +++ b/app/views/work_packages/calendars/index.html.erb @@ -77,7 +77,7 @@ See doc/COPYRIGHT.rdoc for more details. <%= l(:text_tip_work_package_end_day) %>

      - + <%= l(:text_tip_work_package_begin_end_day) %>

      <% end %> diff --git a/features/step_definitions/work_package_steps.rb b/features/step_definitions/work_package_steps.rb index 6843e5ea5d..da067431d2 100644 --- a/features/step_definitions/work_package_steps.rb +++ b/features/step_definitions/work_package_steps.rb @@ -116,7 +116,7 @@ end Then /^the work package "(.+?)" should be shown as the parent$/ do |wp_name| work_package = InstanceFinder.find(WorkPackage, wp_name) - should have_css('tr.work-package', text: work_package.to_s) + should have_css('tr.work-package', text: Regexp.new(".*#{work_package.to_s}.*")) end Then /^the work package should be shown with the following values:$/ do |table| diff --git a/frontend/app/templates/timelines/timeline_column_data.html b/frontend/app/templates/timelines/timeline_column_data.html index 1cde192b3b..f7b054b64b 100644 --- a/frontend/app/templates/timelines/timeline_column_data.html +++ b/frontend/app/templates/timelines/timeline_column_data.html @@ -4,7 +4,7 @@ ng-class="[ 'icon', 'tl-icon-' + (isDateColumn && historicalDateKind || 'changed'), - 'icon-time' + 'icon-' + (isDateColumn && 'time' || 'arrow-left-right') ]">
      diff --git a/frontend/tests/unit/tests/timelines/directives/timeline-column-data-directive-test.js b/frontend/tests/unit/tests/timelines/directives/timeline-column-data-directive-test.js index 51f1cdb54f..416560f70d 100644 --- a/frontend/tests/unit/tests/timelines/directives/timeline-column-data-directive-test.js +++ b/frontend/tests/unit/tests/timelines/directives/timeline-column-data-directive-test.js @@ -137,7 +137,7 @@ describe('timelineColumnData Directive', function() { }); it('should contain a link with a css class indicating the change', function() { - expect(historicalContainerElement.find('a').hasClass('icon-arrow-left-right')).to.be.true; + expect(historicalContainerElement.find('a').hasClass('tl-icon-changed')).to.be.true; }); }); diff --git a/spec/legacy/unit/helpers/application_helper_spec.rb b/spec/legacy/unit/helpers/application_helper_spec.rb index ae5bb6f34a..7595fb5849 100644 --- a/spec/legacy/unit/helpers/application_helper_spec.rb +++ b/spec/legacy/unit/helpers/application_helper_spec.rb @@ -63,34 +63,34 @@ describe ApplicationHelper, type: :helper do it 'should auto links' do to_test = { - 'http://foo.bar' => 'http://foo.bar', - 'http://foo.bar/~user' => 'http://foo.bar/~user', - 'http://foo.bar.' => 'http://foo.bar.', - 'https://foo.bar.' => 'https://foo.bar.', - 'This is a link: http://foo.bar.' => 'This is a link: http://foo.bar.', - 'A link (eg. http://foo.bar).' => 'A link (eg. http://foo.bar).', - 'http://foo.bar/foo.bar#foo.bar.' => 'http://foo.bar/foo.bar#foo.bar.', - 'http://www.foo.bar/Test_(foobar)' => 'http://www.foo.bar/Test_(foobar)', - '(see inline link : http://www.foo.bar/Test_(foobar))' => '(see inline link : http://www.foo.bar/Test_(foobar))', - '(see inline link : http://www.foo.bar/Test)' => '(see inline link : http://www.foo.bar/Test)', - '(see inline link : http://www.foo.bar/Test).' => '(see inline link : http://www.foo.bar/Test).', + 'http://foo.bar' => 'http://foo.bar', + 'http://foo.bar/~user' => 'http://foo.bar/~user', + 'http://foo.bar.' => 'http://foo.bar.', + 'https://foo.bar.' => 'https://foo.bar.', + 'This is a link: http://foo.bar.' => 'This is a link: http://foo.bar.', + 'A link (eg. http://foo.bar).' => 'A link (eg. http://foo.bar).', + 'http://foo.bar/foo.bar#foo.bar.' => 'http://foo.bar/foo.bar#foo.bar.', + 'http://www.foo.bar/Test_(foobar)' => 'http://www.foo.bar/Test_(foobar)', + '(see inline link : http://www.foo.bar/Test_(foobar))' => '(see inline link : http://www.foo.bar/Test_(foobar))', + '(see inline link : http://www.foo.bar/Test)' => '(see inline link : http://www.foo.bar/Test)', + '(see inline link : http://www.foo.bar/Test).' => '(see inline link : http://www.foo.bar/Test).', '(see "inline link":http://www.foo.bar/Test_(foobar))' => '(see inline link)', '(see "inline link":http://www.foo.bar/Test)' => '(see inline link)', '(see "inline link":http://www.foo.bar/Test).' => '(see inline link).', - 'www.foo.bar' => 'www.foo.bar', - 'http://foo.bar/page?p=1&t=z&s=' => 'http://foo.bar/page?p=1&t=z&s=', - 'http://foo.bar/page#125' => 'http://foo.bar/page#125', - 'http://foo@www.bar.com' => 'http://foo@www.bar.com', - 'http://foo:bar@www.bar.com' => 'http://foo:bar@www.bar.com', - 'ftp://foo.bar' => 'ftp://foo.bar', - 'ftps://foo.bar' => 'ftps://foo.bar', - 'sftp://foo.bar' => 'sftp://foo.bar', + 'www.foo.bar' => 'www.foo.bar', + 'http://foo.bar/page?p=1&t=z&s=' => 'http://foo.bar/page?p=1&t=z&s=', + 'http://foo.bar/page#125' => 'http://foo.bar/page#125', + 'http://foo@www.bar.com' => 'http://foo@www.bar.com', + 'http://foo:bar@www.bar.com' => 'http://foo:bar@www.bar.com', + 'ftp://foo.bar' => 'ftp://foo.bar', + 'ftps://foo.bar' => 'ftps://foo.bar', + 'sftp://foo.bar' => 'sftp://foo.bar', # two exclamation marks - 'http://example.net/path!602815048C7B5C20!302.html' => 'http://example.net/path!602815048C7B5C20!302.html', + 'http://example.net/path!602815048C7B5C20!302.html' => 'http://example.net/path!602815048C7B5C20!302.html', # escaping - 'http://foo"bar' => 'http://foo"bar', + 'http://foo"bar' => 'http://foo"bar', # wrap in angle brackets - '' => '<http://foo.bar>' + '' => '<http://foo.bar>' } to_test.each { |text, result| assert_equal "

      #{result}

      ", helper.format_text(text) } end diff --git a/spec/legacy/unit/lib/redmine/wiki_formatting/textile_formatter_spec.rb b/spec/legacy/unit/lib/redmine/wiki_formatting/textile_formatter_spec.rb index b9df6ff342..fc60e3f17b 100644 --- a/spec/legacy/unit/lib/redmine/wiki_formatting/textile_formatter_spec.rb +++ b/spec/legacy/unit/lib/redmine/wiki_formatting/textile_formatter_spec.rb @@ -105,7 +105,7 @@ describe Redmine::WikiFormatting::Textile::Formatter do it 'should inline auto link' do assert_html_output( - 'Autolink to http://www.google.com' => 'Autolink to http://www.google.com' + 'Autolink to http://www.google.com' => 'Autolink to http://www.google.com' ) end @@ -135,7 +135,7 @@ RAW # expected html expected = <<-EXPECTED

      John said:

      -
      +
      Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas sed libero.
      Nullam commodo metus accumsan nulla. Curabitur lobortis dui id dolor.
        @@ -144,7 +144,7 @@ Nullam commodo metus accumsan nulla. Curabitur lobortis dui id dolor.
      • malesuada in,
      • adipiscing eu, dolor.
      -
      +

      Nulla varius pulvinar diam. Proin id arcu id lorem scelerisque condimentum. Proin vehicula turpis vitae lacus.

      Proin a tellus. Nam vel neque.

      diff --git a/spec/lib/open_project/text_formatting_spec.rb b/spec/lib/open_project/text_formatting_spec.rb index e6fd3e189e..abdb741a7f 100644 --- a/spec/lib/open_project/text_formatting_spec.rb +++ b/spec/lib/open_project/text_formatting_spec.rb @@ -291,7 +291,7 @@ describe OpenProject::TextFormatting do context 'Url links' do subject { format_text('http://foo.bar/FAQ#3') } - it { is_expected.to eq('

      http://foo.bar/FAQ#3

      ') } + it { is_expected.to eq('

      http://foo.bar/FAQ#3

      ') } end context 'Wiki links' do @@ -587,7 +587,7 @@ WIKI_TEXT expect(html).to be_html_eql(%{
      - Table of Contents + Table of Contents
        @@ -626,7 +626,7 @@ WIKI_TEXT expect(html).to be_html_eql(%{
        - Table of Contents + Table of Contents
          From 094d62d3688dd4508b13dd07b76e2b0088ed63af Mon Sep 17 00:00:00 2001 From: Continuous Integration Date: Fri, 28 Aug 2015 02:47:00 +0200 Subject: [PATCH 051/112] Update reference to OpenProject-Translations --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 18586bbb10..2668b188cb 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -53,7 +53,7 @@ GIT GIT remote: https://github.com/opf/openproject-translations.git - revision: 5e029fd352dfee1b4fb96d00819610be7c37b9bf + revision: 3a0cffeebd4a0f5a0219c0f147734eeed2730ec2 branch: release/4.2 specs: openproject-translations (4.2.7) From 022761c57d21eb44815f32fc513985d1594a6d60 Mon Sep 17 00:00:00 2001 From: kgalli Date: Fri, 28 Aug 2015 11:26:25 +0000 Subject: [PATCH 052/112] Add system requirements --- doc/operation_guides/system_requirements.md | 52 +++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 doc/operation_guides/system_requirements.md diff --git a/doc/operation_guides/system_requirements.md b/doc/operation_guides/system_requirements.md new file mode 100644 index 0000000000..05434cecc7 --- /dev/null +++ b/doc/operation_guides/system_requirements.md @@ -0,0 +1,52 @@ +# System Requirements + +__Note__: The configurations described below are what we use and test against. +This means that other configurations might also work but we do not +provide any officially support for them. + +## Server + +### Hardware + +* *Memory:* 512 MB (1024 recommended) +* *Free disc space*: 300 MB (4096 recommended) + +### Operating System + +| Distribution (64 bits only) | Identifier | init system | +| :------------------------------ | :----------- | :---------- | +| Ubuntu 14.04 Trusty | ubuntu-14.04 | upstart | +| Debian 8 Jessie | debian-8 | systemd | +| Debian 7 Wheezy | debiani-7 | sysvinit | +| CentOS/RHEL 7.x | centos-7 | systemd | +| CentOS/RHEL 6.x | centos-6 | upstart | +| Fedora 20 | fedora-20 | sysvinit | +| Suse Linux Enterprise Server 12 | sles-12 | sysvinit | + +### Dependencies + +* Runtime: [Ruby](https://www.ruby-lang.org/en/) Version 2.1.6 +* Webserver: [Apache](http://httpd.apache.org/) + or [nginx](http://nginx.org/en/docs/) +* Application server: [Phusion Passenger](https://www.phusionpassenger.com/) + or [Unicorn](http://unicorn.bogomips.org/) +* Database: [MySQL](https://www.mysql.com/) Version >= 5.6 + or [PostgreSQL](http://www.postgresql.org/) Version >= 9.1 + +Please be aware that the dependencies listed above also have a lot of +of dependencies themselfes. + +## Client + +OpenProject supports the latest versions of the major browsers. In our +strive to make OpenProject easy and fun to use we had to drop support +for some older browsers. + +* [Mozilla Firefox](https://www.mozilla.org/en-US/firefox/products/) (Version >= 31 ESR) +* [Microsoft Internet + Explorer](http://windows.microsoft.com/en-us/internet-explorer/download-ie) (Version >= 10) +* [Google Chrome](https://www.google.com/chrome/browser/desktop/) + +## Screen reader support (accessibility) + +* [JAWS](http://www.freedomscientific.com/Products/Blindness/JAWS) >= 14.0 From 946fab7094e30ef383ef6dcc12ba4e895c4ab306 Mon Sep 17 00:00:00 2001 From: kgalli Date: Fri, 28 Aug 2015 11:48:59 +0000 Subject: [PATCH 053/112] Beautification and minor fixes [ci skip] --- doc/operation_guides/system_requirements.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/doc/operation_guides/system_requirements.md b/doc/operation_guides/system_requirements.md index 05434cecc7..1289540136 100644 --- a/doc/operation_guides/system_requirements.md +++ b/doc/operation_guides/system_requirements.md @@ -8,8 +8,8 @@ provide any officially support for them. ### Hardware -* *Memory:* 512 MB (1024 recommended) -* *Free disc space*: 300 MB (4096 recommended) +* __Memory:__ 512 MB (1024 recommended) +* __Free disc space:__ 300 MB (4096 recommended) ### Operating System @@ -25,16 +25,16 @@ provide any officially support for them. ### Dependencies -* Runtime: [Ruby](https://www.ruby-lang.org/en/) Version 2.1.6 -* Webserver: [Apache](http://httpd.apache.org/) +* __Runtime:__ [Ruby](https://www.ruby-lang.org/en/) Version 2.1.6 +* __Webserver:__ [Apache](http://httpd.apache.org/) or [nginx](http://nginx.org/en/docs/) -* Application server: [Phusion Passenger](https://www.phusionpassenger.com/) +* __Application server:__ [Phusion Passenger](https://www.phusionpassenger.com/) or [Unicorn](http://unicorn.bogomips.org/) -* Database: [MySQL](https://www.mysql.com/) Version >= 5.6 +* __Database:__ [MySQL](https://www.mysql.com/) Version >= 5.6 or [PostgreSQL](http://www.postgresql.org/) Version >= 9.1 Please be aware that the dependencies listed above also have a lot of -of dependencies themselfes. +dependencies themselves. ## Client From b087c8ee745fb51b65464e3eb1ccb90381a4c608 Mon Sep 17 00:00:00 2001 From: Jonas Heinrich Date: Fri, 28 Aug 2015 14:15:23 +0200 Subject: [PATCH 054/112] Small fix --- doc/operation_guides/system_requirements.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/operation_guides/system_requirements.md b/doc/operation_guides/system_requirements.md index 1289540136..96adf6a642 100644 --- a/doc/operation_guides/system_requirements.md +++ b/doc/operation_guides/system_requirements.md @@ -2,7 +2,7 @@ __Note__: The configurations described below are what we use and test against. This means that other configurations might also work but we do not -provide any officially support for them. +provide any official support for them. ## Server From 0e3dc2c14c241fb700c747a042383d795728eb31 Mon Sep 17 00:00:00 2001 From: Florian Kraft Date: Mon, 27 Jul 2015 18:41:41 +0200 Subject: [PATCH 055/112] initial splitoff of watchers into separate service Signed-off-by: Florian Kraft --- .../work_packages/tabs/watchers.html | 46 +--- .../details-tab-watchers-controller.js | 257 +++++++++--------- .../app/work_packages/controllers/index.js | 36 +-- frontend/app/work_packages/services/index.js | 5 + .../services/watchers-service.js | 74 +++++ 5 files changed, 243 insertions(+), 175 deletions(-) create mode 100644 frontend/app/work_packages/services/watchers-service.js diff --git a/frontend/app/templates/work_packages/tabs/watchers.html b/frontend/app/templates/work_packages/tabs/watchers.html index 0224abf59a..3af1ce4677 100644 --- a/frontend/app/templates/work_packages/tabs/watchers.html +++ b/frontend/app/templates/work_packages/tabs/watchers.html @@ -1,37 +1,11 @@ -
          -
            -
          • - - - - -
          • -
          +
          -
          -

          -
          - -
          {{watcherListString()}}
          - - - {{ $item.props.name }} - - -
          -
          -
          -
          -

          - -
          + + Add watcher +
          diff --git a/frontend/app/work_packages/controllers/details-tab-watchers-controller.js b/frontend/app/work_packages/controllers/details-tab-watchers-controller.js index 3dfa4f4fe1..5ee0621c1d 100644 --- a/frontend/app/work_packages/controllers/details-tab-watchers-controller.js +++ b/frontend/app/work_packages/controllers/details-tab-watchers-controller.js @@ -26,132 +26,147 @@ // See doc/COPYRIGHT.rdoc for more details. //++ -module.exports = function($scope, $filter, $timeout, I18n, ADD_WATCHER_SELECT_INDEX) { - $scope.I18n = I18n; - $scope.focusElementIndex; - - $scope.watcher = { selected: null }; - $scope.watcher.selected = $scope.watchers; - - fetchAvailableWatchers(); - $scope.watcherListString = function() { - return _.map($scope.watcher.selected, function(item) { - return item.props.name; - }).join(', '); - }; - - /** - * @name getResourceIdentifier - * @function - * - * @description - * Returns the resource identifier of an API resource retrieved via hyperagent - * - * @param {Object} resource The resource object - * - * @returns {String} identifier - */ - function getResourceIdentifier(resource) { - // TODO move to helper - return resource.links.self.href; - } - - /** - * @name getFilteredCollection - * @function - * - * @description - * Filters collection of HAL resources by entries listed in resourcesToBeFilteredOut - * - * @param {Array} collection Array of resources retrieved via hyperagent - * @param {Array} resourcesToBeFilteredOut Entries to be filtered out - * - * @returns {Array} filtered collection - */ - function getFilteredCollection(collection, resourcesToBeFilteredOut) { - return collection.filter(function(resource) { - return resourcesToBeFilteredOut.map(getResourceIdentifier).indexOf(getResourceIdentifier(resource)) === -1; +module.exports = function($scope, I18n, WatchersService, ADD_WATCHER_SELECT_INDEX) { + 'use strict'; + + var fetchWatchers = function(loading) { + $scope.error = false; + $scope.loading = angular.isUndefined(loading) ? true : false; + WatchersService.all($scope.workPackage).then(function(users) { + $scope.watchers = users.watching; + $scope.available = users.available; + }, function() { + $scope.watchers = []; + $scope.available = []; + $scope.error = true; + }).finally(function() { + $scope.loading = false; }); } - function fetchAvailableWatchers() { - if ($scope.workPackage.links.availableWatchers === undefined) { - $scope.availableWatchers = []; - return; - } - - $scope.workPackage.links.availableWatchers - .fetch() - .then(function(data) { - // Temporarily filter out watchers already assigned to the work package on the client-side - $scope.availableWatchers = getFilteredCollection(data.embedded.elements, $scope.watchers); - // TODO do filtering on the API side and replace the update of the - // available watchers with the code provided in the following line - // $scope.availableWatchers = data.embedded.elements; - }); - } - - function addWatcher(newValue, oldValue) { - if (newValue && newValue !== oldValue) { - var user = newValue[newValue.length - 1], - href = user ? user.links.self.href : null; - - if (href) { - var data = JSON.stringify({ user: { href: href } }); - $scope.workPackage.link('addWatcher', {}) - .fetch({ajax: { - method: 'POST', - contentType: 'application/json; charset=utf-8', - data: data - }}) - .then(addWatcherSuccess, $scope.outputError); - } - } - } - - function addWatcherSuccess() { - $scope.outputMessage(I18n.t("js.label_watcher_added_successfully")); - $scope.refreshWorkPackage(); - - $scope.watcher.selected = null; - - $scope.focusElementIndex = ADD_WATCHER_SELECT_INDEX; - } + fetchWatchers(); - $scope.deleteWatcher = function(watcher) { - watcher.links.removeWatcher - .fetch({ ajax: watcher.links.removeWatcher.props }) - .then(deleteWatcherSuccess(watcher), $scope.outputError); - }; - - function deleteWatcherSuccess(watcher) { - $scope.outputMessage(I18n.t("js.label_watcher_deleted_successfully")); - removeWatcherFromList(watcher); - } - - function removeWatcherFromList(watcher) { - var index = $scope.watchers.indexOf(watcher); - - if (index >= 0) { - $scope.watchers.splice(index, 1); - - updateWatcherFocus(index); - $scope.$emit('workPackageRefreshRequired'); - } - } - - function updateWatcherFocus(index) { - if ($scope.watchers.length == 0) { - $scope.focusElementIndex = ADD_WATCHER_SELECT_INDEX; - } else { - $scope.focusElementIndex = (index < $scope.watchers.length) ? index : $scope.watchers.length - 1; - } + $scope.I18n = I18n; - $timeout(function() { - $scope.$broadcast('updateFocus'); - }); + $scope.add = function() { + $scope.adding = true; } - $scope.$watch('watchers.length', fetchAvailableWatchers); - $scope.$watch('watcher.selected', addWatcher); + // $scope.watcherListString = function() { + // return _.map($scope.watcher.selected, function(item) { + // return item.props.name; + // }).join(', '); + // }; + + // /** + // * @name getResourceIdentifier + // * @function + // * + // * @description + // * Returns the resource identifier of an API resource retrieved via hyperagent + // * + // * @param {Object} resource The resource object + // * + // * @returns {String} identifier + // */ + // function getResourceIdentifier(resource) { + // // TODO move to helper + // return resource.links.self.href; + // } + + // /** + // * @name getFilteredCollection + // * @function + // * + // * @description + // * Filters collection of HAL resources by entries listed in resourcesToBeFilteredOut + // * + // * @param {Array} collection Array of resources retrieved via hyperagent + // * @param {Array} resourcesToBeFilteredOut Entries to be filtered out + // * + // * @returns {Array} filtered collection + // */ + // function getFilteredCollection(collection, resourcesToBeFilteredOut) { + // return collection.filter(function(resource) { + // return resourcesToBeFilteredOut.map(getResourceIdentifier).indexOf(getResourceIdentifier(resource)) === -1; + // }); + // } + + // function fetchAvailableWatchers() { + // if ($scope.workPackage.links.availableWatchers === undefined) { + // $scope.availableWatchers = []; + // return; + // } + + // $scope.workPackage.links.availableWatchers + // .fetch() + // .then(function(data) { + // // Temporarily filter out watchers already assigned to the work package on the client-side + // $scope.availableWatchers = getFilteredCollection(data.embedded.elements, $scope.watchers); + // // TODO do filtering on the API side and replace the update of the + // // available watchers with the code provided in the following line + // // $scope.availableWatchers = data.embedded.elements; + // }); + // } + + // function addWatcher(newValue, oldValue) { + // if (newValue && newValue !== oldValue) { + // var user = newValue[newValue.length - 1], + // href = user ? user.links.self.href : null; + + // if (href) { + // var data = JSON.stringify({ user: { href: href } }); + // $scope.workPackage.link('addWatcher', {}) + // .fetch({ajax: { + // method: 'POST', + // contentType: 'application/json; charset=utf-8', + // data: data + // }}) + // .then(addWatcherSuccess, $scope.outputError); + // } + // } + // } + + // function addWatcherSuccess() { + // $scope.outputMessage(I18n.t("js.label_watcher_added_successfully")); + // $scope.refreshWorkPackage(); + + // $scope.watcher.selected = null; + + // $scope.focusElementIndex = ADD_WATCHER_SELECT_INDEX; + // } + + // $scope.deleteWatcher = function(watcher) { + // watcher.links.removeWatcher + // .fetch({ ajax: watcher.links.removeWatcher.props }) + // .then(deleteWatcherSuccess(watcher), $scope.outputError); + // }; + + // function deleteWatcherSuccess(watcher) { + // $scope.outputMessage(I18n.t("js.label_watcher_deleted_successfully")); + // removeWatcherFromList(watcher); + // } + + // function removeWatcherFromList(watcher) { + // var index = $scope.watchers.indexOf(watcher); + + // if (index >= 0) { + // $scope.watchers.splice(index, 1); + + // updateWatcherFocus(index); + // $scope.$emit('workPackageRefreshRequired'); + // } + // } + + // function updateWatcherFocus(index) { + // if ($scope.watchers.length == 0) { + // $scope.focusElementIndex = ADD_WATCHER_SELECT_INDEX; + // } else { + // $scope.focusElementIndex = (index < $scope.watchers.length) ? index : $scope.watchers.length - 1; + // } + + // $timeout(function() { + // $scope.$broadcast('updateFocus'); + // }); + // } }; diff --git a/frontend/app/work_packages/controllers/index.js b/frontend/app/work_packages/controllers/index.js index 94cc4b20c2..8e0482467d 100644 --- a/frontend/app/work_packages/controllers/index.js +++ b/frontend/app/work_packages/controllers/index.js @@ -47,30 +47,30 @@ angular.module('openproject.workPackages.controllers') require('./details-tab-overview-controller') ]) .constant('ADD_WATCHER_SELECT_INDEX', -1) - .controller('DetailsTabWatchersController', ['$scope', - '$filter', - '$timeout', + .controller('DetailsTabWatchersController', [ + '$scope', 'I18n', + 'WatchersService', 'ADD_WATCHER_SELECT_INDEX', require('./details-tab-watchers-controller') ]) .constant('RELATION_TYPES', { - relatedTo: "Relation::Relates", - duplicates: "Relation::Duplicates", - duplicated: "Relation::Duplicated", - blocks: "Relation::Blocks", - blocked: "Relation::Blocked", - precedes: "Relation::Precedes", - follows: "Relation::Follows" + relatedTo: 'Relation::Relates', + duplicates: 'Relation::Duplicates', + duplicated: 'Relation::Duplicated', + blocks: 'Relation::Blocks', + blocked: 'Relation::Blocked', + precedes: 'Relation::Precedes', + follows: 'Relation::Follows' }) .constant('RELATION_IDENTIFIERS', { - parent: "parent", - relatedTo: "relates", - duplicates: "duplicates", - duplicated: "duplicated", - blocks: "blocks", - blocked: "blocked", - precedes: "precedes", - follows: "follows" + parent: 'parent', + relatedTo: 'relates', + duplicates: 'duplicates', + duplicated: 'duplicated', + blocks: 'blocks', + blocked: 'blocked', + precedes: 'precedes', + follows: 'follows' }) .controller('WorkPackageDetailsController', [ '$scope', diff --git a/frontend/app/work_packages/services/index.js b/frontend/app/work_packages/services/index.js index 8d75b7233b..5017a870a8 100644 --- a/frontend/app/work_packages/services/index.js +++ b/frontend/app/work_packages/services/index.js @@ -82,4 +82,9 @@ angular.module('openproject.workPackages.services') '$timeout', '$http', require('./work-package-attachments-service') + ]) + .service('WatchersService', [ + '$http', + '$q', + require('./watchers-service.js') ]); diff --git a/frontend/app/work_packages/services/watchers-service.js b/frontend/app/work_packages/services/watchers-service.js new file mode 100644 index 0000000000..aee1f54e47 --- /dev/null +++ b/frontend/app/work_packages/services/watchers-service.js @@ -0,0 +1,74 @@ +//-- copyright +// OpenProject is a project management system. +// Copyright (C) 2012-2015 the OpenProject Foundation (OPF) +// +// 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 doc/COPYRIGHT.rdoc for more details. +//++ + + +module.exports = function($http, $q) { + 'use strict'; + + var getWatchers = function(path) { + return function() { + var watchers = $q.defer(); + $http.get(path).success(function(data) { + watchers.resolve(data._embedded.elements); + }).error(function(err) { + watchers.reject(err); + }); + return watchers.promise; + }; + }; + + var load = function(workPackage) { + var path = workPackage.links.watchers.url(); + return getWatchers(path)(); + }, + available = function(workPackage) { + var path = workPackage.links.availableWatchers.url(); + return getWatchers(path)(); + }, + all = function(workPackage) { + var watchers = $q.defer(); + $q.all([load(workPackage), available(workPackage)]).then(function(allWatchers) { + var watching = allWatchers[0], + available = _.filter(allWatchers[1], function(user) { + return _.findIndex(allWatchers[0], function(matchedUser) { + return matchedUser.id !== user.id; + }) > -1; + }) + watchers.resolve({ watching: watching, available: available }); + }, function(err) { + watchers.reject(err); + }); + return watchers.promise; + }; + + return { + load: load, + available: available, + all: all + }; +}; From 3ff36d9247743e7ea33f1064407af56e749eb414 Mon Sep 17 00:00:00 2001 From: Florian Kraft Date: Fri, 14 Aug 2015 16:24:49 +0200 Subject: [PATCH 056/112] prepare the directives and load both available and watching users Signed-off-by: Florian Kraft --- frontend/app/routing.js | 3 +- frontend/app/services/index.js | 1 + .../services/watchers-service.js | 13 +++---- .../work_packages/tabs/watchers.html | 23 +++++++----- .../details-tab-watchers-controller.js | 36 +++++++++---------- frontend/app/work_packages/services/index.js | 5 --- 6 files changed, 40 insertions(+), 41 deletions(-) rename frontend/app/{work_packages => }/services/watchers-service.js (88%) diff --git a/frontend/app/routing.js b/frontend/app/routing.js index 977478a539..7bbc914ef2 100644 --- a/frontend/app/routing.js +++ b/frontend/app/routing.js @@ -109,7 +109,8 @@ angular.module('openproject') .state('work-packages.list.details.watchers', { url: '/watchers', controller: 'DetailsTabWatchersController', - templateUrl: '/templates/work_packages/tabs/watchers.html' + templateUrl: '/templates/work_packages/tabs/watchers.html', + controllerAs: 'watchers' }) }]) diff --git a/frontend/app/services/index.js b/frontend/app/services/index.js index 114c0be5c5..1cab6eb8b4 100644 --- a/frontend/app/services/index.js +++ b/frontend/app/services/index.js @@ -116,4 +116,5 @@ angular.module('openproject.services') 'ApiHelper', require('./api-notifications-service.js') ]) + .service('WatchersService', require('./watchers-service.js')) .service('ConversionService', require('./conversion-service.js')); diff --git a/frontend/app/work_packages/services/watchers-service.js b/frontend/app/services/watchers-service.js similarity index 88% rename from frontend/app/work_packages/services/watchers-service.js rename to frontend/app/services/watchers-service.js index aee1f54e47..4b42cd40a2 100644 --- a/frontend/app/work_packages/services/watchers-service.js +++ b/frontend/app/services/watchers-service.js @@ -54,11 +54,8 @@ module.exports = function($http, $q) { var watchers = $q.defer(); $q.all([load(workPackage), available(workPackage)]).then(function(allWatchers) { var watching = allWatchers[0], - available = _.filter(allWatchers[1], function(user) { - return _.findIndex(allWatchers[0], function(matchedUser) { - return matchedUser.id !== user.id; - }) > -1; - }) + available = _.difference(allWatchers[1], allWatchers[0]); + console.log(allWatchers, watching, available); watchers.resolve({ watching: watching, available: available }); }, function(err) { watchers.reject(err); @@ -67,8 +64,8 @@ module.exports = function($http, $q) { }; return { - load: load, - available: available, - all: all + loadForWorkPackage: load, + availableForWorkPackage: available, + forWorkPackage: all }; }; diff --git a/frontend/app/templates/work_packages/tabs/watchers.html b/frontend/app/templates/work_packages/tabs/watchers.html index 3af1ce4677..611d397456 100644 --- a/frontend/app/templates/work_packages/tabs/watchers.html +++ b/frontend/app/templates/work_packages/tabs/watchers.html @@ -1,11 +1,16 @@
          - - - Add watcher +
          +
          +

          An error occured while loading the watchers

          +
          +
          +
          + loading watchers... +
          +
          +
            + +
          + +
          diff --git a/frontend/app/work_packages/controllers/details-tab-watchers-controller.js b/frontend/app/work_packages/controllers/details-tab-watchers-controller.js index 5ee0621c1d..c200148055 100644 --- a/frontend/app/work_packages/controllers/details-tab-watchers-controller.js +++ b/frontend/app/work_packages/controllers/details-tab-watchers-controller.js @@ -29,28 +29,28 @@ module.exports = function($scope, I18n, WatchersService, ADD_WATCHER_SELECT_INDEX) { 'use strict'; - var fetchWatchers = function(loading) { - $scope.error = false; - $scope.loading = angular.isUndefined(loading) ? true : false; - WatchersService.all($scope.workPackage).then(function(users) { - $scope.watchers = users.watching; - $scope.available = users.available; - }, function() { - $scope.watchers = []; - $scope.available = []; - $scope.error = true; - }).finally(function() { - $scope.loading = false; - }); - } - + var vm = this, + fetchWatchers = function(loading) { + vm.error = false; + vm.loading = angular.isUndefined(loading) ? true : false; + WatchersService.forWorkPackage($scope.workPackage).then(function(users) { + vm.watching = users.watching; + vm.available = users.available; + }, function() { + vm.watchers = []; + vm.available = []; + vm.error = true; + }).finally(function() { + vm.loading = false; + }); + }; + + vm.I18n = I18n; fetchWatchers(); - $scope.I18n = I18n; - $scope.add = function() { $scope.adding = true; - } + }; // $scope.watcherListString = function() { // return _.map($scope.watcher.selected, function(item) { diff --git a/frontend/app/work_packages/services/index.js b/frontend/app/work_packages/services/index.js index 5017a870a8..8d75b7233b 100644 --- a/frontend/app/work_packages/services/index.js +++ b/frontend/app/work_packages/services/index.js @@ -82,9 +82,4 @@ angular.module('openproject.workPackages.services') '$timeout', '$http', require('./work-package-attachments-service') - ]) - .service('WatchersService', [ - '$http', - '$q', - require('./watchers-service.js') ]); From 6025a1b0e56051f80b7062f09da34617f3450bc4 Mon Sep 17 00:00:00 2001 From: Florian Kraft Date: Fri, 14 Aug 2015 16:52:38 +0200 Subject: [PATCH 057/112] add a lookup directive Signed-off-by: Florian Kraft --- frontend/app/services/watchers-service.js | 1 - .../work_packages/tabs/watchers.html | 2 +- .../work_packages/watchers/lookup.html | 6 ++++++ .../app/work_packages/directives/index.js | 3 +++ .../work-package-watchers-lookup-directive.js | 19 +++++++++++++++++++ 5 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 frontend/app/templates/work_packages/watchers/lookup.html create mode 100644 frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js diff --git a/frontend/app/services/watchers-service.js b/frontend/app/services/watchers-service.js index 4b42cd40a2..38b6b76cdd 100644 --- a/frontend/app/services/watchers-service.js +++ b/frontend/app/services/watchers-service.js @@ -55,7 +55,6 @@ module.exports = function($http, $q) { $q.all([load(workPackage), available(workPackage)]).then(function(allWatchers) { var watching = allWatchers[0], available = _.difference(allWatchers[1], allWatchers[0]); - console.log(allWatchers, watching, available); watchers.resolve({ watching: watching, available: available }); }, function(err) { watchers.reject(err); diff --git a/frontend/app/templates/work_packages/tabs/watchers.html b/frontend/app/templates/work_packages/tabs/watchers.html index 611d397456..939ea94aa4 100644 --- a/frontend/app/templates/work_packages/tabs/watchers.html +++ b/frontend/app/templates/work_packages/tabs/watchers.html @@ -11,6 +11,6 @@
          - +
      diff --git a/frontend/app/templates/work_packages/watchers/lookup.html b/frontend/app/templates/work_packages/watchers/lookup.html new file mode 100644 index 0000000000..ac66aa77ad --- /dev/null +++ b/frontend/app/templates/work_packages/watchers/lookup.html @@ -0,0 +1,6 @@ +
      +
      + + +
      + diff --git a/frontend/app/work_packages/directives/index.js b/frontend/app/work_packages/directives/index.js index fb83a6e797..b3e17c95c4 100644 --- a/frontend/app/work_packages/directives/index.js +++ b/frontend/app/work_packages/directives/index.js @@ -102,6 +102,9 @@ angular.module('openproject.workPackages.directives') 'ConfigurationService', 'ConversionService', require('./work-package-attachments-directive') + ]) + .directive('workPackageWatchersLookup', [ + require('./work-package-watchers-lookup-directive.js') ]); require('./inplace_editor'); diff --git a/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js b/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js new file mode 100644 index 0000000000..2d811fa93a --- /dev/null +++ b/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js @@ -0,0 +1,19 @@ +module.exports = function() { + 'use strict'; + + var workPackageWatchersLookupController = function(scope) { + scope.addWatcher = function() { + scope.$emit('watchers.add', scope.watcher); + }; + }; + + return { + replace: true, + restrict: 'E', + templateUrl: '/templates/work_packages/watchers/lookup.html', + link: workPackageWatchersLookupController, + scope: { + watchers: '=' + } + }; +}; From f47418de07b45bd1f6a8133e358115a9a77141b8 Mon Sep 17 00:00:00 2001 From: Florian Kraft Date: Mon, 17 Aug 2015 13:58:25 +0200 Subject: [PATCH 058/112] provide a method of adding watchers Signed-off-by: Florian Kraft --- frontend/app/openproject-app.js | 4 ++- frontend/app/services/watchers-service.js | 31 ++++++++++++++++++- .../work_packages/watchers/lookup.html | 20 ++++++++++-- .../details-tab-watchers-controller.js | 24 +++++++++++--- .../work-package-watchers-lookup-directive.js | 16 ++++++++-- frontend/webpack.config.js | 3 +- 6 files changed, 86 insertions(+), 12 deletions(-) diff --git a/frontend/app/openproject-app.js b/frontend/app/openproject-app.js index 3bc5d68d5d..63a237c94a 100644 --- a/frontend/app/openproject-app.js +++ b/frontend/app/openproject-app.js @@ -60,6 +60,7 @@ require('angular-busy/dist/angular-busy.css'); require('angular-context-menu'); require('mousetrap'); require('ngFileUpload'); +require('angucomplete-alt'); // global angular.module('openproject.uiComponents', ['ui.select', 'ngSanitize']) @@ -115,7 +116,8 @@ angular.module('openproject.workPackages', [ 'openproject.workPackages.tabs', 'openproject.uiComponents', 'ng-context-menu', - 'ngFileUpload' + 'ngFileUpload', + 'angucomplete-alt' ]); angular.module('openproject.workPackages.services', []); angular.module( diff --git a/frontend/app/services/watchers-service.js b/frontend/app/services/watchers-service.js index 38b6b76cdd..a8091baaa5 100644 --- a/frontend/app/services/watchers-service.js +++ b/frontend/app/services/watchers-service.js @@ -60,11 +60,40 @@ module.exports = function($http, $q) { watchers.reject(err); }); return watchers.promise; + }, + add = function(workPackage, watcher) { + var added = $q.defer(), + // somehow, the path will not be correctly inferred when using url() + path = workPackage.links.addWatcher.props.href, + method = workPackage.links.addWatcher.props.method, + payload = { + user: { + href: watcher._links.self.href // watcher is not a ressource + } + }; + + $http[method](path, payload).then(function() { + added.resolve(watcher); + }, function(err) { + added.reject(err); + }); + + return added.promise; }; + /* + * NOTE: In theorey, this service is independent from WorkPackages, + * however, the only thing currently handled by it is WorkPackage + * related watching. + * This might change in the future, as other Objects are watchable in + * OP - e.g. wiki pages. + * + * The public interface is therefore designed around handling WPs + */ return { loadForWorkPackage: load, availableForWorkPackage: available, - forWorkPackage: all + forWorkPackage: all, + addForWorkPackage: add }; }; diff --git a/frontend/app/templates/work_packages/watchers/lookup.html b/frontend/app/templates/work_packages/watchers/lookup.html index ac66aa77ad..bc5ddeac60 100644 --- a/frontend/app/templates/work_packages/watchers/lookup.html +++ b/frontend/app/templates/work_packages/watchers/lookup.html @@ -1,6 +1,22 @@
      -
      - + +
      +
      +
      + +
      +
      +
      diff --git a/frontend/app/work_packages/controllers/details-tab-watchers-controller.js b/frontend/app/work_packages/controllers/details-tab-watchers-controller.js index c200148055..18661b622b 100644 --- a/frontend/app/work_packages/controllers/details-tab-watchers-controller.js +++ b/frontend/app/work_packages/controllers/details-tab-watchers-controller.js @@ -26,14 +26,14 @@ // See doc/COPYRIGHT.rdoc for more details. //++ -module.exports = function($scope, I18n, WatchersService, ADD_WATCHER_SELECT_INDEX) { +module.exports = function(scope, I18n, WatchersService, ADD_WATCHER_SELECT_INDEX) { 'use strict'; var vm = this, fetchWatchers = function(loading) { vm.error = false; vm.loading = angular.isUndefined(loading) ? true : false; - WatchersService.forWorkPackage($scope.workPackage).then(function(users) { + WatchersService.forWorkPackage(scope.workPackage).then(function(users) { vm.watching = users.watching; vm.available = users.available; }, function() { @@ -43,14 +43,28 @@ module.exports = function($scope, I18n, WatchersService, ADD_WATCHER_SELECT_INDE }).finally(function() { vm.loading = false; }); + }, + addWatcher = function(event, watcher) { + // last stop for this one + event.stopPropagation(); + watcher.loading = true; + vm.watching.push(watcher); + WatchersService + .addForWorkPackage(scope.workPackage, watcher) + .then(function(watcher) { + scope.$broadcast('watchers.add.finished', watcher); + }) + .finally(function() { + watcher.loading = false; + }); }; + vm.watching = []; vm.I18n = I18n; fetchWatchers(); - $scope.add = function() { - $scope.adding = true; - }; + scope.$on('watchers.add', addWatcher); + // scope.$on('watchers.remove', removeWatcher); // $scope.watcherListString = function() { // return _.map($scope.watcher.selected, function(item) { diff --git a/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js b/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js index 2d811fa93a..565c301ada 100644 --- a/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js +++ b/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js @@ -3,8 +3,20 @@ module.exports = function() { var workPackageWatchersLookupController = function(scope) { scope.addWatcher = function() { - scope.$emit('watchers.add', scope.watcher); - }; + if (!scope.selectedWatcher) { + return; + } + // we pass up the original up the scope chain, + // _not_ the wrapper object + scope.$emit('watchers.add', scope.selectedWatcher.originalObject); + } + + scope.$on('watchers.add.finished', function(_, watcher) { + console.log(watcher); + if (scope.selectedWatcher.id === watcher.id) { + scope.selectedWatcher = null; + }; + }); }; return { diff --git a/frontend/webpack.config.js b/frontend/webpack.config.js index f6369c8dad..8d7f44ed15 100644 --- a/frontend/webpack.config.js +++ b/frontend/webpack.config.js @@ -124,7 +124,8 @@ module.exports = { 'hyperagent': 'hyperagent/dist/hyperagent', 'openproject-ui_components': 'openproject-ui_components/app/assets/javascripts/angular/ui-components-app', - 'ngFileUpload': 'ng-file-upload/ng-file-upload' + 'ngFileUpload': 'ng-file-upload/ng-file-upload', + 'angucomplete-alt': 'angucomplete-alt/angucomplete-alt' }, pluginAliases) }, From 64ba83a7181bc11ccb4f63b07256524488c82af6 Mon Sep 17 00:00:00 2001 From: Florian Kraft Date: Mon, 17 Aug 2015 14:45:59 +0200 Subject: [PATCH 059/112] make watchers removable Signed-off-by: Florian Kraft --- frontend/app/services/watchers-service.js | 25 ++++++++++++++++--- .../work_packages/tabs/watchers.html | 2 +- .../work_packages/watchers/lookup.html | 3 ++- .../work_packages/watchers/watcher.html | 5 ++++ .../details-tab-watchers-controller.js | 12 +++++++-- .../app/work_packages/directives/index.js | 3 +++ .../work-package-watcher-directive.js | 19 ++++++++++++++ .../work-package-watchers-lookup-directive.js | 14 ++++++----- 8 files changed, 69 insertions(+), 14 deletions(-) create mode 100644 frontend/app/templates/work_packages/watchers/watcher.html create mode 100644 frontend/app/work_packages/directives/work-package-watcher-directive.js diff --git a/frontend/app/services/watchers-service.js b/frontend/app/services/watchers-service.js index a8091baaa5..31dec44a11 100644 --- a/frontend/app/services/watchers-service.js +++ b/frontend/app/services/watchers-service.js @@ -42,7 +42,7 @@ module.exports = function($http, $q) { }; }; - var load = function(workPackage) { + var watching = function(workPackage) { var path = workPackage.links.watchers.url(); return getWatchers(path)(); }, @@ -52,9 +52,10 @@ module.exports = function($http, $q) { }, all = function(workPackage) { var watchers = $q.defer(); - $q.all([load(workPackage), available(workPackage)]).then(function(allWatchers) { + $q.all([watching(workPackage), available(workPackage)]).then(function(allWatchers) { var watching = allWatchers[0], available = _.difference(allWatchers[1], allWatchers[0]); + console.log(available); watchers.resolve({ watching: watching, available: available }); }, function(err) { watchers.reject(err); @@ -79,6 +80,21 @@ module.exports = function($http, $q) { }); return added.promise; + }, + remove = function(workPackage, watcher) { + var removed = $q.defer(), + path = workPackage.links.removeWatcher.props.href, + method = workPackage.links.removeWatcher.props.method; + + path = path.replace(/\{user\_id\}/, watcher.id); + + $http[method](path).then(function() { + removed.resolve(watcher); + }, function(err) { + remove.reject(err); + }) + + return removed.promise; }; /* @@ -91,9 +107,10 @@ module.exports = function($http, $q) { * The public interface is therefore designed around handling WPs */ return { - loadForWorkPackage: load, + watchingForWorkPackage: watching, availableForWorkPackage: available, forWorkPackage: all, - addForWorkPackage: add + addForWorkPackage: add, + removeFromWorkPackage: remove }; }; diff --git a/frontend/app/templates/work_packages/tabs/watchers.html b/frontend/app/templates/work_packages/tabs/watchers.html index 939ea94aa4..454fb44aad 100644 --- a/frontend/app/templates/work_packages/tabs/watchers.html +++ b/frontend/app/templates/work_packages/tabs/watchers.html @@ -9,7 +9,7 @@
        - +
      diff --git a/frontend/app/templates/work_packages/watchers/lookup.html b/frontend/app/templates/work_packages/watchers/lookup.html index bc5ddeac60..c219ba4f64 100644 --- a/frontend/app/templates/work_packages/watchers/lookup.html +++ b/frontend/app/templates/work_packages/watchers/lookup.html @@ -13,7 +13,8 @@ title-field="name" image-field="avatar" minlength="2" - input-class="form--text-field"/> + input-class="form--text-field" + disable-input="locked" />
    diff --git a/frontend/app/templates/work_packages/watchers/watcher.html b/frontend/app/templates/work_packages/watchers/watcher.html new file mode 100644 index 0000000000..c1a7d50120 --- /dev/null +++ b/frontend/app/templates/work_packages/watchers/watcher.html @@ -0,0 +1,5 @@ +
  • + {{watcher.name}} + {{watcher.name}} + × +
  • diff --git a/frontend/app/work_packages/controllers/details-tab-watchers-controller.js b/frontend/app/work_packages/controllers/details-tab-watchers-controller.js index 18661b622b..b85779816d 100644 --- a/frontend/app/work_packages/controllers/details-tab-watchers-controller.js +++ b/frontend/app/work_packages/controllers/details-tab-watchers-controller.js @@ -55,7 +55,15 @@ module.exports = function(scope, I18n, WatchersService, ADD_WATCHER_SELECT_INDEX scope.$broadcast('watchers.add.finished', watcher); }) .finally(function() { - watcher.loading = false; + delete watcher.loading; + }); + }, + removeWatcher = function(event, watcher) { + event.stopPropagation(); + WatchersService + .removeFromWorkPackage(scope.workPackage, watcher) + .then(function(watcher) { + _.remove(vm.watching, watcher); }); }; @@ -64,7 +72,7 @@ module.exports = function(scope, I18n, WatchersService, ADD_WATCHER_SELECT_INDEX fetchWatchers(); scope.$on('watchers.add', addWatcher); - // scope.$on('watchers.remove', removeWatcher); + scope.$on('watchers.remove', removeWatcher); // $scope.watcherListString = function() { // return _.map($scope.watcher.selected, function(item) { diff --git a/frontend/app/work_packages/directives/index.js b/frontend/app/work_packages/directives/index.js index b3e17c95c4..0e97271de2 100644 --- a/frontend/app/work_packages/directives/index.js +++ b/frontend/app/work_packages/directives/index.js @@ -103,6 +103,9 @@ angular.module('openproject.workPackages.directives') 'ConversionService', require('./work-package-attachments-directive') ]) + .directive('workPackageWatcher', [ + require('./work-package-watcher-directive') + ]) .directive('workPackageWatchersLookup', [ require('./work-package-watchers-lookup-directive.js') ]); diff --git a/frontend/app/work_packages/directives/work-package-watcher-directive.js b/frontend/app/work_packages/directives/work-package-watcher-directive.js new file mode 100644 index 0000000000..ef4654371e --- /dev/null +++ b/frontend/app/work_packages/directives/work-package-watcher-directive.js @@ -0,0 +1,19 @@ +module.exports = function() { + 'use strict'; + + var workPackageWatcherController = function(scope) { + scope.remove = function() { + scope.deleting = true; + scope.$emit('watchers.remove', scope.watcher); + }; + }; + + return { + replace: true, + templateUrl: '/templates/work_packages/watchers/watcher.html', + link: workPackageWatcherController, + scope: { + watcher: '=' + } + }; +}; diff --git a/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js b/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js index 565c301ada..20f3f8b4c0 100644 --- a/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js +++ b/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js @@ -2,20 +2,22 @@ module.exports = function() { 'use strict'; var workPackageWatchersLookupController = function(scope) { + scope.locked = false; scope.addWatcher = function() { if (!scope.selectedWatcher) { return; } + + scope.locked = !scope.locked; + // we pass up the original up the scope chain, // _not_ the wrapper object scope.$emit('watchers.add', scope.selectedWatcher.originalObject); - } + }; - scope.$on('watchers.add.finished', function(_, watcher) { - console.log(watcher); - if (scope.selectedWatcher.id === watcher.id) { - scope.selectedWatcher = null; - }; + scope.$on('watchers.add.finished', function() { + scope.locked = !scope.locked; + scope.selectedWatcher = null; }); }; From 64daddf767c9c26fdd51b2633cf0bcb0762b096b Mon Sep 17 00:00:00 2001 From: Florian Kraft Date: Mon, 17 Aug 2015 15:30:57 +0200 Subject: [PATCH 060/112] remove dead code and provide helpers for the array sets Signed-off-by: Florian Kraft --- frontend/app/services/watchers-service.js | 9 +- .../work_packages/watchers/watcher.html | 6 +- .../details-tab-watchers-controller.js | 145 +++--------------- .../work-package-watchers-lookup-directive.js | 9 +- 4 files changed, 42 insertions(+), 127 deletions(-) diff --git a/frontend/app/services/watchers-service.js b/frontend/app/services/watchers-service.js index 31dec44a11..2bdd892669 100644 --- a/frontend/app/services/watchers-service.js +++ b/frontend/app/services/watchers-service.js @@ -54,8 +54,11 @@ module.exports = function($http, $q) { var watchers = $q.defer(); $q.all([watching(workPackage), available(workPackage)]).then(function(allWatchers) { var watching = allWatchers[0], - available = _.difference(allWatchers[1], allWatchers[0]); - console.log(available); + available = _.filter(allWatchers[1], function(user) { + return _.findIndex(watching, function(watchingUser) { + return user.id === watchingUser.id; + }) === -1; + }); watchers.resolve({ watching: watching, available: available }); }, function(err) { watchers.reject(err); @@ -92,7 +95,7 @@ module.exports = function($http, $q) { removed.resolve(watcher); }, function(err) { remove.reject(err); - }) + }); return removed.promise; }; diff --git a/frontend/app/templates/work_packages/watchers/watcher.html b/frontend/app/templates/work_packages/watchers/watcher.html index c1a7d50120..145dbe1698 100644 --- a/frontend/app/templates/work_packages/watchers/watcher.html +++ b/frontend/app/templates/work_packages/watchers/watcher.html @@ -1,5 +1,7 @@
  • - {{watcher.name}} - {{watcher.name}} + + {{watcher.name}} + {{watcher.name}} + ×
  • diff --git a/frontend/app/work_packages/controllers/details-tab-watchers-controller.js b/frontend/app/work_packages/controllers/details-tab-watchers-controller.js index b85779816d..50451a11f4 100644 --- a/frontend/app/work_packages/controllers/details-tab-watchers-controller.js +++ b/frontend/app/work_packages/controllers/details-tab-watchers-controller.js @@ -26,7 +26,7 @@ // See doc/COPYRIGHT.rdoc for more details. //++ -module.exports = function(scope, I18n, WatchersService, ADD_WATCHER_SELECT_INDEX) { +module.exports = function(scope, I18n, WatchersService) { 'use strict'; var vm = this, @@ -48,7 +48,8 @@ module.exports = function(scope, I18n, WatchersService, ADD_WATCHER_SELECT_INDEX // last stop for this one event.stopPropagation(); watcher.loading = true; - vm.watching.push(watcher); + add(watcher, vm.watching); + remove(watcher, vm.available); WatchersService .addForWorkPackage(scope.workPackage, watcher) .then(function(watcher) { @@ -63,9 +64,29 @@ module.exports = function(scope, I18n, WatchersService, ADD_WATCHER_SELECT_INDEX WatchersService .removeFromWorkPackage(scope.workPackage, watcher) .then(function(watcher) { - _.remove(vm.watching, watcher); + remove(watcher, vm.watching); + add(watcher, vm.available); }); }; + // helpers to work with the watchers array + var remove = function(watcher, arr) { + var idx = _.findIndex(arr, watcher, equality(watcher)); + + if (idx > -1) { + arr.splice(idx, 1); + } + }, + add = function(watcher, arr) { + var idx = _.findIndex(arr, watcher, equality(watcher)); + if (idx === -1) { + arr.push(watcher); + } + }, + equality = function(firstElement) { + return function(secondElement) { + return firstElement.id === secondElement.id; + }; + }; vm.watching = []; vm.I18n = I18n; @@ -73,122 +94,4 @@ module.exports = function(scope, I18n, WatchersService, ADD_WATCHER_SELECT_INDEX scope.$on('watchers.add', addWatcher); scope.$on('watchers.remove', removeWatcher); - - // $scope.watcherListString = function() { - // return _.map($scope.watcher.selected, function(item) { - // return item.props.name; - // }).join(', '); - // }; - - // /** - // * @name getResourceIdentifier - // * @function - // * - // * @description - // * Returns the resource identifier of an API resource retrieved via hyperagent - // * - // * @param {Object} resource The resource object - // * - // * @returns {String} identifier - // */ - // function getResourceIdentifier(resource) { - // // TODO move to helper - // return resource.links.self.href; - // } - - // /** - // * @name getFilteredCollection - // * @function - // * - // * @description - // * Filters collection of HAL resources by entries listed in resourcesToBeFilteredOut - // * - // * @param {Array} collection Array of resources retrieved via hyperagent - // * @param {Array} resourcesToBeFilteredOut Entries to be filtered out - // * - // * @returns {Array} filtered collection - // */ - // function getFilteredCollection(collection, resourcesToBeFilteredOut) { - // return collection.filter(function(resource) { - // return resourcesToBeFilteredOut.map(getResourceIdentifier).indexOf(getResourceIdentifier(resource)) === -1; - // }); - // } - - // function fetchAvailableWatchers() { - // if ($scope.workPackage.links.availableWatchers === undefined) { - // $scope.availableWatchers = []; - // return; - // } - - // $scope.workPackage.links.availableWatchers - // .fetch() - // .then(function(data) { - // // Temporarily filter out watchers already assigned to the work package on the client-side - // $scope.availableWatchers = getFilteredCollection(data.embedded.elements, $scope.watchers); - // // TODO do filtering on the API side and replace the update of the - // // available watchers with the code provided in the following line - // // $scope.availableWatchers = data.embedded.elements; - // }); - // } - - // function addWatcher(newValue, oldValue) { - // if (newValue && newValue !== oldValue) { - // var user = newValue[newValue.length - 1], - // href = user ? user.links.self.href : null; - - // if (href) { - // var data = JSON.stringify({ user: { href: href } }); - // $scope.workPackage.link('addWatcher', {}) - // .fetch({ajax: { - // method: 'POST', - // contentType: 'application/json; charset=utf-8', - // data: data - // }}) - // .then(addWatcherSuccess, $scope.outputError); - // } - // } - // } - - // function addWatcherSuccess() { - // $scope.outputMessage(I18n.t("js.label_watcher_added_successfully")); - // $scope.refreshWorkPackage(); - - // $scope.watcher.selected = null; - - // $scope.focusElementIndex = ADD_WATCHER_SELECT_INDEX; - // } - - // $scope.deleteWatcher = function(watcher) { - // watcher.links.removeWatcher - // .fetch({ ajax: watcher.links.removeWatcher.props }) - // .then(deleteWatcherSuccess(watcher), $scope.outputError); - // }; - - // function deleteWatcherSuccess(watcher) { - // $scope.outputMessage(I18n.t("js.label_watcher_deleted_successfully")); - // removeWatcherFromList(watcher); - // } - - // function removeWatcherFromList(watcher) { - // var index = $scope.watchers.indexOf(watcher); - - // if (index >= 0) { - // $scope.watchers.splice(index, 1); - - // updateWatcherFocus(index); - // $scope.$emit('workPackageRefreshRequired'); - // } - // } - - // function updateWatcherFocus(index) { - // if ($scope.watchers.length == 0) { - // $scope.focusElementIndex = ADD_WATCHER_SELECT_INDEX; - // } else { - // $scope.focusElementIndex = (index < $scope.watchers.length) ? index : $scope.watchers.length - 1; - // } - - // $timeout(function() { - // $scope.$broadcast('updateFocus'); - // }); - // } }; diff --git a/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js b/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js index 20f3f8b4c0..646f5d503e 100644 --- a/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js +++ b/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js @@ -1,7 +1,7 @@ module.exports = function() { 'use strict'; - var workPackageWatchersLookupController = function(scope) { + var workPackageWatchersLookupController = function(scope, element) { scope.locked = false; scope.addWatcher = function() { if (!scope.selectedWatcher) { @@ -17,7 +17,14 @@ module.exports = function() { scope.$on('watchers.add.finished', function() { scope.locked = !scope.locked; + + // to clear the input of the directive + scope.$broadcast('angucomplete-alt:clearInput'); + scope.selectedWatcher = null; + + //set the focus back to allow for next watcher + element.focus(); }); }; From 07058738a11a22507bf465ae1c0cc8ee832b6e69 Mon Sep 17 00:00:00 2001 From: Florian Kraft Date: Mon, 17 Aug 2015 16:44:46 +0200 Subject: [PATCH 061/112] handle injections to watchers service properly and add tests Signed-off-by: Florian Kraft --- frontend/app/services/index.js | 5 + .../work-package-watchers-lookup-directive.js | 4 +- .../tests/services/watchers-service-test.js | 198 ++++++++++++++++++ 3 files changed, 205 insertions(+), 2 deletions(-) create mode 100644 frontend/tests/unit/tests/services/watchers-service-test.js diff --git a/frontend/app/services/index.js b/frontend/app/services/index.js index 1cab6eb8b4..52fa0d02ed 100644 --- a/frontend/app/services/index.js +++ b/frontend/app/services/index.js @@ -117,4 +117,9 @@ angular.module('openproject.services') require('./api-notifications-service.js') ]) .service('WatchersService', require('./watchers-service.js')) + .service('WatchersService', [ + '$http', + '$q', + require('./watchers-service.js') + ]) .service('ConversionService', require('./conversion-service.js')); diff --git a/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js b/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js index 646f5d503e..bab6513c4d 100644 --- a/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js +++ b/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js @@ -1,7 +1,7 @@ module.exports = function() { 'use strict'; - var workPackageWatchersLookupController = function(scope, element) { + var workPackageWatchersLookupController = function(scope) { scope.locked = false; scope.addWatcher = function() { if (!scope.selectedWatcher) { @@ -24,7 +24,7 @@ module.exports = function() { scope.selectedWatcher = null; //set the focus back to allow for next watcher - element.focus(); + angular.element('#watchers-lookup_value').focus(); }); }; diff --git a/frontend/tests/unit/tests/services/watchers-service-test.js b/frontend/tests/unit/tests/services/watchers-service-test.js new file mode 100644 index 0000000000..d29e1920a9 --- /dev/null +++ b/frontend/tests/unit/tests/services/watchers-service-test.js @@ -0,0 +1,198 @@ +//-- copyright +// OpenProject is a project management system. +// Copyright (C) 2012-2015 the OpenProject Foundation (OPF) +// +// 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 doc/COPYRIGHT.rdoc for more details. +//++ + +/*jshint expr: true*/ + +describe('WatchersService', function() { + 'use strict'; + + var WatchersService; + + beforeEach(module('openproject.services')); + + beforeEach(inject([ + 'WatchersService', + function(_WatchersService_) { + WatchersService = _WatchersService_; + }])); + + context.only('for workPackage', function() { + + var availableWatchersPath = '/work_packages/123/available_watchers', + watchersPath = '/work_packages/123/watchers', + workPackage = { + links: { + watchers: { + url: function() { + return watchersPath; + } + }, + availableWatchers: { + url: function() { + return availableWatchersPath; + } + }, + addWatcher: { + props: { + href: watchersPath, + method: 'post' + } + }, + removeWatcher: { + props: { + href: '/work_packages/123/watchers/{user_id}', + method: 'delete' + } + } + } + }, + $httpBackend = null, + watchers = { + _embedded: { + elements: [ + { + id: 1, + name: 'Florian' + }, + { + id: 2, + name: 'Breanne' + } + ] + } + }, + availableWatchers = { + _embedded: { + elements: [ + { + id: 1, + name: 'Florian' + }, + { + id: 2, + name: 'Breanne' + }, + { + id: 3, + name: 'Supreme OP Overlord' + }, + { + id: 4, + name: 'Ford Prefect' + } + ] + } + }; + + describe('load watchers', function () { + + beforeEach(inject(['$httpBackend', function(_$httpBackend_) { + $httpBackend = _$httpBackend_; + }])); + + afterEach(function() { + $httpBackend.verifyNoOutstandingRequest(); + $httpBackend.verifyNoOutstandingExpectation(); + }); + + it('should load both available and watching users', function() { + + $httpBackend.expectGET(watchersPath).respond(watchers); + $httpBackend.expectGET(availableWatchersPath).respond(availableWatchers); + + WatchersService.forWorkPackage(workPackage).then(function(users) { + expect(users).to.have.keys(['available', 'watching']); + expect(users.watching.length).to.eql(2); + expect(users.available.length).to.eql(2); + + expect(users.available).to.eql([ + { + id: 3, + name: 'Supreme OP Overlord' + }, + { + id: 4, + name: 'Ford Prefect' + } + ]); + }); + + $httpBackend.flush(); + }); + }); + + describe('adding watchers', function() { + + beforeEach(inject(['$httpBackend', function(_$httpBackend_) { + $httpBackend = _$httpBackend_; + }])); + + afterEach(function() { + $httpBackend.verifyNoOutstandingRequest(); + $httpBackend.verifyNoOutstandingExpectation(); + }); + + it('should be possible to add watchers', function() { + $httpBackend.expectPOST(watchersPath).respond({}); + + var watcher = { + id: 3, + _links: { + self: '/users/123' + } + }; + + WatchersService.addForWorkPackage(workPackage, watcher); + $httpBackend.flush(); + }); + }); + + describe('removing watchers', function() { + + beforeEach(inject(['$httpBackend', function(_$httpBackend_) { + $httpBackend = _$httpBackend_; + }])); + + afterEach(function() { + $httpBackend.verifyNoOutstandingRequest(); + $httpBackend.verifyNoOutstandingExpectation(); + }); + + it('should be possible to delete watchers', function() { + $httpBackend.expectDELETE('/work_packages/123/watchers/9').respond({}); + + var watcher = { + id: 9 + }; + + WatchersService.removeFromWorkPackage(workPackage, watcher); + $httpBackend.flush(); + }); + }); + }); +}); From 3e25adfcbb8807cac17535688c425eff118bb9c1 Mon Sep 17 00:00:00 2001 From: Florian Kraft Date: Mon, 17 Aug 2015 16:47:02 +0200 Subject: [PATCH 062/112] do not only tests the WatchersService Signed-off-by: Florian Kraft --- frontend/tests/unit/tests/services/watchers-service-test.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/frontend/tests/unit/tests/services/watchers-service-test.js b/frontend/tests/unit/tests/services/watchers-service-test.js index d29e1920a9..963d42fda4 100644 --- a/frontend/tests/unit/tests/services/watchers-service-test.js +++ b/frontend/tests/unit/tests/services/watchers-service-test.js @@ -39,9 +39,10 @@ describe('WatchersService', function() { 'WatchersService', function(_WatchersService_) { WatchersService = _WatchersService_; - }])); + }]) + ); - context.only('for workPackage', function() { + context('for workPackage', function() { var availableWatchersPath = '/work_packages/123/available_watchers', watchersPath = '/work_packages/123/watchers', From adb0e1802c6f79b6d72f848f71358fd37b2d1675 Mon Sep 17 00:00:00 2001 From: Florian Kraft Date: Mon, 17 Aug 2015 16:50:22 +0200 Subject: [PATCH 063/112] remove old controller tests for watchers tab Signed-off-by: Florian Kraft --- .../tests/services/watchers-service-test.js | 19 +--- .../details-tab-watchers-controller-test.js | 91 ------------------- 2 files changed, 5 insertions(+), 105 deletions(-) diff --git a/frontend/tests/unit/tests/services/watchers-service-test.js b/frontend/tests/unit/tests/services/watchers-service-test.js index 963d42fda4..2ad44051c2 100644 --- a/frontend/tests/unit/tests/services/watchers-service-test.js +++ b/frontend/tests/unit/tests/services/watchers-service-test.js @@ -110,16 +110,17 @@ describe('WatchersService', function() { } }; + afterEach(function() { + $httpBackend.verifyNoOutstandingRequest(); + $httpBackend.verifyNoOutstandingExpectation(); + }); + describe('load watchers', function () { beforeEach(inject(['$httpBackend', function(_$httpBackend_) { $httpBackend = _$httpBackend_; }])); - afterEach(function() { - $httpBackend.verifyNoOutstandingRequest(); - $httpBackend.verifyNoOutstandingExpectation(); - }); it('should load both available and watching users', function() { @@ -153,11 +154,6 @@ describe('WatchersService', function() { $httpBackend = _$httpBackend_; }])); - afterEach(function() { - $httpBackend.verifyNoOutstandingRequest(); - $httpBackend.verifyNoOutstandingExpectation(); - }); - it('should be possible to add watchers', function() { $httpBackend.expectPOST(watchersPath).respond({}); @@ -179,11 +175,6 @@ describe('WatchersService', function() { $httpBackend = _$httpBackend_; }])); - afterEach(function() { - $httpBackend.verifyNoOutstandingRequest(); - $httpBackend.verifyNoOutstandingExpectation(); - }); - it('should be possible to delete watchers', function() { $httpBackend.expectDELETE('/work_packages/123/watchers/9').respond({}); diff --git a/frontend/tests/unit/tests/work_packages/controllers/details-tab-watchers-controller-test.js b/frontend/tests/unit/tests/work_packages/controllers/details-tab-watchers-controller-test.js index 702456a959..b85441ac85 100644 --- a/frontend/tests/unit/tests/work_packages/controllers/details-tab-watchers-controller-test.js +++ b/frontend/tests/unit/tests/work_packages/controllers/details-tab-watchers-controller-test.js @@ -29,97 +29,6 @@ /*jshint expr: true*/ describe('DetailsTabWatchersController', function() { - var cont, scope, I18n, - workPackage = { - schema: { - props: { - customField1: { - type: 'Formattable', - name: 'color', - required: false, - writable: true - }, - customField2: { - type: 'Formattable', - name: 'aut mollitia', - required: false, - writable: true - } - } - }, - props: { - customField1: { - format: 'plain', - raw: 'red', - html: '

    red

    ' - }, - customField2: { - format: 'plain', - raw: '', - html: '

    ' - }, - versionName: null, - percentageDone: 0, - estimatedTime: 'PT0S', - spentTime: 'PT0S', - id: '0815' - }, - embedded: { - status: { - props: { - name: 'open' - } - }, - priority: { - props: { - name: 'high' - } - }, - activities: [], - watchers: [{ - avatar: 'http://gravatar.com/avatar/cb4f282fed12016bd18a879c1f27ff97?secure=false', - createdAt: '2015-01-29T10:31:38+00:00', - email: 'admin@example.net', - firstName: 'OpenProject', - id: 1, - lastName: 'Admin', - login: 'admin', - name: 'OpenProject Admin', - status: 'active', - subtype: 'User', - updatedAt: '2015-04-01T08:21:34+00:00' - }], - attachments: [] - }, - links: {} - }; - beforeEach(module('openproject.api', - 'openproject.services', - 'openproject.config', - 'openproject.workPackages.controllers')); - beforeEach(inject(function($injector, $controller, $timeout, $rootScope, $filter) { - scope = $rootScope.$new(); - scope.workPackage = angular.copy(workPackage); - scope.watchers = angular.copy(workPackage.embedded.watchers); - scope.outputMessage = function() {}; - I18n = $injector.get('I18n'); - - cont = $controller('DetailsTabWatchersController', { - $scope: scope, - $filter: $filter, - $timeout: $timeout, - I18n: $injector.get('I18n'), - ADD_WATCHER_SELECT_INDEX: $injector.get('ADD_WATCHER_SELECT_INDEX') - }); - })); - - describe('addWatcherSuccess', function() { - it('is not called on initialization', function() { - sinon.spy(scope, 'outputMessage'); - expect(scope.outputMessage).to.have.not.been.called; - }); - }); }); -/*jshint expr: false*/ From cb0c85a7954f16f6f5b261603b774a090db39d4d Mon Sep 17 00:00:00 2001 From: Florian Kraft Date: Mon, 17 Aug 2015 17:07:32 +0200 Subject: [PATCH 064/112] add some basic tests These tests are mostly concerned with the data layer and expected and actual responses from the APIv3. Also, a controller skeleton test is included Signed-off-by: Florian Kraft --- .../details-tab-watchers-controller-test.js | 45 ++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/frontend/tests/unit/tests/work_packages/controllers/details-tab-watchers-controller-test.js b/frontend/tests/unit/tests/work_packages/controllers/details-tab-watchers-controller-test.js index b85441ac85..7327039af0 100644 --- a/frontend/tests/unit/tests/work_packages/controllers/details-tab-watchers-controller-test.js +++ b/frontend/tests/unit/tests/work_packages/controllers/details-tab-watchers-controller-test.js @@ -28,7 +28,50 @@ /*jshint expr: true*/ -describe('DetailsTabWatchersController', function() { +describe.only('DetailsTabWatchersController', function() { + 'use strict'; + beforeEach(module('openproject')); + + var $controller, $rootScope; + beforeEach(inject(['$controller', '$rootScope', function(ctrl, root) { + $controller = ctrl; + $rootScope = root; + }])); + + var workPackage = { + links: { + watchers: { + url: function() { + return '/work_packages/123/watchers'; + } + }, + availableWatchers: { + url: function() { + return '/work_packages/123/available_watchers'; + } + } + } + }; + + + it('should exist', function() { + var locals = { + $scope: $rootScope.$new() + }; + + locals.$scope.workPackage = workPackage; + expect($controller('DetailsTabWatchersController', locals)).to.exist; + }); + + it('should not work without a work workPackage', function() { + var locals = { + $scope: $rootScope.$new() + }; + + expect(function() { + $controller('DetailsTabWatchersController', locals); + }).to.throw; + }); }); From d9f67f626698d4a03a5f4cdaf4c9c1dd9abcb891 Mon Sep 17 00:00:00 2001 From: Florian Kraft Date: Mon, 17 Aug 2015 17:17:36 +0200 Subject: [PATCH 065/112] insert translations Signed-off-by: Florian Kraft --- config/locales/js-en.yml | 6 +++- .../work_packages/tabs/watchers.html | 4 +-- .../app/work_packages/directives/index.js | 2 ++ .../work-package-watcher-directive.js | 32 ++++++++++++++++++- .../work-package-watchers-lookup-directive.js | 31 +++++++++++++++++- 5 files changed, 70 insertions(+), 5 deletions(-) diff --git a/config/locales/js-en.yml b/config/locales/js-en.yml index 8d25f0e35a..3c76882208 100644 --- a/config/locales/js-en.yml +++ b/config/locales/js-en.yml @@ -170,9 +170,13 @@ en: label_successful_update: 'Successful update' label_validation_error: "The work package could not be saved due to the following errors:" - text_are_you_sure: "Are you sure?" + watchers: + label_loading: loading watchers... + label_error_loading: An error occured while loading the watchers + label_type_to_add: Type to add more watchers + filter_labels: assigned_to: "Assignee" assigned_to_role: "Assignee's role" diff --git a/frontend/app/templates/work_packages/tabs/watchers.html b/frontend/app/templates/work_packages/tabs/watchers.html index 454fb44aad..a9e6fe9487 100644 --- a/frontend/app/templates/work_packages/tabs/watchers.html +++ b/frontend/app/templates/work_packages/tabs/watchers.html @@ -1,11 +1,11 @@
    -

    An error occured while loading the watchers

    +

    {{::I18n.t('js.watchers.label_error_loading')}}

    - loading watchers... +

    {{I18n.t('js.watchers.label_loading')}}

      diff --git a/frontend/app/work_packages/directives/index.js b/frontend/app/work_packages/directives/index.js index 0e97271de2..fb57b5d560 100644 --- a/frontend/app/work_packages/directives/index.js +++ b/frontend/app/work_packages/directives/index.js @@ -104,9 +104,11 @@ angular.module('openproject.workPackages.directives') require('./work-package-attachments-directive') ]) .directive('workPackageWatcher', [ + 'I18n', require('./work-package-watcher-directive') ]) .directive('workPackageWatchersLookup', [ + 'I18n', require('./work-package-watchers-lookup-directive.js') ]); diff --git a/frontend/app/work_packages/directives/work-package-watcher-directive.js b/frontend/app/work_packages/directives/work-package-watcher-directive.js index ef4654371e..875e057bd7 100644 --- a/frontend/app/work_packages/directives/work-package-watcher-directive.js +++ b/frontend/app/work_packages/directives/work-package-watcher-directive.js @@ -1,4 +1,32 @@ -module.exports = function() { +//-- copyright +// OpenProject is a project management system. +// Copyright (C) 2012-2015 the OpenProject Foundation (OPF) +// +// 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 doc/COPYRIGHT.rdoc for more details. +//++ + +module.exports = function(I18n) { 'use strict'; var workPackageWatcherController = function(scope) { @@ -6,6 +34,8 @@ module.exports = function() { scope.deleting = true; scope.$emit('watchers.remove', scope.watcher); }; + + scope.I18n = I18n; }; return { diff --git a/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js b/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js index bab6513c4d..0924289a39 100644 --- a/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js +++ b/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js @@ -1,8 +1,37 @@ -module.exports = function() { +//-- copyright +// OpenProject is a project management system. +// Copyright (C) 2012-2015 the OpenProject Foundation (OPF) +// +// 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 doc/COPYRIGHT.rdoc for more details. +//++ + +module.exports = function(I18n) { 'use strict'; var workPackageWatchersLookupController = function(scope) { scope.locked = false; + scope.I18n = I18n; scope.addWatcher = function() { if (!scope.selectedWatcher) { return; From 1cd59fdb59eec92f01e843f17a69fdd4b102d0ec Mon Sep 17 00:00:00 2001 From: Florian Kraft Date: Mon, 17 Aug 2015 17:48:17 +0200 Subject: [PATCH 066/112] use correct path for linking users profile Signed-off-by: Florian Kraft --- frontend/app/templates/work_packages/watchers/watcher.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/app/templates/work_packages/watchers/watcher.html b/frontend/app/templates/work_packages/watchers/watcher.html index 145dbe1698..6d4602c301 100644 --- a/frontend/app/templates/work_packages/watchers/watcher.html +++ b/frontend/app/templates/work_packages/watchers/watcher.html @@ -1,5 +1,5 @@
    • - + {{watcher.name}} {{watcher.name}} From d8bd5577430c85436f18f12b730b18be22068739 Mon Sep 17 00:00:00 2001 From: Florian Kraft Date: Mon, 17 Aug 2015 17:49:27 +0200 Subject: [PATCH 067/112] remove focus statement Signed-off-by: Florian Kraft --- .../controllers/details-tab-watchers-controller-test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/tests/unit/tests/work_packages/controllers/details-tab-watchers-controller-test.js b/frontend/tests/unit/tests/work_packages/controllers/details-tab-watchers-controller-test.js index 7327039af0..7a29b3d346 100644 --- a/frontend/tests/unit/tests/work_packages/controllers/details-tab-watchers-controller-test.js +++ b/frontend/tests/unit/tests/work_packages/controllers/details-tab-watchers-controller-test.js @@ -28,7 +28,7 @@ /*jshint expr: true*/ -describe.only('DetailsTabWatchersController', function() { +describe('DetailsTabWatchersController', function() { 'use strict'; beforeEach(module('openproject')); From 092dff5d5cd9b70fae5a3dbebde0e7d5fd9a7f6e Mon Sep 17 00:00:00 2001 From: Florian Kraft Date: Tue, 18 Aug 2015 14:02:42 +0200 Subject: [PATCH 068/112] use ui.select for watcher selection This will use the ui.select based implementation already forund in the work package form, however, this introduces a more brittle copy-pasted approach to simulate the appearance. an actual view component is not included --- config/locales/js-en.yml | 2 +- .../work_packages/watchers/lookup.html | 38 +++++++++---------- 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/config/locales/js-en.yml b/config/locales/js-en.yml index 3c76882208..368fa13560 100644 --- a/config/locales/js-en.yml +++ b/config/locales/js-en.yml @@ -175,7 +175,7 @@ en: watchers: label_loading: loading watchers... label_error_loading: An error occured while loading the watchers - label_type_to_add: Type to add more watchers + label_search_watchers: Search watchers filter_labels: assigned_to: "Assignee" diff --git a/frontend/app/templates/work_packages/watchers/lookup.html b/frontend/app/templates/work_packages/watchers/lookup.html index c219ba4f64..34c0774930 100644 --- a/frontend/app/templates/work_packages/watchers/lookup.html +++ b/frontend/app/templates/work_packages/watchers/lookup.html @@ -1,23 +1,21 @@
      -
      -
      -
      -
      - -
      -
      -
      - +
      From bf334669640636be8e15a237a68bad10c0ab2a80 Mon Sep 17 00:00:00 2001 From: Florian Kraft Date: Tue, 18 Aug 2015 16:58:02 +0200 Subject: [PATCH 069/112] use a several parts from inplace edit to change add watcher workflow Watchers can now be added like assignees. The component now has its own implementation of the trigger component, based on edit and display pane of the work package form. Signed-off-by: Florian Kraft --- .../content/_in_place_editing.sass | 2 + .../work_package_details/_watchers_tab.sass | 5 +- config/locales/js-en.yml | 3 + .../work_packages/watchers/lookup.html | 62 ++++++++++++++----- .../work-package-watchers-lookup-directive.js | 25 +++++--- 5 files changed, 72 insertions(+), 25 deletions(-) diff --git a/app/assets/stylesheets/content/_in_place_editing.sass b/app/assets/stylesheets/content/_in_place_editing.sass index 0ad629b527..d335d6a9e0 100644 --- a/app/assets/stylesheets/content/_in_place_editing.sass +++ b/app/assets/stylesheets/content/_in_place_editing.sass @@ -106,6 +106,8 @@ $inplace-edit--selected-date-border-color: $primary-color-dark .inplace-edit--select .select2-display-none display: none + &.-full-width + max-width: 100% .inplace-edit--textarea min-height: 200px diff --git a/app/assets/stylesheets/content/work_package_details/_watchers_tab.sass b/app/assets/stylesheets/content/work_package_details/_watchers_tab.sass index ca8a11abac..208ba1385b 100644 --- a/app/assets/stylesheets/content/work_package_details/_watchers_tab.sass +++ b/app/assets/stylesheets/content/work_package_details/_watchers_tab.sass @@ -29,8 +29,6 @@ #detail-panel-watchers width: 100% padding-top: 30px - .select2 - width: 400px .select2-with-searchbox position: relative .ui-select-choices @@ -38,6 +36,9 @@ input[type='text'] width: 100% + .inplace-edit--read + max-width: 100% + ul.watchers-list margin: 15px 0 padding: 0 0 15px 0 diff --git a/config/locales/js-en.yml b/config/locales/js-en.yml index 368fa13560..4aa4b2b653 100644 --- a/config/locales/js-en.yml +++ b/config/locales/js-en.yml @@ -176,6 +176,9 @@ en: label_loading: loading watchers... label_error_loading: An error occured while loading the watchers label_search_watchers: Search watchers + label_add: Add watchers + label_discard: Discard selection + label_click_to_add: Click to add watchers filter_labels: assigned_to: "Assignee" diff --git a/frontend/app/templates/work_packages/watchers/lookup.html b/frontend/app/templates/work_packages/watchers/lookup.html index 34c0774930..da4d1201b6 100644 --- a/frontend/app/templates/work_packages/watchers/lookup.html +++ b/frontend/app/templates/work_packages/watchers/lookup.html @@ -1,21 +1,51 @@
      - diff --git a/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js b/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js index 0924289a39..6de9f83b2e 100644 --- a/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js +++ b/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js @@ -31,9 +31,20 @@ module.exports = function(I18n) { var workPackageWatchersLookupController = function(scope) { scope.locked = false; + scope.editMode = false; scope.I18n = I18n; + + // we need an object for ui.select to work properly + scope.selection = { + watcher: null + }; + + scope.changeEditMode = function() { + scope.editMode = !scope.editMode; + }; + scope.addWatcher = function() { - if (!scope.selectedWatcher) { + if (!scope.selection.watcher) { return; } @@ -41,19 +52,19 @@ module.exports = function(I18n) { // we pass up the original up the scope chain, // _not_ the wrapper object - scope.$emit('watchers.add', scope.selectedWatcher.originalObject); + scope.$emit('watchers.add', scope.selection.watcher); }; scope.$on('watchers.add.finished', function() { scope.locked = !scope.locked; // to clear the input of the directive - scope.$broadcast('angucomplete-alt:clearInput'); - - scope.selectedWatcher = null; + scope.selection.watcher = null; - //set the focus back to allow for next watcher - angular.element('#watchers-lookup_value').focus(); + // this will set the editMode back, once no more watchers can be added + if (scope.watchers.length === 0) { + scope.editMode = false; + } }); }; From ffb279f25edcad645e67f009f71d0d327be7338c Mon Sep 17 00:00:00 2001 From: Henriette Dinger Date: Wed, 19 Aug 2015 11:32:02 +0200 Subject: [PATCH 070/112] styled the watchers tab --- .../content/_in_place_editing.sass | 14 +++++++++ frontend/app/openproject-app.js | 4 +-- .../work_packages/tabs/watchers.html | 6 ++-- .../work_packages/watchers/watcher.html | 30 ++++++++++++++----- 4 files changed, 41 insertions(+), 13 deletions(-) diff --git a/app/assets/stylesheets/content/_in_place_editing.sass b/app/assets/stylesheets/content/_in_place_editing.sass index d335d6a9e0..3e746ce525 100644 --- a/app/assets/stylesheets/content/_in_place_editing.sass +++ b/app/assets/stylesheets/content/_in_place_editing.sass @@ -272,3 +272,17 @@ a.inplace-editing--trigger-link, .inplace-edit--highlight border-color: $inplace-edit--color-highlight !important + +.work-package--watchers + .inplace-edit--read + margin-left: 0px + max-width: 100% + padding-bottom: 5px + + img.avatar-mini + float: inherit + + .inplace-edit--read-value + span.deleting + opacity: 0.5 + diff --git a/frontend/app/openproject-app.js b/frontend/app/openproject-app.js index 63a237c94a..3bc5d68d5d 100644 --- a/frontend/app/openproject-app.js +++ b/frontend/app/openproject-app.js @@ -60,7 +60,6 @@ require('angular-busy/dist/angular-busy.css'); require('angular-context-menu'); require('mousetrap'); require('ngFileUpload'); -require('angucomplete-alt'); // global angular.module('openproject.uiComponents', ['ui.select', 'ngSanitize']) @@ -116,8 +115,7 @@ angular.module('openproject.workPackages', [ 'openproject.workPackages.tabs', 'openproject.uiComponents', 'ng-context-menu', - 'ngFileUpload', - 'angucomplete-alt' + 'ngFileUpload' ]); angular.module('openproject.workPackages.services', []); angular.module( diff --git a/frontend/app/templates/work_packages/tabs/watchers.html b/frontend/app/templates/work_packages/tabs/watchers.html index a9e6fe9487..406b3a189f 100644 --- a/frontend/app/templates/work_packages/tabs/watchers.html +++ b/frontend/app/templates/work_packages/tabs/watchers.html @@ -8,9 +8,9 @@

      {{I18n.t('js.watchers.label_loading')}}

      -
        +
        -
      - +
      +
    diff --git a/frontend/app/templates/work_packages/watchers/watcher.html b/frontend/app/templates/work_packages/watchers/watcher.html index 6d4602c301..ddbd76eadf 100644 --- a/frontend/app/templates/work_packages/watchers/watcher.html +++ b/frontend/app/templates/work_packages/watchers/watcher.html @@ -1,7 +1,23 @@ -
  • - - {{watcher.name}} - {{watcher.name}} - - × -
  • + + + + + + {{watcher.name}} + {{watcher.name}} + + + + + + + + + + + + From 07377d87ee3cb735cd5c7d69bcd3e8d91d87f65b Mon Sep 17 00:00:00 2001 From: Henriette Dinger Date: Wed, 19 Aug 2015 14:12:03 +0200 Subject: [PATCH 071/112] changed the styling of attachments in details pane similar to the watchers --- .../content/_in_place_editing.sass | 17 +++++++++--- .../stylesheets/layout/_work_package.sass | 24 ----------------- .../work_packages/attachments-edit.html | 27 ++++++++++++++----- .../work_packages/tabs/watchers.html | 2 +- .../work_packages/watchers/watcher.html | 5 ++-- 5 files changed, 37 insertions(+), 38 deletions(-) diff --git a/app/assets/stylesheets/content/_in_place_editing.sass b/app/assets/stylesheets/content/_in_place_editing.sass index 3e746ce525..40c84d367b 100644 --- a/app/assets/stylesheets/content/_in_place_editing.sass +++ b/app/assets/stylesheets/content/_in_place_editing.sass @@ -273,16 +273,25 @@ a.inplace-editing--trigger-link, .inplace-edit--highlight border-color: $inplace-edit--color-highlight !important -.work-package--watchers +.work-package--details--long-field + margin-top: 10px + .inplace-edit--read margin-left: 0px max-width: 100% padding-bottom: 5px - img.avatar-mini - float: inherit - .inplace-edit--read-value span.deleting opacity: 0.5 + img.avatar-mini + float: inherit + + i + vertical-align: text-bottom + + .inplace-edit--icon-wrapper + .icon-button + margin-left: auto + diff --git a/app/assets/stylesheets/layout/_work_package.sass b/app/assets/stylesheets/layout/_work_package.sass index 70b3e1f2b0..f9bf49ad73 100644 --- a/app/assets/stylesheets/layout/_work_package.sass +++ b/app/assets/stylesheets/layout/_work_package.sass @@ -188,30 +188,6 @@ flex-grow: 0 flex-shrink: 0 -.work-package--attachments--files - ul - list-style: none - margin: 0 - li - margin: rem-calc(5 0) - display: flex - flex-direction: row - align-items: center - .filename - margin: rem-calc(0 5) - flex-grow: 1 - flex-basis: auto - overflow: hidden - white-space: nowrap - text-overflow: ellipsis - .filesize - @extend %flex-grow-shrink-zero - margin: rem-calc(0 10) - .button - @extend %flex-grow-shrink-zero - margin: 0 - flex-basis: rem-calc(65) - //an workaround for ie10 @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) //IE10+ specific styles go here diff --git a/frontend/app/templates/work_packages/attachments-edit.html b/frontend/app/templates/work_packages/attachments-edit.html index 8da2ef6305..611586140b 100644 --- a/frontend/app/templates/work_packages/attachments-edit.html +++ b/frontend/app/templates/work_packages/attachments-edit.html @@ -12,11 +12,26 @@

    {{ ::I18n.t('js.label_drop_files_hint') }}

    - +
    + + + + + + {{::attachment.fileName}} + ({{::size(attachment.fileSize)}}) + + + + {{::I18n.t('js.label_remove_file')}}> + + + + +
    + diff --git a/frontend/app/templates/work_packages/tabs/watchers.html b/frontend/app/templates/work_packages/tabs/watchers.html index 406b3a189f..bade810189 100644 --- a/frontend/app/templates/work_packages/tabs/watchers.html +++ b/frontend/app/templates/work_packages/tabs/watchers.html @@ -8,7 +8,7 @@

    {{I18n.t('js.watchers.label_loading')}}

    -
    +
    diff --git a/frontend/app/templates/work_packages/watchers/watcher.html b/frontend/app/templates/work_packages/watchers/watcher.html index ddbd76eadf..13a19bd6ba 100644 --- a/frontend/app/templates/work_packages/watchers/watcher.html +++ b/frontend/app/templates/work_packages/watchers/watcher.html @@ -2,8 +2,7 @@ + link-class="inplace-editing--trigger-link"> @@ -12,7 +11,7 @@ - + From 8d18a5710e9fbdcce56292a7e4e7c2958becb2da Mon Sep 17 00:00:00 2001 From: Henriette Dinger Date: Fri, 21 Aug 2015 15:05:09 +0200 Subject: [PATCH 072/112] fixed line height of the new fields and removed the watchers tab from the styleguide --- .../content/_in_place_editing.sass | 5 +- .../work_package_details/_watchers_tab.lsg | 41 ------------ .../work_package_details/_watchers_tab.sass | 66 ------------------- app/assets/stylesheets/default.css.sass | 1 - 4 files changed, 4 insertions(+), 109 deletions(-) delete mode 100644 app/assets/stylesheets/content/work_package_details/_watchers_tab.lsg delete mode 100644 app/assets/stylesheets/content/work_package_details/_watchers_tab.sass diff --git a/app/assets/stylesheets/content/_in_place_editing.sass b/app/assets/stylesheets/content/_in_place_editing.sass index 40c84d367b..ee9f670cf8 100644 --- a/app/assets/stylesheets/content/_in_place_editing.sass +++ b/app/assets/stylesheets/content/_in_place_editing.sass @@ -276,6 +276,9 @@ a.inplace-editing--trigger-link, .work-package--details--long-field margin-top: 10px + .inplace-editing--trigger-container + line-height: 1.6 + .inplace-edit--read margin-left: 0px max-width: 100% @@ -289,7 +292,7 @@ a.inplace-editing--trigger-link, float: inherit i - vertical-align: text-bottom + vertical-align: text-top .inplace-edit--icon-wrapper .icon-button diff --git a/app/assets/stylesheets/content/work_package_details/_watchers_tab.lsg b/app/assets/stylesheets/content/work_package_details/_watchers_tab.lsg deleted file mode 100644 index 77ec167768..0000000000 --- a/app/assets/stylesheets/content/work_package_details/_watchers_tab.lsg +++ /dev/null @@ -1,41 +0,0 @@ -# Work Packages - [Details Pane] - Watchers - -``` -
    - -
    -``` diff --git a/app/assets/stylesheets/content/work_package_details/_watchers_tab.sass b/app/assets/stylesheets/content/work_package_details/_watchers_tab.sass deleted file mode 100644 index 208ba1385b..0000000000 --- a/app/assets/stylesheets/content/work_package_details/_watchers_tab.sass +++ /dev/null @@ -1,66 +0,0 @@ -//-- copyright -// OpenProject is a project management system. -// Copyright (C) 2012-2015 the OpenProject Foundation (OPF) -// -// 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 doc/COPYRIGHT.rdoc for more details. -//++ - -#detail-panel-watchers - width: 100% - padding-top: 30px - .select2-with-searchbox - position: relative - .ui-select-choices - max-height: 350px - input[type='text'] - width: 100% - - .inplace-edit--read - max-width: 100% - - ul.watchers-list - margin: 15px 0 - padding: 0 0 15px 0 - list-style-type: none - - li - clear: both - height: 24px - - > .user-avatar--container - width: 40% - float: left - - .detail-panel-watchers-delete-watcher-link:hover, - .detail-panel-watchers-delete-watcher-link:active - text-decoration: none - - .detail-panel-watchers-delete-watcher-icon - padding: 0 8px - - fieldset - border: 0 - - #detail-panel-watchers-add-watcher - clear: left diff --git a/app/assets/stylesheets/default.css.sass b/app/assets/stylesheets/default.css.sass index 67f1b363e0..0ac0f8c058 100644 --- a/app/assets/stylesheets/default.css.sass +++ b/app/assets/stylesheets/default.css.sass @@ -73,7 +73,6 @@ @import content/work_package_details/activities_tab @import content/work_package_details/attachments_tab @import content/work_package_details/relations_tab -@import content/work_package_details/watchers_tab @import content/expandable_group_content @import content/control_colors From e1393fedfccfdac5d685208cf991feda7840c2ed Mon Sep 17 00:00:00 2001 From: Jens Ulferts Date: Thu, 27 Aug 2015 13:06:57 +0200 Subject: [PATCH 073/112] don't delete the attachment/watcher upon clicking on it --- .../work_packages/attachments-edit.html | 17 +++++---- .../work_packages/watchers/watcher.html | 35 ++++++++++--------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/frontend/app/templates/work_packages/attachments-edit.html b/frontend/app/templates/work_packages/attachments-edit.html index 611586140b..3eb524443c 100644 --- a/frontend/app/templates/work_packages/attachments-edit.html +++ b/frontend/app/templates/work_packages/attachments-edit.html @@ -14,22 +14,21 @@
    - - - + + + + {{::attachment.fileName}} ({{::size(attachment.fileSize)}}) - - + {{::I18n.t('js.label_remove_file')}}> + - + +
    diff --git a/frontend/app/templates/work_packages/watchers/watcher.html b/frontend/app/templates/work_packages/watchers/watcher.html index 13a19bd6ba..423a028b4a 100644 --- a/frontend/app/templates/work_packages/watchers/watcher.html +++ b/frontend/app/templates/work_packages/watchers/watcher.html @@ -1,21 +1,22 @@ - - - - - {{watcher.name}} - {{watcher.name}} - - - - - - - - + + + + + + + {{watcher.name}} + {{watcher.name}} + + + + + + + + + + From 110dd3aff6cb486d575fd0681b073b6e4d448c01 Mon Sep 17 00:00:00 2001 From: Jens Ulferts Date: Thu, 27 Aug 2015 13:07:15 +0200 Subject: [PATCH 074/112] remove no longer required alias --- frontend/webpack.config.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/frontend/webpack.config.js b/frontend/webpack.config.js index 8d7f44ed15..f6369c8dad 100644 --- a/frontend/webpack.config.js +++ b/frontend/webpack.config.js @@ -124,8 +124,7 @@ module.exports = { 'hyperagent': 'hyperagent/dist/hyperagent', 'openproject-ui_components': 'openproject-ui_components/app/assets/javascripts/angular/ui-components-app', - 'ngFileUpload': 'ng-file-upload/ng-file-upload', - 'angucomplete-alt': 'angucomplete-alt/angucomplete-alt' + 'ngFileUpload': 'ng-file-upload/ng-file-upload' }, pluginAliases) }, From 03548249aa812fabd26f20d74d9f2f4feea90e61 Mon Sep 17 00:00:00 2001 From: Jens Ulferts Date: Thu, 27 Aug 2015 16:28:37 +0200 Subject: [PATCH 075/112] style watchers add same as watchers --- app/assets/stylesheets/content/_in_place_editing.sass | 8 ++------ frontend/app/templates/work_packages/tabs/watchers.html | 2 +- frontend/app/templates/work_packages/watchers/lookup.html | 2 +- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/app/assets/stylesheets/content/_in_place_editing.sass b/app/assets/stylesheets/content/_in_place_editing.sass index ee9f670cf8..7d981bd954 100644 --- a/app/assets/stylesheets/content/_in_place_editing.sass +++ b/app/assets/stylesheets/content/_in_place_editing.sass @@ -192,7 +192,8 @@ $inplace-edit--selected-date-border-color: $primary-color-dark visibility: hidden font-size: rem-calc(14px) - .icon-edit::before + .icon-edit::before, + .icon-delete::before // HACK: overriding default padding here padding-right: 0 @@ -293,8 +294,3 @@ a.inplace-editing--trigger-link, i vertical-align: text-top - - .inplace-edit--icon-wrapper - .icon-button - margin-left: auto - diff --git a/frontend/app/templates/work_packages/tabs/watchers.html b/frontend/app/templates/work_packages/tabs/watchers.html index bade810189..3d1607c553 100644 --- a/frontend/app/templates/work_packages/tabs/watchers.html +++ b/frontend/app/templates/work_packages/tabs/watchers.html @@ -11,6 +11,6 @@
    - +
    diff --git a/frontend/app/templates/work_packages/watchers/lookup.html b/frontend/app/templates/work_packages/watchers/lookup.html index da4d1201b6..63a1fa3a00 100644 --- a/frontend/app/templates/work_packages/watchers/lookup.html +++ b/frontend/app/templates/work_packages/watchers/lookup.html @@ -1,4 +1,4 @@ -
    +
    Date: Thu, 27 Aug 2015 17:34:55 +0200 Subject: [PATCH 076/112] ask for confirmation before destroying an attachment --- config/locales/js-en.yml | 1 + .../work_packages/attachments-edit.html | 2 +- .../ui_components/confirm-popup-directive.js | 43 +++++++++++++++++++ frontend/app/ui_components/index.js | 3 +- 4 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 frontend/app/ui_components/confirm-popup-directive.js diff --git a/config/locales/js-en.yml b/config/locales/js-en.yml index 4aa4b2b653..e9ac407365 100644 --- a/config/locales/js-en.yml +++ b/config/locales/js-en.yml @@ -247,6 +247,7 @@ en: zero: "You cannot select any items" text_work_packages_destroy_confirmation: "Are you sure you want to delete the selected work package(s)?" text_query_destroy_confirmation: "Are you sure you want to delete the selected query?" + text_attachment_destroy_confirmation: "Are you sure you want to delete the attachment?" timelines: cancel: Cancel change: "Change in planning" diff --git a/frontend/app/templates/work_packages/attachments-edit.html b/frontend/app/templates/work_packages/attachments-edit.html index 3eb524443c..e8253e85d2 100644 --- a/frontend/app/templates/work_packages/attachments-edit.html +++ b/frontend/app/templates/work_packages/attachments-edit.html @@ -22,7 +22,7 @@ {{::attachment.fileName}} ({{::size(attachment.fileSize)}}) - + {{::I18n.t('js.label_remove_file')}}> diff --git a/frontend/app/ui_components/confirm-popup-directive.js b/frontend/app/ui_components/confirm-popup-directive.js new file mode 100644 index 0000000000..7fc3d42b74 --- /dev/null +++ b/frontend/app/ui_components/confirm-popup-directive.js @@ -0,0 +1,43 @@ +//-- copyright +// OpenProject is a project management system. +// Copyright (C) 2012-2015 the OpenProject Foundation (OPF) +// +// 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 doc/COPYRIGHT.rdoc for more details. +//++ + +module.exports = function($window) { + return { + priority: -1, + restrict: 'A', + link: function(scope, element, attrs){ + element.bind('click', function(e){ + var message = attrs.confirmPopup; + if(message && !$window.confirm(message)){ + e.stopImmediatePropagation(); + e.preventDefault(); + } + }); + } + }; +}; diff --git a/frontend/app/ui_components/index.js b/frontend/app/ui_components/index.js index a9ec0acfbf..7b6997cfc0 100644 --- a/frontend/app/ui_components/index.js +++ b/frontend/app/ui_components/index.js @@ -105,4 +105,5 @@ angular.module('openproject.uiComponents') .directive('attachmentIcon', [require('./attachment-icon-directive')]) .filter('ancestorsExpanded', require('./filters/ancestors-expanded-filter')) .filter('latestItems', require('./filters/latest-items-filter')) - .directive('highlightCol', [require('./highlight-col-directive')]); + .directive('highlightCol', [require('./highlight-col-directive')]) + .directive('confirmPopup', ['$window', require('./confirm-popup-directive')]); From a72e4198146bb5d72fa91e4bc410c2eb4236adec Mon Sep 17 00:00:00 2001 From: Jens Ulferts Date: Thu, 27 Aug 2015 17:41:51 +0200 Subject: [PATCH 077/112] remove explicit dimensions to be able to take arbitrary content --- app/assets/stylesheets/content/_in_place_editing.sass | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/assets/stylesheets/content/_in_place_editing.sass b/app/assets/stylesheets/content/_in_place_editing.sass index 7d981bd954..d496c9c646 100644 --- a/app/assets/stylesheets/content/_in_place_editing.sass +++ b/app/assets/stylesheets/content/_in_place_editing.sass @@ -145,8 +145,6 @@ $inplace-edit--selected-date-border-color: $primary-color-dark .inplace-edit--controls display: inline-block - width: 115px - height: 35px background: $inplace-edit--dark-background border: 1px solid $inplace-edit--color--very-dark box-shadow: 1px 1px 2px $inplace-edit--border-color From ad3dd7f27d915ad6c6e3a0f55ef0333d32151f84 Mon Sep 17 00:00:00 2001 From: Jens Ulferts Date: Fri, 28 Aug 2015 11:13:17 +0200 Subject: [PATCH 078/112] allow keyboard access for attachment deletion --- app/assets/stylesheets/content/_in_place_editing.sass | 1 + .../app/templates/work_packages/attachments-edit.html | 8 ++++---- .../directives/work-package-attachments-directive.js | 10 ++++++++++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/app/assets/stylesheets/content/_in_place_editing.sass b/app/assets/stylesheets/content/_in_place_editing.sass index d496c9c646..8fd6b8247e 100644 --- a/app/assets/stylesheets/content/_in_place_editing.sass +++ b/app/assets/stylesheets/content/_in_place_editing.sass @@ -215,6 +215,7 @@ a.inplace-editing--trigger-link, &:hover, &:focus, + &.-focus, text-decoration: none color: $body-font-color diff --git a/frontend/app/templates/work_packages/attachments-edit.html b/frontend/app/templates/work_packages/attachments-edit.html index e8253e85d2..953aab9fc5 100644 --- a/frontend/app/templates/work_packages/attachments-edit.html +++ b/frontend/app/templates/work_packages/attachments-edit.html @@ -15,17 +15,17 @@
    - + - {{::attachment.fileName}} + {{::attachment.fileName}} ({{::size(attachment.fileSize)}}) - + {{::I18n.t('js.label_remove_file')}}> - + diff --git a/frontend/app/work_packages/directives/work-package-attachments-directive.js b/frontend/app/work_packages/directives/work-package-attachments-directive.js index 2c8d671442..ed6bec413a 100644 --- a/frontend/app/work_packages/directives/work-package-attachments-directive.js +++ b/frontend/app/work_packages/directives/work-package-attachments-directive.js @@ -88,6 +88,16 @@ module.exports = function( return _.findIndex(currentlyRemoving, attachment) > -1; }; + var currentlyFocusing = null; + + scope.focus = function(attachment) { + currentlyFocusing = attachment; + }; + + scope.focussing = function(attachment) { + return currentlyFocusing === attachment; + }; + scope.$on('uploadPendingAttachments', upload); scope.$watch('rejectedFiles', function(rejectedFiles) { if (rejectedFiles.length === 0) { From ef6058e9e47f53bd49a8024a62a832c256881085 Mon Sep 17 00:00:00 2001 From: Jens Ulferts Date: Fri, 28 Aug 2015 13:42:08 +0200 Subject: [PATCH 079/112] style delete icon for attachments The more general styling is no longer necessary as the dom changed --- app/assets/stylesheets/content/_in_place_editing.sass | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/assets/stylesheets/content/_in_place_editing.sass b/app/assets/stylesheets/content/_in_place_editing.sass index 8fd6b8247e..6e129a6d76 100644 --- a/app/assets/stylesheets/content/_in_place_editing.sass +++ b/app/assets/stylesheets/content/_in_place_editing.sass @@ -195,10 +195,10 @@ $inplace-edit--selected-date-border-color: $primary-color-dark // HACK: overriding default padding here padding-right: 0 - a - color: $body-font-color +a.inplace-edit--icon-wrapper + color: $body-font-color - a:hover + &:hover color: $body-font-color text-decoration: none From 71a8ff794a407a4a5a8b70cad98a26d29a40fabd Mon Sep 17 00:00:00 2001 From: Jens Ulferts Date: Fri, 28 Aug 2015 15:32:53 +0200 Subject: [PATCH 080/112] style and interpolate correctly --- app/assets/stylesheets/layout/_work_package.sass | 5 ++++- config/locales/js-en.yml | 2 +- frontend/app/templates/work_packages/attachments-edit.html | 6 +++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/app/assets/stylesheets/layout/_work_package.sass b/app/assets/stylesheets/layout/_work_package.sass index f9bf49ad73..5d9d136247 100644 --- a/app/assets/stylesheets/layout/_work_package.sass +++ b/app/assets/stylesheets/layout/_work_package.sass @@ -137,6 +137,9 @@ > h4 margin-top: 5px +.work-package--attachments--filename + padding: 0 0.5rem + .work-package--attachments--drop-box border: 2px dashed $light-gray background-color: lighten($gray, 5) @@ -191,6 +194,6 @@ //an workaround for ie10 @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) //IE10+ specific styles go here - .work-package--attachments--files ul li .filename + .work-package--attachments--filename width: rem-calc(354) display: block diff --git a/config/locales/js-en.yml b/config/locales/js-en.yml index e9ac407365..140b0431ba 100644 --- a/config/locales/js-en.yml +++ b/config/locales/js-en.yml @@ -158,7 +158,7 @@ en: label_attachments: Files label_drop_files: Drop files here label_drop_files_hint: or click to add files - label_remove_file: Delete + label_remove_file: "Delete %{fileName}" label_remove_all_files: Delete all files label_add_description: "Add a description for %{file}" label_upload_notification: "Uploading files for Work package #%{id}: %{subject}" diff --git a/frontend/app/templates/work_packages/attachments-edit.html b/frontend/app/templates/work_packages/attachments-edit.html index 953aab9fc5..5c38585d10 100644 --- a/frontend/app/templates/work_packages/attachments-edit.html +++ b/frontend/app/templates/work_packages/attachments-edit.html @@ -19,11 +19,11 @@ - {{::attachment.fileName}} - ({{::size(attachment.fileSize)}}) + {{::attachment.fileName}} + ({{::size(attachment.fileSize)}}) - {{::I18n.t('js.label_remove_file')}}> + From f2ac244ebc6b856d8ac5b78f769354017d4d80a8 Mon Sep 17 00:00:00 2001 From: Jens Ulferts Date: Fri, 28 Aug 2015 15:37:57 +0200 Subject: [PATCH 081/112] formatting --- .../work_packages/attachments-edit.html | 39 +++++++++++++++---- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/frontend/app/templates/work_packages/attachments-edit.html b/frontend/app/templates/work_packages/attachments-edit.html index 5c38585d10..cca4b49017 100644 --- a/frontend/app/templates/work_packages/attachments-edit.html +++ b/frontend/app/templates/work_packages/attachments-edit.html @@ -6,24 +6,47 @@
    -
    +

    {{ ::I18n.t('js.label_drop_files') }}

    {{ ::I18n.t('js.label_drop_files_hint') }}

    -
    +
    - + - + - {{::attachment.fileName}} + + {{::attachment.fileName}} + ({{::size(attachment.fileSize)}}) - - + + + From adb27e589eae70e64cccb82a8ced81bb24e63532 Mon Sep 17 00:00:00 2001 From: Jens Ulferts Date: Fri, 28 Aug 2015 17:03:32 +0200 Subject: [PATCH 082/112] open ui-select upon watcher adding clicked --- .../templates/work_packages/watchers/lookup.html | 2 +- frontend/app/ui_components/focus-helper.js | 6 ++++++ frontend/app/work_packages/directives/index.js | 2 ++ .../editable/inplace-editor-dropdown-directive.js | 7 +++---- .../work-package-watchers-lookup-directive.js | 15 +++++++++++++-- 5 files changed, 25 insertions(+), 7 deletions(-) diff --git a/frontend/app/templates/work_packages/watchers/lookup.html b/frontend/app/templates/work_packages/watchers/lookup.html index 63a1fa3a00..e4862ee224 100644 --- a/frontend/app/templates/work_packages/watchers/lookup.html +++ b/frontend/app/templates/work_packages/watchers/lookup.html @@ -5,7 +5,7 @@ class="inplace-editing--trigger-container" span-class="inplace-editing--container" link-class="inplace-editing--trigger-link" - execute="changeEditMode()"> + execute="intoEditMode()"> {{ ::I18n.t('js.watchers.label_click_to_add') }} diff --git a/frontend/app/ui_components/focus-helper.js b/frontend/app/ui_components/focus-helper.js index 71953bc73d..7c9d2e38d3 100644 --- a/frontend/app/ui_components/focus-helper.js +++ b/frontend/app/ui_components/focus-helper.js @@ -67,6 +67,12 @@ module.exports = function($timeout, FOCUSABLE_SELECTOR) { }); }, + focusUiSelect: function(element) { + $timeout(function() { + element.find('.ui-select-match').trigger('click'); + }); + }, + // TODO: remove when select2 is not used focusSelect2Element: function(element) { var focusSelect2ElementRecursiv = function(retries) { diff --git a/frontend/app/work_packages/directives/index.js b/frontend/app/work_packages/directives/index.js index fb57b5d560..308b03ad40 100644 --- a/frontend/app/work_packages/directives/index.js +++ b/frontend/app/work_packages/directives/index.js @@ -101,6 +101,7 @@ angular.module('openproject.workPackages.directives') 'I18n', 'ConfigurationService', 'ConversionService', + 'FocusHelper', require('./work-package-attachments-directive') ]) .directive('workPackageWatcher', [ @@ -109,6 +110,7 @@ angular.module('openproject.workPackages.directives') ]) .directive('workPackageWatchersLookup', [ 'I18n', + 'FocusHelper', require('./work-package-watchers-lookup-directive.js') ]); diff --git a/frontend/app/work_packages/directives/inplace_editor/custom/editable/inplace-editor-dropdown-directive.js b/frontend/app/work_packages/directives/inplace_editor/custom/editable/inplace-editor-dropdown-directive.js index 7d74063868..ff5a963c4f 100644 --- a/frontend/app/work_packages/directives/inplace_editor/custom/editable/inplace-editor-dropdown-directive.js +++ b/frontend/app/work_packages/directives/inplace_editor/custom/editable/inplace-editor-dropdown-directive.js @@ -32,7 +32,8 @@ module.exports = function( EditableFieldsState, I18n, $timeout, - $q) { + $q, + FocusHelper) { return { restrict: 'E', transclude: true, @@ -85,9 +86,7 @@ module.exports = function( fieldController.state.isBusy = false; if (!EditableFieldsState.forcedEditState) { - $timeout(function() { - element.find('.ui-select-match').trigger('click'); - }); + FocusHelper.focusUiSelect(element); } }); } diff --git a/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js b/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js index 6de9f83b2e..3fef839eaf 100644 --- a/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js +++ b/frontend/app/work_packages/directives/work-package-watchers-lookup-directive.js @@ -26,7 +26,10 @@ // See doc/COPYRIGHT.rdoc for more details. //++ -module.exports = function(I18n) { +module.exports = function( + I18n, + FocusHelper + ) { 'use strict'; var workPackageWatchersLookupController = function(scope) { @@ -43,6 +46,11 @@ module.exports = function(I18n) { scope.editMode = !scope.editMode; }; + scope.intoEditMode = function() { + scope.changeEditMode(); + FocusHelper.focusUiSelect(angular.element('.work-package--watchers-lookup')); + }; + scope.addWatcher = function() { if (!scope.selection.watcher) { return; @@ -61,10 +69,13 @@ module.exports = function(I18n) { // to clear the input of the directive scope.selection.watcher = null; - // this will set the editMode back, once no more watchers can be added if (scope.watchers.length === 0) { + // this will set the editMode back, once no more watchers can be added scope.editMode = false; } + else { + FocusHelper.focusUiSelect(angular.element('.work-package--watchers-lookup')); + } }); }; From 27f05acbc78cad178f484c0ce0ecd533ad22cf03 Mon Sep 17 00:00:00 2001 From: Jens Ulferts Date: Fri, 28 Aug 2015 17:51:49 +0200 Subject: [PATCH 083/112] allow keyboard access to watcher delete --- .../work_packages/watchers/watcher.html | 16 ++++++++++++---- .../directives/work-package-watcher-directive.js | 13 +++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/frontend/app/templates/work_packages/watchers/watcher.html b/frontend/app/templates/work_packages/watchers/watcher.html index 423a028b4a..b1564fc259 100644 --- a/frontend/app/templates/work_packages/watchers/watcher.html +++ b/frontend/app/templates/work_packages/watchers/watcher.html @@ -1,19 +1,27 @@ - + - + {{watcher.name}} {{watcher.name}} - + - + diff --git a/frontend/app/work_packages/directives/work-package-watcher-directive.js b/frontend/app/work_packages/directives/work-package-watcher-directive.js index 875e057bd7..1d7a8f4999 100644 --- a/frontend/app/work_packages/directives/work-package-watcher-directive.js +++ b/frontend/app/work_packages/directives/work-package-watcher-directive.js @@ -36,6 +36,19 @@ module.exports = function(I18n) { }; scope.I18n = I18n; + + var focused = false; + scope.focus = function() { + focused = true; + }; + + scope.blur = function() { + focused = false; + }; + + scope.focussing = function() { + return focused; + }; }; return { From db3681661daee4e2051fe606c47acaa3298a230a Mon Sep 17 00:00:00 2001 From: Jens Ulferts Date: Fri, 28 Aug 2015 18:13:01 +0200 Subject: [PATCH 084/112] fixes attachment download path in api Kudos to @oliverguenter for the fix --- doc/apiv3-documentation.apib | 6 +++--- lib/api/v3/utilities/path_helper.rb | 2 +- spec/lib/api/v3/utilities/path_helper_spec.rb | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/apiv3-documentation.apib b/doc/apiv3-documentation.apib index d62c6a309f..e6cceafe36 100644 --- a/doc/apiv3-documentation.apib +++ b/doc/apiv3-documentation.apib @@ -751,7 +751,7 @@ container (e.g. a work package or a board message). "href": "/api/v3/users/1" }, "downloadLocation": { - "href": "/attachments/1" + "href": "/attachments/1/download" } }, "id": 1, @@ -875,7 +875,7 @@ Permanently deletes the specified attachment. "href": "/api/v3/users/1" }, "downloadLocation": { - "href": "/attachments/1" + "href": "/attachments/1/download" } }, "id": 1, @@ -906,7 +906,7 @@ Permanently deletes the specified attachment. "href": "/api/v3/users/1" }, "downloadLocation": { - "href": "/attachments/2" + "href": "/attachments/2/download" } }, "id": 2, diff --git a/lib/api/v3/utilities/path_helper.rb b/lib/api/v3/utilities/path_helper.rb index f81422f172..d6fea71d4f 100644 --- a/lib/api/v3/utilities/path_helper.rb +++ b/lib/api/v3/utilities/path_helper.rb @@ -49,7 +49,7 @@ module API end def self.attachment_download(id) - attachment_path(id) + download_attachment_path(id) end def self.attachments_by_work_package(id) diff --git a/spec/lib/api/v3/utilities/path_helper_spec.rb b/spec/lib/api/v3/utilities/path_helper_spec.rb index 46908a0aa8..6e4456c00d 100644 --- a/spec/lib/api/v3/utilities/path_helper_spec.rb +++ b/spec/lib/api/v3/utilities/path_helper_spec.rb @@ -69,7 +69,7 @@ describe ::API::V3::Utilities::PathHelper do describe '#attachment_download' do subject { helper.attachment_download 1 } - it_behaves_like 'path', '/attachments/1' + it_behaves_like 'path', '/attachments/1/download' end describe '#attachments_by_work_package' do From cbf17c4a9d046ea229c769ad0406291d73422bd3 Mon Sep 17 00:00:00 2001 From: Jens Ulferts Date: Fri, 28 Aug 2015 18:30:03 +0200 Subject: [PATCH 085/112] title and accessibility for watcher deletion --- config/locales/js-en.yml | 1 + frontend/app/templates/work_packages/watchers/watcher.html | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/config/locales/js-en.yml b/config/locales/js-en.yml index 140b0431ba..30004f95f1 100644 --- a/config/locales/js-en.yml +++ b/config/locales/js-en.yml @@ -159,6 +159,7 @@ en: label_drop_files: Drop files here label_drop_files_hint: or click to add files label_remove_file: "Delete %{fileName}" + label_remove_watcher: "Delete watcher %{name}" label_remove_all_files: Delete all files label_add_description: "Add a description for %{file}" label_upload_notification: "Uploading files for Work package #%{id}: %{subject}" diff --git a/frontend/app/templates/work_packages/watchers/watcher.html b/frontend/app/templates/work_packages/watchers/watcher.html index b1564fc259..bf0468adba 100644 --- a/frontend/app/templates/work_packages/watchers/watcher.html +++ b/frontend/app/templates/work_packages/watchers/watcher.html @@ -19,7 +19,9 @@ data-ng-click="remove()" data-ng-focus="focus()" data-ng-blur="blur()"> - + From 49fff7f5574a93ce3c8c7d957de4f787616199f6 Mon Sep 17 00:00:00 2001 From: Continuous Integration Date: Sat, 29 Aug 2015 01:25:54 +0200 Subject: [PATCH 086/112] Update reference to OpenProject-Translations --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index a74eb25d33..d9bb41c236 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -30,7 +30,7 @@ GIT GIT remote: https://github.com/opf/openproject-translations.git - revision: 648853be9682b8675ae4216ecd9372ea5a153e28 + revision: 6fa394335f22606a95d3c030e2b3d6c3db8ed8e9 branch: dev specs: openproject-translations (5.0.0.pre.alpha) From 3faf92df5ff146a060b7ca93a9f882a832dff4d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Sat, 29 Aug 2015 22:47:21 +0200 Subject: [PATCH 087/112] Bump selenium-webdriver to 2.47.1 This fixes crashing Firefox upon starting protractor with `directConnect: true`. Reference: https://github.com/angular/protractor/issues/2134#issuecomment-134412920 https://github.com/SeleniumHQ/selenium/commit/144f5ee7eb7d705bad90346bb2b494ff8212fb4c --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 5a4ab7d9e2..8ac4111c66 100644 --- a/Gemfile +++ b/Gemfile @@ -157,7 +157,7 @@ group :test do gem 'capybara-screenshot', '~> 1.0.4' gem 'capybara-select2', github: 'goodwill/capybara-select2' gem 'capybara-ng', '~> 0.2.1' - gem 'selenium-webdriver', '~> 2.46.2' + gem 'selenium-webdriver', '~> 2.47.1' gem 'timecop', '~> 0.7.1' gem 'rb-readline', '~> 0.5.1' # ruby on CI needs this diff --git a/Gemfile.lock b/Gemfile.lock index d9bb41c236..4f60d1a1a2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -402,7 +402,7 @@ GEM sprockets (>= 2.8, < 4.0) sprockets-rails (>= 2.0, < 4.0) tilt (~> 1.1) - selenium-webdriver (2.46.2) + selenium-webdriver (2.47.1) childprocess (~> 0.5) multi_json (~> 1.0) rubyzip (~> 1.0) @@ -548,7 +548,7 @@ DEPENDENCIES rubytree (~> 0.8.3) sass (~> 3.4.12) sass-rails (~> 5.0.3) - selenium-webdriver (~> 2.46.2) + selenium-webdriver (~> 2.47.1) shoulda-context (~> 1.2) shoulda-matchers (~> 2.8) simplecov (= 0.8.0.pre) From ea8bbeb8ac8f9fde80583601fc2a48d18a9b770f Mon Sep 17 00:00:00 2001 From: Continuous Integration Date: Sun, 30 Aug 2015 01:25:17 +0200 Subject: [PATCH 088/112] Update reference to OpenProject-Translations --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index d9bb41c236..c82e2d5f6f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -30,7 +30,7 @@ GIT GIT remote: https://github.com/opf/openproject-translations.git - revision: 6fa394335f22606a95d3c030e2b3d6c3db8ed8e9 + revision: 53110b6ea534ac8a26474edaf810838b470250b4 branch: dev specs: openproject-translations (5.0.0.pre.alpha) From 867958c1776244b0dfbf9059884d2f6a8a27cd87 Mon Sep 17 00:00:00 2001 From: Continuous Integration Date: Mon, 31 Aug 2015 01:25:02 +0200 Subject: [PATCH 089/112] Update reference to OpenProject-Translations --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index c82e2d5f6f..c4a4dbea11 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -30,7 +30,7 @@ GIT GIT remote: https://github.com/opf/openproject-translations.git - revision: 53110b6ea534ac8a26474edaf810838b470250b4 + revision: b1bba83a3a0e2862b5c6e2ac01c2a87e367bd13f branch: dev specs: openproject-translations (5.0.0.pre.alpha) From b55ef0a12e3a16e02dfc1a74c682fa861e99238d Mon Sep 17 00:00:00 2001 From: Henriette Dinger Date: Wed, 26 Aug 2015 16:33:00 +0200 Subject: [PATCH 090/112] used titles to show the text --- app/views/admin/projects.html.erb | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/views/admin/projects.html.erb b/app/views/admin/projects.html.erb index efe7913e7b..8a6a4c4b29 100644 --- a/app/views/admin/projects.html.erb +++ b/app/views/admin/projects.html.erb @@ -126,20 +126,24 @@ See doc/COPYRIGHT.rdoc for more details.
    From 1cce3020bdd27d3e23563d71082d45469825ad04 Mon Sep 17 00:00:00 2001 From: Jens Ulferts Date: Mon, 31 Aug 2015 08:57:33 +0200 Subject: [PATCH 091/112] remove empty rules --- app/assets/stylesheets/content/_in_place_editing.sass | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/assets/stylesheets/content/_in_place_editing.sass b/app/assets/stylesheets/content/_in_place_editing.sass index 6e129a6d76..d6c22230f3 100644 --- a/app/assets/stylesheets/content/_in_place_editing.sass +++ b/app/assets/stylesheets/content/_in_place_editing.sass @@ -52,7 +52,6 @@ $inplace-edit--selected-date-border-color: $primary-color-dark opacity: 0.5 * cursor: wait!important - inplace-edit--write .inplace-edit--date margin: 0 @@ -251,7 +250,6 @@ a.inplace-editing--trigger-link, a color: $body-font-color text-decoration: none - &:hover .icon-context::before padding: 0 From a14fb12fb8849f0b8ea6b35eb222bc628d89e7c9 Mon Sep 17 00:00:00 2001 From: Jens Ulferts Date: Mon, 31 Aug 2015 08:58:21 +0200 Subject: [PATCH 092/112] make focus visible & remove duplicate css rule The .inplace-edit--read rule was defined multiple times --- app/assets/stylesheets/content/_in_place_editing.sass | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/assets/stylesheets/content/_in_place_editing.sass b/app/assets/stylesheets/content/_in_place_editing.sass index d6c22230f3..12fad51d55 100644 --- a/app/assets/stylesheets/content/_in_place_editing.sass +++ b/app/assets/stylesheets/content/_in_place_editing.sass @@ -159,7 +159,8 @@ $inplace-edit--selected-date-border-color: $primary-color-dark right: 0 .inplace-edit--read - @extend .form--field-container + @include grid-block + overflow: visible .inplace-edit--read-value @include grid-block @@ -203,6 +204,7 @@ a.inplace-edit--icon-wrapper .inplace-editing--trigger-container @include grid-block + overflow: visible // need to specify the a explicitly as otherwise // the default class will win @@ -211,6 +213,7 @@ a.inplace-editing--trigger-link, @include grid-block color: $body-font-color font-weight: inherit + overflow: visible &:hover, &:focus, @@ -230,9 +233,7 @@ a.inplace-editing--trigger-link, border-style: solid border-radius: 2px border-width: 1px - -.inplace-edit--read - @include grid-block + overflow: visible .inplace-edit--control background: $inplace-edit--color--very-dark From 5d473e9a9cf8b4315eb9ccb658490ff553cffee0 Mon Sep 17 00:00:00 2001 From: Jan Sandbrink Date: Mon, 31 Aug 2015 10:34:52 +0200 Subject: [PATCH 093/112] fix HTTP response of DELETE attachment this was wrongfully HTTP 202 (Accepted), which would only be valid if we did the deletion in a delayed/deferred way. For now using HTTP 204 (No Content), since we have no response body. --- doc/apiv3-documentation.apib | 4 ++-- lib/api/v3/attachments/attachments_api.rb | 2 +- spec/requests/api/v3/attachments/attachment_resource_spec.rb | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/apiv3-documentation.apib b/doc/apiv3-documentation.apib index d62c6a309f..208f4bfa64 100644 --- a/doc/apiv3-documentation.apib +++ b/doc/apiv3-documentation.apib @@ -804,12 +804,12 @@ Permanently deletes the specified attachment. + Parameters + id (required, integer, `1`) ... Attachment id -+ Response 202 ++ Response 204 Returned if the attachment was deleted successfully. Note that the response body is empty as of now. In future versions of the API a body - *might* be returned. + *might* be returned along with an appropriate HTTP status. + Body diff --git a/lib/api/v3/attachments/attachments_api.rb b/lib/api/v3/attachments/attachments_api.rb index d2325b3420..c3bad83bf8 100644 --- a/lib/api/v3/attachments/attachments_api.rb +++ b/lib/api/v3/attachments/attachments_api.rb @@ -53,7 +53,7 @@ module API authorize(:edit_work_packages, context: @attachment.container.project) @attachment.container.attachments.delete(@attachment) - status 202 + status 204 end end end diff --git a/spec/requests/api/v3/attachments/attachment_resource_spec.rb b/spec/requests/api/v3/attachments/attachment_resource_spec.rb index 78fcbfafd3..3d938804ba 100644 --- a/spec/requests/api/v3/attachments/attachment_resource_spec.rb +++ b/spec/requests/api/v3/attachments/attachment_resource_spec.rb @@ -92,8 +92,8 @@ describe 'API v3 Attachment resource', type: :request do context 'with required permissions' do let(:permissions) { [:view_work_packages, :edit_work_packages] } - it 'responds with 202' do - expect(subject.status).to eq 202 + it 'responds with HTTP No Content' do + expect(subject.status).to eq 204 end it 'deletes the attachment' do From d3bc58b95535721e2136193c593e2c079b4e4a57 Mon Sep 17 00:00:00 2001 From: Jens Ulferts Date: Mon, 31 Aug 2015 11:07:39 +0200 Subject: [PATCH 094/112] force id value in experimental API The id information needs to be returned in the api response so that links still work. The frontend will filter it out anyway --- app/controllers/api/experimental/work_packages_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/api/experimental/work_packages_controller.rb b/app/controllers/api/experimental/work_packages_controller.rb index 89d307d6de..38d4991537 100644 --- a/app/controllers/api/experimental/work_packages_controller.rb +++ b/app/controllers/api/experimental/work_packages_controller.rb @@ -48,7 +48,7 @@ module Api def index @work_packages = current_work_packages - columns = @query.involved_columns + columns = @query.involved_columns + [:id] @column_names, @custom_field_column_ids = separate_columns_by_custom_fields(columns) From 4642edbfcc40727dea9c5a2ec55ae1959bd86ff4 Mon Sep 17 00:00:00 2001 From: Henriette Dinger Date: Mon, 31 Aug 2015 15:26:07 +0200 Subject: [PATCH 095/112] This commit redesignes the simpleFilter component accordingly to the visuals --- .../stylesheets/content/_simple_filters.lsg | 16 ++++----- .../stylesheets/content/_simple_filters.sass | 33 ++++++++++++++++--- app/views/admin/projects.html.erb | 17 +++++----- app/views/search/index.html.erb | 25 +++++++------- app/views/timelog/_date_range.html.erb | 6 ++-- app/views/users/index.html.erb | 21 ++++++------ .../work_packages/calendars/index.html.erb | 31 ++++++++--------- app/views/workflows/edit.html.erb | 22 ++++++++----- 8 files changed, 104 insertions(+), 67 deletions(-) diff --git a/app/assets/stylesheets/content/_simple_filters.lsg b/app/assets/stylesheets/content/_simple_filters.lsg index 301974b3ec..eace167555 100644 --- a/app/assets/stylesheets/content/_simple_filters.lsg +++ b/app/assets/stylesheets/content/_simple_filters.lsg @@ -26,11 +26,11 @@ By default, simple filters have a two columned layout. +
  • + Apply + Clear +
  • -
    - Apply - Clear -
    ``` @@ -68,10 +68,10 @@ If desired, the simple filter can have three columns. +
  • + Apply + Clear +
  • -
    - Apply - Clear -
    ``` diff --git a/app/assets/stylesheets/content/_simple_filters.sass b/app/assets/stylesheets/content/_simple_filters.sass index 0d797ea4de..a151a8ba09 100644 --- a/app/assets/stylesheets/content/_simple_filters.sass +++ b/app/assets/stylesheets/content/_simple_filters.sass @@ -42,6 +42,18 @@ $filters--border-color: $gray !default padding: 1rem margin: 0.6em 0 + .simple-filter--trailing-labels + list-style-type: none + display: flex + margin-left: 0 + + .simple-filters--filter + flex-basis: 40% + + &.-label-cloumns-3 + .simple-filters--filter + flex-basis: 25% + .simple-filters--filters @extend .advanced-filters--filters @include grid-block @@ -49,7 +61,7 @@ $filters--border-color: $gray !default justify-content: space-between @include breakpoint(large) - @include grid-layout(2) + @include grid-layout(3) // Cancel out foundations padding which breaks in IE. IE seems to calculate // the padding on top of the flex-basis size. That means when the flex-basis @@ -58,13 +70,27 @@ $filters--border-color: $gray !default // element will move to the next row. .simple-filters--filter, padding: 0 + display: flex @include breakpoint(large) - flex-basis: 49% + + .simple-filters--filter-name + flex-basis: 25% + margin-top: 5px + .simple-filters--filter-value + flex-basis: 70% + + .form--radio-button-container + margin-right: 20px + + .simple-filters--controls + flex-basis: 20% + align-self: flex-start + margin-top: 2px .simple-filters--filters.-columns-3 justify-content: space-between @include breakpoint(large) - @include grid-layout(3) + @include grid-layout(4) // Cancel out foundations padding which breaks in IE. IE seems to calculate // the padding on top of the flex-basis size. That means when the flex-basis @@ -74,4 +100,3 @@ $filters--border-color: $gray !default .simple-filters--filter, padding: 0 @include breakpoint(large) - flex-basis: 32% diff --git a/app/views/admin/projects.html.erb b/app/views/admin/projects.html.erb index 72679b9f2c..dfa06dda5d 100644 --- a/app/views/admin/projects.html.erb +++ b/app/views/admin/projects.html.erb @@ -41,18 +41,19 @@ See doc/COPYRIGHT.rdoc for more details. <%= l(:label_filter_plural) %>
    • - - <%= select_tag 'status', project_status_options_for_select(@status), :onchange => "this.form.submit(); return false;" %> + + <%= select_tag 'status', project_status_options_for_select(@status), :onchange => "this.form.submit(); return false;", :class => 'simple-filters--filter-value' %>
    • - - <%= text_field_tag 'name', params[:name] %> + + <%= text_field_tag 'name', params[:name], :class => 'simple-filters--filter-value' %> +
    • +
    • + <%= submit_tag l(:button_apply), :class => 'button -highlight -small', :name => nil %> + <%= link_to l(:button_clear), {:controller => '/admin', :action => 'projects'}, :class => 'button -small -with-icon icon-undo' %>
    -
    - <%= submit_tag l(:button_apply), :class => 'button -highlight -small', :name => nil %> - <%= link_to l(:button_clear), {:controller => '/admin', :action => 'projects'}, :class => 'button -small -with-icon icon-undo' %> -
    + <% end %>

    diff --git a/app/views/search/index.html.erb b/app/views/search/index.html.erb index 70e7daad6f..c1b2e2d7d0 100644 --- a/app/views/search/index.html.erb +++ b/app/views/search/index.html.erb @@ -46,33 +46,36 @@ See doc/COPYRIGHT.rdoc for more details. <%= project_select_tag %> +

  • + <%= styled_submit_tag l(:button_submit), :name => 'submit', class: 'button -highlight -small' %> +
  • + +
    • <%= styled_label_tag :all_words, l(:label_all_words) %> <%= styled_check_box_tag 'all_words', 1, @all_words %> - + <%= styled_label_tag :titles_only, l(:label_search_titles_only) %> - <%= styled_check_box_tag 'titles_only', 1, @titles_only %> + <%= styled_check_box_tag 'titles_only', 1, @titles_only %> -
    • - <% @object_types.each do |t| %> - - <%= styled_label_tag t, type_label(t) %> - - <%= styled_check_box_tag t, 1, @scope.include?(t) %> - + <% @object_types.each do |t| %> + + <%= styled_label_tag t, type_label(t) %> + + <%= styled_check_box_tag t, 1, @scope.include?(t) %> - <% end %> + + <% end %>
    - <%= styled_submit_tag l(:button_submit), :name => 'submit', class: 'button -highlight -small' %> <% end %> <% if @results %> diff --git a/app/views/timelog/_date_range.html.erb b/app/views/timelog/_date_range.html.erb index 15766d5a85..44c8fcb3e9 100644 --- a/app/views/timelog/_date_range.html.erb +++ b/app/views/timelog/_date_range.html.erb @@ -54,7 +54,9 @@ See doc/COPYRIGHT.rdoc for more details. <%= calendar_for('to') %> +
  • + <%= styled_button_tag l(:button_apply), class: 'button -highlight -small' %> + <%= link_to l(:button_clear), polymorphic_time_entries_path(@issue || @project), :class => 'button -small' %> +
  • - <%= styled_button_tag l(:button_apply), class: 'button -highlight -small' %> - <%= link_to l(:button_clear), polymorphic_time_entries_path(@issue || @project), :class => 'button -small' %> diff --git a/app/views/users/index.html.erb b/app/views/users/index.html.erb index eac80ce6ea..d2daa490a5 100644 --- a/app/views/users/index.html.erb +++ b/app/views/users/index.html.erb @@ -41,12 +41,12 @@ See doc/COPYRIGHT.rdoc for more details. <%= l(:label_filter_plural) %>
      ">
    • - - <%= select_tag 'status', users_status_options_for_select(@status), :onchange => "this.form.submit(); return false;" %> + + <%= select_tag 'status', users_status_options_for_select(@status), :onchange => "this.form.submit(); return false;", :class => 'simple-filters--filter-value' %>
    • <% if @groups.present? %>
    • - + <%= collection_select :group, :id, @groups, @@ -55,18 +55,19 @@ See doc/COPYRIGHT.rdoc for more details. { :include_blank => true, :selected => params[:group_id].to_i }, { :name => "group_id", - :onchange => "this.form.submit(); return false;" } %> + :onchange => "this.form.submit(); return false;", + :class => 'simple-filters--filter-value' } %>
    • <% end %>
    • - - <%= text_field_tag 'name', params[:name] %> + + <%= text_field_tag 'name', params[:name], :class => 'simple-filters--filter-value' %> +
    • +
    • + <%= submit_tag l(:button_apply), :class => 'button -highlight -small', :name => nil %> + <%= link_to l(:button_clear), users_path, :class => 'button -small -with-icon icon-undo' %>
    -
    - <%= submit_tag l(:button_apply), :class => 'button -highlight -small', :name => nil %> - <%= link_to l(:button_clear), users_path, :class => 'button -small -with-icon icon-undo' %> -
    <% end %>   diff --git a/app/views/work_packages/calendars/index.html.erb b/app/views/work_packages/calendars/index.html.erb index 923fc9e403..d3e239b29c 100644 --- a/app/views/work_packages/calendars/index.html.erb +++ b/app/views/work_packages/calendars/index.html.erb @@ -39,27 +39,28 @@ See doc/COPYRIGHT.rdoc for more details. <%= l('timeframe.show') %>
    • - <%= label_tag('month', l(:label_month)) %> + <%= label_tag('month', l(:label_month), :class => 'simple-filters--filter-name') %> <%= select_month(@month, { :prefix => "month", :discard_type => true }, class: 'simple-filters--filter-value') %>
    • - <%= label_tag('year', l(:label_year)) %> + <%= label_tag('year', l(:label_year), :class => 'simple-filters--filter-name') %> <%= select_year(@year, { :prefix => "year", :discard_type => true }, class: 'simple-filters--filter-value') %>
    • +
    • + <%= link_to_remote l(:button_apply), + { :url => { :set_filter => 1 }, + :method => :get, + :update => "content", + :with => "jQuery('#query_form').serialize()" + }, :class => 'button -highlight -small' %> + <%= link_to_remote l(:button_clear), + { :url => { :project_id => @project, :set_filter => 1 }, + :method => :get, + :update => "content", + }, :class => 'button -small -with-icon icon-undo' %> +
    -
    - <%= link_to_remote l(:button_apply), - { :url => { :set_filter => 1 }, - :method => :get, - :update => "content", - :with => "jQuery('#query_form').serialize()" - }, :class => 'button -highlight -small' %> - <%= link_to_remote l(:button_clear), - { :url => { :project_id => @project, :set_filter => 1 }, - :method => :get, - :update => "content", - }, :class => 'button -small -with-icon icon-undo' %> -
    + <% end %> <%= error_messages_for 'query' %> diff --git a/app/views/workflows/edit.html.erb b/app/views/workflows/edit.html.erb index bde7bbad19..a390c50444 100644 --- a/app/views/workflows/edit.html.erb +++ b/app/views/workflows/edit.html.erb @@ -37,14 +37,6 @@ See doc/COPYRIGHT.rdoc for more details.
    <%= styled_select_tag 'role_id', options_from_collection_for_select(@roles, "id", "name", @role && @role.id) %>
    -
    - <%= hidden_field_tag 'used_statuses_only', '0', id: 'used_statuses_only_hidden' %> - - <%= styled_label_tag :used_statuses_only, l(:label_display_used_statuses_only) %> -
    - <%= styled_check_box_tag :used_statuses_only, '1', @used_statuses_only %> -
    -
  • <%= styled_label_tag :type_id, Type.model_name.human, class: 'simple-filters--filter-name' %> @@ -52,8 +44,20 @@ See doc/COPYRIGHT.rdoc for more details. <%= styled_select_tag 'type_id', options_from_collection_for_select(@types, "id", "name", @type && @type.id) %>
  • +
  • + <%= submit_tag l(:button_edit), :name => nil, :accesskey => accesskey(:edit), class: 'button -highlight' %> +
  • + +
      +
      + <%= hidden_field_tag 'used_statuses_only', '0', id: 'used_statuses_only_hidden' %> + + <%= styled_label_tag :used_statuses_only, l(:label_display_used_statuses_only) %> +
      + <%= styled_check_box_tag :used_statuses_only, '1', @used_statuses_only %> +
      +
    - <%= submit_tag l(:button_edit), :name => nil, :accesskey => accesskey(:edit), class: 'button -highlight' %> <% end %> <%# TODO: remove the prototype stuff from the DOM -%> From 80a7fe8b182f4791f794dad1d12eadb66100d2e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Mon, 31 Aug 2015 16:21:26 +0200 Subject: [PATCH 096/112] Fix some smaller visual issues * Removed superfluous padding on control button * Corrected labels * Used flex to position button closer to input * Removed colons * Removed top border --- app/assets/stylesheets/content/_simple_filters.sass | 10 +++++----- app/views/admin/projects.html.erb | 7 +++---- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/app/assets/stylesheets/content/_simple_filters.sass b/app/assets/stylesheets/content/_simple_filters.sass index a151a8ba09..335d7222bc 100644 --- a/app/assets/stylesheets/content/_simple_filters.sass +++ b/app/assets/stylesheets/content/_simple_filters.sass @@ -32,14 +32,13 @@ $filters--border-color: $gray !default %filters--container background-color: $filters--background-color border: 1px solid $filters--border-color - border-top-width: 3px legend @extend .hidden-for-sighted .simple-filters--container @extend %filters--container - padding: 1rem + padding: 1rem 1rem 0 margin: 0.6em 0 .simple-filter--trailing-labels @@ -74,7 +73,7 @@ $filters--border-color: $gray !default @include breakpoint(large) .simple-filters--filter-name - flex-basis: 25% + flex-basis: 15% margin-top: 5px .simple-filters--filter-value flex-basis: 70% @@ -83,9 +82,10 @@ $filters--border-color: $gray !default margin-right: 20px .simple-filters--controls - flex-basis: 20% + padding: 0 align-self: flex-start - margin-top: 2px + @include breakpoint(large) + flex: 1 .simple-filters--filters.-columns-3 justify-content: space-between diff --git a/app/views/admin/projects.html.erb b/app/views/admin/projects.html.erb index dfa06dda5d..c876506731 100644 --- a/app/views/admin/projects.html.erb +++ b/app/views/admin/projects.html.erb @@ -41,16 +41,15 @@ See doc/COPYRIGHT.rdoc for more details. <%= l(:label_filter_plural) %>
    • - + <%= select_tag 'status', project_status_options_for_select(@status), :onchange => "this.form.submit(); return false;", :class => 'simple-filters--filter-value' %>
    • - + <%= text_field_tag 'name', params[:name], :class => 'simple-filters--filter-value' %>
    • - <%= submit_tag l(:button_apply), :class => 'button -highlight -small', :name => nil %> - <%= link_to l(:button_clear), {:controller => '/admin', :action => 'projects'}, :class => 'button -small -with-icon icon-undo' %> + <%= submit_tag l(:button_apply), :class => 'button -highlight', :name => nil %>
    From 22b7d2550ea6a9bb81e47cbccef86548f74a4e6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Mon, 31 Aug 2015 16:43:39 +0200 Subject: [PATCH 097/112] Fix broken localized tests --- features/custom_fields/edit_text.feature | 2 +- .../work_package_planning_spec.rb | 29 ++++++------------- 2 files changed, 10 insertions(+), 21 deletions(-) diff --git a/features/custom_fields/edit_text.feature b/features/custom_fields/edit_text.feature index 5eb2a9a21a..e5c4ea71c2 100644 --- a/features/custom_fields/edit_text.feature +++ b/features/custom_fields/edit_text.feature @@ -73,7 +73,7 @@ Feature: Editing text custom fields | en | My Custom Field | default | And I go to the custom fields page And I follow "My Custom Field" - And I select "Deutsch" from "custom_field_translations_attributes_0_locale" + And I select "Deutsch (community translated)" from "custom_field_translations_attributes_0_locale" And I press "Save" And I follow "My Custom Field" Then there should be the following localizations: diff --git a/spec/models/work_package/work_package_planning_spec.rb b/spec/models/work_package/work_package_planning_spec.rb index f18f4319d0..9a2661b5af 100644 --- a/spec/models/work_package/work_package_planning_spec.rb +++ b/spec/models/work_package/work_package_planning_spec.rb @@ -175,31 +175,20 @@ describe WorkPackage, type: :model do end describe 'parent' do - let (:de_message) { 'darf kein Meilenstein sein' } - let (:en_message) { 'cannot be a milestone' } - after(:each) do - # proper reset of the locale after the test - I18n.locale = 'en' - end + let (:message) { 'cannot be a milestone' } it 'is invalid if parent is_milestone' do - ['en', 'de'].each do |locale| - I18n.with_locale(locale) do - parent = WorkPackage.new.tap do |pe| - pe.send(:assign_attributes, attributes.merge(type: FactoryGirl.build(:type, is_milestone: true)), without_protection: true) - end - - attributes[:parent] = parent - planning_element = WorkPackage.new.tap { |pe| pe.send(:assign_attributes, attributes, without_protection: true) } - - expect(planning_element).not_to be_valid + parent = WorkPackage.new.tap do |pe| + pe.send(:assign_attributes, attributes.merge(type: FactoryGirl.build(:type, is_milestone: true)), without_protection: true) + end - expect(planning_element.errors[:parent_id]).to be_present - expect(planning_element.errors[:parent_id]).to eq([send("#{I18n.locale}_message")]) - end + attributes[:parent] = parent + planning_element = WorkPackage.new.tap { |pe| pe.send(:assign_attributes, attributes, without_protection: true) } - end + expect(planning_element).not_to be_valid + expect(planning_element.errors[:parent_id]).to be_present + expect(planning_element.errors[:parent_id]).to eq([message]) end end end From 14a55b82d1854ceb122fac85f693e11adb04ad16 Mon Sep 17 00:00:00 2001 From: Jan Sandbrink Date: Fri, 28 Aug 2015 10:31:01 +0200 Subject: [PATCH 098/112] Do not embed linked resources in WP collections --- lib/api/decorators/single.rb | 14 +++++++++++++- .../work_packages/work_package_representer.rb | 18 +++++++++++++----- lib/api/v3/work_packages/work_packages_api.rb | 3 ++- .../work_packages_by_project_api.rb | 4 +++- .../work_package_representer_spec.rb | 14 ++++++++++++-- 5 files changed, 43 insertions(+), 10 deletions(-) diff --git a/lib/api/decorators/single.rb b/lib/api/decorators/single.rb index 261b10be83..221160f027 100644 --- a/lib/api/decorators/single.rb +++ b/lib/api/decorators/single.rb @@ -98,7 +98,7 @@ module API getter: -> (*) { call_or_send_to_represented(getter) }, embedded: true, decorator: decorator, - if: show_if + if: -> (*) { embed_links && call_or_use(show_if) } end def current_user_allowed_to(permission, context:) @@ -111,6 +111,10 @@ module API context[:current_user] end + def embed_links + context[:embed_links] + end + private def call_or_send_to_represented(callable_or_name) @@ -121,6 +125,14 @@ module API end end + def call_or_use(callable_or_value) + if callable_or_value.respond_to? :call + instance_exec(&callable_or_value) + else + callable_or_value + end + end + def datetime_formatter ::API::V3::Utilities::DateTimeFormatter end diff --git a/lib/api/v3/work_packages/work_package_representer.rb b/lib/api/v3/work_packages/work_package_representer.rb index 661535b7eb..e85e782063 100644 --- a/lib/api/v3/work_packages/work_package_representer.rb +++ b/lib/api/v3/work_packages/work_package_representer.rb @@ -288,25 +288,33 @@ module API exec_context: :decorator, getter: -> (*) { datetime_formatter.format_datetime(represented.updated_at) } - property :activities, embedded: true, exec_context: :decorator + property :activities, + embedded: true, + exec_context: :decorator, + if: -> (*) { embed_links } property :version, embedded: true, exec_context: :decorator, - if: ->(*) { represented.fixed_version.present? } + if: ->(*) { represented.fixed_version.present? && embed_links } property :watchers, embedded: true, exec_context: :decorator, if: -> (*) { current_user_allowed_to(:view_work_package_watchers, - context: represented.project) + context: represented.project) && + embed_links } property :attachments, embedded: true, - exec_context: :decorator + exec_context: :decorator, + if: -> (*) { embed_links } - property :relations, embedded: true, exec_context: :decorator + property :relations, + embedded: true, + exec_context: :decorator, + if: -> (*) { embed_links } def _type 'WorkPackage' diff --git a/lib/api/v3/work_packages/work_packages_api.rb b/lib/api/v3/work_packages/work_packages_api.rb index 02e4180af2..2b775ad955 100644 --- a/lib/api/v3/work_packages/work_packages_api.rb +++ b/lib/api/v3/work_packages/work_packages_api.rb @@ -50,7 +50,8 @@ module API def work_package_representer WorkPackageRepresenter.create(@work_package, - current_user: current_user) + current_user: current_user, + embed_links: true) end end diff --git a/lib/api/v3/work_packages/work_packages_by_project_api.rb b/lib/api/v3/work_packages/work_packages_by_project_api.rb index 43093081ed..f99f0c3771 100644 --- a/lib/api/v3/work_packages/work_packages_by_project_api.rb +++ b/lib/api/v3/work_packages/work_packages_by_project_api.rb @@ -61,7 +61,9 @@ module API contract = ::API::V3::WorkPackages::CreateContract.new(work_package, current_user) if contract.validate && create_service.save(work_package) work_package.reload - WorkPackages::WorkPackageRepresenter.create(work_package, current_user: current_user) + WorkPackages::WorkPackageRepresenter.create(work_package, + current_user: current_user, + embed_links: true) else fail ::API::Errors::ErrorBase.create_and_merge_errors(contract.errors) end diff --git a/spec/lib/api/v3/work_packages/work_package_representer_spec.rb b/spec/lib/api/v3/work_packages/work_package_representer_spec.rb index 6c8b07a0f4..33bae920ee 100644 --- a/spec/lib/api/v3/work_packages/work_package_representer_spec.rb +++ b/spec/lib/api/v3/work_packages/work_package_representer_spec.rb @@ -33,8 +33,10 @@ describe ::API::V3::WorkPackages::WorkPackageRepresenter do let(:member) { FactoryGirl.create(:user, member_in_project: project, member_through_role: role) } let(:current_user) { member } - - let(:representer) { described_class.create(work_package, current_user: current_user) } + let(:embed_links) { true } + let(:representer) { + described_class.create(work_package, current_user: current_user, embed_links: embed_links) + } let(:work_package) { FactoryGirl.build(:work_package, @@ -757,6 +759,14 @@ describe ::API::V3::WorkPackages::WorkPackageRepresenter do it { is_expected.to have_json_type(Array).at_path('_embedded/activities') } it { is_expected.to have_json_size(0).at_path('_embedded/activities') } end + + context 'not embedding links' do + let(:embed_links) { false } + + it 'does not embed anything' do + is_expected.not_to have_json_path('_embedded') + end + end end end end From 5de0f158980117f959821b524d047a8e1b34241d Mon Sep 17 00:00:00 2001 From: Jan Sandbrink Date: Fri, 28 Aug 2015 17:31:22 +0200 Subject: [PATCH 099/112] Correctly link activities - they might not be embedded - create an endpoint for activities - document it properly - adapt angular client --- doc/apiv3-documentation.apib | 86 ++++++++++++++++++- .../work-package-details-controller.js | 2 +- .../activities_by_work_package_api.rb | 6 ++ .../activity_collection_representer.rb | 38 ++++++++ .../work_packages/work_package_representer.rb | 13 ++- .../work_package_representer_spec.rb | 9 +- ...ctivities_by_work_package_resource_spec.rb | 32 ++++++- spec/requests/api/v3/support/api_helper.rb | 10 ++- 8 files changed, 184 insertions(+), 12 deletions(-) create mode 100644 lib/api/v3/activities/activity_collection_representer.rb diff --git a/doc/apiv3-documentation.apib b/doc/apiv3-documentation.apib index d62c6a309f..bdb23bf59f 100644 --- a/doc/apiv3-documentation.apib +++ b/doc/apiv3-documentation.apib @@ -4536,7 +4536,91 @@ Gets a list of revisions that are linked to this work package, e.g., because it } -## Comment Work Package [/api/v3/work_packages/{id}/activities] +## Work Package activities [/api/v3/work_packages/{id}/activities] + ++ Model + + Body + + { + "_links": { + "self": { "href": "/api/v3/work_packages/1/revisions" } + }, + "total": 2, + "count": 2, + "_type": "Collection", + "_embedded": { + "elements": [ + { + "_type": "Activity", + "_links": { + "self": { + "href": "/api/v3/activity/1" + }, + "workPackage": { + "href": "/api/v3/work_packages/1" + }, + "user": { + "href": "/api/v3/users/1" + } + }, + "id": 1, + "details": [ ], + "comment": { + "format": "textile", + "raw": "Lorem ipsum dolor sit amet.", + "html": "

    Lorem ipsum dolor sit amet.

    " + }, + "createdAt": "2014-05-21T08:51:20Z", + "version": 1 + }, + { + "_type": "Activity", + "_links": { + "self": { + "href": "/api/v3/activity/2" + }, + "workPackage": { + "href": "/api/v3/work_packages/1" + }, + "user": { + "href": "/api/v3/users/1" + } + }, + "id": 2, + "details": [ ], + "comment": { + "format": "textile", + "raw": "Lorem ipsum dolor sit amet.", + "html": "

    Lorem ipsum dolor sit amet.

    " + }, + "createdAt": "2014-05-21T08:51:22Z", + "version": 2 + }] + } + } + +## List work package activities [GET] + ++ Parameters + + id (required, integer, `1`) ... Work package id + ++ Response 200 (application/hal+json) + + [Activity][] + ++ Response 404 (application/hal+json) + + Returned if the work package does not exist or the client does not have sufficient permissions to see it. + + **Required permission:** view work package + + + Body + + { + "_type": "Error", + "errorIdentifier": "urn:openproject-org:api:v3:errors:NotFound", + "message": "The specified work package does not exist." + } ## Comment work package [POST] diff --git a/frontend/app/work_packages/controllers/work-package-details-controller.js b/frontend/app/work_packages/controllers/work-package-details-controller.js index b17bb0c150..459571e628 100644 --- a/frontend/app/work_packages/controllers/work-package-details-controller.js +++ b/frontend/app/work_packages/controllers/work-package-details-controller.js @@ -233,7 +233,7 @@ module.exports = function($scope, } function addDisplayedActivities(workPackage, aggregate) { - var activities = workPackage.embedded.activities; + var activities = workPackage.embedded.activities.embedded.elements; aggregate(true, activities); } diff --git a/lib/api/v3/activities/activities_by_work_package_api.rb b/lib/api/v3/activities/activities_by_work_package_api.rb index 374a5c51e6..c5db07923f 100644 --- a/lib/api/v3/activities/activities_by_work_package_api.rb +++ b/lib/api/v3/activities/activities_by_work_package_api.rb @@ -45,6 +45,12 @@ module API end end + get do + @activities = ::Journal::AggregatedJournal.aggregated_journals(journable: @work_package) + self_link = api_v3_paths.work_package_activities @work_package.id + Activities::ActivityCollectionRepresenter.new(@activities, self_link) + end + params do requires :comment, type: String end diff --git a/lib/api/v3/activities/activity_collection_representer.rb b/lib/api/v3/activities/activity_collection_representer.rb new file mode 100644 index 0000000000..c35467d9ab --- /dev/null +++ b/lib/api/v3/activities/activity_collection_representer.rb @@ -0,0 +1,38 @@ +#-- encoding: UTF-8 +#-- copyright +# OpenProject is a project management system. +# Copyright (C) 2012-2015 the OpenProject Foundation (OPF) +# +# 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 doc/COPYRIGHT.rdoc for more details. +#++ + +module API + module V3 + module Activities + class ActivityCollectionRepresenter < ::API::Decorators::UnpaginatedCollection + element_decorator ::API::V3::Activities::ActivityRepresenter + end + end + end +end diff --git a/lib/api/v3/work_packages/work_package_representer.rb b/lib/api/v3/work_packages/work_package_representer.rb index e85e782063..b3b7111ca2 100644 --- a/lib/api/v3/work_packages/work_package_representer.rb +++ b/lib/api/v3/work_packages/work_package_representer.rb @@ -109,6 +109,12 @@ module API linked_property :responsible, path: :user, embed_as: ::API::V3::Users::UserRepresenter linked_property :assigned_to, path: :user, embed_as: ::API::V3::Users::UserRepresenter + link :activities do + { + href: api_v3_paths.work_package_activities(represented.id) + } + end + link :attachments do { href: api_v3_paths.attachments_by_work_package(represented.id) @@ -321,9 +327,10 @@ module API end def activities - ::Journal::AggregatedJournal.aggregated_journals(journable: represented).map do |activity| - ::API::V3::Activities::ActivityRepresenter.new(activity, current_user: current_user) - end + activities = ::Journal::AggregatedJournal.aggregated_journals(journable: represented) + self_link = api_v3_paths.work_package_activities represented.id + Activities::ActivityCollectionRepresenter.new(activities, + self_link) end def watchers diff --git a/spec/lib/api/v3/work_packages/work_package_representer_spec.rb b/spec/lib/api/v3/work_packages/work_package_representer_spec.rb index 33bae920ee..1afabb0655 100644 --- a/spec/lib/api/v3/work_packages/work_package_representer_spec.rb +++ b/spec/lib/api/v3/work_packages/work_package_representer_spec.rb @@ -756,8 +756,13 @@ describe ::API::V3::WorkPackages::WorkPackageRepresenter do end describe 'activities' do - it { is_expected.to have_json_type(Array).at_path('_embedded/activities') } - it { is_expected.to have_json_size(0).at_path('_embedded/activities') } + it 'is returned as Collection resource' do + is_expected.to be_json_eql('Collection'.to_json).at_path('_embedded/activities/_type') + end + + it 'is empty' do + is_expected.to be_json_eql(0).at_path('_embedded/activities/total') + end end context 'not embedding links' do diff --git a/spec/requests/api/v3/activities_by_work_package_resource_spec.rb b/spec/requests/api/v3/activities_by_work_package_resource_spec.rb index cade61fdd3..4eb33dbd8e 100644 --- a/spec/requests/api/v3/activities_by_work_package_resource_spec.rb +++ b/spec/requests/api/v3/activities_by_work_package_resource_spec.rb @@ -32,13 +32,39 @@ require 'rack/test' describe API::V3::Activities::ActivitiesByWorkPackageAPI, type: :request do include API::V3::Utilities::PathHelper - let(:admin) { FactoryGirl.create(:admin) } - describe 'activities' do - let(:work_package) { FactoryGirl.create(:work_package) } + let(:project) { FactoryGirl.build(:project) } + let(:work_package) { FactoryGirl.create(:work_package, project: project) } let(:comment) { 'This is a test comment!' } + describe 'GET /api/v3/work_packages/:id/activities' do + let(:project) { FactoryGirl.create(:project, is_public: false) } + let(:current_user) { + FactoryGirl.create(:user, member_in_project: project, member_through_role: role) + } + let(:role) { FactoryGirl.create(:role, permissions: [:view_work_packages]) } + + before do + allow(User).to receive(:current).and_return(current_user) + get api_v3_paths.work_package_activities work_package.id + end + + it 'succeeds' do + expect(response.status).to eql 200 + end + + context 'not allowed to see work package' do + let(:current_user) { FactoryGirl.create(:user) } + + it 'fails with HTTP Not Found' do + expect(response.status).to eql 404 + end + end + end + describe 'POST /api/v3/work_packages/:id/activities' do + let(:work_package) { FactoryGirl.create(:work_package) } + shared_context 'create activity' do before { post (api_v3_paths.work_package_activities work_package.id), diff --git a/spec/requests/api/v3/support/api_helper.rb b/spec/requests/api/v3/support/api_helper.rb index 4e04b5aa21..b24424da42 100644 --- a/spec/requests/api/v3/support/api_helper.rb +++ b/spec/requests/api/v3/support/api_helper.rb @@ -32,8 +32,11 @@ end shared_examples_for 'valid activity request' do let(:status_code) { 200 } + let(:admin) { FactoryGirl.create(:admin) } - before do allow(User).to receive(:current).and_return(admin) end + before do + allow(User).to receive(:current).and_return(admin) + end it { expect(response.response_code).to eq(status_code) } @@ -47,7 +50,10 @@ shared_examples_for 'valid activity request' do end shared_examples_for 'invalid activity request' do - before do allow(User).to receive(:current).and_return(admin) end + let(:admin) { FactoryGirl.create(:admin) } + before do + allow(User).to receive(:current).and_return(admin) + end it { expect(response.response_code).to eq(422) } end From b41e96a8af8e7d30efec1e13c078c4847d2d3efe Mon Sep 17 00:00:00 2001 From: Jan Sandbrink Date: Mon, 31 Aug 2015 09:23:09 +0200 Subject: [PATCH 100/112] Adapt frontend-specs to new embedding just realized that those are 12k lines of C&P activities. I reduced the amount to a less insane (but still not quite sane) ~1k lines... It might be a better idea to automatically generate those mocks. This would be: - more consistent - more up-to-date with real data - less error-prone (b.c. less copypasta) --- .../integration/mocks/work-packages/819.json | 361 +-- .../integration/mocks/work-packages/820.json | 2194 ++------------ .../integration/mocks/work-packages/821.json | 2194 ++------------ .../integration/mocks/work-packages/822.json | 2648 ++--------------- .../integration/mocks/work-packages/823.json | 2183 ++------------ .../integration/mocks/work-packages/824.json | 2183 ++------------ .../integration/mocks/work-packages/825.json | 2183 ++------------ .../activity-with-revisions-spec.js | 9 +- .../work-package-details-controller-test.js | 14 +- 9 files changed, 1352 insertions(+), 12617 deletions(-) diff --git a/frontend/tests/integration/mocks/work-packages/819.json b/frontend/tests/integration/mocks/work-packages/819.json index ac1498b9e6..b745261478 100644 --- a/frontend/tests/integration/mocks/work-packages/819.json +++ b/frontend/tests/integration/mocks/work-packages/819.json @@ -140,6 +140,9 @@ }, "attachments": { "href": "/api/v3/work_packages/819/attachments" + }, + "activities": { + "href": "/api/v3/work_packages/819/activities" } }, "_embedded": { @@ -279,189 +282,199 @@ "updatedAt": "2015-02-13T10:08:53+00:00", "type": null }, - "activities": [ - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/333", - "title": "333" - }, - "workPackage": { - "href": "/api/v3/work_packages/65", - "title": "veritatis voluptas hic qui praesentium tempora illum omnis" - }, - "user": { - "href": "/api/v3/users/3", - "title": "Anonymous - " - }, - "update": { - "href": "/api/v3/activities/333", - "method": "patch", - "title": "333" - } - }, - "id": 333, - "comment": { - "format": "textile", - "raw": "", - "html": "" - }, - "details": [ - { - "format": "custom", - "raw": "Type set to Phase", - "html": "Type set to Phase" - }, - { - "format": "custom", - "raw": "Project set to Seeded Project", - "html": "Project set to Seeded Project" - }, - { - "format": "custom", - "raw": "Subject set to veritatis voluptas hic qui praesentium tempora illum omnis", - "html": "Subject set to veritatis voluptas hic qui praesentium tempora illum omnis" - }, - { - "format": "custom", - "raw": "Description set (/journals/333/diff/description)", - "html": "Description set (Details)" - }, - { - "format": "custom", - "raw": "Due date set to 04/29/2015", - "html": "Due date set to 04/29/2015" - }, - { - "format": "custom", - "raw": "Status set to new", - "html": "Status set to new" - }, - { - "format": "custom", - "raw": "Priority set to Normal", - "html": "Priority set to Normal" - }, + "activities": { + "_type": "Collection", + "_links": { + "self": { "href": "/api/v3/work_packages/819/activities" } + }, + "total": 4, + "count": 4, + "_embedded": { + "elements": [ { - "format": "custom", - "raw": "Author set to Alexandrine Heidenreich", - "html": "Author set to Alexandrine Heidenreich" + "_type": "Activity", + "_links": { + "self": { + "href": "/api/v3/activities/333", + "title": "333" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/3", + "title": "Anonymous - " + }, + "update": { + "href": "/api/v3/activities/333", + "method": "patch", + "title": "333" + } + }, + "id": 333, + "comment": { + "format": "textile", + "raw": "", + "html": "" + }, + "details": [ + { + "format": "custom", + "raw": "Type set to Phase", + "html": "Type set to Phase" + }, + { + "format": "custom", + "raw": "Project set to Seeded Project", + "html": "Project set to Seeded Project" + }, + { + "format": "custom", + "raw": "Subject set to veritatis voluptas hic qui praesentium tempora illum omnis", + "html": "Subject set to veritatis voluptas hic qui praesentium tempora illum omnis" + }, + { + "format": "custom", + "raw": "Description set (/journals/333/diff/description)", + "html": "Description set (Details)" + }, + { + "format": "custom", + "raw": "Due date set to 04/29/2015", + "html": "Due date set to 04/29/2015" + }, + { + "format": "custom", + "raw": "Status set to new", + "html": "Status set to new" + }, + { + "format": "custom", + "raw": "Priority set to Normal", + "html": "Priority set to Normal" + }, + { + "format": "custom", + "raw": "Author set to Alexandrine Heidenreich", + "html": "Author set to Alexandrine Heidenreich" + }, + { + "format": "custom", + "raw": "% done changed from 0 to 0", + "html": "% done changed from 0 to 0" + }, + { + "format": "custom", + "raw": "Start date set to 02/17/2015", + "html": "Start date set to 02/17/2015" + } + ], + "version": 1, + "createdAt": "2015-02-13T10:09:07+00:00" }, { - "format": "custom", - "raw": "% done changed from 0 to 0", - "html": "% done changed from 0 to 0" + "_type": "Activity", + "_links": { + "self": { + "href": "/api/v3/activities/816", + "title": "816" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/1", + "title": "OpenProject Admin - admin" + }, + "update": { + "href": "/api/v3/activities/816", + "method": "patch", + "title": "816" + } + }, + "id": 816, + "comment": { + "format": "textile", + "raw": "", + "html": "" + }, + "details": [ + { + "format": "custom", + "raw": "Status changed from new to in progress", + "html": "Status changed from new to in progress" + } + ], + "version": 2, + "createdAt": "2015-04-07T13:36:43+00:00" }, { - "format": "custom", - "raw": "Start date set to 02/17/2015", - "html": "Start date set to 02/17/2015" - } - ], - "version": 1, - "createdAt": "2015-02-13T10:09:07+00:00" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/816", - "title": "816" + "_type": "Activity::Comment", + "_links": { + "self": { + "href": "/api/v3/activities/817", + "title": "817" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/1", + "title": "OpenProject Admin - admin" + }, + "update": { + "href": "/api/v3/activities/817", + "method": "patch", + "title": "817" + } + }, + "id": 817, + "comment": { + "format": "textile", + "raw": "I have a comment", + "html": "

    I have a comment

    " + }, + "details": [], + "version": 3, + "createdAt": "2015-04-07T13:37:09+00:00" }, - "workPackage": { - "href": "/api/v3/work_packages/65", - "title": "veritatis voluptas hic qui praesentium tempora illum omnis" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/816", - "method": "patch", - "title": "816" - } - }, - "id": 816, - "comment": { - "format": "textile", - "raw": "", - "html": "" - }, - "details": [ { - "format": "custom", - "raw": "Status changed from new to in progress", - "html": "Status changed from new to in progress" + "_type": "Activity::Comment", + "_links": { + "self": { + "href": "/api/v3/activities/818", + "title": "818" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/1", + "title": "OpenProject Admin - admin" + }, + "update": { + "href": "/api/v3/activities/818", + "method": "patch", + "title": "818" + } + }, + "id": 818, + "comment": { + "format": "textile", + "raw": "And another one", + "html": "

    And another one

    " + }, + "details": [], + "version": 4, + "createdAt": "2015-04-07T13:37:33+00:00" } - ], - "version": 2, - "createdAt": "2015-04-07T13:36:43+00:00" - }, - { - "_type": "Activity::Comment", - "_links": { - "self": { - "href": "/api/v3/activities/817", - "title": "817" - }, - "workPackage": { - "href": "/api/v3/work_packages/65", - "title": "veritatis voluptas hic qui praesentium tempora illum omnis" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/817", - "method": "patch", - "title": "817" - } - }, - "id": 817, - "comment": { - "format": "textile", - "raw": "I have a comment", - "html": "

    I have a comment

    " - }, - "details": [], - "version": 3, - "createdAt": "2015-04-07T13:37:09+00:00" - }, - { - "_type": "Activity::Comment", - "_links": { - "self": { - "href": "/api/v3/activities/818", - "title": "818" - }, - "workPackage": { - "href": "/api/v3/work_packages/65", - "title": "veritatis voluptas hic qui praesentium tempora illum omnis" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/818", - "method": "patch", - "title": "818" - } - }, - "id": 818, - "comment": { - "format": "textile", - "raw": "And another one", - "html": "

    And another one

    " - }, - "details": [], - "version": 4, - "createdAt": "2015-04-07T13:37:33+00:00" + ] } - ], + }, "watchers": [], "attachments" : { "_links" : { diff --git a/frontend/tests/integration/mocks/work-packages/820.json b/frontend/tests/integration/mocks/work-packages/820.json index f481952a42..d1d699378a 100644 --- a/frontend/tests/integration/mocks/work-packages/820.json +++ b/frontend/tests/integration/mocks/work-packages/820.json @@ -88,6 +88,9 @@ }, "attachments": { "href": "/api/v3/work_packages/820/attachments" + }, + "activities": { + "href": "/api/v3/work_packages/820/activities" } }, "id": 820, @@ -152,2006 +155,199 @@ "updatedAt": "2014-11-05T15:56:820Z", "status": 1 }, - "activities": [ - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/315", - "title": "315" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/3", - "title": "Anonymous - " - }, - "update": { - "href": "/api/v3/activities/315", - "method": "patch", - "title": "315" - } - }, - "id": 315, - "comment": "", - "rawComment": "", - "details": [ - "Type set to Feature", - "Project set to Seeded Project", - "Subject set to praesentium repellendus nam officia velit voluptas voluptas quasi", - "Description set (/journals/315/diff/description)", - "Due date set to 12/27/2014", - "Status set to new", - "Priority set to Normal", - "Author set to Freida Fay", - "% done changed from 0 to 0", - "Start date set to 10/23/2014" - ], - "htmlDetails": [ - "Type set to Feature", - "Project set to Seeded Project", - "Subject set to praesentium repellendus nam officia velit voluptas voluptas quasi", - "Description set (Details)", - "Due date set to 12/27/2014", - "Status set to new", - "Priority set to Normal", - "Author set to Freida Fay", - "% done changed from 0 to 0", - "Start date set to 10/23/2014" - ], - "version": 1, - "createdAt": "2014-11-05T15:56:53Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/500", - "title": "500" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/500", - "method": "patch", - "title": "500" - } - }, - "id": 500, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/500/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 2, - "createdAt": "2014-11-10T12:31:10Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/501", - "title": "501" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/501", - "method": "patch", - "title": "501" - } - }, - "id": 501, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/501/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 3, - "createdAt": "2014-11-10T12:31:53Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/502", - "title": "502" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/502", - "method": "patch", - "title": "502" - } - }, - "id": 502, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/502/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 4, - "createdAt": "2014-11-10T12:31:59Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/503", - "title": "503" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/503", - "method": "patch", - "title": "503" - } - }, - "id": 503, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/503/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 5, - "createdAt": "2014-11-10T12:32:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/504", - "title": "504" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/504", - "method": "patch", - "title": "504" - } - }, - "id": 504, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/504/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 6, - "createdAt": "2014-11-10T12:32:27Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/505", - "title": "505" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/505", - "method": "patch", - "title": "505" - } - }, - "id": 505, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/505/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 7, - "createdAt": "2014-11-10T12:32:31Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/506", - "title": "506" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/506", - "method": "patch", - "title": "506" - } - }, - "id": 506, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/506/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 8, - "createdAt": "2014-11-10T12:32:40Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/507", - "title": "507" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/507", - "method": "patch", - "title": "507" - } - }, - "id": 507, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/507/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 9, - "createdAt": "2014-11-10T12:32:45Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/511", - "title": "511" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/511", - "method": "patch", - "title": "511" - } - }, - "id": 511, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/511/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 10, - "createdAt": "2014-11-10T14:10:51Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/512", - "title": "512" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/512", - "method": "patch", - "title": "512" - } - }, - "id": 512, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/512/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 11, - "createdAt": "2014-11-10T14:42:50Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/513", - "title": "513" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/513", - "method": "patch", - "title": "513" - } - }, - "id": 513, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/513/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 12, - "createdAt": "2014-11-10T14:44:11Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/514", - "title": "514" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/514", - "method": "patch", - "title": "514" - } - }, - "id": 514, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/514/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 13, - "createdAt": "2014-11-10T14:44:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/515", - "title": "515" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/515", - "method": "patch", - "title": "515" - } - }, - "id": 515, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/515/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 14, - "createdAt": "2014-11-10T14:47:36Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/516", - "title": "516" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/516", - "method": "patch", - "title": "516" - } - }, - "id": 516, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/516/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 15, - "createdAt": "2014-11-10T14:820:47Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/517", - "title": "517" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/517", - "method": "patch", - "title": "517" - } - }, - "id": 517, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/517/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 16, - "createdAt": "2014-11-10T14:53:17Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/518", - "title": "518" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/518", - "method": "patch", - "title": "518" - } - }, - "id": 518, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/518/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 17, - "createdAt": "2014-11-10T15:17:34Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/8203", - "title": "8203" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/8203", - "method": "patch", - "title": "8203" - } - }, - "id": 8203, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from praesentium repellendus nam officia velit voluptas voluptas quasi to praesentium repellendus nam officia velit voluptas voluptas quasivv" - ], - "htmlDetails": [ - "Subject changed from praesentium repellendus nam officia velit voluptas voluptas quasi to praesentium repellendus nam officia velit voluptas voluptas quasivv" - ], - "version": 18, - "createdAt": "2014-11-12T12:59:25Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/531", - "title": "531" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/531", - "method": "patch", - "title": "531" - } - }, - "id": 531, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/531/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 19, - "createdAt": "2014-11-12T13:42:54Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/533", - "title": "533" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/533", - "method": "patch", - "title": "533" - } - }, - "id": 533, - "comment": "", - "rawComment": "", - "details": [ - "Parent set to 232aa22" - ], - "htmlDetails": [ - "Parent set to 232aa22" - ], - "version": 20, - "createdAt": "2014-11-12T16:16:51Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/535", - "title": "535" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/535", - "method": "patch", - "title": "535" - } - }, - "id": 535, - "comment": "", - "rawComment": "", - "details": [ - "Parent changed from 232aa22 to asd" - ], - "htmlDetails": [ - "Parent changed from 232aa22 to asd" - ], - "version": 21, - "createdAt": "2014-11-12T16:19:01Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/536", - "title": "536" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/536", - "method": "patch", - "title": "536" - } - }, - "id": 536, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/536/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 22, - "createdAt": "2014-11-12T16:23:26Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/537", - "title": "537" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/537", - "method": "patch", - "title": "537" - } - }, - "id": 537, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/537/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 23, - "createdAt": "2014-11-13T12:23:49Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/539", - "title": "539" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/539", - "method": "patch", - "title": "539" - } - }, - "id": 539, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from praesentium repellendus nam officia velit voluptas voluptas quasivv to 23123123" - ], - "htmlDetails": [ - "Subject changed from praesentium repellendus nam officia velit voluptas voluptas quasivv to 23123123" - ], - "version": 24, - "createdAt": "2014-11-17T14:03:47Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/540", - "title": "540" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/540", - "method": "patch", - "title": "540" - } - }, - "id": 540, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 23123123 to 3q4e4" - ], - "htmlDetails": [ - "Subject changed from 23123123 to 3q4e4" - ], - "version": 25, - "createdAt": "2014-11-17T14:07:43Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/541", - "title": "541" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/541", - "method": "patch", - "title": "541" - } - }, - "id": 541, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/541/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 26, - "createdAt": "2014-11-17T14:08:20Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/542", - "title": "542" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/542", - "method": "patch", - "title": "542" - } - }, - "id": 542, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/542/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 27, - "createdAt": "2014-11-17T14:08:27Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/543", - "title": "543" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/543", - "method": "patch", - "title": "543" - } - }, - "id": 543, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from new to in progress" - ], - "htmlDetails": [ - "Status changed from new to in progress" - ], - "version": 28, - "createdAt": "2014-11-17T14:08:38Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/544", - "title": "544" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/544", - "method": "patch", - "title": "544" - } - }, - "id": 544, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from in progress to tested" - ], - "htmlDetails": [ - "Status changed from in progress to tested" - ], - "version": 29, - "createdAt": "2014-11-17T14:11:36Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/546", - "title": "546" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/546", - "method": "patch", - "title": "546" - } - }, - "id": 546, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from tested to closed" - ], - "htmlDetails": [ - "Status changed from tested to closed" - ], - "version": 30, - "createdAt": "2014-11-17T14:11:41Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/548", - "title": "548" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/548", - "method": "patch", - "title": "548" - } - }, - "id": 548, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from closed to in progress" - ], - "htmlDetails": [ - "Status changed from closed to in progress" - ], - "version": 31, - "createdAt": "2014-11-17T14:11:51Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/549", - "title": "549" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/549", - "method": "patch", - "title": "549" - } - }, - "id": 549, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/549/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 32, - "createdAt": "2014-11-17T14:13:06Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/550", - "title": "550" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/550", - "method": "patch", - "title": "550" - } - }, - "id": 550, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 3q4e4 to 3q4e4s" - ], - "htmlDetails": [ - "Subject changed from 3q4e4 to 3q4e4s" - ], - "version": 33, - "createdAt": "2014-11-17T14:14:53Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/551", - "title": "551" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/551", - "method": "patch", - "title": "551" - } - }, - "id": 551, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/551/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 34, - "createdAt": "2014-11-17T14:17:41Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/5820", - "title": "5820" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/5820", - "method": "patch", - "title": "5820" - } - }, - "id": 5820, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 3q4e4s to 2" - ], - "htmlDetails": [ - "Subject changed from 3q4e4s to 2" - ], - "version": 35, - "createdAt": "2014-11-17T14:17:44Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/553", - "title": "553" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/553", - "method": "patch", - "title": "553" - } - }, - "id": 553, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 2 to 22" - ], - "htmlDetails": [ - "Subject changed from 2 to 22" - ], - "version": 36, - "createdAt": "2014-11-17T14:17:51Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/554", - "title": "554" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/554", - "method": "patch", - "title": "554" - } - }, - "id": 554, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 22 to 2323" - ], - "htmlDetails": [ - "Subject changed from 22 to 2323" - ], - "version": 37, - "createdAt": "2014-11-17T14:18:33Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/555", - "title": "555" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/555", - "method": "patch", - "title": "555" - } - }, - "id": 555, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/555/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 38, - "createdAt": "2014-11-17T14:18:46Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/556", - "title": "556" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/556", - "method": "patch", - "title": "556" - } - }, - "id": 556, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 2323 to 2323123123" - ], - "htmlDetails": [ - "Subject changed from 2323 to 2323123123" - ], - "version": 39, - "createdAt": "2014-11-17T14:20:40Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/557", - "title": "557" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/557", - "method": "patch", - "title": "557" - } - }, - "id": 557, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 2323123123 to 22" - ], - "htmlDetails": [ - "Subject changed from 2323123123 to 22" - ], - "version": 40, - "createdAt": "2014-11-17T14:22:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/559", - "title": "559" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/559", - "method": "patch", - "title": "559" - } - }, - "id": 559, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from in progress to rejected" - ], - "htmlDetails": [ - "Status changed from in progress to rejected" - ], - "version": 41, - "createdAt": "2014-11-17T14:22:34Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/560", - "title": "560" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/560", - "method": "patch", - "title": "560" - } - }, - "id": 560, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 22 to 2222" - ], - "htmlDetails": [ - "Subject changed from 22 to 2222" - ], - "version": 42, - "createdAt": "2014-11-17T14:25:07Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/562", - "title": "562" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/562", - "method": "patch", - "title": "562" - } - }, - "id": 562, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from rejected to tested" - ], - "htmlDetails": [ - "Status changed from rejected to tested" - ], - "version": 43, - "createdAt": "2014-11-17T14:26:20Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/563", - "title": "563" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/563", - "method": "patch", - "title": "563" - } - }, - "id": 563, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/563/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 44, - "createdAt": "2014-11-17T14:26:29Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/564", - "title": "564" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/564", - "method": "patch", - "title": "564" - } - }, - "id": 564, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 2222 to sad" - ], - "htmlDetails": [ - "Subject changed from 2222 to sad" - ], - "version": 45, - "createdAt": "2014-11-17T14:26:31Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/565", - "title": "565" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/565", - "method": "patch", - "title": "565" - } - }, - "id": 565, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/565/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 46, - "createdAt": "2014-11-18T12:46:00Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/566", - "title": "566" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/566", - "method": "patch", - "title": "566" - } - }, - "id": 566, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/566/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 47, - "createdAt": "2014-11-18T12:48:820Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/567", - "title": "567" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/567", - "method": "patch", - "title": "567" - } - }, - "id": 567, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/567/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 48, - "createdAt": "2014-11-18T12:820:34Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/568", - "title": "568" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/568", - "method": "patch", - "title": "568" - } - }, - "id": 568, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/568/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 49, - "createdAt": "2014-11-18T12:53:03Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/569", - "title": "569" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/569", - "method": "patch", - "title": "569" - } - }, - "id": 569, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/569/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 50, - "createdAt": "2014-11-18T14:10:48Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/570", - "title": "570" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/570", - "method": "patch", - "title": "570" - } - }, - "id": 570, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/570/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 51, - "createdAt": "2014-11-18T14:10:55Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/571", - "title": "571" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/571", - "method": "patch", - "title": "571" - } - }, - "id": 571, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/571/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 820, - "createdAt": "2014-11-18T14:11:22Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/572", - "title": "572" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/572", - "method": "patch", - "title": "572" - } - }, - "id": 572, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/572/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 53, - "createdAt": "2014-11-19T12:53:54Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/573", - "title": "573" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/573", - "method": "patch", - "title": "573" - } - }, - "id": 573, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from sad to sadaa" - ], - "htmlDetails": [ - "Subject changed from sad to sadaa" - ], - "version": 54, - "createdAt": "2014-11-21T08:32:09Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/574", - "title": "574" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/574", - "method": "patch", - "title": "574" - } - }, - "id": 574, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/574/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 55, - "createdAt": "2014-11-21T08:34:01Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/575", - "title": "575" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/575", - "method": "patch", - "title": "575" - } - }, - "id": 575, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from sadaa to sadaa222" - ], - "htmlDetails": [ - "Subject changed from sadaa to sadaa222" - ], - "version": 56, - "createdAt": "2014-11-21T08:38:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/576", - "title": "576" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/576", - "method": "patch", - "title": "576" - } - }, - "id": 576, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from sadaa222 to sadaa22222" - ], - "htmlDetails": [ - "Subject changed from sadaa222 to sadaa22222" - ], - "version": 57, - "createdAt": "2014-11-21T08:41:25Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/577", - "title": "577" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/577", - "method": "patch", - "title": "577" - } - }, - "id": 577, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from sadaa22222 to 23" - ], - "htmlDetails": [ - "Subject changed from sadaa22222 to 23" - ], - "version": 58, - "createdAt": "2014-11-21T08:47:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/578", - "title": "578" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/578", - "method": "patch", - "title": "578" - } - }, - "id": 578, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 23 to 66666" - ], - "htmlDetails": [ - "Subject changed from 23 to 66666" - ], - "version": 59, - "createdAt": "2014-11-21T08:48:27Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/580", - "title": "580" - }, - "workPackage": { - "href": "/api/v3/work_packages/820", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/580", - "method": "patch", - "title": "580" - } - }, - "id": 580, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from tested to rejected" - ], - "htmlDetails": [ - "Status changed from tested to rejected" - ], - "version": 60, - "createdAt": "2014-11-21T08:48:57Z" + "activities": { + "_type": "Collection", + "_links": { + "self": { "href": "/api/v3/work_packages/820/activities" } + }, + "total": 4, + "count": 4, + "_embedded": { + "elements": [ + { + "_type": "Activity", + "_links": { + "self": { + "href": "/api/v3/activities/333", + "title": "333" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/3", + "title": "Anonymous - " + }, + "update": { + "href": "/api/v3/activities/333", + "method": "patch", + "title": "333" + } + }, + "id": 333, + "comment": { + "format": "textile", + "raw": "", + "html": "" + }, + "details": [ + { + "format": "custom", + "raw": "Type set to Phase", + "html": "Type set to Phase" + }, + { + "format": "custom", + "raw": "Project set to Seeded Project", + "html": "Project set to Seeded Project" + }, + { + "format": "custom", + "raw": "Subject set to veritatis voluptas hic qui praesentium tempora illum omnis", + "html": "Subject set to veritatis voluptas hic qui praesentium tempora illum omnis" + }, + { + "format": "custom", + "raw": "Description set (/journals/333/diff/description)", + "html": "Description set (Details)" + }, + { + "format": "custom", + "raw": "Due date set to 04/29/2015", + "html": "Due date set to 04/29/2015" + }, + { + "format": "custom", + "raw": "Status set to new", + "html": "Status set to new" + }, + { + "format": "custom", + "raw": "Priority set to Normal", + "html": "Priority set to Normal" + }, + { + "format": "custom", + "raw": "Author set to Alexandrine Heidenreich", + "html": "Author set to Alexandrine Heidenreich" + }, + { + "format": "custom", + "raw": "% done changed from 0 to 0", + "html": "% done changed from 0 to 0" + }, + { + "format": "custom", + "raw": "Start date set to 02/17/2015", + "html": "Start date set to 02/17/2015" + } + ], + "version": 1, + "createdAt": "2015-02-13T10:09:07+00:00" + }, + { + "_type": "Activity", + "_links": { + "self": { + "href": "/api/v3/activities/816", + "title": "816" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/1", + "title": "OpenProject Admin - admin" + }, + "update": { + "href": "/api/v3/activities/816", + "method": "patch", + "title": "816" + } + }, + "id": 816, + "comment": { + "format": "textile", + "raw": "", + "html": "" + }, + "details": [ + { + "format": "custom", + "raw": "Status changed from new to in progress", + "html": "Status changed from new to in progress" + } + ], + "version": 2, + "createdAt": "2015-04-07T13:36:43+00:00" + }, + { + "_type": "Activity::Comment", + "_links": { + "self": { + "href": "/api/v3/activities/817", + "title": "817" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/1", + "title": "OpenProject Admin - admin" + }, + "update": { + "href": "/api/v3/activities/817", + "method": "patch", + "title": "817" + } + }, + "id": 817, + "comment": { + "format": "textile", + "raw": "I have a comment", + "html": "

    I have a comment

    " + }, + "details": [], + "version": 3, + "createdAt": "2015-04-07T13:37:09+00:00" + }, + { + "_type": "Activity::Comment", + "_links": { + "self": { + "href": "/api/v3/activities/818", + "title": "818" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/1", + "title": "OpenProject Admin - admin" + }, + "update": { + "href": "/api/v3/activities/818", + "method": "patch", + "title": "818" + } + }, + "id": 818, + "comment": { + "format": "textile", + "raw": "And another one", + "html": "

    And another one

    " + }, + "details": [], + "version": 4, + "createdAt": "2015-04-07T13:37:33+00:00" + } + ] } - ], + }, "version": { "_type": "Version", "_links": { diff --git a/frontend/tests/integration/mocks/work-packages/821.json b/frontend/tests/integration/mocks/work-packages/821.json index d29b911a19..a93ea0440e 100644 --- a/frontend/tests/integration/mocks/work-packages/821.json +++ b/frontend/tests/integration/mocks/work-packages/821.json @@ -95,6 +95,9 @@ }, "attachments": { "href": "/api/v3/work_packages/821/attachments" + }, + "activities": { + "href": "/api/v3/work_packages/821/activities" } }, "id": 821, @@ -159,2006 +162,199 @@ "updatedAt": "2014-11-05T15:56:821Z", "status": 1 }, - "activities": [ - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/315", - "title": "315" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/3", - "title": "Anonymous - " - }, - "update": { - "href": "/api/v3/activities/315", - "method": "patch", - "title": "315" - } - }, - "id": 315, - "comment": "", - "rawComment": "", - "details": [ - "Type set to Feature", - "Project set to Seeded Project", - "Subject set to praesentium repellendus nam officia velit voluptas voluptas quasi", - "Description set (/journals/315/diff/description)", - "Due date set to 12/27/2014", - "Status set to new", - "Priority set to Normal", - "Author set to Freida Fay", - "% done changed from 0 to 0", - "Start date set to 10/23/2014" - ], - "htmlDetails": [ - "Type set to Feature", - "Project set to Seeded Project", - "Subject set to praesentium repellendus nam officia velit voluptas voluptas quasi", - "Description set (Details)", - "Due date set to 12/27/2014", - "Status set to new", - "Priority set to Normal", - "Author set to Freida Fay", - "% done changed from 0 to 0", - "Start date set to 10/23/2014" - ], - "version": 1, - "createdAt": "2014-11-05T15:56:53Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/500", - "title": "500" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/500", - "method": "patch", - "title": "500" - } - }, - "id": 500, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/500/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 2, - "createdAt": "2014-11-10T12:31:10Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/501", - "title": "501" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/501", - "method": "patch", - "title": "501" - } - }, - "id": 501, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/501/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 3, - "createdAt": "2014-11-10T12:31:53Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/502", - "title": "502" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/502", - "method": "patch", - "title": "502" - } - }, - "id": 502, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/502/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 4, - "createdAt": "2014-11-10T12:31:59Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/503", - "title": "503" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/503", - "method": "patch", - "title": "503" - } - }, - "id": 503, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/503/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 5, - "createdAt": "2014-11-10T12:32:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/504", - "title": "504" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/504", - "method": "patch", - "title": "504" - } - }, - "id": 504, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/504/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 6, - "createdAt": "2014-11-10T12:32:27Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/505", - "title": "505" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/505", - "method": "patch", - "title": "505" - } - }, - "id": 505, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/505/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 7, - "createdAt": "2014-11-10T12:32:31Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/506", - "title": "506" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/506", - "method": "patch", - "title": "506" - } - }, - "id": 506, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/506/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 8, - "createdAt": "2014-11-10T12:32:40Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/507", - "title": "507" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/507", - "method": "patch", - "title": "507" - } - }, - "id": 507, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/507/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 9, - "createdAt": "2014-11-10T12:32:45Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/511", - "title": "511" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/511", - "method": "patch", - "title": "511" - } - }, - "id": 511, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/511/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 10, - "createdAt": "2014-11-10T14:10:51Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/512", - "title": "512" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/512", - "method": "patch", - "title": "512" - } - }, - "id": 512, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/512/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 11, - "createdAt": "2014-11-10T14:42:50Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/513", - "title": "513" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/513", - "method": "patch", - "title": "513" - } - }, - "id": 513, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/513/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 12, - "createdAt": "2014-11-10T14:44:11Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/514", - "title": "514" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/514", - "method": "patch", - "title": "514" - } - }, - "id": 514, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/514/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 13, - "createdAt": "2014-11-10T14:44:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/515", - "title": "515" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/515", - "method": "patch", - "title": "515" - } - }, - "id": 515, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/515/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 14, - "createdAt": "2014-11-10T14:47:36Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/516", - "title": "516" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/516", - "method": "patch", - "title": "516" - } - }, - "id": 516, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/516/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 15, - "createdAt": "2014-11-10T14:821:47Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/517", - "title": "517" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/517", - "method": "patch", - "title": "517" - } - }, - "id": 517, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/517/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 16, - "createdAt": "2014-11-10T14:53:17Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/518", - "title": "518" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/518", - "method": "patch", - "title": "518" - } - }, - "id": 518, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/518/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 17, - "createdAt": "2014-11-10T15:17:34Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/8213", - "title": "8213" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/8213", - "method": "patch", - "title": "8213" - } - }, - "id": 8213, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from praesentium repellendus nam officia velit voluptas voluptas quasi to praesentium repellendus nam officia velit voluptas voluptas quasivv" - ], - "htmlDetails": [ - "Subject changed from praesentium repellendus nam officia velit voluptas voluptas quasi to praesentium repellendus nam officia velit voluptas voluptas quasivv" - ], - "version": 18, - "createdAt": "2014-11-12T12:59:25Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/531", - "title": "531" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/531", - "method": "patch", - "title": "531" - } - }, - "id": 531, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/531/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 19, - "createdAt": "2014-11-12T13:42:54Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/533", - "title": "533" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/533", - "method": "patch", - "title": "533" - } - }, - "id": 533, - "comment": "", - "rawComment": "", - "details": [ - "Parent set to 232aa22" - ], - "htmlDetails": [ - "Parent set to 232aa22" - ], - "version": 20, - "createdAt": "2014-11-12T16:16:51Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/535", - "title": "535" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/535", - "method": "patch", - "title": "535" - } - }, - "id": 535, - "comment": "", - "rawComment": "", - "details": [ - "Parent changed from 232aa22 to asd" - ], - "htmlDetails": [ - "Parent changed from 232aa22 to asd" - ], - "version": 21, - "createdAt": "2014-11-12T16:19:01Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/536", - "title": "536" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/536", - "method": "patch", - "title": "536" - } - }, - "id": 536, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/536/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 22, - "createdAt": "2014-11-12T16:23:26Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/537", - "title": "537" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/537", - "method": "patch", - "title": "537" - } - }, - "id": 537, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/537/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 23, - "createdAt": "2014-11-13T12:23:49Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/539", - "title": "539" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/539", - "method": "patch", - "title": "539" - } - }, - "id": 539, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from praesentium repellendus nam officia velit voluptas voluptas quasivv to 23123123" - ], - "htmlDetails": [ - "Subject changed from praesentium repellendus nam officia velit voluptas voluptas quasivv to 23123123" - ], - "version": 24, - "createdAt": "2014-11-17T14:03:47Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/540", - "title": "540" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/540", - "method": "patch", - "title": "540" - } - }, - "id": 540, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 23123123 to 3q4e4" - ], - "htmlDetails": [ - "Subject changed from 23123123 to 3q4e4" - ], - "version": 25, - "createdAt": "2014-11-17T14:07:43Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/541", - "title": "541" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/541", - "method": "patch", - "title": "541" - } - }, - "id": 541, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/541/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 26, - "createdAt": "2014-11-17T14:08:20Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/542", - "title": "542" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/542", - "method": "patch", - "title": "542" - } - }, - "id": 542, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/542/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 27, - "createdAt": "2014-11-17T14:08:27Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/543", - "title": "543" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/543", - "method": "patch", - "title": "543" - } - }, - "id": 543, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from new to in progress" - ], - "htmlDetails": [ - "Status changed from new to in progress" - ], - "version": 28, - "createdAt": "2014-11-17T14:08:38Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/544", - "title": "544" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/544", - "method": "patch", - "title": "544" - } - }, - "id": 544, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from in progress to tested" - ], - "htmlDetails": [ - "Status changed from in progress to tested" - ], - "version": 29, - "createdAt": "2014-11-17T14:11:36Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/546", - "title": "546" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/546", - "method": "patch", - "title": "546" - } - }, - "id": 546, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from tested to closed" - ], - "htmlDetails": [ - "Status changed from tested to closed" - ], - "version": 30, - "createdAt": "2014-11-17T14:11:41Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/548", - "title": "548" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/548", - "method": "patch", - "title": "548" - } - }, - "id": 548, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from closed to in progress" - ], - "htmlDetails": [ - "Status changed from closed to in progress" - ], - "version": 31, - "createdAt": "2014-11-17T14:11:51Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/549", - "title": "549" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/549", - "method": "patch", - "title": "549" - } - }, - "id": 549, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/549/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 32, - "createdAt": "2014-11-17T14:13:06Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/550", - "title": "550" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/550", - "method": "patch", - "title": "550" - } - }, - "id": 550, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 3q4e4 to 3q4e4s" - ], - "htmlDetails": [ - "Subject changed from 3q4e4 to 3q4e4s" - ], - "version": 33, - "createdAt": "2014-11-17T14:14:53Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/551", - "title": "551" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/551", - "method": "patch", - "title": "551" - } - }, - "id": 551, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/551/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 34, - "createdAt": "2014-11-17T14:17:41Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/5821", - "title": "5821" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/5821", - "method": "patch", - "title": "5821" - } - }, - "id": 5821, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 3q4e4s to 2" - ], - "htmlDetails": [ - "Subject changed from 3q4e4s to 2" - ], - "version": 35, - "createdAt": "2014-11-17T14:17:44Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/553", - "title": "553" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/553", - "method": "patch", - "title": "553" - } - }, - "id": 553, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 2 to 22" - ], - "htmlDetails": [ - "Subject changed from 2 to 22" - ], - "version": 36, - "createdAt": "2014-11-17T14:17:51Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/554", - "title": "554" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/554", - "method": "patch", - "title": "554" - } - }, - "id": 554, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 22 to 2323" - ], - "htmlDetails": [ - "Subject changed from 22 to 2323" - ], - "version": 37, - "createdAt": "2014-11-17T14:18:33Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/555", - "title": "555" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/555", - "method": "patch", - "title": "555" - } - }, - "id": 555, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/555/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 38, - "createdAt": "2014-11-17T14:18:46Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/556", - "title": "556" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/556", - "method": "patch", - "title": "556" - } - }, - "id": 556, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 2323 to 2323123123" - ], - "htmlDetails": [ - "Subject changed from 2323 to 2323123123" - ], - "version": 39, - "createdAt": "2014-11-17T14:20:40Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/557", - "title": "557" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/557", - "method": "patch", - "title": "557" - } - }, - "id": 557, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 2323123123 to 22" - ], - "htmlDetails": [ - "Subject changed from 2323123123 to 22" - ], - "version": 40, - "createdAt": "2014-11-17T14:22:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/559", - "title": "559" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/559", - "method": "patch", - "title": "559" - } - }, - "id": 559, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from in progress to rejected" - ], - "htmlDetails": [ - "Status changed from in progress to rejected" - ], - "version": 41, - "createdAt": "2014-11-17T14:22:34Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/560", - "title": "560" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/560", - "method": "patch", - "title": "560" - } - }, - "id": 560, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 22 to 2222" - ], - "htmlDetails": [ - "Subject changed from 22 to 2222" - ], - "version": 42, - "createdAt": "2014-11-17T14:25:07Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/562", - "title": "562" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/562", - "method": "patch", - "title": "562" - } - }, - "id": 562, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from rejected to tested" - ], - "htmlDetails": [ - "Status changed from rejected to tested" - ], - "version": 43, - "createdAt": "2014-11-17T14:26:20Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/563", - "title": "563" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/563", - "method": "patch", - "title": "563" - } - }, - "id": 563, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/563/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 44, - "createdAt": "2014-11-17T14:26:29Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/564", - "title": "564" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/564", - "method": "patch", - "title": "564" - } - }, - "id": 564, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 2222 to sad" - ], - "htmlDetails": [ - "Subject changed from 2222 to sad" - ], - "version": 45, - "createdAt": "2014-11-17T14:26:31Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/565", - "title": "565" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/565", - "method": "patch", - "title": "565" - } - }, - "id": 565, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/565/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 46, - "createdAt": "2014-11-18T12:46:00Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/566", - "title": "566" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/566", - "method": "patch", - "title": "566" - } - }, - "id": 566, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/566/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 47, - "createdAt": "2014-11-18T12:48:821Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/567", - "title": "567" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/567", - "method": "patch", - "title": "567" - } - }, - "id": 567, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/567/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 48, - "createdAt": "2014-11-18T12:821:34Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/568", - "title": "568" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/568", - "method": "patch", - "title": "568" - } - }, - "id": 568, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/568/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 49, - "createdAt": "2014-11-18T12:53:03Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/569", - "title": "569" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/569", - "method": "patch", - "title": "569" - } - }, - "id": 569, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/569/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 50, - "createdAt": "2014-11-18T14:10:48Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/570", - "title": "570" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/570", - "method": "patch", - "title": "570" - } - }, - "id": 570, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/570/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 51, - "createdAt": "2014-11-18T14:10:55Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/571", - "title": "571" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/571", - "method": "patch", - "title": "571" - } - }, - "id": 571, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/571/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 821, - "createdAt": "2014-11-18T14:11:22Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/572", - "title": "572" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/572", - "method": "patch", - "title": "572" - } - }, - "id": 572, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/572/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 53, - "createdAt": "2014-11-19T12:53:54Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/573", - "title": "573" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/573", - "method": "patch", - "title": "573" - } - }, - "id": 573, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from sad to sadaa" - ], - "htmlDetails": [ - "Subject changed from sad to sadaa" - ], - "version": 54, - "createdAt": "2014-11-21T08:32:09Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/574", - "title": "574" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/574", - "method": "patch", - "title": "574" - } - }, - "id": 574, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/574/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 55, - "createdAt": "2014-11-21T08:34:01Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/575", - "title": "575" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/575", - "method": "patch", - "title": "575" - } - }, - "id": 575, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from sadaa to sadaa222" - ], - "htmlDetails": [ - "Subject changed from sadaa to sadaa222" - ], - "version": 56, - "createdAt": "2014-11-21T08:38:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/576", - "title": "576" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/576", - "method": "patch", - "title": "576" - } - }, - "id": 576, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from sadaa222 to sadaa22222" - ], - "htmlDetails": [ - "Subject changed from sadaa222 to sadaa22222" - ], - "version": 57, - "createdAt": "2014-11-21T08:41:25Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/577", - "title": "577" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/577", - "method": "patch", - "title": "577" - } - }, - "id": 577, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from sadaa22222 to 23" - ], - "htmlDetails": [ - "Subject changed from sadaa22222 to 23" - ], - "version": 58, - "createdAt": "2014-11-21T08:47:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/578", - "title": "578" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/578", - "method": "patch", - "title": "578" - } - }, - "id": 578, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 23 to 66666" - ], - "htmlDetails": [ - "Subject changed from 23 to 66666" - ], - "version": 59, - "createdAt": "2014-11-21T08:48:27Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/580", - "title": "580" - }, - "workPackage": { - "href": "/api/v3/work_packages/821", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/580", - "method": "patch", - "title": "580" - } - }, - "id": 580, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from tested to rejected" - ], - "htmlDetails": [ - "Status changed from tested to rejected" - ], - "version": 60, - "createdAt": "2014-11-21T08:48:57Z" + "activities": { + "_type": "Collection", + "_links": { + "self": { "href": "/api/v3/work_packages/821/activities" } + }, + "total": 4, + "count": 4, + "_embedded": { + "elements": [ + { + "_type": "Activity", + "_links": { + "self": { + "href": "/api/v3/activities/333", + "title": "333" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/3", + "title": "Anonymous - " + }, + "update": { + "href": "/api/v3/activities/333", + "method": "patch", + "title": "333" + } + }, + "id": 333, + "comment": { + "format": "textile", + "raw": "", + "html": "" + }, + "details": [ + { + "format": "custom", + "raw": "Type set to Phase", + "html": "Type set to Phase" + }, + { + "format": "custom", + "raw": "Project set to Seeded Project", + "html": "Project set to Seeded Project" + }, + { + "format": "custom", + "raw": "Subject set to veritatis voluptas hic qui praesentium tempora illum omnis", + "html": "Subject set to veritatis voluptas hic qui praesentium tempora illum omnis" + }, + { + "format": "custom", + "raw": "Description set (/journals/333/diff/description)", + "html": "Description set (Details)" + }, + { + "format": "custom", + "raw": "Due date set to 04/29/2015", + "html": "Due date set to 04/29/2015" + }, + { + "format": "custom", + "raw": "Status set to new", + "html": "Status set to new" + }, + { + "format": "custom", + "raw": "Priority set to Normal", + "html": "Priority set to Normal" + }, + { + "format": "custom", + "raw": "Author set to Alexandrine Heidenreich", + "html": "Author set to Alexandrine Heidenreich" + }, + { + "format": "custom", + "raw": "% done changed from 0 to 0", + "html": "% done changed from 0 to 0" + }, + { + "format": "custom", + "raw": "Start date set to 02/17/2015", + "html": "Start date set to 02/17/2015" + } + ], + "version": 1, + "createdAt": "2015-02-13T10:09:07+00:00" + }, + { + "_type": "Activity", + "_links": { + "self": { + "href": "/api/v3/activities/816", + "title": "816" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/1", + "title": "OpenProject Admin - admin" + }, + "update": { + "href": "/api/v3/activities/816", + "method": "patch", + "title": "816" + } + }, + "id": 816, + "comment": { + "format": "textile", + "raw": "", + "html": "" + }, + "details": [ + { + "format": "custom", + "raw": "Status changed from new to in progress", + "html": "Status changed from new to in progress" + } + ], + "version": 2, + "createdAt": "2015-04-07T13:36:43+00:00" + }, + { + "_type": "Activity::Comment", + "_links": { + "self": { + "href": "/api/v3/activities/817", + "title": "817" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/1", + "title": "OpenProject Admin - admin" + }, + "update": { + "href": "/api/v3/activities/817", + "method": "patch", + "title": "817" + } + }, + "id": 817, + "comment": { + "format": "textile", + "raw": "I have a comment", + "html": "

    I have a comment

    " + }, + "details": [], + "version": 3, + "createdAt": "2015-04-07T13:37:09+00:00" + }, + { + "_type": "Activity::Comment", + "_links": { + "self": { + "href": "/api/v3/activities/818", + "title": "818" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/1", + "title": "OpenProject Admin - admin" + }, + "update": { + "href": "/api/v3/activities/818", + "method": "patch", + "title": "818" + } + }, + "id": 818, + "comment": { + "format": "textile", + "raw": "And another one", + "html": "

    And another one

    " + }, + "details": [], + "version": 4, + "createdAt": "2015-04-07T13:37:33+00:00" + } + ] } - ], + }, "version": { "_type": "Version", "_links": { diff --git a/frontend/tests/integration/mocks/work-packages/822.json b/frontend/tests/integration/mocks/work-packages/822.json index 3853803482..4032e147e3 100644 --- a/frontend/tests/integration/mocks/work-packages/822.json +++ b/frontend/tests/integration/mocks/work-packages/822.json @@ -99,6 +99,9 @@ }, "attachments": { "href": "/api/v3/work_packages/822/attachments" + }, + "activities": { + "href": "/api/v3/work_packages/822/activities" } }, "id": 822, @@ -191,2460 +194,199 @@ "updatedAt": "2014-12-03T14:58:37Z", "status": 1 }, - "activities": [ - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/315", - "title": "315" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/3", - "title": "Anonymous - " - }, - "update": { - "href": "/api/v3/activities/315", - "method": "patch", - "title": "315" - } - }, - "id": 315, - "comment": "", - "rawComment": "", - "details": [ - "Type set to Feature", - "Project set to Seeded Project", - "Subject set to praesentium repellendus nam officia velit voluptas voluptas quasi", - "Description set (/journals/315/diff/description)", - "Due date set to 12/27/2014", - "Status set to new", - "Priority set to Normal", - "Author set to Freida Fay", - "% done changed from 0 to 0", - "Start date set to 10/23/2014" - ], - "htmlDetails": [ - "Type set to Feature", - "Project set to Seeded Project", - "Subject set to praesentium repellendus nam officia velit voluptas voluptas quasi", - "Description set (Details)", - "Due date set to 12/27/2014", - "Status set to new", - "Priority set to Normal", - "Author set to Freida Fay", - "% done changed from 0 to 0", - "Start date set to 10/23/2014" - ], - "version": 1, - "createdAt": "2014-11-05T15:56:53Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/500", - "title": "500" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/500", - "method": "patch", - "title": "500" - } - }, - "id": 500, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/500/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 2, - "createdAt": "2014-11-10T12:31:10Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/501", - "title": "501" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/501", - "method": "patch", - "title": "501" - } - }, - "id": 501, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/501/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 3, - "createdAt": "2014-11-10T12:31:53Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/502", - "title": "502" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/502", - "method": "patch", - "title": "502" - } - }, - "id": 502, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/502/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 4, - "createdAt": "2014-11-10T12:31:59Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/503", - "title": "503" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/503", - "method": "patch", - "title": "503" - } - }, - "id": 503, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/503/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 5, - "createdAt": "2014-11-10T12:32:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/504", - "title": "504" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/504", - "method": "patch", - "title": "504" - } - }, - "id": 504, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/504/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 6, - "createdAt": "2014-11-10T12:32:27Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/505", - "title": "505" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/505", - "method": "patch", - "title": "505" - } - }, - "id": 505, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/505/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 7, - "createdAt": "2014-11-10T12:32:31Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/506", - "title": "506" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/506", - "method": "patch", - "title": "506" - } - }, - "id": 506, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/506/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 8, - "createdAt": "2014-11-10T12:32:40Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/507", - "title": "507" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/507", - "method": "patch", - "title": "507" - } - }, - "id": 507, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/507/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 9, - "createdAt": "2014-11-10T12:32:45Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/511", - "title": "511" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/511", - "method": "patch", - "title": "511" - } - }, - "id": 511, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/511/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 10, - "createdAt": "2014-11-10T14:10:51Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/512", - "title": "512" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/512", - "method": "patch", - "title": "512" - } - }, - "id": 512, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/512/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 11, - "createdAt": "2014-11-10T14:42:50Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/513", - "title": "513" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/513", - "method": "patch", - "title": "513" - } - }, - "id": 513, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/513/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 12, - "createdAt": "2014-11-10T14:44:11Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/514", - "title": "514" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/514", - "method": "patch", - "title": "514" - } - }, - "id": 514, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/514/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 13, - "createdAt": "2014-11-10T14:44:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/515", - "title": "515" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/515", - "method": "patch", - "title": "515" - } - }, - "id": 515, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/515/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 14, - "createdAt": "2014-11-10T14:47:36Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/516", - "title": "516" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/516", - "method": "patch", - "title": "516" - } - }, - "id": 516, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/516/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 15, - "createdAt": "2014-11-10T14:822:47Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/517", - "title": "517" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/517", - "method": "patch", - "title": "517" - } - }, - "id": 517, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/517/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 16, - "createdAt": "2014-11-10T14:53:17Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/518", - "title": "518" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/518", - "method": "patch", - "title": "518" - } - }, - "id": 518, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/518/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 17, - "createdAt": "2014-11-10T15:17:34Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/8223", - "title": "8223" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/8223", - "method": "patch", - "title": "8223" - } - }, - "id": 8223, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from praesentium repellendus nam officia velit voluptas voluptas quasi to praesentium repellendus nam officia velit voluptas voluptas quasivv" - ], - "htmlDetails": [ - "Subject changed from praesentium repellendus nam officia velit voluptas voluptas quasi to praesentium repellendus nam officia velit voluptas voluptas quasivv" - ], - "version": 18, - "createdAt": "2014-11-12T12:59:25Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/531", - "title": "531" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/531", - "method": "patch", - "title": "531" - } - }, - "id": 531, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/531/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 19, - "createdAt": "2014-11-12T13:42:54Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/533", - "title": "533" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/533", - "method": "patch", - "title": "533" - } - }, - "id": 533, - "comment": "", - "rawComment": "", - "details": [ - "Parent set to 5624777df" - ], - "htmlDetails": [ - "Parent set to 5624777df" - ], - "version": 20, - "createdAt": "2014-11-12T16:16:51Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/535", - "title": "535" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/535", - "method": "patch", - "title": "535" - } - }, - "id": 535, - "comment": "", - "rawComment": "", - "details": [ - "Parent changed from 5624777df to asdsadd" - ], - "htmlDetails": [ - "Parent changed from 5624777df to asdsadd" - ], - "version": 21, - "createdAt": "2014-11-12T16:19:01Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/536", - "title": "536" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/536", - "method": "patch", - "title": "536" - } - }, - "id": 536, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/536/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 22, - "createdAt": "2014-11-12T16:23:26Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/537", - "title": "537" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/537", - "method": "patch", - "title": "537" - } - }, - "id": 537, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/537/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 23, - "createdAt": "2014-11-13T12:23:49Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/539", - "title": "539" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/539", - "method": "patch", - "title": "539" - } - }, - "id": 539, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from praesentium repellendus nam officia velit voluptas voluptas quasivv to 23123123" - ], - "htmlDetails": [ - "Subject changed from praesentium repellendus nam officia velit voluptas voluptas quasivv to 23123123" - ], - "version": 24, - "createdAt": "2014-11-17T14:03:47Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/540", - "title": "540" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/540", - "method": "patch", - "title": "540" - } - }, - "id": 540, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 23123123 to 3q4e4" - ], - "htmlDetails": [ - "Subject changed from 23123123 to 3q4e4" - ], - "version": 25, - "createdAt": "2014-11-17T14:07:43Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/541", - "title": "541" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/541", - "method": "patch", - "title": "541" - } - }, - "id": 541, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/541/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 26, - "createdAt": "2014-11-17T14:08:20Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/542", - "title": "542" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/542", - "method": "patch", - "title": "542" - } - }, - "id": 542, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/542/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 27, - "createdAt": "2014-11-17T14:08:27Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/543", - "title": "543" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/543", - "method": "patch", - "title": "543" - } - }, - "id": 543, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from new to in progress" - ], - "htmlDetails": [ - "Status changed from new to in progress" - ], - "version": 28, - "createdAt": "2014-11-17T14:08:38Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/544", - "title": "544" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/544", - "method": "patch", - "title": "544" - } - }, - "id": 544, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from in progress to tested" - ], - "htmlDetails": [ - "Status changed from in progress to tested" - ], - "version": 29, - "createdAt": "2014-11-17T14:11:36Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/546", - "title": "546" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/546", - "method": "patch", - "title": "546" - } - }, - "id": 546, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from tested to closed" - ], - "htmlDetails": [ - "Status changed from tested to closed" - ], - "version": 30, - "createdAt": "2014-11-17T14:11:41Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/548", - "title": "548" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/548", - "method": "patch", - "title": "548" - } - }, - "id": 548, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from closed to in progress" - ], - "htmlDetails": [ - "Status changed from closed to in progress" - ], - "version": 31, - "createdAt": "2014-11-17T14:11:51Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/549", - "title": "549" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/549", - "method": "patch", - "title": "549" - } - }, - "id": 549, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/549/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 32, - "createdAt": "2014-11-17T14:13:06Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/550", - "title": "550" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/550", - "method": "patch", - "title": "550" - } - }, - "id": 550, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 3q4e4 to 3q4e4s" - ], - "htmlDetails": [ - "Subject changed from 3q4e4 to 3q4e4s" - ], - "version": 33, - "createdAt": "2014-11-17T14:14:53Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/551", - "title": "551" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/551", - "method": "patch", - "title": "551" - } - }, - "id": 551, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/551/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 34, - "createdAt": "2014-11-17T14:17:41Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/5822", - "title": "5822" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/5822", - "method": "patch", - "title": "5822" - } - }, - "id": 5822, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 3q4e4s to 2" - ], - "htmlDetails": [ - "Subject changed from 3q4e4s to 2" - ], - "version": 35, - "createdAt": "2014-11-17T14:17:44Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/553", - "title": "553" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/553", - "method": "patch", - "title": "553" - } - }, - "id": 553, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 2 to 22" - ], - "htmlDetails": [ - "Subject changed from 2 to 22" - ], - "version": 36, - "createdAt": "2014-11-17T14:17:51Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/554", - "title": "554" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/554", - "method": "patch", - "title": "554" - } - }, - "id": 554, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 22 to 2323" - ], - "htmlDetails": [ - "Subject changed from 22 to 2323" - ], - "version": 37, - "createdAt": "2014-11-17T14:18:33Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/555", - "title": "555" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/555", - "method": "patch", - "title": "555" - } - }, - "id": 555, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/555/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 38, - "createdAt": "2014-11-17T14:18:46Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/556", - "title": "556" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/556", - "method": "patch", - "title": "556" - } - }, - "id": 556, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 2323 to 2323123123" - ], - "htmlDetails": [ - "Subject changed from 2323 to 2323123123" - ], - "version": 39, - "createdAt": "2014-11-17T14:20:40Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/557", - "title": "557" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/557", - "method": "patch", - "title": "557" - } - }, - "id": 557, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 2323123123 to 22" - ], - "htmlDetails": [ - "Subject changed from 2323123123 to 22" - ], - "version": 40, - "createdAt": "2014-11-17T14:22:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/559", - "title": "559" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/559", - "method": "patch", - "title": "559" - } - }, - "id": 559, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from in progress to rejected" - ], - "htmlDetails": [ - "Status changed from in progress to rejected" - ], - "version": 41, - "createdAt": "2014-11-17T14:22:34Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/560", - "title": "560" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/560", - "method": "patch", - "title": "560" - } - }, - "id": 560, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 22 to 2222" - ], - "htmlDetails": [ - "Subject changed from 22 to 2222" - ], - "version": 42, - "createdAt": "2014-11-17T14:25:07Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/562", - "title": "562" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/562", - "method": "patch", - "title": "562" - } - }, - "id": 562, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from rejected to tested" - ], - "htmlDetails": [ - "Status changed from rejected to tested" - ], - "version": 43, - "createdAt": "2014-11-17T14:26:20Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/563", - "title": "563" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/563", - "method": "patch", - "title": "563" - } - }, - "id": 563, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/563/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 44, - "createdAt": "2014-11-17T14:26:29Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/564", - "title": "564" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/564", - "method": "patch", - "title": "564" - } - }, - "id": 564, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 2222 to sad" - ], - "htmlDetails": [ - "Subject changed from 2222 to sad" - ], - "version": 45, - "createdAt": "2014-11-17T14:26:31Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/565", - "title": "565" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/565", - "method": "patch", - "title": "565" - } - }, - "id": 565, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/565/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 46, - "createdAt": "2014-11-18T12:46:00Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/566", - "title": "566" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/566", - "method": "patch", - "title": "566" - } - }, - "id": 566, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/566/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 47, - "createdAt": "2014-11-18T12:48:822Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/567", - "title": "567" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/567", - "method": "patch", - "title": "567" - } - }, - "id": 567, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/567/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 48, - "createdAt": "2014-11-18T12:822:34Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/568", - "title": "568" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/568", - "method": "patch", - "title": "568" - } - }, - "id": 568, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/568/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 49, - "createdAt": "2014-11-18T12:53:03Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/569", - "title": "569" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/569", - "method": "patch", - "title": "569" - } - }, - "id": 569, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/569/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 50, - "createdAt": "2014-11-18T14:10:48Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/570", - "title": "570" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/570", - "method": "patch", - "title": "570" - } - }, - "id": 570, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/570/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 51, - "createdAt": "2014-11-18T14:10:55Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/571", - "title": "571" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/571", - "method": "patch", - "title": "571" - } - }, - "id": 571, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/571/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 822, - "createdAt": "2014-11-18T14:11:22Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/572", - "title": "572" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/572", - "method": "patch", - "title": "572" - } - }, - "id": 572, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/572/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 53, - "createdAt": "2014-11-19T12:53:54Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/573", - "title": "573" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/573", - "method": "patch", - "title": "573" - } - }, - "id": 573, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from sad to sadaa" - ], - "htmlDetails": [ - "Subject changed from sad to sadaa" - ], - "version": 54, - "createdAt": "2014-11-21T08:32:09Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/574", - "title": "574" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/574", - "method": "patch", - "title": "574" - } - }, - "id": 574, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/574/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 55, - "createdAt": "2014-11-21T08:34:01Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/575", - "title": "575" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/575", - "method": "patch", - "title": "575" - } - }, - "id": 575, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from sadaa to sadaa222" - ], - "htmlDetails": [ - "Subject changed from sadaa to sadaa222" - ], - "version": 56, - "createdAt": "2014-11-21T08:38:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/576", - "title": "576" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/576", - "method": "patch", - "title": "576" - } - }, - "id": 576, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from sadaa222 to sadaa22222" - ], - "htmlDetails": [ - "Subject changed from sadaa222 to sadaa22222" - ], - "version": 57, - "createdAt": "2014-11-21T08:41:25Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/577", - "title": "577" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/577", - "method": "patch", - "title": "577" - } - }, - "id": 577, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from sadaa22222 to 23" - ], - "htmlDetails": [ - "Subject changed from sadaa22222 to 23" - ], - "version": 58, - "createdAt": "2014-11-21T08:47:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/578", - "title": "578" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/578", - "method": "patch", - "title": "578" - } - }, - "id": 578, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 23 to 66666" - ], - "htmlDetails": [ - "Subject changed from 23 to 66666" - ], - "version": 59, - "createdAt": "2014-11-21T08:48:27Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/580", - "title": "580" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/580", - "method": "patch", - "title": "580" - } - }, - "id": 580, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from tested to rejected" - ], - "htmlDetails": [ - "Status changed from tested to rejected" - ], - "version": 60, - "createdAt": "2014-11-21T08:48:57Z" - }, - { - "_type": "Activity::Comment", - "_links": { - "self": { - "href": "/api/v3/activities/585", - "title": "585" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/585", - "method": "patch", - "title": "585" - } - }, - "id": 585, - "comment": "

    asdasd

    ", - "rawComment": "asdasd", - "details": [], - "htmlDetails": [], - "version": 61, - "createdAt": "2014-11-27T12:21:18Z" - }, - { - "_type": "Activity::Comment", - "_links": { - "self": { - "href": "/api/v3/activities/586", - "title": "586" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/586", - "method": "patch", - "title": "586" - } - }, - "id": 586, - "comment": "

    asd

    ", - "rawComment": "asd", - "details": [], - "htmlDetails": [], - "version": 62, - "createdAt": "2014-11-27T12:23:45Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/589", - "title": "589" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/589", - "method": "patch", - "title": "589" - } - }, - "id": 589, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 66666 to 66666o" - ], - "htmlDetails": [ - "Subject changed from 66666 to 66666o" - ], - "version": 63, - "createdAt": "2014-12-01T10:55:45Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/590", - "title": "590" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/590", - "method": "patch", - "title": "590" - } - }, - "id": 590, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 66666o to 66666os" - ], - "htmlDetails": [ - "Subject changed from 66666o to 66666os" - ], - "version": 64, - "createdAt": "2014-12-01T12:37:27Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/591", - "title": "591" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/591", - "method": "patch", - "title": "591" - } - }, - "id": 591, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/591/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 65, - "createdAt": "2014-12-01T14:22:31Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/592", - "title": "592" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/592", - "method": "patch", - "title": "592" - } - }, - "id": 592, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/592/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 66, - "createdAt": "2014-12-01T14:22:46Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/593", - "title": "593" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/593", - "method": "patch", - "title": "593" - } - }, - "id": 593, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/593/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 67, - "createdAt": "2014-12-01T14:22:822Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/634", - "title": "634" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/634", - "method": "patch", - "title": "634" - } - }, - "id": 634, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/634/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 68, - "createdAt": "2014-12-03T14:49:02Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/635", - "title": "635" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/635", - "method": "patch", - "title": "635" - } - }, - "id": 635, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/635/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 69, - "createdAt": "2014-12-03T14:49:29Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/636", - "title": "636" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/636", - "method": "patch", - "title": "636" - } - }, - "id": 636, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 66666os to 66666os=" - ], - "htmlDetails": [ - "Subject changed from 66666os to 66666os=" - ], - "version": 70, - "createdAt": "2014-12-03T14:51:08Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/637", - "title": "637" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/637", - "method": "patch", - "title": "637" - } - }, - "id": 637, - "comment": "", - "rawComment": "", - "details": [ - "Assignee set to OpenProject Admin" - ], - "htmlDetails": [ - "Assignee set to OpenProject Admin" - ], - "version": 71, - "createdAt": "2014-12-03T14:51:54Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/638", - "title": "638" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/638", - "method": "patch", - "title": "638" - } - }, - "id": 638, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/638/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 72, - "createdAt": "2014-12-03T14:54:18Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/639", - "title": "639" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/639", - "method": "patch", - "title": "639" - } - }, - "id": 639, - "comment": "", - "rawComment": "", - "details": [ - "Responsible set to OpenProject Admin" - ], - "htmlDetails": [ - "Responsible set to OpenProject Admin" - ], - "version": 73, - "createdAt": "2014-12-03T14:57:23Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/662", - "title": "662" - }, - "workPackage": { - "href": "/api/v3/work_packages/822", - "title": "66666os=" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/662", - "method": "patch", - "title": "662" - } - }, - "id": 662, - "comment": "", - "rawComment": "", - "details": [ - "Assignee deleted (OpenProject Admin)" - ], - "htmlDetails": [ - "Assignee deleted (OpenProject Admin)" - ], - "version": 74, - "createdAt": "2014-12-04T09:48:50Z" + "activities": { + "_type": "Collection", + "_links": { + "self": { "href": "/api/v3/work_packages/822/activities" } + }, + "total": 4, + "count": 4, + "_embedded": { + "elements": [ + { + "_type": "Activity", + "_links": { + "self": { + "href": "/api/v3/activities/333", + "title": "333" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/3", + "title": "Anonymous - " + }, + "update": { + "href": "/api/v3/activities/333", + "method": "patch", + "title": "333" + } + }, + "id": 333, + "comment": { + "format": "textile", + "raw": "", + "html": "" + }, + "details": [ + { + "format": "custom", + "raw": "Type set to Phase", + "html": "Type set to Phase" + }, + { + "format": "custom", + "raw": "Project set to Seeded Project", + "html": "Project set to Seeded Project" + }, + { + "format": "custom", + "raw": "Subject set to veritatis voluptas hic qui praesentium tempora illum omnis", + "html": "Subject set to veritatis voluptas hic qui praesentium tempora illum omnis" + }, + { + "format": "custom", + "raw": "Description set (/journals/333/diff/description)", + "html": "Description set (Details)" + }, + { + "format": "custom", + "raw": "Due date set to 04/29/2015", + "html": "Due date set to 04/29/2015" + }, + { + "format": "custom", + "raw": "Status set to new", + "html": "Status set to new" + }, + { + "format": "custom", + "raw": "Priority set to Normal", + "html": "Priority set to Normal" + }, + { + "format": "custom", + "raw": "Author set to Alexandrine Heidenreich", + "html": "Author set to Alexandrine Heidenreich" + }, + { + "format": "custom", + "raw": "% done changed from 0 to 0", + "html": "% done changed from 0 to 0" + }, + { + "format": "custom", + "raw": "Start date set to 02/17/2015", + "html": "Start date set to 02/17/2015" + } + ], + "version": 1, + "createdAt": "2015-02-13T10:09:07+00:00" + }, + { + "_type": "Activity", + "_links": { + "self": { + "href": "/api/v3/activities/816", + "title": "816" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/1", + "title": "OpenProject Admin - admin" + }, + "update": { + "href": "/api/v3/activities/816", + "method": "patch", + "title": "816" + } + }, + "id": 816, + "comment": { + "format": "textile", + "raw": "", + "html": "" + }, + "details": [ + { + "format": "custom", + "raw": "Status changed from new to in progress", + "html": "Status changed from new to in progress" + } + ], + "version": 2, + "createdAt": "2015-04-07T13:36:43+00:00" + }, + { + "_type": "Activity::Comment", + "_links": { + "self": { + "href": "/api/v3/activities/817", + "title": "817" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/1", + "title": "OpenProject Admin - admin" + }, + "update": { + "href": "/api/v3/activities/817", + "method": "patch", + "title": "817" + } + }, + "id": 817, + "comment": { + "format": "textile", + "raw": "I have a comment", + "html": "

    I have a comment

    " + }, + "details": [], + "version": 3, + "createdAt": "2015-04-07T13:37:09+00:00" + }, + { + "_type": "Activity::Comment", + "_links": { + "self": { + "href": "/api/v3/activities/818", + "title": "818" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/1", + "title": "OpenProject Admin - admin" + }, + "update": { + "href": "/api/v3/activities/818", + "method": "patch", + "title": "818" + } + }, + "id": 818, + "comment": { + "format": "textile", + "raw": "And another one", + "html": "

    And another one

    " + }, + "details": [], + "version": 4, + "createdAt": "2015-04-07T13:37:33+00:00" + } + ] } - ], + }, "version": { "_type": "Version", "_links": { diff --git a/frontend/tests/integration/mocks/work-packages/823.json b/frontend/tests/integration/mocks/work-packages/823.json index dedecefdff..bb9452fb2e 100644 --- a/frontend/tests/integration/mocks/work-packages/823.json +++ b/frontend/tests/integration/mocks/work-packages/823.json @@ -99,6 +99,9 @@ }, "attachments": { "href": "/api/v3/work_packages/823/attachments" + }, + "activities": { + "href": "/api/v3/work_packages/823/activities" } }, "id": 823, @@ -191,2009 +194,199 @@ "updatedAt": "2014-11-05T15:56:823Z", "status": 1 }, - "activities": [ - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/315", - "title": "315" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/3", - "title": "Anonymous - " - }, - "update": { - "href": "/api/v3/activities/315", - "method": "patch", - "title": "315" - } - }, - "id": 315, - "comment": "", - "rawComment": "", - "details": [ - "Type set to Feature", - "Project set to Seeded Project", - "Subject set to praesentium repellendus nam officia velit voluptas voluptas quasi", - "Description set (/journals/315/diff/description)", - "Due date set to 12/27/2014", - "Status set to new", - "Priority set to Normal", - "Author set to Freida Fay", - "% done changed from 0 to 0", - "Start date set to 10/23/2014" - ], - "htmlDetails": [ - "Type set to Feature", - "Project set to Seeded Project", - "Subject set to praesentium repellendus nam officia velit voluptas voluptas quasi", - "Description set (Details)", - "Due date set to 12/27/2014", - "Status set to new", - "Priority set to Normal", - "Author set to Freida Fay", - "% done changed from 0 to 0", - "Start date set to 10/23/2014" - ], - "version": 1, - "createdAt": "2014-11-05T15:56:53Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/500", - "title": "500" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/500", - "method": "patch", - "title": "500" - } - }, - "id": 500, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/500/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 2, - "createdAt": "2014-11-10T12:31:10Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/501", - "title": "501" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/501", - "method": "patch", - "title": "501" - } - }, - "id": 501, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/501/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 3, - "createdAt": "2014-11-10T12:31:53Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/502", - "title": "502" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/502", - "method": "patch", - "title": "502" - } - }, - "id": 502, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/502/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 4, - "createdAt": "2014-11-10T12:31:59Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/503", - "title": "503" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/503", - "method": "patch", - "title": "503" - } - }, - "id": 503, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/503/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 5, - "createdAt": "2014-11-10T12:32:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/504", - "title": "504" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/504", - "method": "patch", - "title": "504" - } - }, - "id": 504, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/504/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 6, - "createdAt": "2014-11-10T12:32:27Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/505", - "title": "505" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/505", - "method": "patch", - "title": "505" - } - }, - "id": 505, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/505/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 7, - "createdAt": "2014-11-10T12:32:31Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/506", - "title": "506" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/506", - "method": "patch", - "title": "506" - } - }, - "id": 506, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/506/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 8, - "createdAt": "2014-11-10T12:32:40Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/507", - "title": "507" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/507", - "method": "patch", - "title": "507" - } - }, - "id": 507, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/507/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 9, - "createdAt": "2014-11-10T12:32:45Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/511", - "title": "511" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/511", - "method": "patch", - "title": "511" - } - }, - "id": 511, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/511/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 10, - "createdAt": "2014-11-10T14:10:51Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/512", - "title": "512" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/512", - "method": "patch", - "title": "512" - } - }, - "id": 512, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/512/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 11, - "createdAt": "2014-11-10T14:42:50Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/513", - "title": "513" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/513", - "method": "patch", - "title": "513" - } - }, - "id": 513, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/513/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 12, - "createdAt": "2014-11-10T14:44:11Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/514", - "title": "514" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/514", - "method": "patch", - "title": "514" - } - }, - "id": 514, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/514/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 13, - "createdAt": "2014-11-10T14:44:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/515", - "title": "515" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/515", - "method": "patch", - "title": "515" - } - }, - "id": 515, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/515/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 14, - "createdAt": "2014-11-10T14:47:36Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/516", - "title": "516" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/516", - "method": "patch", - "title": "516" - } - }, - "id": 516, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/516/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 15, - "createdAt": "2014-11-10T14:823:47Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/517", - "title": "517" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/517", - "method": "patch", - "title": "517" - } - }, - "id": 517, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/517/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 16, - "createdAt": "2014-11-10T14:53:17Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/518", - "title": "518" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/518", - "method": "patch", - "title": "518" - } - }, - "id": 518, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/518/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 17, - "createdAt": "2014-11-10T15:17:34Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/8233", - "title": "8233" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/8233", - "method": "patch", - "title": "8233" - } - }, - "id": 8233, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from praesentium repellendus nam officia velit voluptas voluptas quasi to praesentium repellendus nam officia velit voluptas voluptas quasivv" - ], - "htmlDetails": [ - "Subject changed from praesentium repellendus nam officia velit voluptas voluptas quasi to praesentium repellendus nam officia velit voluptas voluptas quasivv" - ], - "version": 18, - "createdAt": "2014-11-12T12:59:25Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/531", - "title": "531" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/531", - "method": "patch", - "title": "531" - } - }, - "id": 531, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/531/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 19, - "createdAt": "2014-11-12T13:42:54Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/533", - "title": "533" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/533", - "method": "patch", - "title": "533" - } - }, - "id": 533, - "comment": "", - "rawComment": "", - "details": [ - "Parent set to 232aa22" - ], - "htmlDetails": [ - "Parent set to 232aa22" - ], - "version": 20, - "createdAt": "2014-11-12T16:16:51Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/535", - "title": "535" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/535", - "method": "patch", - "title": "535" - } - }, - "id": 535, - "comment": "", - "rawComment": "", - "details": [ - "Parent changed from 232aa22 to asd" - ], - "htmlDetails": [ - "Parent changed from 232aa22 to asd" - ], - "version": 21, - "createdAt": "2014-11-12T16:19:01Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/536", - "title": "536" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/536", - "method": "patch", - "title": "536" - } - }, - "id": 536, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/536/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 22, - "createdAt": "2014-11-12T16:23:26Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/537", - "title": "537" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/537", - "method": "patch", - "title": "537" - } - }, - "id": 537, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/537/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 23, - "createdAt": "2014-11-13T12:23:49Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/539", - "title": "539" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/539", - "method": "patch", - "title": "539" - } - }, - "id": 539, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from praesentium repellendus nam officia velit voluptas voluptas quasivv to 23123123" - ], - "htmlDetails": [ - "Subject changed from praesentium repellendus nam officia velit voluptas voluptas quasivv to 23123123" - ], - "version": 24, - "createdAt": "2014-11-17T14:03:47Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/540", - "title": "540" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/540", - "method": "patch", - "title": "540" - } - }, - "id": 540, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 23123123 to 3q4e4" - ], - "htmlDetails": [ - "Subject changed from 23123123 to 3q4e4" - ], - "version": 25, - "createdAt": "2014-11-17T14:07:43Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/541", - "title": "541" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/541", - "method": "patch", - "title": "541" - } - }, - "id": 541, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/541/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 26, - "createdAt": "2014-11-17T14:08:20Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/542", - "title": "542" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/542", - "method": "patch", - "title": "542" - } - }, - "id": 542, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/542/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 27, - "createdAt": "2014-11-17T14:08:27Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/543", - "title": "543" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/543", - "method": "patch", - "title": "543" - } - }, - "id": 543, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from new to in progress" - ], - "htmlDetails": [ - "Status changed from new to in progress" - ], - "version": 28, - "createdAt": "2014-11-17T14:08:38Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/544", - "title": "544" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/544", - "method": "patch", - "title": "544" - } - }, - "id": 544, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from in progress to tested" - ], - "htmlDetails": [ - "Status changed from in progress to tested" - ], - "version": 29, - "createdAt": "2014-11-17T14:11:36Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/546", - "title": "546" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/546", - "method": "patch", - "title": "546" - } - }, - "id": 546, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from tested to closed" - ], - "htmlDetails": [ - "Status changed from tested to closed" - ], - "version": 30, - "createdAt": "2014-11-17T14:11:41Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/548", - "title": "548" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/548", - "method": "patch", - "title": "548" - } - }, - "id": 548, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from closed to in progress" - ], - "htmlDetails": [ - "Status changed from closed to in progress" - ], - "version": 31, - "createdAt": "2014-11-17T14:11:51Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/549", - "title": "549" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/549", - "method": "patch", - "title": "549" - } - }, - "id": 549, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/549/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 32, - "createdAt": "2014-11-17T14:13:06Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/550", - "title": "550" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/550", - "method": "patch", - "title": "550" - } - }, - "id": 550, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 3q4e4 to 3q4e4s" - ], - "htmlDetails": [ - "Subject changed from 3q4e4 to 3q4e4s" - ], - "version": 33, - "createdAt": "2014-11-17T14:14:53Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/551", - "title": "551" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/551", - "method": "patch", - "title": "551" - } - }, - "id": 551, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/551/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 34, - "createdAt": "2014-11-17T14:17:41Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/5823", - "title": "5823" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/5823", - "method": "patch", - "title": "5823" - } - }, - "id": 5823, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 3q4e4s to 2" - ], - "htmlDetails": [ - "Subject changed from 3q4e4s to 2" - ], - "version": 35, - "createdAt": "2014-11-17T14:17:44Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/553", - "title": "553" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/553", - "method": "patch", - "title": "553" - } - }, - "id": 553, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 2 to 22" - ], - "htmlDetails": [ - "Subject changed from 2 to 22" - ], - "version": 36, - "createdAt": "2014-11-17T14:17:51Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/554", - "title": "554" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/554", - "method": "patch", - "title": "554" - } - }, - "id": 554, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 22 to 2323" - ], - "htmlDetails": [ - "Subject changed from 22 to 2323" - ], - "version": 37, - "createdAt": "2014-11-17T14:18:33Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/555", - "title": "555" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/555", - "method": "patch", - "title": "555" - } - }, - "id": 555, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/555/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 38, - "createdAt": "2014-11-17T14:18:46Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/556", - "title": "556" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/556", - "method": "patch", - "title": "556" - } - }, - "id": 556, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 2323 to 2323123123" - ], - "htmlDetails": [ - "Subject changed from 2323 to 2323123123" - ], - "version": 39, - "createdAt": "2014-11-17T14:20:40Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/557", - "title": "557" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/557", - "method": "patch", - "title": "557" - } - }, - "id": 557, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 2323123123 to 22" - ], - "htmlDetails": [ - "Subject changed from 2323123123 to 22" - ], - "version": 40, - "createdAt": "2014-11-17T14:22:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/559", - "title": "559" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/559", - "method": "patch", - "title": "559" - } - }, - "id": 559, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from in progress to rejected" - ], - "htmlDetails": [ - "Status changed from in progress to rejected" - ], - "version": 41, - "createdAt": "2014-11-17T14:22:34Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/560", - "title": "560" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/560", - "method": "patch", - "title": "560" - } - }, - "id": 560, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 22 to 2222" - ], - "htmlDetails": [ - "Subject changed from 22 to 2222" - ], - "version": 42, - "createdAt": "2014-11-17T14:25:07Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/562", - "title": "562" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/562", - "method": "patch", - "title": "562" - } - }, - "id": 562, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from rejected to tested" - ], - "htmlDetails": [ - "Status changed from rejected to tested" - ], - "version": 43, - "createdAt": "2014-11-17T14:26:20Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/563", - "title": "563" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/563", - "method": "patch", - "title": "563" - } - }, - "id": 563, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/563/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 44, - "createdAt": "2014-11-17T14:26:29Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/564", - "title": "564" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/564", - "method": "patch", - "title": "564" - } - }, - "id": 564, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 2222 to sad" - ], - "htmlDetails": [ - "Subject changed from 2222 to sad" - ], - "version": 45, - "createdAt": "2014-11-17T14:26:31Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/565", - "title": "565" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/565", - "method": "patch", - "title": "565" - } - }, - "id": 565, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/565/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 46, - "createdAt": "2014-11-18T12:46:00Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/566", - "title": "566" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/566", - "method": "patch", - "title": "566" - } - }, - "id": 566, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/566/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 47, - "createdAt": "2014-11-18T12:48:823Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/567", - "title": "567" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/567", - "method": "patch", - "title": "567" - } - }, - "id": 567, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/567/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 48, - "createdAt": "2014-11-18T12:823:34Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/568", - "title": "568" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/568", - "method": "patch", - "title": "568" - } - }, - "id": 568, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/568/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 49, - "createdAt": "2014-11-18T12:53:03Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/569", - "title": "569" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/569", - "method": "patch", - "title": "569" - } - }, - "id": 569, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/569/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 50, - "createdAt": "2014-11-18T14:10:48Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/570", - "title": "570" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/570", - "method": "patch", - "title": "570" - } - }, - "id": 570, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/570/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 51, - "createdAt": "2014-11-18T14:10:55Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/571", - "title": "571" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/571", - "method": "patch", - "title": "571" - } - }, - "id": 571, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/571/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 823, - "createdAt": "2014-11-18T14:11:22Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/572", - "title": "572" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/572", - "method": "patch", - "title": "572" - } - }, - "id": 572, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/572/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 53, - "createdAt": "2014-11-19T12:53:54Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/573", - "title": "573" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/573", - "method": "patch", - "title": "573" - } - }, - "id": 573, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from sad to sadaa" - ], - "htmlDetails": [ - "Subject changed from sad to sadaa" - ], - "version": 54, - "createdAt": "2014-11-21T08:32:09Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/574", - "title": "574" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/574", - "method": "patch", - "title": "574" - } - }, - "id": 574, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/574/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 55, - "createdAt": "2014-11-21T08:34:01Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/575", - "title": "575" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/575", - "method": "patch", - "title": "575" - } - }, - "id": 575, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from sadaa to sadaa222" - ], - "htmlDetails": [ - "Subject changed from sadaa to sadaa222" - ], - "version": 56, - "createdAt": "2014-11-21T08:38:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/576", - "title": "576" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/576", - "method": "patch", - "title": "576" - } - }, - "id": 576, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from sadaa222 to sadaa22222" - ], - "htmlDetails": [ - "Subject changed from sadaa222 to sadaa22222" - ], - "version": 57, - "createdAt": "2014-11-21T08:41:25Z" + "activities": { + "_type": "Collection", + "_links": { + "self": { "href": "/api/v3/work_packages/823/activities" } }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/577", - "title": "577" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/577", - "method": "patch", - "title": "577" - } - }, - "id": 577, - "comment": "", - "rawComment": "", - "details": [ + "total": 4, + "count": 4, + "_embedded": { + "elements": [ { - "format": "textile", - "raw": "Subject changed from sadaa22222 to 23", - "html": "Subject changed from sadaa22222 to 23" - } - ], - "version": 58, - "createdAt": "2014-11-21T08:47:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/578", - "title": "578" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" + "_type": "Activity", + "_links": { + "self": { + "href": "/api/v3/activities/333", + "title": "333" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/3", + "title": "Anonymous - " + }, + "update": { + "href": "/api/v3/activities/333", + "method": "patch", + "title": "333" + } + }, + "id": 333, + "comment": { + "format": "textile", + "raw": "", + "html": "" + }, + "details": [ + { + "format": "custom", + "raw": "Type set to Phase", + "html": "Type set to Phase" + }, + { + "format": "custom", + "raw": "Project set to Seeded Project", + "html": "Project set to Seeded Project" + }, + { + "format": "custom", + "raw": "Subject set to veritatis voluptas hic qui praesentium tempora illum omnis", + "html": "Subject set to veritatis voluptas hic qui praesentium tempora illum omnis" + }, + { + "format": "custom", + "raw": "Description set (/journals/333/diff/description)", + "html": "Description set (Details)" + }, + { + "format": "custom", + "raw": "Due date set to 04/29/2015", + "html": "Due date set to 04/29/2015" + }, + { + "format": "custom", + "raw": "Status set to new", + "html": "Status set to new" + }, + { + "format": "custom", + "raw": "Priority set to Normal", + "html": "Priority set to Normal" + }, + { + "format": "custom", + "raw": "Author set to Alexandrine Heidenreich", + "html": "Author set to Alexandrine Heidenreich" + }, + { + "format": "custom", + "raw": "% done changed from 0 to 0", + "html": "% done changed from 0 to 0" + }, + { + "format": "custom", + "raw": "Start date set to 02/17/2015", + "html": "Start date set to 02/17/2015" + } + ], + "version": 1, + "createdAt": "2015-02-13T10:09:07+00:00" }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/578", - "method": "patch", - "title": "578" - } - }, - "id": 578, - "comment": "", - "rawComment": "", - "details": [ { - "format": "textile", - "raw": "Subject changed from 23 to 66666", - "html": "Subject changed from 23 to 66666" - } - ], - "version": 59, - "createdAt": "2014-11-21T08:48:27Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/580", - "title": "580" - }, - "workPackage": { - "href": "/api/v3/work_packages/823", - "title": "66666" + "_type": "Activity", + "_links": { + "self": { + "href": "/api/v3/activities/816", + "title": "816" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/1", + "title": "OpenProject Admin - admin" + }, + "update": { + "href": "/api/v3/activities/816", + "method": "patch", + "title": "816" + } + }, + "id": 816, + "comment": { + "format": "textile", + "raw": "", + "html": "" + }, + "details": [ + { + "format": "custom", + "raw": "Status changed from new to in progress", + "html": "Status changed from new to in progress" + } + ], + "version": 2, + "createdAt": "2015-04-07T13:36:43+00:00" }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" + { + "_type": "Activity::Comment", + "_links": { + "self": { + "href": "/api/v3/activities/817", + "title": "817" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/1", + "title": "OpenProject Admin - admin" + }, + "update": { + "href": "/api/v3/activities/817", + "method": "patch", + "title": "817" + } + }, + "id": 817, + "comment": { + "format": "textile", + "raw": "I have a comment", + "html": "

    I have a comment

    " + }, + "details": [], + "version": 3, + "createdAt": "2015-04-07T13:37:09+00:00" }, - "update": { - "href": "/api/v3/activities/580", - "method": "patch", - "title": "580" - } - }, - "id": 580, - "comment": "", - "rawComment": "", - "details": [ { - "format": "textile", - "raw": "Status changed from tested to rejected", - "html": "Status changed from tested to rejected" - } - ], - "version": 60, - "createdAt": "2014-11-21T08:48:57Z" + "_type": "Activity::Comment", + "_links": { + "self": { + "href": "/api/v3/activities/818", + "title": "818" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/1", + "title": "OpenProject Admin - admin" + }, + "update": { + "href": "/api/v3/activities/818", + "method": "patch", + "title": "818" + } + }, + "id": 818, + "comment": { + "format": "textile", + "raw": "And another one", + "html": "

    And another one

    " + }, + "details": [], + "version": 4, + "createdAt": "2015-04-07T13:37:33+00:00" + } + ] } - ], + }, "version": { "_type": "Version", "_links": { diff --git a/frontend/tests/integration/mocks/work-packages/824.json b/frontend/tests/integration/mocks/work-packages/824.json index 76b91e884a..f3e9f2b5fa 100644 --- a/frontend/tests/integration/mocks/work-packages/824.json +++ b/frontend/tests/integration/mocks/work-packages/824.json @@ -99,6 +99,9 @@ }, "attachments": { "href": "/api/v3/work_packages/824/attachments" + }, + "activities": { + "href": "/api/v3/work_packages/824/activities" } }, "id": 824, @@ -191,2009 +194,199 @@ "updatedAt": "2014-11-05T15:56:824Z", "status": 1 }, - "activities": [ - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/315", - "title": "315" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/3", - "title": "Anonymous - " - }, - "update": { - "href": "/api/v3/activities/315", - "method": "patch", - "title": "315" - } - }, - "id": 315, - "comment": "", - "rawComment": "", - "details": [ - "Type set to Feature", - "Project set to Seeded Project", - "Subject set to praesentium repellendus nam officia velit voluptas voluptas quasi", - "Description set (/journals/315/diff/description)", - "Due date set to 12/27/2014", - "Status set to new", - "Priority set to Normal", - "Author set to Freida Fay", - "% done changed from 0 to 0", - "Start date set to 10/23/2014" - ], - "htmlDetails": [ - "Type set to Feature", - "Project set to Seeded Project", - "Subject set to praesentium repellendus nam officia velit voluptas voluptas quasi", - "Description set (Details)", - "Due date set to 12/27/2014", - "Status set to new", - "Priority set to Normal", - "Author set to Freida Fay", - "% done changed from 0 to 0", - "Start date set to 10/23/2014" - ], - "version": 1, - "createdAt": "2014-11-05T15:56:53Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/500", - "title": "500" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/500", - "method": "patch", - "title": "500" - } - }, - "id": 500, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/500/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 2, - "createdAt": "2014-11-10T12:31:10Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/501", - "title": "501" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/501", - "method": "patch", - "title": "501" - } - }, - "id": 501, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/501/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 3, - "createdAt": "2014-11-10T12:31:53Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/502", - "title": "502" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/502", - "method": "patch", - "title": "502" - } - }, - "id": 502, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/502/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 4, - "createdAt": "2014-11-10T12:31:59Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/503", - "title": "503" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/503", - "method": "patch", - "title": "503" - } - }, - "id": 503, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/503/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 5, - "createdAt": "2014-11-10T12:32:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/504", - "title": "504" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/504", - "method": "patch", - "title": "504" - } - }, - "id": 504, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/504/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 6, - "createdAt": "2014-11-10T12:32:27Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/505", - "title": "505" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/505", - "method": "patch", - "title": "505" - } - }, - "id": 505, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/505/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 7, - "createdAt": "2014-11-10T12:32:31Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/506", - "title": "506" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/506", - "method": "patch", - "title": "506" - } - }, - "id": 506, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/506/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 8, - "createdAt": "2014-11-10T12:32:40Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/507", - "title": "507" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/507", - "method": "patch", - "title": "507" - } - }, - "id": 507, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/507/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 9, - "createdAt": "2014-11-10T12:32:45Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/511", - "title": "511" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/511", - "method": "patch", - "title": "511" - } - }, - "id": 511, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/511/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 10, - "createdAt": "2014-11-10T14:10:51Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/512", - "title": "512" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/512", - "method": "patch", - "title": "512" - } - }, - "id": 512, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/512/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 11, - "createdAt": "2014-11-10T14:42:50Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/513", - "title": "513" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/513", - "method": "patch", - "title": "513" - } - }, - "id": 513, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/513/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 12, - "createdAt": "2014-11-10T14:44:11Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/514", - "title": "514" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/514", - "method": "patch", - "title": "514" - } - }, - "id": 514, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/514/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 13, - "createdAt": "2014-11-10T14:44:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/515", - "title": "515" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/515", - "method": "patch", - "title": "515" - } - }, - "id": 515, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/515/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 14, - "createdAt": "2014-11-10T14:47:36Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/516", - "title": "516" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/516", - "method": "patch", - "title": "516" - } - }, - "id": 516, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/516/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 15, - "createdAt": "2014-11-10T14:824:47Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/517", - "title": "517" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/517", - "method": "patch", - "title": "517" - } - }, - "id": 517, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/517/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 16, - "createdAt": "2014-11-10T14:53:17Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/518", - "title": "518" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/518", - "method": "patch", - "title": "518" - } - }, - "id": 518, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/518/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 17, - "createdAt": "2014-11-10T15:17:34Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/8243", - "title": "8243" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/8243", - "method": "patch", - "title": "8243" - } - }, - "id": 8243, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from praesentium repellendus nam officia velit voluptas voluptas quasi to praesentium repellendus nam officia velit voluptas voluptas quasivv" - ], - "htmlDetails": [ - "Subject changed from praesentium repellendus nam officia velit voluptas voluptas quasi to praesentium repellendus nam officia velit voluptas voluptas quasivv" - ], - "version": 18, - "createdAt": "2014-11-12T12:59:25Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/531", - "title": "531" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/531", - "method": "patch", - "title": "531" - } - }, - "id": 531, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/531/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 19, - "createdAt": "2014-11-12T13:42:54Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/533", - "title": "533" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/533", - "method": "patch", - "title": "533" - } - }, - "id": 533, - "comment": "", - "rawComment": "", - "details": [ - "Parent set to 232aa22" - ], - "htmlDetails": [ - "Parent set to 232aa22" - ], - "version": 20, - "createdAt": "2014-11-12T16:16:51Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/535", - "title": "535" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/535", - "method": "patch", - "title": "535" - } - }, - "id": 535, - "comment": "", - "rawComment": "", - "details": [ - "Parent changed from 232aa22 to asd" - ], - "htmlDetails": [ - "Parent changed from 232aa22 to asd" - ], - "version": 21, - "createdAt": "2014-11-12T16:19:01Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/536", - "title": "536" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/536", - "method": "patch", - "title": "536" - } - }, - "id": 536, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/536/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 22, - "createdAt": "2014-11-12T16:23:26Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/537", - "title": "537" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/537", - "method": "patch", - "title": "537" - } - }, - "id": 537, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/537/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 23, - "createdAt": "2014-11-13T12:23:49Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/539", - "title": "539" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/539", - "method": "patch", - "title": "539" - } - }, - "id": 539, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from praesentium repellendus nam officia velit voluptas voluptas quasivv to 23123123" - ], - "htmlDetails": [ - "Subject changed from praesentium repellendus nam officia velit voluptas voluptas quasivv to 23123123" - ], - "version": 24, - "createdAt": "2014-11-17T14:03:47Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/540", - "title": "540" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/540", - "method": "patch", - "title": "540" - } - }, - "id": 540, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 23123123 to 3q4e4" - ], - "htmlDetails": [ - "Subject changed from 23123123 to 3q4e4" - ], - "version": 25, - "createdAt": "2014-11-17T14:07:43Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/541", - "title": "541" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/541", - "method": "patch", - "title": "541" - } - }, - "id": 541, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/541/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 26, - "createdAt": "2014-11-17T14:08:20Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/542", - "title": "542" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/542", - "method": "patch", - "title": "542" - } - }, - "id": 542, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/542/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 27, - "createdAt": "2014-11-17T14:08:27Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/543", - "title": "543" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/543", - "method": "patch", - "title": "543" - } - }, - "id": 543, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from new to in progress" - ], - "htmlDetails": [ - "Status changed from new to in progress" - ], - "version": 28, - "createdAt": "2014-11-17T14:08:38Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/544", - "title": "544" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/544", - "method": "patch", - "title": "544" - } - }, - "id": 544, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from in progress to tested" - ], - "htmlDetails": [ - "Status changed from in progress to tested" - ], - "version": 29, - "createdAt": "2014-11-17T14:11:36Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/546", - "title": "546" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/546", - "method": "patch", - "title": "546" - } - }, - "id": 546, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from tested to closed" - ], - "htmlDetails": [ - "Status changed from tested to closed" - ], - "version": 30, - "createdAt": "2014-11-17T14:11:41Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/548", - "title": "548" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/548", - "method": "patch", - "title": "548" - } - }, - "id": 548, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from closed to in progress" - ], - "htmlDetails": [ - "Status changed from closed to in progress" - ], - "version": 31, - "createdAt": "2014-11-17T14:11:51Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/549", - "title": "549" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/549", - "method": "patch", - "title": "549" - } - }, - "id": 549, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/549/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 32, - "createdAt": "2014-11-17T14:13:06Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/550", - "title": "550" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/550", - "method": "patch", - "title": "550" - } - }, - "id": 550, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 3q4e4 to 3q4e4s" - ], - "htmlDetails": [ - "Subject changed from 3q4e4 to 3q4e4s" - ], - "version": 33, - "createdAt": "2014-11-17T14:14:53Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/551", - "title": "551" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/551", - "method": "patch", - "title": "551" - } - }, - "id": 551, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/551/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 34, - "createdAt": "2014-11-17T14:17:41Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/5824", - "title": "5824" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/5824", - "method": "patch", - "title": "5824" - } - }, - "id": 5824, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 3q4e4s to 2" - ], - "htmlDetails": [ - "Subject changed from 3q4e4s to 2" - ], - "version": 35, - "createdAt": "2014-11-17T14:17:44Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/553", - "title": "553" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/553", - "method": "patch", - "title": "553" - } - }, - "id": 553, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 2 to 22" - ], - "htmlDetails": [ - "Subject changed from 2 to 22" - ], - "version": 36, - "createdAt": "2014-11-17T14:17:51Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/554", - "title": "554" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/554", - "method": "patch", - "title": "554" - } - }, - "id": 554, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 22 to 2323" - ], - "htmlDetails": [ - "Subject changed from 22 to 2323" - ], - "version": 37, - "createdAt": "2014-11-17T14:18:33Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/555", - "title": "555" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/555", - "method": "patch", - "title": "555" - } - }, - "id": 555, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/555/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 38, - "createdAt": "2014-11-17T14:18:46Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/556", - "title": "556" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/556", - "method": "patch", - "title": "556" - } - }, - "id": 556, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 2323 to 2323123123" - ], - "htmlDetails": [ - "Subject changed from 2323 to 2323123123" - ], - "version": 39, - "createdAt": "2014-11-17T14:20:40Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/557", - "title": "557" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/557", - "method": "patch", - "title": "557" - } - }, - "id": 557, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 2323123123 to 22" - ], - "htmlDetails": [ - "Subject changed from 2323123123 to 22" - ], - "version": 40, - "createdAt": "2014-11-17T14:22:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/559", - "title": "559" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/559", - "method": "patch", - "title": "559" - } - }, - "id": 559, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from in progress to rejected" - ], - "htmlDetails": [ - "Status changed from in progress to rejected" - ], - "version": 41, - "createdAt": "2014-11-17T14:22:34Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/560", - "title": "560" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/560", - "method": "patch", - "title": "560" - } - }, - "id": 560, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 22 to 2222" - ], - "htmlDetails": [ - "Subject changed from 22 to 2222" - ], - "version": 42, - "createdAt": "2014-11-17T14:25:07Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/562", - "title": "562" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/562", - "method": "patch", - "title": "562" - } - }, - "id": 562, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from rejected to tested" - ], - "htmlDetails": [ - "Status changed from rejected to tested" - ], - "version": 43, - "createdAt": "2014-11-17T14:26:20Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/563", - "title": "563" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/563", - "method": "patch", - "title": "563" - } - }, - "id": 563, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/563/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 44, - "createdAt": "2014-11-17T14:26:29Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/564", - "title": "564" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/564", - "method": "patch", - "title": "564" - } - }, - "id": 564, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 2222 to sad" - ], - "htmlDetails": [ - "Subject changed from 2222 to sad" - ], - "version": 45, - "createdAt": "2014-11-17T14:26:31Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/565", - "title": "565" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/565", - "method": "patch", - "title": "565" - } - }, - "id": 565, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/565/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 46, - "createdAt": "2014-11-18T12:46:00Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/566", - "title": "566" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/566", - "method": "patch", - "title": "566" - } - }, - "id": 566, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/566/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 47, - "createdAt": "2014-11-18T12:48:824Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/567", - "title": "567" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/567", - "method": "patch", - "title": "567" - } - }, - "id": 567, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/567/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 48, - "createdAt": "2014-11-18T12:824:34Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/568", - "title": "568" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/568", - "method": "patch", - "title": "568" - } - }, - "id": 568, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/568/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 49, - "createdAt": "2014-11-18T12:53:03Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/569", - "title": "569" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/569", - "method": "patch", - "title": "569" - } - }, - "id": 569, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/569/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 50, - "createdAt": "2014-11-18T14:10:48Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/570", - "title": "570" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/570", - "method": "patch", - "title": "570" - } - }, - "id": 570, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/570/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 51, - "createdAt": "2014-11-18T14:10:55Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/571", - "title": "571" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/571", - "method": "patch", - "title": "571" - } - }, - "id": 571, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/571/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 824, - "createdAt": "2014-11-18T14:11:22Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/572", - "title": "572" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/572", - "method": "patch", - "title": "572" - } - }, - "id": 572, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/572/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 53, - "createdAt": "2014-11-19T12:53:54Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/573", - "title": "573" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/573", - "method": "patch", - "title": "573" - } - }, - "id": 573, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from sad to sadaa" - ], - "htmlDetails": [ - "Subject changed from sad to sadaa" - ], - "version": 54, - "createdAt": "2014-11-21T08:32:09Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/574", - "title": "574" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/574", - "method": "patch", - "title": "574" - } - }, - "id": 574, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/574/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 55, - "createdAt": "2014-11-21T08:34:01Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/575", - "title": "575" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/575", - "method": "patch", - "title": "575" - } - }, - "id": 575, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from sadaa to sadaa222" - ], - "htmlDetails": [ - "Subject changed from sadaa to sadaa222" - ], - "version": 56, - "createdAt": "2014-11-21T08:38:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/576", - "title": "576" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/576", - "method": "patch", - "title": "576" - } - }, - "id": 576, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from sadaa222 to sadaa22222" - ], - "htmlDetails": [ - "Subject changed from sadaa222 to sadaa22222" - ], - "version": 57, - "createdAt": "2014-11-21T08:41:25Z" + "activities": { + "_type": "Collection", + "_links": { + "self": { "href": "/api/v3/work_packages/824/activities" } }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/577", - "title": "577" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/577", - "method": "patch", - "title": "577" - } - }, - "id": 577, - "comment": "", - "rawComment": "", - "details": [ + "total": 4, + "count": 4, + "_embedded": { + "elements": [ { - "format": "textile", - "raw": "Subject changed from sadaa22222 to 23", - "html": "Subject changed from sadaa22222 to 23" - } - ], - "version": 58, - "createdAt": "2014-11-21T08:47:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/578", - "title": "578" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" + "_type": "Activity", + "_links": { + "self": { + "href": "/api/v3/activities/333", + "title": "333" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/3", + "title": "Anonymous - " + }, + "update": { + "href": "/api/v3/activities/333", + "method": "patch", + "title": "333" + } + }, + "id": 333, + "comment": { + "format": "textile", + "raw": "", + "html": "" + }, + "details": [ + { + "format": "custom", + "raw": "Type set to Phase", + "html": "Type set to Phase" + }, + { + "format": "custom", + "raw": "Project set to Seeded Project", + "html": "Project set to Seeded Project" + }, + { + "format": "custom", + "raw": "Subject set to veritatis voluptas hic qui praesentium tempora illum omnis", + "html": "Subject set to veritatis voluptas hic qui praesentium tempora illum omnis" + }, + { + "format": "custom", + "raw": "Description set (/journals/333/diff/description)", + "html": "Description set (Details)" + }, + { + "format": "custom", + "raw": "Due date set to 04/29/2015", + "html": "Due date set to 04/29/2015" + }, + { + "format": "custom", + "raw": "Status set to new", + "html": "Status set to new" + }, + { + "format": "custom", + "raw": "Priority set to Normal", + "html": "Priority set to Normal" + }, + { + "format": "custom", + "raw": "Author set to Alexandrine Heidenreich", + "html": "Author set to Alexandrine Heidenreich" + }, + { + "format": "custom", + "raw": "% done changed from 0 to 0", + "html": "% done changed from 0 to 0" + }, + { + "format": "custom", + "raw": "Start date set to 02/17/2015", + "html": "Start date set to 02/17/2015" + } + ], + "version": 1, + "createdAt": "2015-02-13T10:09:07+00:00" }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/578", - "method": "patch", - "title": "578" - } - }, - "id": 578, - "comment": "", - "rawComment": "", - "details": [ { - "format": "textile", - "raw": "Subject changed from 23 to 66666", - "html": "Subject changed from 23 to 66666" - } - ], - "version": 59, - "createdAt": "2014-11-21T08:48:27Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/580", - "title": "580" - }, - "workPackage": { - "href": "/api/v3/work_packages/824", - "title": "66666" + "_type": "Activity", + "_links": { + "self": { + "href": "/api/v3/activities/816", + "title": "816" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/1", + "title": "OpenProject Admin - admin" + }, + "update": { + "href": "/api/v3/activities/816", + "method": "patch", + "title": "816" + } + }, + "id": 816, + "comment": { + "format": "textile", + "raw": "", + "html": "" + }, + "details": [ + { + "format": "custom", + "raw": "Status changed from new to in progress", + "html": "Status changed from new to in progress" + } + ], + "version": 2, + "createdAt": "2015-04-07T13:36:43+00:00" }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" + { + "_type": "Activity::Comment", + "_links": { + "self": { + "href": "/api/v3/activities/817", + "title": "817" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/1", + "title": "OpenProject Admin - admin" + }, + "update": { + "href": "/api/v3/activities/817", + "method": "patch", + "title": "817" + } + }, + "id": 817, + "comment": { + "format": "textile", + "raw": "I have a comment", + "html": "

    I have a comment

    " + }, + "details": [], + "version": 3, + "createdAt": "2015-04-07T13:37:09+00:00" }, - "update": { - "href": "/api/v3/activities/580", - "method": "patch", - "title": "580" - } - }, - "id": 580, - "comment": "", - "rawComment": "", - "details": [ { - "format": "textile", - "raw": "Status changed from tested to rejected", - "html": "Status changed from tested to rejected" - } - ], - "version": 60, - "createdAt": "2014-11-21T08:48:57Z" + "_type": "Activity::Comment", + "_links": { + "self": { + "href": "/api/v3/activities/818", + "title": "818" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/1", + "title": "OpenProject Admin - admin" + }, + "update": { + "href": "/api/v3/activities/818", + "method": "patch", + "title": "818" + } + }, + "id": 818, + "comment": { + "format": "textile", + "raw": "And another one", + "html": "

    And another one

    " + }, + "details": [], + "version": 4, + "createdAt": "2015-04-07T13:37:33+00:00" + } + ] } - ], + }, "version": { "_type": "Version", "_links": { diff --git a/frontend/tests/integration/mocks/work-packages/825.json b/frontend/tests/integration/mocks/work-packages/825.json index e399602d28..782cc10fe4 100644 --- a/frontend/tests/integration/mocks/work-packages/825.json +++ b/frontend/tests/integration/mocks/work-packages/825.json @@ -103,6 +103,9 @@ }, "attachments": { "href": "/api/v3/work_packages/825/attachments" + }, + "activities": { + "href": "/api/v3/work_packages/825/activities" } }, "id": 825, @@ -195,2009 +198,199 @@ "updatedAt": "2014-11-05T15:56:825Z", "status": 1 }, - "activities": [ - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/315", - "title": "315" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/3", - "title": "Anonymous - " - }, - "update": { - "href": "/api/v3/activities/315", - "method": "patch", - "title": "315" - } - }, - "id": 315, - "comment": "", - "rawComment": "", - "details": [ - "Type set to Feature", - "Project set to Seeded Project", - "Subject set to praesentium repellendus nam officia velit voluptas voluptas quasi", - "Description set (/journals/315/diff/description)", - "Due date set to 12/27/2014", - "Status set to new", - "Priority set to Normal", - "Author set to Freida Fay", - "% done changed from 0 to 0", - "Start date set to 10/23/2014" - ], - "htmlDetails": [ - "Type set to Feature", - "Project set to Seeded Project", - "Subject set to praesentium repellendus nam officia velit voluptas voluptas quasi", - "Description set (Details)", - "Due date set to 12/27/2014", - "Status set to new", - "Priority set to Normal", - "Author set to Freida Fay", - "% done changed from 0 to 0", - "Start date set to 10/23/2014" - ], - "version": 1, - "createdAt": "2014-11-05T15:56:53Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/500", - "title": "500" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/500", - "method": "patch", - "title": "500" - } - }, - "id": 500, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/500/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 2, - "createdAt": "2014-11-10T12:31:10Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/501", - "title": "501" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/501", - "method": "patch", - "title": "501" - } - }, - "id": 501, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/501/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 3, - "createdAt": "2014-11-10T12:31:53Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/502", - "title": "502" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/502", - "method": "patch", - "title": "502" - } - }, - "id": 502, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/502/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 4, - "createdAt": "2014-11-10T12:31:59Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/503", - "title": "503" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/503", - "method": "patch", - "title": "503" - } - }, - "id": 503, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/503/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 5, - "createdAt": "2014-11-10T12:32:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/504", - "title": "504" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/504", - "method": "patch", - "title": "504" - } - }, - "id": 504, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/504/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 6, - "createdAt": "2014-11-10T12:32:27Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/505", - "title": "505" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/505", - "method": "patch", - "title": "505" - } - }, - "id": 505, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/505/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 7, - "createdAt": "2014-11-10T12:32:31Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/506", - "title": "506" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/506", - "method": "patch", - "title": "506" - } - }, - "id": 506, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/506/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 8, - "createdAt": "2014-11-10T12:32:40Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/507", - "title": "507" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/507", - "method": "patch", - "title": "507" - } - }, - "id": 507, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/507/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 9, - "createdAt": "2014-11-10T12:32:45Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/511", - "title": "511" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/511", - "method": "patch", - "title": "511" - } - }, - "id": 511, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/511/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 10, - "createdAt": "2014-11-10T14:10:51Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/512", - "title": "512" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/512", - "method": "patch", - "title": "512" - } - }, - "id": 512, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/512/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 11, - "createdAt": "2014-11-10T14:42:50Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/513", - "title": "513" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/513", - "method": "patch", - "title": "513" - } - }, - "id": 513, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/513/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 12, - "createdAt": "2014-11-10T14:44:11Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/514", - "title": "514" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/514", - "method": "patch", - "title": "514" - } - }, - "id": 514, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/514/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 13, - "createdAt": "2014-11-10T14:44:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/515", - "title": "515" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/515", - "method": "patch", - "title": "515" - } - }, - "id": 515, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/515/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 14, - "createdAt": "2014-11-10T14:47:36Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/516", - "title": "516" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/516", - "method": "patch", - "title": "516" - } - }, - "id": 516, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/516/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 15, - "createdAt": "2014-11-10T14:825:47Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/517", - "title": "517" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/517", - "method": "patch", - "title": "517" - } - }, - "id": 517, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/517/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 16, - "createdAt": "2014-11-10T14:53:17Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/518", - "title": "518" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/518", - "method": "patch", - "title": "518" - } - }, - "id": 518, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/518/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 17, - "createdAt": "2014-11-10T15:17:34Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/8253", - "title": "8253" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/8253", - "method": "patch", - "title": "8253" - } - }, - "id": 8253, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from praesentium repellendus nam officia velit voluptas voluptas quasi to praesentium repellendus nam officia velit voluptas voluptas quasivv" - ], - "htmlDetails": [ - "Subject changed from praesentium repellendus nam officia velit voluptas voluptas quasi to praesentium repellendus nam officia velit voluptas voluptas quasivv" - ], - "version": 18, - "createdAt": "2014-11-12T12:59:25Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/531", - "title": "531" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/531", - "method": "patch", - "title": "531" - } - }, - "id": 531, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/531/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 19, - "createdAt": "2014-11-12T13:42:54Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/533", - "title": "533" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/533", - "method": "patch", - "title": "533" - } - }, - "id": 533, - "comment": "", - "rawComment": "", - "details": [ - "Parent set to 232aa22" - ], - "htmlDetails": [ - "Parent set to 232aa22" - ], - "version": 20, - "createdAt": "2014-11-12T16:16:51Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/535", - "title": "535" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/535", - "method": "patch", - "title": "535" - } - }, - "id": 535, - "comment": "", - "rawComment": "", - "details": [ - "Parent changed from 232aa22 to asd" - ], - "htmlDetails": [ - "Parent changed from 232aa22 to asd" - ], - "version": 21, - "createdAt": "2014-11-12T16:19:01Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/536", - "title": "536" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/536", - "method": "patch", - "title": "536" - } - }, - "id": 536, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/536/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 22, - "createdAt": "2014-11-12T16:23:26Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/537", - "title": "537" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/537", - "method": "patch", - "title": "537" - } - }, - "id": 537, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/537/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 23, - "createdAt": "2014-11-13T12:23:49Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/539", - "title": "539" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/539", - "method": "patch", - "title": "539" - } - }, - "id": 539, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from praesentium repellendus nam officia velit voluptas voluptas quasivv to 23123123" - ], - "htmlDetails": [ - "Subject changed from praesentium repellendus nam officia velit voluptas voluptas quasivv to 23123123" - ], - "version": 24, - "createdAt": "2014-11-17T14:03:47Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/540", - "title": "540" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/540", - "method": "patch", - "title": "540" - } - }, - "id": 540, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 23123123 to 3q4e4" - ], - "htmlDetails": [ - "Subject changed from 23123123 to 3q4e4" - ], - "version": 25, - "createdAt": "2014-11-17T14:07:43Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/541", - "title": "541" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/541", - "method": "patch", - "title": "541" - } - }, - "id": 541, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/541/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 26, - "createdAt": "2014-11-17T14:08:20Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/542", - "title": "542" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/542", - "method": "patch", - "title": "542" - } - }, - "id": 542, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/542/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 27, - "createdAt": "2014-11-17T14:08:27Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/543", - "title": "543" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/543", - "method": "patch", - "title": "543" - } - }, - "id": 543, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from new to in progress" - ], - "htmlDetails": [ - "Status changed from new to in progress" - ], - "version": 28, - "createdAt": "2014-11-17T14:08:38Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/544", - "title": "544" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/544", - "method": "patch", - "title": "544" - } - }, - "id": 544, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from in progress to tested" - ], - "htmlDetails": [ - "Status changed from in progress to tested" - ], - "version": 29, - "createdAt": "2014-11-17T14:11:36Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/546", - "title": "546" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/546", - "method": "patch", - "title": "546" - } - }, - "id": 546, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from tested to closed" - ], - "htmlDetails": [ - "Status changed from tested to closed" - ], - "version": 30, - "createdAt": "2014-11-17T14:11:41Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/548", - "title": "548" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/548", - "method": "patch", - "title": "548" - } - }, - "id": 548, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from closed to in progress" - ], - "htmlDetails": [ - "Status changed from closed to in progress" - ], - "version": 31, - "createdAt": "2014-11-17T14:11:51Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/549", - "title": "549" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/549", - "method": "patch", - "title": "549" - } - }, - "id": 549, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/549/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 32, - "createdAt": "2014-11-17T14:13:06Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/550", - "title": "550" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/550", - "method": "patch", - "title": "550" - } - }, - "id": 550, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 3q4e4 to 3q4e4s" - ], - "htmlDetails": [ - "Subject changed from 3q4e4 to 3q4e4s" - ], - "version": 33, - "createdAt": "2014-11-17T14:14:53Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/551", - "title": "551" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/551", - "method": "patch", - "title": "551" - } - }, - "id": 551, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/551/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 34, - "createdAt": "2014-11-17T14:17:41Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/5825", - "title": "5825" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/5825", - "method": "patch", - "title": "5825" - } - }, - "id": 5825, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 3q4e4s to 2" - ], - "htmlDetails": [ - "Subject changed from 3q4e4s to 2" - ], - "version": 35, - "createdAt": "2014-11-17T14:17:44Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/553", - "title": "553" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/553", - "method": "patch", - "title": "553" - } - }, - "id": 553, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 2 to 22" - ], - "htmlDetails": [ - "Subject changed from 2 to 22" - ], - "version": 36, - "createdAt": "2014-11-17T14:17:51Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/554", - "title": "554" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/554", - "method": "patch", - "title": "554" - } - }, - "id": 554, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 22 to 2323" - ], - "htmlDetails": [ - "Subject changed from 22 to 2323" - ], - "version": 37, - "createdAt": "2014-11-17T14:18:33Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/555", - "title": "555" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/555", - "method": "patch", - "title": "555" - } - }, - "id": 555, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/555/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 38, - "createdAt": "2014-11-17T14:18:46Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/556", - "title": "556" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/556", - "method": "patch", - "title": "556" - } - }, - "id": 556, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 2323 to 2323123123" - ], - "htmlDetails": [ - "Subject changed from 2323 to 2323123123" - ], - "version": 39, - "createdAt": "2014-11-17T14:20:40Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/557", - "title": "557" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/557", - "method": "patch", - "title": "557" - } - }, - "id": 557, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 2323123123 to 22" - ], - "htmlDetails": [ - "Subject changed from 2323123123 to 22" - ], - "version": 40, - "createdAt": "2014-11-17T14:22:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/559", - "title": "559" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/559", - "method": "patch", - "title": "559" - } - }, - "id": 559, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from in progress to rejected" - ], - "htmlDetails": [ - "Status changed from in progress to rejected" - ], - "version": 41, - "createdAt": "2014-11-17T14:22:34Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/560", - "title": "560" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/560", - "method": "patch", - "title": "560" - } - }, - "id": 560, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 22 to 2222" - ], - "htmlDetails": [ - "Subject changed from 22 to 2222" - ], - "version": 42, - "createdAt": "2014-11-17T14:25:07Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/562", - "title": "562" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/562", - "method": "patch", - "title": "562" - } - }, - "id": 562, - "comment": "", - "rawComment": "", - "details": [ - "Status changed from rejected to tested" - ], - "htmlDetails": [ - "Status changed from rejected to tested" - ], - "version": 43, - "createdAt": "2014-11-17T14:26:20Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/563", - "title": "563" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/563", - "method": "patch", - "title": "563" - } - }, - "id": 563, - "comment": "", - "rawComment": "", - "details": [ - "Description deleted (/journals/563/diff/description)" - ], - "htmlDetails": [ - "Description deleted (Details)" - ], - "version": 44, - "createdAt": "2014-11-17T14:26:29Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/564", - "title": "564" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/564", - "method": "patch", - "title": "564" - } - }, - "id": 564, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from 2222 to sad" - ], - "htmlDetails": [ - "Subject changed from 2222 to sad" - ], - "version": 45, - "createdAt": "2014-11-17T14:26:31Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/565", - "title": "565" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/565", - "method": "patch", - "title": "565" - } - }, - "id": 565, - "comment": "", - "rawComment": "", - "details": [ - "Description set (/journals/565/diff/description)" - ], - "htmlDetails": [ - "Description set (Details)" - ], - "version": 46, - "createdAt": "2014-11-18T12:46:00Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/566", - "title": "566" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/566", - "method": "patch", - "title": "566" - } - }, - "id": 566, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/566/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 47, - "createdAt": "2014-11-18T12:48:825Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/567", - "title": "567" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/567", - "method": "patch", - "title": "567" - } - }, - "id": 567, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/567/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 48, - "createdAt": "2014-11-18T12:825:34Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/568", - "title": "568" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/568", - "method": "patch", - "title": "568" - } - }, - "id": 568, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/568/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 49, - "createdAt": "2014-11-18T12:53:03Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/569", - "title": "569" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/569", - "method": "patch", - "title": "569" - } - }, - "id": 569, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/569/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 50, - "createdAt": "2014-11-18T14:10:48Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/570", - "title": "570" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/570", - "method": "patch", - "title": "570" - } - }, - "id": 570, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/570/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 51, - "createdAt": "2014-11-18T14:10:55Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/571", - "title": "571" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/571", - "method": "patch", - "title": "571" - } - }, - "id": 571, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/571/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 825, - "createdAt": "2014-11-18T14:11:22Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/572", - "title": "572" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/572", - "method": "patch", - "title": "572" - } - }, - "id": 572, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/572/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 53, - "createdAt": "2014-11-19T12:53:54Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/573", - "title": "573" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/573", - "method": "patch", - "title": "573" - } - }, - "id": 573, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from sad to sadaa" - ], - "htmlDetails": [ - "Subject changed from sad to sadaa" - ], - "version": 54, - "createdAt": "2014-11-21T08:32:09Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/574", - "title": "574" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/574", - "method": "patch", - "title": "574" - } - }, - "id": 574, - "comment": "", - "rawComment": "", - "details": [ - "Description changed (/journals/574/diff/description)" - ], - "htmlDetails": [ - "Description changed (Details)" - ], - "version": 55, - "createdAt": "2014-11-21T08:34:01Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/575", - "title": "575" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/575", - "method": "patch", - "title": "575" - } - }, - "id": 575, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from sadaa to sadaa222" - ], - "htmlDetails": [ - "Subject changed from sadaa to sadaa222" - ], - "version": 56, - "createdAt": "2014-11-21T08:38:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/576", - "title": "576" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/576", - "method": "patch", - "title": "576" - } - }, - "id": 576, - "comment": "", - "rawComment": "", - "details": [ - "Subject changed from sadaa222 to sadaa22222" - ], - "htmlDetails": [ - "Subject changed from sadaa222 to sadaa22222" - ], - "version": 57, - "createdAt": "2014-11-21T08:41:25Z" + "activities": { + "_type": "Collection", + "_links": { + "self": { "href": "/api/v3/work_packages/825/activities" } }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/577", - "title": "577" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" - }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/577", - "method": "patch", - "title": "577" - } - }, - "id": 577, - "comment": "", - "rawComment": "", - "details": [ + "total": 4, + "count": 4, + "_embedded": { + "elements": [ { - "format": "textile", - "raw": "Subject changed from sadaa22222 to 23", - "html": "Subject changed from sadaa22222 to 23" - } - ], - "version": 58, - "createdAt": "2014-11-21T08:47:21Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/578", - "title": "578" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" + "_type": "Activity", + "_links": { + "self": { + "href": "/api/v3/activities/333", + "title": "333" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/3", + "title": "Anonymous - " + }, + "update": { + "href": "/api/v3/activities/333", + "method": "patch", + "title": "333" + } + }, + "id": 333, + "comment": { + "format": "textile", + "raw": "", + "html": "" + }, + "details": [ + { + "format": "custom", + "raw": "Type set to Phase", + "html": "Type set to Phase" + }, + { + "format": "custom", + "raw": "Project set to Seeded Project", + "html": "Project set to Seeded Project" + }, + { + "format": "custom", + "raw": "Subject set to veritatis voluptas hic qui praesentium tempora illum omnis", + "html": "Subject set to veritatis voluptas hic qui praesentium tempora illum omnis" + }, + { + "format": "custom", + "raw": "Description set (/journals/333/diff/description)", + "html": "Description set (Details)" + }, + { + "format": "custom", + "raw": "Due date set to 04/29/2015", + "html": "Due date set to 04/29/2015" + }, + { + "format": "custom", + "raw": "Status set to new", + "html": "Status set to new" + }, + { + "format": "custom", + "raw": "Priority set to Normal", + "html": "Priority set to Normal" + }, + { + "format": "custom", + "raw": "Author set to Alexandrine Heidenreich", + "html": "Author set to Alexandrine Heidenreich" + }, + { + "format": "custom", + "raw": "% done changed from 0 to 0", + "html": "% done changed from 0 to 0" + }, + { + "format": "custom", + "raw": "Start date set to 02/17/2015", + "html": "Start date set to 02/17/2015" + } + ], + "version": 1, + "createdAt": "2015-02-13T10:09:07+00:00" }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" - }, - "update": { - "href": "/api/v3/activities/578", - "method": "patch", - "title": "578" - } - }, - "id": 578, - "comment": "", - "rawComment": "", - "details": [ { - "format": "textile", - "raw": "Subject changed from 23 to 66666", - "html": "Subject changed from 23 to 66666" - } - ], - "version": 59, - "createdAt": "2014-11-21T08:48:27Z" - }, - { - "_type": "Activity", - "_links": { - "self": { - "href": "/api/v3/activities/580", - "title": "580" - }, - "workPackage": { - "href": "/api/v3/work_packages/825", - "title": "66666" + "_type": "Activity", + "_links": { + "self": { + "href": "/api/v3/activities/816", + "title": "816" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/1", + "title": "OpenProject Admin - admin" + }, + "update": { + "href": "/api/v3/activities/816", + "method": "patch", + "title": "816" + } + }, + "id": 816, + "comment": { + "format": "textile", + "raw": "", + "html": "" + }, + "details": [ + { + "format": "custom", + "raw": "Status changed from new to in progress", + "html": "Status changed from new to in progress" + } + ], + "version": 2, + "createdAt": "2015-04-07T13:36:43+00:00" }, - "user": { - "href": "/api/v3/users/1", - "title": "OpenProject Admin - admin" + { + "_type": "Activity::Comment", + "_links": { + "self": { + "href": "/api/v3/activities/817", + "title": "817" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/1", + "title": "OpenProject Admin - admin" + }, + "update": { + "href": "/api/v3/activities/817", + "method": "patch", + "title": "817" + } + }, + "id": 817, + "comment": { + "format": "textile", + "raw": "I have a comment", + "html": "

    I have a comment

    " + }, + "details": [], + "version": 3, + "createdAt": "2015-04-07T13:37:09+00:00" }, - "update": { - "href": "/api/v3/activities/580", - "method": "patch", - "title": "580" - } - }, - "id": 580, - "comment": "", - "rawComment": "", - "details": [ { - "format": "textile", - "raw": "Status changed from tested to rejected", - "html": "Status changed from tested to rejected" - } - ], - "version": 60, - "createdAt": "2014-11-21T08:48:57Z" + "_type": "Activity::Comment", + "_links": { + "self": { + "href": "/api/v3/activities/818", + "title": "818" + }, + "workPackage": { + "href": "/api/v3/work_packages/65", + "title": "veritatis voluptas hic qui praesentium tempora illum omnis" + }, + "user": { + "href": "/api/v3/users/1", + "title": "OpenProject Admin - admin" + }, + "update": { + "href": "/api/v3/activities/818", + "method": "patch", + "title": "818" + } + }, + "id": 818, + "comment": { + "format": "textile", + "raw": "And another one", + "html": "

    And another one

    " + }, + "details": [], + "version": 4, + "createdAt": "2015-04-07T13:37:33+00:00" + } + ] } - ], + }, "version": { "_type": "Version", "_links": { diff --git a/frontend/tests/integration/specs/work-packages/details-pane/activity-with-revisions-spec.js b/frontend/tests/integration/specs/work-packages/details-pane/activity-with-revisions-spec.js index cb78446ab6..0bf5107579 100644 --- a/frontend/tests/integration/specs/work-packages/details-pane/activity-with-revisions-spec.js +++ b/frontend/tests/integration/specs/work-packages/details-pane/activity-with-revisions-spec.js @@ -27,8 +27,8 @@ //++ var expect = require('../../../spec_helper.js').expect, - detailsPaneHelper = require('./details-pane-helper.js'), - elements = detailsPaneHelper.elements; + detailsPaneHelper = require('./details-pane-helper.js'), + elements = detailsPaneHelper.elements; /*jshint expr: true*/ @@ -37,15 +37,14 @@ describe('OpenProject', function() { beforeEach(function() { detailsPaneHelper.loadPane(820, 'activity'); }); - it('should render all activities and one revision', function() { var locator = by.css('.work-package-details-activities-activity'); - elements.count(locator, 61); + elements.count(locator, 5); }); it('should render one revision at the correct position', function() { expect( - $('.work-package-details-activities-activity:nth-of-type(61) .date').getText() + $('.work-package-details-activities-activity:nth-of-type(5) .date').getText() ).to.eventually.contain('committed revision 1cb82424'); }); }); diff --git a/frontend/tests/unit/tests/work_packages/controllers/work-package-details-controller-test.js b/frontend/tests/unit/tests/work_packages/controllers/work-package-details-controller-test.js index e7154d4f55..b7a5a40ba4 100644 --- a/frontend/tests/unit/tests/work_packages/controllers/work-package-details-controller-test.js +++ b/frontend/tests/unit/tests/work_packages/controllers/work-package-details-controller-test.js @@ -57,7 +57,17 @@ describe('WorkPackageDetailsController', function() { id: 1 } }, - activities: [], + activities: { + links: { + self: { href: "/api/v3/work_packages/820/activities" } + }, + _type: "Collection", + total: 0, + count: 0, + embedded: { + elements: [] + } + }, watchers: [], attachments: { links: { @@ -125,7 +135,7 @@ describe('WorkPackageDetailsController', function() { buildController = function() { var testState = { - current: { url: '/overview', }, + current: { url: '/overview' } }; scope = $rootScope.$new(); From e38810f17364cf0ae2ac5b97a1d0cff4c1aae51e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Fri, 28 Aug 2015 16:44:23 +0200 Subject: [PATCH 101/112] Remove hard syck dependency, make it optional instead This includes letting the YAML Syck to Psych migrations test whether actual data is being transformed. Some migrations still contain a legacy journal migration helper that MAY depend on Syck. When these migrations find serialized YAML, we're going to assume that it MIGHT be coming from Syck. Thus we add a `LegacyYamler` method that will dynamically require Syck and fail with an elaborate message if it hasn't been installed using the optional bundler group `bundle install --with syck`. On new installations, both these points are skipped as no data is retrieved from the queries. This commit should effectively provide Rails 2.2. compatibility --- .travis.yml | 2 + Gemfile | 6 +- Gemfile.lock | 2 +- ...rate_serialized_yaml_from_syck_to_psych.rb | 48 +++++++++++----- .../legacy_journal_migrator.rb | 15 +---- .../{yaml_migrator.rb => legacy_yamler.rb} | 55 +++++++++---------- 6 files changed, 71 insertions(+), 57 deletions(-) rename db/migrate/migration_utils/{yaml_migrator.rb => legacy_yamler.rb} (52%) diff --git a/.travis.yml b/.travis.yml index f145c314d1..daf12b0af9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -58,6 +58,8 @@ env: - "TEST_SUITE=spec:legacy DB=postgres" before_install: + # TODO: Remove when bundler 1.10 is available on travis per default + - "gem install bundler" - "echo `firefox -v`" - "export DISPLAY=:99.0" - "/sbin/start-stop-daemon --start -v --pidfile ./tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1920x1080x16" diff --git a/Gemfile b/Gemfile index 1ae3f85925..ec6d4ec1f5 100644 --- a/Gemfile +++ b/Gemfile @@ -88,8 +88,6 @@ gem 'rack-protection', :git => "https://github.com/finnlabs/rack-protection.git" # https://github.com/kickstarter/rack-attack gem 'rack-attack' -gem 'syck', :platforms => [:mri, :mingw, :x64_mingw], :require => false - gem 'gon', '~> 4.0' # catch exceptions and send them to any airbrake compatible backend @@ -183,6 +181,10 @@ group :ldap do gem "net-ldap", '~> 0.8.0' end +group :syck, optional: true do + gem "syck", require: false +end + group :development do gem 'letter_opener', '~> 1.3.0' gem 'rails-dev-tweaks', '~> 0.6.1' diff --git a/Gemfile.lock b/Gemfile.lock index 2668b188cb..e428cd979f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -452,7 +452,7 @@ GEM railties (~> 3.0) structured_warnings (0.1.4) svg-graph (1.0.5) - syck (1.0.1) + syck (1.0.5) thin (1.5.1) daemons (>= 1.0.9) eventmachine (>= 0.12.6) diff --git a/db/migrate/20130612120042_migrate_serialized_yaml_from_syck_to_psych.rb b/db/migrate/20130612120042_migrate_serialized_yaml_from_syck_to_psych.rb index fac174be7f..700fd81f0c 100644 --- a/db/migrate/20130612120042_migrate_serialized_yaml_from_syck_to_psych.rb +++ b/db/migrate/20130612120042_migrate_serialized_yaml_from_syck_to_psych.rb @@ -27,28 +27,50 @@ # See doc/COPYRIGHT.rdoc for more details. #++ -require_relative 'migration_utils/yaml_migrator' +require_relative 'migration_utils/legacy_yamler' class MigrateSerializedYamlFromSyckToPsych < ActiveRecord::Migration - include Migration::YamlMigrator + include Migration::LegacyYamler def up - migrate_yaml_columns('syck', 'psych') + %w(filters column_names sort_criteria).each do |column| + migrate_to_psych('queries', column) + end + + migrate_to_psych('custom_field_translations', 'possible_values') + migrate_to_psych('roles', 'permissions') + migrate_to_psych('settings', 'value') + migrate_to_psych('timelines', 'options') + migrate_to_psych('user_preferences', 'others') + migrate_to_psych('wiki_menu_items', 'options') end def down - migrate_yaml_columns('psych', 'syck') + puts 'YAML data serialized with Psych is still compatible with Syck. Skipping migration.' end - def migrate_yaml_columns(source_yamler, target_yamler) - ['filters', 'column_names', 'sort_criteria'].each do |column| - migrate_yaml('queries', column, source_yamler, target_yamler) + private + + def migrate_to_psych(table, column) + table_name = ActiveRecord::Base.connection.quote_table_name(table) + column_name = ActiveRecord::Base.connection.quote_column_name(column) + + fetch_data(table_name, column_name).each do |row| + transformed = ::Psych.dump(load_with_sych(row[column])) + + ActiveRecord::Base.connection.execute <<-SQL + UPDATE #{table_name} + SET #{column_name} = #{ActiveRecord::Base.connection.quote(transformed)} + WHERE id = #{row['id']}; + SQL end - migrate_yaml('custom_field_translations', 'possible_values', source_yamler, target_yamler) - migrate_yaml('roles', 'permissions', source_yamler, target_yamler) - migrate_yaml('settings', 'value', source_yamler, target_yamler) - migrate_yaml('timelines', 'options', source_yamler, target_yamler) - migrate_yaml('user_preferences', 'others', source_yamler, target_yamler) - migrate_yaml('wiki_menu_items', 'options', source_yamler, target_yamler) + end + + def fetch_data(table_name, column_name) + ActiveRecord::Base.connection.select_all <<-SQL + SELECT id, #{column_name} + FROM #{table_name} + WHERE #{column_name} LIKE '---%' + SQL end end diff --git a/db/migrate/migration_utils/legacy_journal_migrator.rb b/db/migrate/migration_utils/legacy_journal_migrator.rb index ec8f51709e..3673656bc4 100644 --- a/db/migrate/migration_utils/legacy_journal_migrator.rb +++ b/db/migrate/migration_utils/legacy_journal_migrator.rb @@ -29,7 +29,7 @@ require_relative 'db_worker' require_relative 'legacy_table_checker' -require 'syck' +require_relative 'legacy_yamler' module Migration class IncompleteJournalsError < ::StandardError @@ -41,6 +41,7 @@ module Migration class LegacyJournalMigrator include DbWorker include LegacyTableChecker + include LegacyYamler attr_accessor :table_name, :type, @@ -274,17 +275,7 @@ module Migration def deserialize_changed_data(journal) changed_data = journal['changed_data'] return Hash.new if changed_data.nil? - - current_yamler = YAML::ENGINE.yamler || 'psych' - begin - # The change to 'syck' ensures that legacy data is correctly read from - # the 'legacy_journals' table. Otherwise, we would end up with false - # encoded data in the new journal. - YAML::ENGINE.yamler = 'syck' - YAML.load(changed_data) - ensure - YAML::ENGINE.yamler = current_yamler - end + load_with_sych(changed_data) end def deserialize_journal(journal) diff --git a/db/migrate/migration_utils/yaml_migrator.rb b/db/migrate/migration_utils/legacy_yamler.rb similarity index 52% rename from db/migrate/migration_utils/yaml_migrator.rb rename to db/migrate/migration_utils/legacy_yamler.rb index 35a3fbb02c..526e95b72a 100644 --- a/db/migrate/migration_utils/yaml_migrator.rb +++ b/db/migrate/migration_utils/legacy_yamler.rb @@ -28,40 +28,37 @@ #++ require_relative 'db_worker' -require 'syck' module Migration - module YamlMigrator - include DbWorker - - def migrate_yaml(table, column, source_yamler, target_yamler) - current_yamler = YAML::ENGINE.yamler - fetch_data(table, column).each do | data | - db_execute <<-SQL - UPDATE #{quoted_table_name(table)} - SET #{db_column(column)} = #{quote_value(yaml_to_yaml(data[column], source_yamler, target_yamler))} - WHERE id = #{data['id']}; - SQL - end - ensure - # psych is the default starting at ruby 1.9.3, so we explicitely set it here - # in case no yamler was set to return to a sensible default - YAML::ENGINE.yamler = current_yamler.present? ? current_yamler : 'psych' + module LegacyYamler + ## + # Tries to load syck and fails with an error + # if it was not installed. + # To continue with the affected migrations, install syck with `bundle install --with syck` + def load_with_syck(yaml) + @@syck ||= load_syck + @@syck.load(yaml) end - def fetch_data(table, column) - ActiveRecord::Base.connection.select_all <<-SQL - SELECT #{db_column('id')}, #{db_column(column)} - FROM #{quoted_table_name(table)} - WHERE #{db_column(column)} LIKE #{quote_value('---%')} - SQL - end + private + + def load_syck + require 'syck' + ::Syck + rescue LoadError => e + abort = -> (str) { abort("\e[31m#{str}\e[0m") } + abort.call <<-WARN + It appears you have existing serialized YAML in your database. + + This YAML may have been serialized with Syck, which allowed to parse YAML + that is now considered invalid given the default Ruby YAML parser (Psych), + we need to convert that YAML to be Psych-compatible. + + Use `bundle install --with syck` to install the syck YAML parser + and re-run the migrations. + WARN - def yaml_to_yaml(data, source_yamler, target_yamler) - YAML::ENGINE.yamler = source_yamler - original = YAML.load(data) - YAML::ENGINE.yamler = target_yamler - YAML.dump original + raise e end end end From 527207ba34b531fd41c0a88e82ee9b07b9bd2b27 Mon Sep 17 00:00:00 2001 From: Continuous Integration Date: Tue, 1 Sep 2015 01:30:38 +0200 Subject: [PATCH 102/112] Update reference to OpenProject-Translations --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 09df7c1ce4..585d6bc850 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -30,7 +30,7 @@ GIT GIT remote: https://github.com/opf/openproject-translations.git - revision: b1bba83a3a0e2862b5c6e2ac01c2a87e367bd13f + revision: 685f383c52f117a06d6cf6dfaa55b77db7370d69 branch: dev specs: openproject-translations (5.0.0.pre.alpha) From aad39544f572dae3f7f19ca32dc43e15ba33d834 Mon Sep 17 00:00:00 2001 From: Jan Sandbrink Date: Tue, 1 Sep 2015 09:33:48 +0200 Subject: [PATCH 103/112] Hide addAttachment link when user is not allowed --- lib/api/v3/work_packages/work_package_representer.rb | 2 +- .../v3/work_packages/work_package_representer_spec.rb | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/api/v3/work_packages/work_package_representer.rb b/lib/api/v3/work_packages/work_package_representer.rb index b3b7111ca2..e1a96f3047 100644 --- a/lib/api/v3/work_packages/work_package_representer.rb +++ b/lib/api/v3/work_packages/work_package_representer.rb @@ -125,7 +125,7 @@ module API { href: api_v3_paths.attachments_by_work_package(represented.id), method: :post - } + } if current_user_allowed_to(:edit_work_packages, context: represented.project) end link :availableWatchers do diff --git a/spec/lib/api/v3/work_packages/work_package_representer_spec.rb b/spec/lib/api/v3/work_packages/work_package_representer_spec.rb index 1afabb0655..8e5326ca8c 100644 --- a/spec/lib/api/v3/work_packages/work_package_representer_spec.rb +++ b/spec/lib/api/v3/work_packages/work_package_representer_spec.rb @@ -49,7 +49,7 @@ describe ::API::V3::WorkPackages::WorkPackageRepresenter do estimated_hours: 6.0) } let(:project) { work_package.project } - let(:permissions) { + let(:all_permissions) { [ :view_work_packages, :view_work_package_watchers, @@ -60,6 +60,7 @@ describe ::API::V3::WorkPackages::WorkPackageRepresenter do :add_work_package_notes ] } + let(:permissions) { all_permissions } let(:role) { FactoryGirl.create :role, permissions: permissions } before(:each) do @@ -466,6 +467,14 @@ describe ::API::V3::WorkPackages::WorkPackageRepresenter do it 'addAttachments is a post link' do is_expected.to be_json_eql('post'.to_json).at_path('_links/addAttachment/method') end + + context 'user is not allowed to edit work packages' do + let(:permissions) { all_permissions - [:edit_work_packages] } + + it_behaves_like 'has no link' do + let(:link) { 'addAttachment' } + end + end end context 'when the user is not watching the work package' do From e7291fba8c888afe7cb9ddd505607725233262df Mon Sep 17 00:00:00 2001 From: Jan Sandbrink Date: Tue, 1 Sep 2015 09:55:17 +0200 Subject: [PATCH 104/112] Unify permission handling in representer spec --- .../work_package_representer_spec.rb | 105 +++++------------- 1 file changed, 30 insertions(+), 75 deletions(-) diff --git a/spec/lib/api/v3/work_packages/work_package_representer_spec.rb b/spec/lib/api/v3/work_packages/work_package_representer_spec.rb index 8e5326ca8c..b1c8b77fc2 100644 --- a/spec/lib/api/v3/work_packages/work_package_representer_spec.rb +++ b/spec/lib/api/v3/work_packages/work_package_representer_spec.rb @@ -57,7 +57,10 @@ describe ::API::V3::WorkPackages::WorkPackageRepresenter do :add_work_package_watchers, :delete_work_package_watchers, :manage_work_package_relations, - :add_work_package_notes + :add_work_package_notes, + :add_work_packages, + :view_time_entries, + :view_changesets ] } let(:permissions) { all_permissions } @@ -151,31 +154,9 @@ describe ::API::V3::WorkPackages::WorkPackageRepresenter do end describe 'spentTime' do - before do permissions << :view_time_entries end - describe '#content' do - let(:wp) { FactoryGirl.create(:work_package) } - let(:permissions) { [:view_work_packages, :view_time_entries] } - let(:role) { FactoryGirl.create(:role, permissions: permissions) } - let(:user) { - FactoryGirl.create(:user, - member_in_project: wp.project, - member_through_role: role) - } - let(:representer) { described_class.new(wp, current_user: user) } - - before do - allow(User).to receive(:current).and_return(user) - - allow(user).to receive(:allowed_to?).and_return(false) - allow(user).to receive(:allowed_to?).with(:view_time_entries, anything).and_return(true) - end - context 'no view_time_entries permission' do - before do - allow(user).to receive(:allowed_to?).with(:view_time_entries, anything) - .and_return(false) - end + let(:permissions) { all_permissions - [:view_time_entries] } it { is_expected.not_to have_json_path('spentTime') } end @@ -185,27 +166,23 @@ describe ::API::V3::WorkPackages::WorkPackageRepresenter do end context 'time entry with single hour' do - let(:time_entry) { + before do FactoryGirl.create(:time_entry, - project: wp.project, - work_package: wp, + project: work_package.project, + work_package: work_package, hours: 1.0) - } - - before do time_entry end + end it { is_expected.to be_json_eql('PT1H'.to_json).at_path('spentTime') } end context 'time entry with multiple hours' do - let(:time_entry) { + before do FactoryGirl.create(:time_entry, - project: wp.project, - work_package: wp, + project: work_package.project, + work_package: work_package, hours: 42.5) - } - - before do time_entry end + end it { is_expected.to be_json_eql('P1DT18H30M'.to_json).at_path('spentTime') } end @@ -329,21 +306,17 @@ describe ::API::V3::WorkPackages::WorkPackageRepresenter do end describe 'revisions' do - context 'when the user lacks the view_changesets permission' do - it_behaves_like 'has no link' do - let(:link) { 'revisions' } - end + it_behaves_like 'has an untitled link' do + let(:link) { 'revisions' } + let(:href) { + api_v3_paths.work_package_revisions(work_package.id) + } end - context 'when the user has the required permission' do - let(:revision_permissions) { [:view_changesets] } - let(:role) { FactoryGirl.create :role, permissions: permissions + revision_permissions } - - it_behaves_like 'has an untitled link' do + context 'when the user lacks the view_changesets permission' do + let(:permissions) { all_permissions - [:view_changesets] } + it_behaves_like 'has no link' do let(:link) { 'revisions' } - let(:href) { - api_v3_paths.work_package_revisions(work_package.id) - } end end end @@ -512,9 +485,7 @@ describe ::API::V3::WorkPackages::WorkPackageRepresenter do end context 'when the user does not have the permission to add comments' do - before do - role.permissions.delete(:add_work_package_notes) and role.save - end + let(:permissions) { all_permissions - [:add_work_package_notes] } it 'should not have a link to add comment' do expect(subject).not_to have_json_path('_links/addComment/href') @@ -536,9 +507,7 @@ describe ::API::V3::WorkPackages::WorkPackageRepresenter do end context 'when the user does not have the permission to add watchers' do - before do - role.permissions.delete(:add_work_package_watchers) and role.save - end + let(:permissions) { all_permissions - [:add_work_package_watchers] } it 'should not have a link to add watcher' do expect(subject).not_to have_json_path('_links/addWatcher/href') @@ -546,9 +515,7 @@ describe ::API::V3::WorkPackages::WorkPackageRepresenter do end context 'when the user does not have the permission to remove watchers' do - before do - role.permissions.delete(:delete_work_package_watchers) and role.save - end + let(:permissions) { all_permissions - [:delete_work_package_watchers] } it 'should not have a link to remove watcher' do expect(subject).not_to have_json_path('_links/removeWatcher/href') @@ -568,9 +535,7 @@ describe ::API::V3::WorkPackages::WorkPackageRepresenter do end context 'when the user is not allowed to see watchers' do - before do - role.permissions.delete(:view_work_package_watchers) and role.save - end + let(:permissions) { all_permissions - [:view_work_package_watchers] } it_behaves_like 'has no link' do let(:link) { 'watchers' } @@ -585,9 +550,7 @@ describe ::API::V3::WorkPackages::WorkPackageRepresenter do end context 'when the user does not have the permission to manage relations' do - before do - role.permissions.delete(:manage_work_package_relations) and role.save - end + let(:permissions) { all_permissions - [:manage_work_package_relations] } it 'should not have a link to add relation' do expect(subject).not_to have_json_path('_links/addRelation/href') @@ -595,36 +558,28 @@ describe ::API::V3::WorkPackages::WorkPackageRepresenter do end context 'when the user has the permission to add work packages' do - before do - role.permissions.push(:add_work_packages) and role.save - end it 'should have a link to add child' do expect(subject).to have_json_path('_links/addChild/href') end end context 'when the user does not have the permission to add work packages' do - before do - role.permissions.delete(:add_work_packages) and role.save - end + let(:permissions) { all_permissions - [:add_work_packages] } + it 'should not have a link to add child' do expect(subject).not_to have_json_path('_links/addChild/href') end end context 'when the user has the permission to view time entries' do - before do - role.permissions.push(:view_time_entries) and role.save - end it 'should have a link to add child' do expect(subject).to have_json_path('_links/timeEntries/href') end end context 'when the user does not have the permission to view time entries' do - before do - role.permissions.delete(:view_time_entries) and role.save - end + let(:permissions) { all_permissions - [:view_time_entries] } + it 'should not have a link to timeEntries' do expect(subject).not_to have_json_path('_links/timeEntries/href') end From e7a6ae629e856dfd4c4ce0cfb6b2096bfc7cff99 Mon Sep 17 00:00:00 2001 From: Jan Sandbrink Date: Tue, 1 Sep 2015 10:01:36 +0200 Subject: [PATCH 105/112] Add specs for update links with missing permissions - also (for now) remove title text which was not localized - consistently use link helpers for the corresponding specs --- .../work_packages/work_package_representer.rb | 6 +-- .../work_package_representer_spec.rb | 43 ++++++++++++------- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/lib/api/v3/work_packages/work_package_representer.rb b/lib/api/v3/work_packages/work_package_representer.rb index e1a96f3047..d1f4be4991 100644 --- a/lib/api/v3/work_packages/work_package_representer.rb +++ b/lib/api/v3/work_packages/work_package_representer.rb @@ -51,8 +51,7 @@ module API link :update do { href: api_v3_paths.work_package_form(represented.id), - method: :post, - title: "Update #{represented.subject}" + method: :post } if current_user_allowed_to(:edit_work_packages, context: represented.project) end @@ -65,8 +64,7 @@ module API link :updateImmediately do { href: api_v3_paths.work_package(represented.id), - method: :patch, - title: "Update #{represented.subject}" + method: :patch } if current_user_allowed_to(:edit_work_packages, context: represented.project) end diff --git a/spec/lib/api/v3/work_packages/work_package_representer_spec.rb b/spec/lib/api/v3/work_packages/work_package_representer_spec.rb index b1c8b77fc2..9bfe416a58 100644 --- a/spec/lib/api/v3/work_packages/work_package_representer_spec.rb +++ b/spec/lib/api/v3/work_packages/work_package_representer_spec.rb @@ -220,24 +220,37 @@ describe ::API::V3::WorkPackages::WorkPackageRepresenter do describe 'update links' do describe 'update by form' do - it { expect(subject).to have_json_path('_links/update/href') } - it { - expect(subject).to be_json_eql("/api/v3/work_packages/#{work_package.id}/form".to_json) - .at_path('_links/update/href') - } - it { expect(subject).to be_json_eql('post'.to_json).at_path('_links/update/method') } + it_behaves_like 'has an untitled link' do + let(:link) { 'update' } + let(:href) { api_v3_paths.work_package_form(work_package.id) } + end + + it 'is a post link' do + is_expected.to be_json_eql('post'.to_json).at_path('_links/update/method') + end end describe 'immediate update' do - it { expect(subject).to have_json_path('_links/updateImmediately/href') } - it { - expect(subject).to be_json_eql("/api/v3/work_packages/#{work_package.id}".to_json) - .at_path('_links/updateImmediately/href') - } - it { - expect(subject).to be_json_eql('patch'.to_json) - .at_path('_links/updateImmediately/method') - } + it_behaves_like 'has an untitled link' do + let(:link) { 'updateImmediately' } + let(:href) { api_v3_paths.work_package(work_package.id) } + end + + it 'is a patch link' do + is_expected.to be_json_eql('patch'.to_json).at_path('_links/updateImmediately/method') + end + end + + context 'user is not allowed to edit work packages' do + let(:permissions) { all_permissions - [:edit_work_packages] } + + it_behaves_like 'has no link' do + let(:link) { 'update' } + end + + it_behaves_like 'has no link' do + let(:link) { 'updateImmediately' } + end end end From 3f269e43ae121cdde9f2d5ddc25ed5a10f949a8e Mon Sep 17 00:00:00 2001 From: Jan Sandbrink Date: Tue, 1 Sep 2015 10:48:43 +0200 Subject: [PATCH 106/112] Add link to delete an attachment to its representer --- doc/apiv3-documentation.apib | 6 ++++ .../v3/attachments/attachment_representer.rb | 8 +++++ .../attachment_representer_spec.rb | 35 +++++++++++++++++-- 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/doc/apiv3-documentation.apib b/doc/apiv3-documentation.apib index 28bcdf4a53..b6c73f54b2 100644 --- a/doc/apiv3-documentation.apib +++ b/doc/apiv3-documentation.apib @@ -714,6 +714,12 @@ Updates an activity's comment and, on success, returns the updated activity. Attachments are files that were uploaded to OpenProject. Each attachment belongs to a single container (e.g. a work package or a board message). +## Actions + +| Link | Description | Condition | +|:-------------------:|----------------------------------------------------------------------| -------------------------------------------- | +| delete | Deletes this attachment | **Permission**: edit on attachment container | + ## Linked Properties | Link | Description | Type | Constraints | Supported operations | |:----------------:| --------------------------------------------------- | ------------- | ----------- | -------------------- | diff --git a/lib/api/v3/attachments/attachment_representer.rb b/lib/api/v3/attachments/attachment_representer.rb index fad09bacd6..90b3117420 100644 --- a/lib/api/v3/attachments/attachment_representer.rb +++ b/lib/api/v3/attachments/attachment_representer.rb @@ -50,6 +50,14 @@ module API } end + # visibility of this link is also work_package specific! + link :delete do + { + href: api_v3_paths.attachment(represented.id), + method: :delete + } if current_user_allowed_to(:edit_work_packages, context: represented.container.project) + end + property :id property :file_name, getter: -> (*) { filename } diff --git a/spec/lib/api/v3/attachments/attachment_representer_spec.rb b/spec/lib/api/v3/attachments/attachment_representer_spec.rb index fe8cf14b8c..26c24da810 100644 --- a/spec/lib/api/v3/attachments/attachment_representer_spec.rb +++ b/spec/lib/api/v3/attachments/attachment_representer_spec.rb @@ -31,8 +31,20 @@ require 'spec_helper' describe ::API::V3::Attachments::AttachmentRepresenter do include API::V3::Utilities::PathHelper - let(:attachment) { FactoryGirl.create(:attachment) } - let(:representer) { ::API::V3::Attachments::AttachmentRepresenter.new(attachment) } + let(:current_user) { + FactoryGirl.create(:user, member_in_project: project, member_through_role: role) + } + let(:project) { FactoryGirl.create(:project) } + let(:role) { FactoryGirl.create(:role, permissions: permissions) } + let(:all_permissions) { [:view_work_packages, :edit_work_packages] } + let(:permissions) { all_permissions } + + let(:container) { FactoryGirl.create(:work_package, project: project) } + + let(:attachment) { FactoryGirl.create(:attachment, container: container) } + let(:representer) { + ::API::V3::Attachments::AttachmentRepresenter.new(attachment, current_user: current_user) + } subject { representer.to_json } @@ -76,5 +88,24 @@ describe ::API::V3::Attachments::AttachmentRepresenter do let(:href) { api_v3_paths.user(attachment.author.id) } let(:title) { attachment.author.name } end + + describe 'delete link' do + it_behaves_like 'has an untitled link' do + let(:link) { 'delete' } + let(:href) { api_v3_paths.attachment(attachment.id) } + end + + it 'has the DELETE method' do + is_expected.to be_json_eql('delete'.to_json).at_path('_links/delete/method') + end + + context 'user is not allowed to edit the container' do + let(:permissions) { all_permissions - [:edit_work_packages] } + + it_behaves_like 'has no link' do + let(:link) { 'delete' } + end + end + end end end From a06adc4d57a55daad52e940d3e34ae5a29e72712 Mon Sep 17 00:00:00 2001 From: Henriette Dinger Date: Tue, 1 Sep 2015 11:10:56 +0200 Subject: [PATCH 107/112] Set the button a bit closer to the input field. --- app/assets/stylesheets/content/_simple_filters.sass | 10 +++++----- app/views/workflows/edit.html.erb | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/assets/stylesheets/content/_simple_filters.sass b/app/assets/stylesheets/content/_simple_filters.sass index 335d7222bc..70816754a7 100644 --- a/app/assets/stylesheets/content/_simple_filters.sass +++ b/app/assets/stylesheets/content/_simple_filters.sass @@ -47,9 +47,9 @@ $filters--border-color: $gray !default margin-left: 0 .simple-filters--filter - flex-basis: 40% + flex-basis: 33.33% - &.-label-cloumns-3 + &.-label-columns-3 .simple-filters--filter flex-basis: 25% @@ -57,7 +57,7 @@ $filters--border-color: $gray !default @extend .advanced-filters--filters @include grid-block @include grid-layout(1) - justify-content: space-between + justify-content: flex-start @include breakpoint(large) @include grid-layout(3) @@ -76,7 +76,7 @@ $filters--border-color: $gray !default flex-basis: 15% margin-top: 5px .simple-filters--filter-value - flex-basis: 70% + flex-basis: 75% .form--radio-button-container margin-right: 20px @@ -88,7 +88,7 @@ $filters--border-color: $gray !default flex: 1 .simple-filters--filters.-columns-3 - justify-content: space-between + justify-content: flex-start @include breakpoint(large) @include grid-layout(4) diff --git a/app/views/workflows/edit.html.erb b/app/views/workflows/edit.html.erb index a390c50444..dca745c93a 100644 --- a/app/views/workflows/edit.html.erb +++ b/app/views/workflows/edit.html.erb @@ -40,7 +40,7 @@ See doc/COPYRIGHT.rdoc for more details.
  • <%= styled_label_tag :type_id, Type.model_name.human, class: 'simple-filters--filter-name' %> -
    +
    <%= styled_select_tag 'type_id', options_from_collection_for_select(@types, "id", "name", @type && @type.id) %>
  • From 5ff736ad55f531c478611011a4a5bc1568fe0ed8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Tue, 1 Sep 2015 15:00:15 +0200 Subject: [PATCH 108/112] Force english locale on browser profile --- spec/spec_helper.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 2698fd9978..63bd667686 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -43,7 +43,11 @@ Capybara.register_driver :selenium do |app| require 'selenium/webdriver' Selenium::WebDriver::Firefox::Binary.path = ENV['FIREFOX_BINARY_PATH'] || Selenium::WebDriver::Firefox::Binary.path - Capybara::Selenium::Driver.new(app, browser: :firefox) + + profile = Selenium::WebDriver::Firefox::Profile.new + profile['intl.accept_languages'] = 'en' + + Capybara::Selenium::Driver.new(app, browser: :firefox, profile: profile) end # Requires supporting ruby files with custom matchers and macros, etc, From 99a3635cd81d4284112ec4bb93875ef784b5aacf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Tue, 1 Sep 2015 16:15:22 +0200 Subject: [PATCH 109/112] Fix invalid tag in project table --- app/views/admin/projects.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/admin/projects.html.erb b/app/views/admin/projects.html.erb index 365d9fef1d..2d369f0b72 100644 --- a/app/views/admin/projects.html.erb +++ b/app/views/admin/projects.html.erb @@ -111,7 +111,7 @@ See doc/COPYRIGHT.rdoc for more details.
    <% project_tree_when_sorted(@projects) do |project, level| %> "> - + From ab375747f1ef6e2087d5b6afcdbe54af75cdad05 Mon Sep 17 00:00:00 2001 From: Continuous Integration Date: Wed, 2 Sep 2015 01:24:28 +0200 Subject: [PATCH 110/112] Update reference to OpenProject-Translations --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 585d6bc850..6ba81eca2c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -30,7 +30,7 @@ GIT GIT remote: https://github.com/opf/openproject-translations.git - revision: 685f383c52f117a06d6cf6dfaa55b77db7370d69 + revision: 89ea5219ff194b05f52d05e0ada5cd0ba4939893 branch: dev specs: openproject-translations (5.0.0.pre.alpha) From 36c3db560b6ed116ac306cfd5e9923c58f576d49 Mon Sep 17 00:00:00 2001 From: Continuous Integration Date: Wed, 2 Sep 2015 02:47:40 +0200 Subject: [PATCH 111/112] Update reference to OpenProject-Translations --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 2668b188cb..b2f45152a4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -53,7 +53,7 @@ GIT GIT remote: https://github.com/opf/openproject-translations.git - revision: 3a0cffeebd4a0f5a0219c0f147734eeed2730ec2 + revision: e2777ce44fcceca77974f923717f67b3682e2716 branch: release/4.2 specs: openproject-translations (4.2.7) From d54c31905dfa13270afd1abde8f172e5f54d4b3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Wed, 2 Sep 2015 14:34:59 +0200 Subject: [PATCH 112/112] Make bundler 1.10 optional groups optional Optional groups are only available with Bundler 1.10+ We still want older bundlers to parse the gemfile correctly, thus a workaround is needed. --- Gemfile | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index ec6d4ec1f5..4a3faad157 100644 --- a/Gemfile +++ b/Gemfile @@ -181,7 +181,17 @@ group :ldap do gem "net-ldap", '~> 0.8.0' end -group :syck, optional: true do + + +# Optional groups are only available with Bundler 1.10+ +# We still want older bundlers to parse this gemfile correctly, +# thus this rather ugly workaround is needed for now. +# TODO: Remove this when 1.10+ is widespread. +if Gem::Version.new(Bundler::VERSION) >= Gem::Version.new('1.10.0') + group :syck, optional: true do + gem "syck", require: false + end +else gem "syck", require: false end
    "<%= link_to project, settings_project_path(project), :title => project.short_description %>"<%= link_to project, settings_project_path(project), :title => project.short_description %> <%= checked_image project.is_public? %> <%= number_to_human_size(project.required_disk_space, precision: 2) if project.required_disk_space.to_i > 0 %> <%= format_date(project.created_on) %> <%= format_date(project.created_on) %> <%= format_date(project.updated_on) %> - <%= link_to(l(:button_archive), + <%= link_to('', archive_project_path(project, :status => params[:status]), data: { confirm: l(:text_are_you_sure) }, :method => :put, + :title => l(:button_archive), :class => 'icon icon-locked') if project.active? %> - <%= link_to(l(:button_unarchive), + <%= link_to('', unarchive_project_path(project, :status => params[:status]), :method => :put, + :title => l(:button_unarchive), :class => 'icon icon-unlocked') if !project.active? && (project.parent.nil? || project.parent.active?) %> - <%= link_to(l(:button_copy), + <%= link_to('', copy_from_project_path(project, :admin), + :title => l(:button_copy), :class => 'icon icon-copy') %> - <%= link_to(l(:button_delete), + <%= link_to('', confirm_destroy_project_path(project), + :title => l(:button_delete), :class => 'icon icon-delete') %>
    "<%= link_to project, settings_project_path(project), :title => project.short_description %><%= link_to project, settings_project_path(project), :title => project.short_description %> <%= checked_image project.is_public? %> <%= number_to_human_size(project.required_disk_space, precision: 2) if project.required_disk_space.to_i > 0 %> <%= format_date(project.created_on) %>