Fix typos in user facing and non-user facing code

Found via `codespell v2.1.dev0`
pull/8942/head
luz paz 4 years ago committed by Oliver Günther
parent 2de9166070
commit 3683042c9b
  1. 2
      app/controllers/account_controller.rb
  2. 2
      app/controllers/concerns/accounts/current_user.rb
  3. 2
      app/controllers/concerns/user_invitation.rb
  4. 2
      app/controllers/repositories_controller.rb
  5. 2
      app/helpers/removed_js_helpers_helper.rb
  6. 2
      app/models/activities/base_activity_provider.rb
  7. 2
      app/models/custom_value/format_strategy.rb
  8. 6
      app/models/journal/scopes/aggregated_journal.rb
  9. 4
      app/models/principal.rb
  10. 2
      app/models/project.rb
  11. 2
      app/models/queries/principals/filters/id_filter.rb
  12. 2
      app/models/setting.rb
  13. 2
      app/models/type.rb
  14. 2
      app/models/user_password.rb
  15. 2
      app/models/work_package.rb
  16. 2
      app/models/work_package/parent.rb
  17. 2
      app/seeders/basic_data/workflow_seeder.rb
  18. 2
      app/services/journals/create_service.rb
  19. 2
      app/services/projects/copy/queries_dependent_service.rb
  20. 2
      app/services/scm/repository_factory_service.rb
  21. 2
      app/services/service_result.rb
  22. 4
      app/services/work_packages/update_ancestors_service.rb
  23. 2
      app/views/repositories/_breadcrumbs.html.erb
  24. 2
      app/workers/scm/create_local_repository_job.rb
  25. 6
      bin/compose
  26. 2
      config/application.rb
  27. 4
      config/configuration.yml.example
  28. 2
      config/initializers/friendly_id.rb
  29. 10
      config/locales/en.yml
  30. 2
      config/locales/js-en.yml
  31. 2
      config/settings.yml
  32. 2
      docs/api/api_documentation_layouts/README.md
  33. 10
      docs/api/apiv3/basic-objects.apib
  34. 2
      docs/api/apiv3/endpoints/categories.apib
  35. 2
      docs/api/apiv3/endpoints/grids.apib
  36. 2
      docs/api/apiv3/endpoints/groups.apib
  37. 2
      docs/api/apiv3/endpoints/projects.apib
  38. 16
      docs/api/apiv3/endpoints/queries.apib
  39. 4
      docs/api/apiv3/endpoints/schemas.apib
  40. 2
      docs/api/apiv3/endpoints/types.apib
  41. 4
      docs/api/apiv3/endpoints/users.apib
  42. 2
      docs/api/apiv3/endpoints/versions.apib
  43. 2
      docs/api/apiv3/example/README.md
  44. 6
      docs/api/apiv3/forms.apib
  45. 2
      docs/api/apiv3/introduction.apib
  46. 2
      docs/cloud-edition-guide/manage-subscription/README.md
  47. 2
      docs/development/concepts/application-architecture/README.md
  48. 8
      docs/development/concepts/inline-editing/README.md
  49. 6
      docs/development/concepts/queries/README.md
  50. 4
      docs/development/concepts/resource-changesets/README.md
  51. 4
      docs/development/concepts/state-management/README.md
  52. 2
      docs/development/development-environment-docker/README.md
  53. 4
      docs/development/git-workflow/README.md
  54. 2
      docs/getting-started/my-page/README.md
  55. 2
      docs/getting-started/projects/README.md
  56. 2
      docs/installation-and-operations/configuration/environment/README.md
  57. 2
      docs/installation-and-operations/configuration/incoming-emails/README.md
  58. 4
      docs/installation-and-operations/configuration/repositories/README.md
  59. 4
      docs/installation-and-operations/installation/docker/README.md
  60. 2
      docs/installation-and-operations/installation/manual/README.md
  61. 4
      docs/installation-and-operations/installation/packaged/README.md
  62. 2
      docs/installation-and-operations/misc/custom-openid-connect-providers/README.md
  63. 10
      docs/installation-and-operations/misc/time-entries-corrupted-by-10-4/README.md
  64. 2
      docs/installation-and-operations/misc/upgrading-older-openproject-versions/README.md
  65. 2
      docs/installation-and-operations/operation/upgrading/README.md
  66. 2
      docs/system-admin-guide/authentication/ldap-authentication/README.md
  67. 4
      docs/system-admin-guide/email/README.md
  68. 2
      docs/system-admin-guide/plugins/README.md
  69. 2
      docs/system-admin-guide/system-settings/repositories/README.md
  70. 2
      docs/system-admin-guide/webhooks/README.md
  71. 2
      docs/user-guide/backlogs-scrum/work-with-backlogs/README.md
  72. 2
      docs/user-guide/calendar/README.md
  73. 4
      docs/user-guide/forums/README.md
  74. 2
      docs/user-guide/gantt-chart/README.md
  75. 4
      docs/user-guide/integrations/Excel Synchronization/README.md
  76. 2
      docs/user-guide/projects/project-settings/repository/README.md
  77. 2
      docs/user-guide/repository/README.md
  78. 2
      docs/user-guide/wiki/create-edit-wiki/README.md
  79. 2
      docs/user-guide/wysiwyg/README.md
  80. 2
      spec/contracts/work_packages/create_contract_spec.rb
  81. 2
      spec/controllers/account_controller_spec.rb
  82. 2
      spec/controllers/versions_controller_spec.rb
  83. 2
      spec/features/auth/lost_password_spec.rb
  84. 2
      spec/features/auth/omniauth_spec.rb
  85. 2
      spec/features/menu_items/wiki_menu_item_spec.rb
  86. 10
      spec/features/projects/projects_index_spec.rb
  87. 2
      spec/features/repositories/create_repository_spec.rb
  88. 2
      spec/features/users/user_memberships_spec.rb
  89. 4
      spec/features/work_packages/timeline/timeline_labels_spec.rb
  90. 2
      spec/helpers/pagination_helper_spec.rb
  91. 2
      spec/lib/open_project/configuration_spec.rb
  92. 2
      spec/lib/open_project/scm/adapters/git_adapter_spec.rb
  93. 2
      spec/lib/reminders/due_issues_reminder_spec.rb
  94. 2
      spec/lib/tabular_form_builder_spec.rb
  95. 2
      spec/models/attachment_spec.rb
  96. 6
      spec/models/principal_spec.rb
  97. 2
      spec/models/work_packages/derived_dates_spec.rb
  98. 2
      spec/requests/api/v3/rack_deflater_spec.rb
  99. 2
      spec/services/api/v3/work_package_collection_from_query_service_spec.rb
  100. 2
      spec/services/projects/copy_service_integration_spec.rb
  101. Some files were not shown because too many files have changed in this diff Show More

@ -105,7 +105,7 @@ class AccountController < ApplicationController
end
unless user.change_password_allowed?
# user uses an external authentification
# user uses an external authentication
Rails.logger.error "Password cannot be changed for user: #{mail}"
return
end

@ -113,7 +113,7 @@ module Accounts::CurrentUser
end
# Otherwise, if there is an omniauth direct login
# and we're not logging out globablly, ensure the
# and we're not logging out globally, ensure the
# user does not get re-logged in
if Setting.login_required? && omniauth_direct_login?
flash.now[:notice] = I18n.t :notice_logged_out

@ -111,7 +111,7 @@ module UserInvitation
# Creates a placeholder name for the user based on their email address.
# For the unlikely case that the local or domain part of the email address
# are longer than 30 characters they will be trimmed to 27 characters and an
# elipsis will be appended.
# ellipsis will be appended.
def placeholder_name(email)
first, last = email.split('@').map { |name| trim_name(name) }

@ -440,7 +440,7 @@ class RepositoriesController < ApplicationController
commits_data = commits_data + [0] * (10 - commits_data.length) if commits_data.length < 10
changes_data = changes_data + [0] * (10 - changes_data.length) if changes_data.length < 10
# Remove email adress in usernames
# Remove email address in usernames
fields = fields.map { |c| c.gsub(%r{<.+@.+>}, '') }
graph = SVG::Graph::BarHorizontal.new(

@ -28,7 +28,7 @@
#++
# Contains tag helpers still existing in the OP code but already
# removed from rails. Please consider removing the occurences in
# removed from rails. Please consider removing the occurrences in
# the code rather than adding additional helpers here.
module RemovedJsHelpersHelper

@ -49,7 +49,7 @@ class Activities::BaseActivityProvider
class_attribute :activity_provider_options
# Returns events of type event_type visible by user that occured between from and to
# Returns events of type event_type visible by user that occurred between from and to
def self.find_events(event_type, user, from, to, options)
raise "#{name} can not provide #{event_type} events." if activity_provider_options[:type] != event_type

@ -54,7 +54,7 @@ class CustomValue::FormatStrategy
# Parses the value to
# 1) have a unified representation for different inputs
# 2) memoize typed values (if the subclass descides to do so
# 2) memoize typed values (if the subclass decides to do so
def parse_value(val)
self.memoized_typed_value = nil

@ -104,7 +104,7 @@ module Journal::Scopes
# customizable_journals/attachable_journals) represent the complete state of the journable at the given time.
#
# e.g. a group of 5 sequential journals without notes, belonging to the same user and created within the configured
# time difference between one journal and its succcessor
# time difference between one journal and its successor
#
# Version 9
# Version 8
@ -119,7 +119,7 @@ module Journal::Scopes
# that all journals of the same group that are after the notes journal are also returned.
#
# e.g. a group of 5 sequential journals with only one note, belonging to the same user and created within the configured
# time difference between one journal and its succcessor
# time difference between one journal and its successor
#
# Version 9
# Version 8
@ -136,7 +136,7 @@ module Journal::Scopes
# after it up to and including the maximum journal version of the group.
# e.g. a group of 5 sequential journals with only one note, belonging to the same user and created within the configured
# time difference between one journal and its succcessor
# time difference between one journal and its successor
#
# Version 9
# Version 8 (note)

@ -143,7 +143,7 @@ class Principal < ApplicationRecord
##
# Allows the API and other sources to determine locking actions
# on represented collections of children of Principals.
# Must be overriden by User
# Must be overridden by User
def lockable?
false
end
@ -151,7 +151,7 @@ class Principal < ApplicationRecord
##
# Allows the API and other sources to determine unlocking actions
# on represented collections of children of Principals.
# Must be overriden by User
# Must be overridden by User
def activatable?
false
end

@ -347,7 +347,7 @@ class Project < ApplicationRecord
end
# Returns an array of all custom fields enabled for project issues
# (explictly associated custom fields and custom fields enabled for all projects)
# (explicitly associated custom fields and custom fields enabled for all projects)
#
# Supports the :include option.
def all_work_package_custom_fields(options = {})

@ -30,7 +30,7 @@
class Queries::Principals::Filters::IdFilter < Queries::Principals::Filters::PrincipalFilter
def allowed_values
[["me", "me"]] # Not the whole truth but performes better than checking all IDs
[["me", "me"]] # Not the whole truth but performs better than checking all IDs
end
def type

@ -114,7 +114,7 @@ class Setting < ApplicationRecord
self[:#{name}] = value
else
logger.warn "Trying to save a setting named '#{name}' while there is no 'setting' table yet. This setting will not be saved!"
nil # when runnung too early, there is no settings table. do nothing
nil # when running too early, there is no settings table. do nothing
end
end
END_SRC

@ -31,7 +31,7 @@ class ::Type < ApplicationRecord
extend Pagination::Model
# Work Package attributes for this type
# and constraints to specifc attributes (by plugins).
# and constraints to specific attributes (by plugins).
include ::Type::Attributes
include ::Type::AttributeGroups

@ -98,7 +98,7 @@ class UserPassword < ApplicationRecord
self.hashed_password = derive_password!(plain_password)
end
# Require the implementation to provide a secure comparisation
# Require the implementation to provide a secure comparison
def hash_matches?(_plain)
raise NotImplementedError, 'Must be overridden by subclass'
end

@ -216,7 +216,7 @@ class WorkPackage < ApplicationRecord
def visible_relations(user)
# This duplicates chaining
# .relations.visible
# The duplication is made necessary to achive a performant sql query on MySQL.
# The duplication is made necessary to achieve a performant sql query on MySQL.
# Chaining would result in
# WHERE (relations.from_id = [ID] OR relations.to_id = [ID])
# AND relations.from_id IN (SELECT [IDs OF VISIBLE WORK_PACKAGES])

@ -113,7 +113,7 @@ module WorkPackage::Parent
def reload(*args)
@parent_object = nil
# The is_leaf resetting stems fro typed_dag_defaults.rb where it was impossible to add
# The is_leaf resetting stems from typed_dag_defaults.rb where it was impossible to add
# another #reload method without interfering with the virtual attribute handling defined here.
reset_is_leaf

@ -37,7 +37,7 @@ module BasicData
#
# This can happen when an existing database, having timelines planning elements,
# gets migrated. During the migration, the existing planning elements are converted
# to work_packages. Because the existance of a standard type cannot be guaranteed
# to work_packages. Because the existence of a standard type cannot be guaranteed
# during the migration, such work packages receive a type_id of nil.
#
# Because all work packages that do not have a type yet should always have had one

@ -3,7 +3,7 @@
# custom values and attachments, those entries are copied in the database.
# Copying and thereby creation only takes place if a change of the current state and the last journal is identified.
# Note, that the adequate creation of a journal which represents the state that is generated by a single user action depends on
# no other user/action altering the current state at the same time especially in a multi proccess/thread setup.
# no other user/action altering the current state at the same time especially in a multi process/thread setup.
# Therefore, the whole update of a journable needs to be safeguarded by a mutex. In our implementation, we use
#
# OpenProject::Mutex.with_advisory_lock_transaction(journable)

@ -41,7 +41,7 @@ module Projects::Copy
def copy_dependency(params:)
mapping = queries_to_copy.map do |query|
copy = duplicate_query(query, params)
# Either assign the succesfully copied query's ID or nil to indicate
# Either assign the successfully copied query's ID or nil to indicate
# it could not be copied.
new_id = copy.map(&:id).to_a.first

@ -56,7 +56,7 @@ class SCM::RepositoryFactoryService
end
##
# Build a temporary repository used only for determining availabe settings and types
# Build a temporary repository used only for determining available settings and types
# of that particular vendor.
#
# @return [Boolean] true iff the repository was built

@ -107,7 +107,7 @@ class ServiceResult
# Collect all present errors for the given result
# and dependent results.
#
# Returns a map of the service reuslt to the error object
# Returns a map of the service result to the error object
def results_with_errors(include_self: true)
results =
if include_self

@ -177,7 +177,7 @@ class WorkPackages::UpdateAncestorsService
def leaves_for_work_package(work_package)
@leaves ||= Hash.new do |hash, wp|
hash[wp] = related_for_work_package(wp, :leaves).each do |leaf|
# Mimick work package by implementing the closed? interface
# Mimic work package by implementing the closed? interface
leaf.send(:'closed?=', leaf.is_closed)
end
end
@ -234,7 +234,7 @@ class WorkPackages::UpdateAncestorsService
end
def selected_descendants_attributes
# By having the id in here, we can avoid DISTINCT queries sqashing duplicate values
# By having the id in here, we can avoid DISTINCT queries squashing duplicate values
%i(id estimated_hours)
end

@ -48,7 +48,7 @@ dirs.each_with_index do |dir, index|
<% end %>
<% end %>
<%
# @rev is revsion or git branch or tag.
# @rev is revision or git branch or tag.
rev_text = @changeset.nil? ? @rev : format_revision(@changeset)
%>
<span class="repository-bradcrumbs--identifier">

@ -76,7 +76,7 @@ class SCM::CreateLocalRepositoryJob < ApplicationJob
##
# Creates the repository at the +root_url+.
# Accepts an overriden permission mode mask from the scm config,
# Accepts an overridden permission mode mask from the scm config,
# or sets a sensible default of 0700.
def create(mode)
FileUtils.mkdir_p(repository.root_url, mode: mode)

@ -14,9 +14,9 @@ if [ $# -eq 0 ]; then
echo "Usage: bin/compose <command> [args*]"
echo
echo "Commands:"
echo " setup - Has to be run once intially. Installs backend and frontend dependencies. "
echo " start - Starts both backend and frontend in the background. Acccess via http://localhost:3000/ by default."
echo " run - Starts the frontend in the backround and backend in the foreground. Useful for debugging using pry."
echo " setup - Has to be run once initially. Installs backend and frontend dependencies. "
echo " start - Starts both backend and frontend in the background. Access via http://localhost:3000/ by default."
echo " run - Starts the frontend in the background and backend in the foreground. Useful for debugging using pry."
echo " * - Everything else will be passed straight to \`docker-compose\`."
echo

@ -44,7 +44,7 @@ if defined?(Bundler)
#
# require 'open_project/plugins'
#
# to ensure the code to be loaded. So we provide a compaibility
# to ensure the code to be loaded. So we provide a compatibility
# layer here. One might remove this later.
$LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
require 'open_project/plugins'

@ -143,7 +143,7 @@
# - plugins
# - info
#
# Also there is a posibility to specify which routes are forbidden,
# Also there is a possibility to specify which routes are forbidden,
# they should be listed as an array in yml format more information
# regarding yml format you can find here:
# http://symfony.com/doc/current/components/yaml/yaml_format.html
@ -177,7 +177,7 @@ default:
smtp_password: "my_openproject_password"
# Prefix to the url-path. This path is then prepended to all
# the routes and is used to correclty identify the path to the assets.
# the routes and is used to correctly identify the path to the assets.
# Defaults to having no prefix.
# Examples:
# For OpenProject to be reachable as

@ -31,7 +31,7 @@ FriendlyId.defaults do |config|
# MyModel.find('foo')
#
# This is significantly more convenient but may not be appropriate for
# all applications, so you must explicity opt-in to this behavior. You can
# all applications, so you must explicitly opt-in to this behavior. You can
# always also configure it on a per-model basis if you prefer.
#
# Something else to consider is that using the :finders addon boosts

@ -89,7 +89,7 @@ en:
is_inactive: currently not displayed
attribute_help_texts:
note_public: 'Any text and images you add to this field is publically visible to all logged in users!'
note_public: 'Any text and images you add to this field is publicly visible to all logged in users!'
text_overview: 'In this view, you can create custom help texts for attributes view. When defined, these texts can be shown by clicking the help icon next to its belonging attribute.'
label_plural: 'Attribute help texts'
show_preview: 'Preview text'
@ -222,7 +222,7 @@ en:
projects:
delete:
scheduled: "Deletion has been scheduled and is perfomed in the background. You will be notified of the result."
scheduled: "Deletion has been scheduled and is performed in the background. You will be notified of the result."
schedule_failed: "Project cannot be deleted: %{errors}"
failed: "Deletion of project %{name} has failed"
failed_text: "The request to delete project %{name} has failed. The project was left archived."
@ -1163,7 +1163,7 @@ en:
Can't rename "%{old_name}" to "%{new_name}" due to a conflict in the resulting menu item
with the existing menu item "%{existing_caption}" (%{existing_identifier}).
error_external_authentication_failed: "An error occured during external authentication. Please try again."
error_external_authentication_failed: "An error occurred during external authentication. Please try again."
error_attribute_not_highlightable: "Attribute(s) not highlightable: %{attributes}"
events:
@ -2178,7 +2178,7 @@ en:
username: "Repository username"
truncated: "Sorry, we had to truncate this directory to %{limit} files. %{truncated} entries were omitted from the list."
named_repository: "%{vendor_name} repository"
update_settings_successful: "The settings have been sucessfully saved."
update_settings_successful: "The settings have been successfully saved."
url: "URL to repository"
warnings:
cannot_annotate: "This file cannot be annotated."
@ -2758,7 +2758,7 @@ en:
code_403: "You are not authorized to access this resource."
code_404: "The requested resource could not be found."
code_409: "Could not update the resource because of conflicting modifications."
code_500: "An internal error has occured."
code_500: "An internal error has occurred."
expected:
date: "YYYY-MM-DD (ISO 8601 date only)"
duration: "ISO 8601 duration"

@ -101,7 +101,7 @@ en:
clipboard:
browser_error: "Your browser doesn't support copying to clipboard. Please copy the selected text manually."
copied_successful: "Sucessfully copied to clipboard!"
copied_successful: "Successfully copied to clipboard!"
chart:
type: 'Chart type'

@ -79,7 +79,7 @@ consent_info:
serialized: true
default:
en: "## Consent\n\nYou need to agree to the [privacy and security policy](https://www.openproject.org/data-privacy-and-security/) of this OpenProject instance."
# Indicates wether or not users need to consent to something such as privacy policy.
# Indicates whether or not users need to consent to something such as privacy policy.
consent_required:
default: 0
format: boolean

@ -37,7 +37,7 @@ _Status: under development_
The documentation for APIv3 is written in the [API Blueprint Format](http://apiblueprint.org/).
You can use [aglio](https://github.com/danielgtaylor/aglio) to generate HTML documentation.
Aglio supports the use of templates to adjust the ouput to your own needs. OpenProject is
Aglio supports the use of templates to adjust the output to your own needs. OpenProject is
using the openproject.jade template file. To generate the documentation using the
openproject.jade layout file the following command:

@ -44,9 +44,9 @@ Changes to all other properties will be **silently ignored**.
# Errors
In case of an error, the API will respond with an apropriate HTTP status code.
In case of an error, the API will respond with an appropriate HTTP status code.
For responses with an HTTP status of `4xx` and `5xx` the body will always contain a single error object.
Error objects shall give the client additional details about the cause of an errorneous response.
Error objects shall give the client additional details about the cause of an erroneous response.
## General errors
@ -66,7 +66,7 @@ Error objects shall give the client additional details about the cause of an err
{
"_type": "Error",
"errorIdentifier": "urn:openproject-org:api:v3:errors:InternalServerError",
"message": "An internal server error occured. This is not your fault."
"message": "An internal server error occurred. This is not your fault."
}
## Embedded error information
@ -98,7 +98,7 @@ To ease implementation of basic clients it is guaranteed that the response body
However it is allowed that an error object *embeds* other error objects under the key `errors`, thereby aggregating them.
The `errorIdentifier` of such an object is always `urn:openproject-org:api:v3:errors:MultipleErrors`. The message can either describe one of the
embedded errors or simply state that multiple errors occured.
embedded errors or simply state that multiple errors occurred.
#### Example
@ -139,7 +139,7 @@ embedded errors or simply state that multiple errors occured.
* `urn:openproject-org:api:v3:errors:ResourceTypeMismatch` (**HTTP 422**) - A link to a resource of a specific type was expected, but the link to another type of resource was provided
* `urn:openproject-org:api:v3:errors:PropertyFormatError` (**HTTP 422**) - A property value was provided in a format that the server does not understand or accept
* `urn:openproject-org:api:v3:errors:InternalServerError` (**HTTP 500**) - Default for HTTP 500 when no further information is available
* `urn:openproject-org:api:v3:errors:MultipleErrors` - Multiple errors occured. See the embedded `errors` array for more details.
* `urn:openproject-org:api:v3:errors:MultipleErrors` - Multiple errors occurred. See the embedded `errors` array for more details.
# Formattable Text

@ -63,7 +63,7 @@
## List categories of a project [GET]
+ Parameters
+ project_id (required, integer, `1`) ... ID of the project whoose categories will be listed
+ project_id (required, integer, `1`) ... ID of the project whose categories will be listed
+ Response 200 (application/hal+json)

@ -15,7 +15,7 @@ Currently, the following pages employ grids:
| Link | Description | Condition |
|:-------------------:| -------------------------------------------------------------------- | ---------------------------------------------------------------- |
| updateImmediately | Directly perform edits on this grid | **Permission**: depends on the page the grid is defined for |
| update | Validate edits on the grid via a form resource before commiting | **Permission**: depends on the page the grid is defined for |
| update | Validate edits on the grid via a form resource before committing | **Permission**: depends on the page the grid is defined for |
## Linked Properties
| Link | Description | Type | Constraints | Supported operations | Condition |

@ -12,7 +12,7 @@ None
| Link | Description | Type | Constraints | Supported operations | Condition |
|:-----------:|-------------------------------------------------------------- | ------------- | --------------------- | -------------------- | ----------------------------------------- |
| self | This group | Group | not null | READ | |
| members | Link ot collection of all the group's memberships. The list will only include the memberships in projects in which the requesting user has the necessary permissions. | MemberCollection | | READ | **Permission**: view members or manage members in any project |
| members | Link to collection of all the group's memberships. The list will only include the memberships in projects in which the requesting user has the necessary permissions. | MemberCollection | | READ | **Permission**: view members or manage members in any project |
## Local Properties
| Property | Description | Type | Constraints | Supported operations | Condition |

@ -36,7 +36,7 @@ Depending on custom fields defined for projects, additional links might exist.
| identifier | | String | | READ/WRITE |
| name | | String | | READ/WRITE |
| active | Indicates whether the project is currently active or already archived | Boolean | | READ/WRITE |
| status | Denotes the status of the project, so wether the project is on track, at risk is having trouble. | String | "on track", "at risk" or "off track" | READ/WRITE |
| status | Denotes the status of the project, so whether the project is on track, at risk is having trouble. | String | "on track", "at risk" or "off track" | READ/WRITE |
| statusExplanation | A text detailing and explaining why the project has the reported status | Formattable | | READ/WRITE |
| public | Indicates whether the project is accessible for everybody | Boolean | | READ/WRITE |
| description | | Formattable | | READ/WRITE |

@ -18,7 +18,7 @@ A query defines how work packages can be filtered and displayed. Clients can def
| self | This query | Query | not null | READ |
| user | The user that owns this query | User | not null | READ |
| project | The project on which this query operates | Project | | READ |
| columns | Ordered list of QueryColumns. The columns, when maped to WorkPackage properties determine which WorkPackage properties to display | []QueryColumn | | READ |
| columns | Ordered list of QueryColumns. The columns, when mapped to WorkPackage properties determine which WorkPackage properties to display | []QueryColumn | | READ |
| highlightedAttributes | **Only with valid Enterprise Token available:** List of QueryColumns that should get highlighted when `highlightingMode` is set to `inline`. | []QueryColumn | | READ |
| sortBy | Ordered list of QuerySortBys. Indicates the WorkPackage property the results will be ordered by as well as the direction | []QuerySortBy | | READ |
| groupBy | The WorkPackage property results of this query are grouped by | String | | READ |
@ -260,7 +260,7 @@ If the values are nonprimitive (e.g. User, Project), they will be listed as obje
## View query [GET]
Retreive an individual query as identified by the id parameter. Then end point accepts a number of parameters that can be used to override the resources' persisted parameters.
Retrieve an individual query as identified by the id parameter. Then end point accepts a number of parameters that can be used to override the resources' persisted parameters.
+ Parameters
+ id (required, integer, `1`) ... Query id
@ -2172,7 +2172,7 @@ As of now, no actions are defined.
## View Query Column [GET]
Retreive an individual QueryColumn as identified by the `id` parameter.
Retrieve an individual QueryColumn as identified by the `id` parameter.
+ Parameters
+ id (required, string, `priority`) ... QueryColumn id
@ -2248,7 +2248,7 @@ As of now, no actions are defined.
## View Query Filter [GET]
Retreive an individual QueryFilter as identified by the id parameter.
Retrieve an individual QueryFilter as identified by the id parameter.
+ Parameters
+ id (required, string, `status`) ... QueryFilter identifier.
@ -2326,7 +2326,7 @@ As of now, no actions are defined.
## View Query Operator [GET]
Retreive an individual QueryOperator as identified by the `id` parameter.
Retrieve an individual QueryOperator as identified by the `id` parameter.
+ Parameters
+ id (required, string, `!`) ... QueryOperator id
@ -2414,7 +2414,7 @@ As of now, no actions are defined.
## View Query Sort By [GET]
Retreive an individual QuerySortBy as identified by the id parameter.
Retrieve an individual QuerySortBy as identified by the id parameter.
+ Parameters
+ id (required, string, `status-asc`) ... QuerySortBy identifier. The identifier is a combination of the column identifier and the direction.
@ -2451,7 +2451,7 @@ Retreive an individual QuerySortBy as identified by the id parameter.
## Group Query Filter Instance Schema
A QueryFilterInstanceSchema is a Schema specifically for describing QueryFilterInstances. Because the behaviour of FilterInstances, with regards to the `values` property, differs from one another depending on the choosen Filter, the QueryFilterInstanceSchema explicitly lists the dependencies in its `_dependencies` property. As the property causing the difference is the selected Filter, that property is linked. Apart from that, a QueryFilterInstanceSchema has the same structure a Schema does.
A QueryFilterInstanceSchema is a Schema specifically for describing QueryFilterInstances. Because the behaviour of FilterInstances, with regards to the `values` property, differs from one another depending on the chosen Filter, the QueryFilterInstanceSchema explicitly lists the dependencies in its `_dependencies` property. As the property causing the difference is the selected Filter, that property is linked. Apart from that, a QueryFilterInstanceSchema has the same structure a Schema does.
## Linked Properties
@ -2531,7 +2531,7 @@ A QueryFilterInstanceSchema is a Schema specifically for describing QueryFilterI
## View Query Filter Instance Schema [GET]
Retreive an individual QueryFilterInstanceSchema as identified by the id parameter.
Retrieve an individual QueryFilterInstanceSchema as identified by the id parameter.
+ Parameters
+ identifier (required, string, `author`) ... QueryFilterInstanceSchema identifier. The identifier is the filter identifier.

@ -28,7 +28,7 @@ The `_dependencies` property contains the list of dependencies that exist betwee
| Property | Description | Conditions |
| :--------------: | -------------------------------------------------------------- | --------------------------------------------- |
| allowedValues | List of resources that are assignable by the current user. | Will not exist if `allowedValuesSchemas` is present. |
| allowedValuesSchemas | Link to schemas furhter describing the property. | Will not exist if `allowedValues` is present. |
| allowedValuesSchemas | Link to schemas further describing the property. | Will not exist if `allowedValues` is present. |
The `allowedValues` can either contain a list of canonical links or just a single link to a collection resource.
This is an optimization to allow efficient handling of both small resource lists (that can be enumerated inline) and large
@ -128,7 +128,7 @@ The following excerpt examplifies the objects that can be found as a value of th
Given the example above, the client has to add the property `loremIpsum` to the schema if the depending property is `1`, `2` or `3`. If it is `4` the property does not exist. The property will not be writable if the value is `3`. The values allowed to be set differ between having `1` or `2` selected for the depending property.
Because of the limitation of JSON objects, all keys will be strings, even when the depending value is actually someting different (e.g. Integer, Date). This is also true for resources in which case the url of the resource is used as the key.
Because of the limitation of JSON objects, all keys will be strings, even when the depending value is actually something different (e.g. Integer, Date). This is also true for resources in which case the url of the resource is used as the key.
## Example Schema [/api/v3/example/schema]

@ -156,7 +156,7 @@
This endpoint lists the types that are *available* in a given project.
+ Parameters
+ project_id (required, integer, `1`) ... ID of the project whoose types will be listed
+ project_id (required, integer, `1`) ... ID of the project whose types will be listed
+ Response 200 (application/hal+json)

@ -14,7 +14,7 @@
|:-----------:|-------------------------------------------------------------- | ------------- | --------------------- | -------------------- | ----------------------------------------- |
| self | This user | User | not null | READ | |
| auth_source | Link to the user's auth source (endpoint not yet implemented) | AuthSource | | READ / WRITE | **Permission**: Administrator |
| members | Link ot collection of all the user's memberships. The list will only include the memberships in projects in which the requesting user has the necessary permissions. | MemberCollection | | READ | **Permission**: view members or manage members in any project |
| members | Link to collection of all the user's memberships. The list will only include the memberships in projects in which the requesting user has the necessary permissions. | MemberCollection | | READ | **Permission**: view members or manage members in any project |
## Local Properties
| Property | Description | Type | Constraints | Supported operations | Condition |
@ -36,7 +36,7 @@
The `status` of a user can be one of:
* `active` - the user can log in with the account right aways
* `active` - the user can log in with the account right away
* `invited` - the user is invited and is pending registration
If the user's `status` is set to `active` during creation a means of authentication

@ -1161,7 +1161,7 @@ This endpoint lists the versions that are *available* in a given project.
Note that due to sharing this might be more than the versions *defined* by that project.
+ Parameters
+ project_id (required, integer, `1`) ... ID of the project whoose versions will be listed
+ project_id (required, integer, `1`) ... ID of the project whose versions will be listed
+ Response 200 (application/hal+json)

@ -64,7 +64,7 @@ The OAuth2 based authentication requires an administrator to set up but offers s
OpenProject supports two OAuth flows: "Authorization code" and "Client credentials". In OpenProject terms, the main difference is whether a client wants to impersonate different users or wants to always access OpenProject with the same user account. An example for the former would be an application for logging time. Via the "Authorization code" flow, the logged time would be booked in the name of each user separately. The user would be the user creating the logged time. If the calling user is less important or if that user can always be the same, the "Client credentials" flow is sufficient.
Before the client can authenticate, an administrator sets up the OAuth application within the OpenProject instance. Go to the Administration and select "OAuth applictions" within the "Authentication" menu.
Before the client can authenticate, an administrator sets up the OAuth application within the OpenProject instance. Go to the Administration and select "OAuth applications" within the "Authentication" menu.
![OAuth2 index](./oauth2-index.png)

@ -41,7 +41,7 @@ Their purpose is explained below.
### Payload
The payload contains an edited version of the resource that will be modified when commiting the form.
The payload contains an edited version of the resource that will be modified when committing the form.
This representation contains all writable properties of the resource and reflects all changes that the latest call to **validate** included,
thereby acting as a preview for the changes.
@ -50,7 +50,7 @@ indicates that a commit of this payload would fail.
It might happen that setting one property affects the allowed values for another property. Thus by changing a property A
the current value of another property B might become invalid. If the client did not yet touch the value of B, the payload will
contain a default value for that property. Nevertheless the client will also receive an apropriate validation error for value B.
contain a default value for that property. Nevertheless the client will also receive an appropriate validation error for value B.
The content of this element *can* be used as a template for the request body of a call to **validate** or **commit**.
@ -69,7 +69,7 @@ As this makes the embedded schema very dynamic, it is not included as a static l
### Validation Errors
Like a [schema](#schema) the validation errors build a dictionary where the key is a property name.
Each value is an error object that indicates the error that occured validating the corresponding property.
Each value is an error object that indicates the error that occurred validating the corresponding property.
There are only key value pairs for properties that failed validation, the element is empty if all validations succeeded.
However note that even in the case of validation errors, the response you receive from the form endpoint will be an HTTP 200.

@ -80,7 +80,7 @@ However, OpenProject already has supported API keys in the past for the API v2,
Using **username and password** directly would have some advantages:
* It is intuitive for the user who then just has to provide those just as they would when logging into OpenProject.
* No extra logic for token managment necessary.
* No extra logic for token management necessary.
On the other hand using **API keys** has some advantages too, which is why we went for that:

@ -21,7 +21,7 @@ In the overlay window, you can choose between several topics:
- Edit Account information
- Edit Billing Addresses
- Edit or add payment methods
- [View billing history and dowload invoices](../invoices-and-billing-history)
- [View billing history and download invoices](../invoices-and-billing-history)
## Update existing subscriptions

@ -42,7 +42,7 @@ A response that is fully controlled by Rails but extended by some Angular compon
1. Rails receives the request and according to its [`config/routes.rb`](https://github.com/opf/openproject/blob/dev/config/routes.rb#L257), will handle the request with the [TypesController#edit action](https://github.com/opf/openproject/blob/dev/app/controllers/types_controller.rb#L71-L82) with its tab set to `form_configuration`.
2. This controller responds with [an edit template](https://github.com/opf/openproject/blob/dev/app/views/types/edit.html.erb) that will include the [type form partial](https://github.com/opf/openproject/blob/dev/app/views/types/form/_form_configuration.html.erb#L77-L83). In this component, an Angular component is explictly output that will be bootstrapped on page load.
2. This controller responds with [an edit template](https://github.com/opf/openproject/blob/dev/app/views/types/edit.html.erb) that will include the [type form partial](https://github.com/opf/openproject/blob/dev/app/views/types/form/_form_configuration.html.erb#L77-L83). In this component, an Angular component is explicitly output that will be bootstrapped on page load.
3. The rendered response is returned to the Browser and Angular is initialized globally once in [`frontend/src/main.ts`](https://github.com/opf/openproject/blob/dev/frontend/src/main.ts#L48-L49).

@ -168,7 +168,7 @@ The `EditForm` logically groups together multiple field elements very similar to
It has multiple responsibilites:
It has multiple responsibilities:
- receives registration of fields within the form
- knows which fields are currently actively editing
@ -195,7 +195,7 @@ To easily mount an edit field over a manually rendered `DisplayField` (such as f
The `EditingPortalService` will render a `EditFormPortalComponent` with some HTML form wrapping for correct handling of submit events and labels. This portal will in turn render the actual `EditFieldComponent`. The service will wire up these components automatically.
If you were to explictly render an edit field, this would look as follows. Note that again, this is handled by the `EditForm` automatically whenever the user activates an `EditableAttributeFieldComponent` field.
If you were to explicitly render an edit field, this would look as follows. Note that again, this is handled by the `EditForm` automatically whenever the user activates an `EditableAttributeFieldComponent` field.
```typescript
@Component({ selector: 'minimal-example', template: '' })
@ -248,10 +248,10 @@ An example where this comes into play is the [`CustomText`](https://github.com/o
- [`EditForm`](https://github.com/opf/openproject/blob/dev/frontend/src/app/modules/fields/edit/edit-form/edit-form.ts) base class
- [`EditFormComponent`](https://github.com/opf/openproject/blob/dev/frontend/src/app/modules/fields/edit/edit-form/edit-form.component.ts#L28-L27) Angular `<edit-form>` component
- [`EditableAttributeFieldComponent`](https://github.com/opf/openproject/blob/dev/frontend/src/app/modules/fields/edit/field/editable-attribute-field.component.ts) Angular `<editable-attribute-field>` component for attributes within the edit form
- [`DisplayField`](https://github.com/opf/openproject/tree/dev/frontend/src/app/modules/fields/display) definitions containig all display fields and the service to instantiate them.
- [`DisplayField`](https://github.com/opf/openproject/tree/dev/frontend/src/app/modules/fields/display) definitions containing all display fields and the service to instantiate them.
- [`DisplayFieldRenderer`](https://github.com/opf/openproject/tree/dev/frontend/src/app/modules/fields/display/display-field-renderer.ts) to manually render display fields from JavaScript
- [`DisplayFieldComponent`](https://github.com/opf/openproject/tree/dev/frontend/src/app/modules/fields/display/display-field.component.ts) an Angular component to render display fields
- [`EditFieldComponent`](https://github.com/opf/openproject/tree/dev/frontend/src/app/modules/fields/edit/field-types) definitions containig all display fields and the service to instantiate them
- [`EditFieldComponent`](https://github.com/opf/openproject/tree/dev/frontend/src/app/modules/fields/edit/field-types) definitions containing all display fields and the service to instantiate them
- [`EditingPortalService`](https://github.com/opf/openproject/tree/dev/frontend/src/app/modules/fields/edit/editing-portal/editing-portal-service.ts) service to create an edit field with event handling in code
- [`WorkPackageFullViewComponent`](https://github.com/opf/openproject/blob/dev/frontend/src/app/modules/work_packages/routing/wp-full-view/wp-full-view.html) Work package full view template that uses the `edit-form` attribute to create a form for the work package full view (as seen in the Gif above)
- [`ProjectDetailsComponent`](https://github.com/opf/openproject/blob/dev/frontend/src/app/modules/grids/widgets/project-details/project-details.component.html) Exemplary widget template that uses the form for project attributes

@ -122,7 +122,7 @@ The resulting work packages will differ based on the visibility of the work pack
## Frontend usage
As the singular Query JSON object encompasses a large amount of different concerns, the frontend splits this resource up into quite a substantial amout of services for isolating the individual behaviors.
As the singular Query JSON object encompasses a large amount of different concerns, the frontend splits this resource up into quite a substantial amount of services for isolating the individual behaviors.
This guide will not go into too much detail on the actual components using these services, as they will be subject to change and detailed in another guide.
@ -152,7 +152,7 @@ These states are being initialized in the [`WorkPackagesInitializationService`](
- `WorkPackageViewColumnsService` for adding, moving, or removing columns and getting available columns for selection
- `WorkPackageViewSortByService` for getting and updating the sort criteria object of the query
- `WorkPackageViewGroupByService` for getting and updating the grouping property of the query
- `WorkPackageViewTimelineService` for identifying and modfying whether the timeline is visible in the table, and what settings it has
- `WorkPackageViewTimelineService` for identifying and modifying whether the timeline is visible in the table, and what settings it has
- `WorkPackageViewHierarchiesService` for manipulating the visible hierarchies in the table and temporarily storing what hierarchies are being shown or collapsed.
There are additional services for handling pagination and other parts of the query that can be controlled individually.
@ -178,5 +178,5 @@ The `WorkPackagesListService` can also update and save existing queries passed t
`PartionedQuerySpaceComponent` instances will be instantiated by the router and listen to URL params to load the corresponding query object. The most prominent example of such a page is the work packages module such as https://community.openproject.com/work_packages.
The partioning comes from showing a work package table (or cards view) on one side, and a details view of a single work package on another side, splitting the page in two. The width of the split areas can be customized by the user through a drag-handle.
The partitioning comes from showing a work package table (or cards view) on one side, and a details view of a single work package on another side, splitting the page in two. The width of the split areas can be customized by the user through a drag-handle.

@ -44,7 +44,7 @@ The `ResourceChangeset` class is a temporarily created class whose lifetime is d
The changeset maintains references to
* - The source HAL resource (a pristine, unchanged version) such as a work package
* - The actual `Changeset` object of changes (bascially a map of `attribute -> values` of changes)
* - The actual `Changeset` object of changes (basically a map of `attribute -> values` of changes)
* - The `FormResource` for the resource (due to temporary changes such as switching types or projects in work packages)
@ -56,7 +56,7 @@ The ResourceChangeset is possibly subclassed for specific HAL resource types. Fo
### HalResourceEditingService
In order to *create*, *remove* or *saving* changesets for a specific resource, the `HalResourceEditingService` is provided at various hierarchies of the applicaiton. The service maintains a store of available resource changesets, whose states and changes can be observed with an RXJS observable.
In order to *create*, *remove* or *saving* changesets for a specific resource, the `HalResourceEditingService` is provided at various hierarchies of the application. The service maintains a store of available resource changesets, whose states and changes can be observed with an RXJS observable.
The main entry point for editing changesets is `HalResourceEditingService#changeFor`, which will either continue editing an existing changeset, or create a new one for the given class.

@ -8,7 +8,7 @@ keywords: state management, stores, input states
# Development Concept: State management
State management in complex frontend applications is a topic that has been heavily evolving over tha past years. Redux and stores, one-way data flow are all the rage nowaways. OpenProject is an old application, so its frontend exists way before these concepts were introduced and became popular.
State management in complex frontend applications is a topic that has been heavily evolving over the past years. Redux and stores, one-way data flow are all the rage nowadays. OpenProject is an old application, so its frontend exists way before these concepts were introduced and became popular.
@ -163,4 +163,4 @@ This might then look like the following, with green color for added objects, and
## Discussions
- In contrast to a `Store` concept of redux, the States and state groups do not have any concept of data immutability. As a caller you will need to ensure that. In OpenProject, many of the states are in fact mutable due to historic reasons and the fact that complex class instances are passed around that cannot be easily shallow copied. This will need to be refactored in the future.
- As the reactivestates library was primarily developed for us, we may need to take over its code or move to a different state management concept alltogether. The recent developments in `ngxs` look very promising.
- As the reactivestates library was primarily developed for us, we may need to take over its code or move to a different state management concept altogether. The recent developments in `ngxs` look very promising.

@ -138,7 +138,7 @@ You can just reset these changes if you want to commit something or pull the lat
## Debugging
It's common to just start a debugger whithin ruby code using `binding.pry`.
It's common to just start a debugger within ruby code using `binding.pry`.
This **does not work** with the application running as shown above.
If you want to be able to do that, you can, however, simply run the following:

@ -43,7 +43,7 @@ The basic overview of how to contribute code to OpenProject is as follows.
1. [Fork the OpenProject repository](#fork-openproject) and create a local development branch
2. Develop your change. Please see the sections on [development concepts](../concepts/) for further information on development topics.
3. [Create a pull request](#create-a-pull-request) on our repository. Please see and review [code style and review](../code-review-guidelines) for guidelines on how to submit a pull request and requirements for getting your changes merged.
4. We will evalute your pull review and changes.
4. We will evaluate your pull review and changes.
@ -70,7 +70,7 @@ Add the original OpenProject repository as a remote, so you can fetch changes:
git remote add upstream git@github.com:opf/openproject
```
Upate your local git branch to the core branch
Update your local git branch to the core branch
```
git pull upstream/dev

@ -69,7 +69,7 @@ If you click the dots on the lower right hand corner in a widget you can change
You can configure the view of a work package widget to have the information included that you need.
<div class="glossary">
**Work package** is a subset of a project that can be assigned to users for execution, such as Tasks, Bugs, User Storys, Milestones, and more. Work packages have a type, an ID and a subject and may have additional attributes, such as assignee, responsible, story points or target version. Work packages are displayed in a projects timeline (unless they are filtered out in the timeline configuration) - either as milestone or as phase. In order to use the work packages, the work package module has to be activated in the project settings.
**Work package** is a subset of a project that can be assigned to users for execution, such as Tasks, Bugs, User Stories, Milestones, and more. Work packages have a type, an ID and a subject and may have additional attributes, such as assignee, responsible, story points or target version. Work packages are displayed in a projects timeline (unless they are filtered out in the timeline configuration) - either as milestone or as phase. In order to use the work packages, the work package module has to be activated in the project settings.
</div>

@ -40,7 +40,7 @@ You can also start typing in a project name to filter by the project's title.
Projects and subprojects are displayed according to their hierarchy in the drop-down menu.
<div class="glossary">
**Subproject** is definded as a child project of another project. Subprojects can be used to display a hierarchy of projects. Several filter options (e.g. in work package list and timeline) can be applied only to the current project and its subprojects.
**Subproject** is defined as a child project of another project. Subprojects can be used to display a hierarchy of projects. Several filter options (e.g. in work package list and timeline) can be applied only to the current project and its subprojects.
</div>
![project hierarchy](1572877762016.png)

@ -21,7 +21,7 @@ SMTP_PASSWORD="password"
SMTP_ENABLE_STARTTLS_AUTO="true"
```
In case you want to use environment variables, but you have no easy way to set them on a specific systme, you can use the [dotenv](https://github.com/bkeepers/dotenv) gem. It automatically sets environment variables written to a .env file for a Rails application.
In case you want to use environment variables, but you have no easy way to set them on a specific system, you can use the [dotenv](https://github.com/bkeepers/dotenv) gem. It automatically sets environment variables written to a .env file for a Rails application.

@ -26,7 +26,7 @@ openproject run bundle exec rake redmine:email:receive_imap host='imap.gmail.com
**Docker installation**
The docker installation has a ["cron-like" daemon](https://github.com/opf/openproject/blob/dev/docker/cron) that will immitate the above cron job. You need to specify the following ENV variables (e.g., to your env list file)
The docker installation has a ["cron-like" daemon](https://github.com/opf/openproject/blob/dev/docker/cron) that will imitate the above cron job. You need to specify the following ENV variables (e.g., to your env list file)
- `IMAP_SSL` set to true or false depending on whether the ActionMailer IMAP connection requires implicit TLS/SSL
- `IMAP_PORT` `IMAP_HOST` set to the IMAP host and port of your connection

@ -81,7 +81,7 @@ To enable remote managed repositories, pass an absolute URL to the `manages` key
manages: https://example.org/repos
accesstoken: <Fixed access token passed to the endpoint>
Upon creating and deleting repositories in the frontend, OpenProject will POST to this endpoint a JSON object containg information on the repository.
Upon creating and deleting repositories in the frontend, OpenProject will POST to this endpoint a JSON object containing information on the repository.
{
"identifier": "seeded_project.git",
@ -191,7 +191,7 @@ This method requires some apache modules to be enabled and installed. The follow
### Permissions
**Important:** If Apache and OpenProject run under separate users, you need to ensure OpenProject remains the owner of the repository in order to browse and delete it, when requsted through the user interface.
**Important:** If Apache and OpenProject run under separate users, you need to ensure OpenProject remains the owner of the repository in order to browse and delete it, when requested through the user interface.
Due to the implementation of `mod_svn`, we have no way to influence the permissions determined by apache when changing repositories (i.e., by committing changes).
Without correcting the permissions, the following situation will occur:

@ -158,7 +158,7 @@ For more advanced configuration, please have a look at the [Advanced configurati
### Apache Reverse Proxy Setup
Often there will be an existing web server through which you want to make OpenProject acccessible.
Often there will be an existing web server through which you want to make OpenProject accessible.
There are two ways to run OpenProject. We'll cover each configuration in a separate of the following sections.
For both configurations the following Apache mods are required:
@ -418,7 +418,7 @@ x-op-app: &app
<<: *restart_policy
environment:
# ...
# ADD THIS FOR S3 attachments substituting the respecive credentials:
# ADD THIS FOR S3 attachments substituting the respective credentials:
- "OPENPROJECT_ATTACHMENTS__STORAGE=fog"
- "OPENPROJECT_FOG_DIRECTORY="<bucket-name>"
- "OPENPROJECT_FOG_CREDENTIALS_PROVIDER=AWS"

@ -273,7 +273,7 @@ Now, the Passenger gem is installed and integrated into apache.
[openproject@ubuntu] passenger-install-apache2-module
```
If you are running on a Virtual Private Server, you need to make sure you have atleast 1024mb of RAM before running the `passenger-install-apache2-module`.
If you are running on a Virtual Private Server, you need to make sure you have at least 1024mb of RAM before running the `passenger-install-apache2-module`.
Follow the instructions passenger provides.
The passenger installer will ask you the question in "Which languages are you

@ -314,7 +314,7 @@ The wizard will show you multiple additional steps in this case to enter the hos
### Skip (not recommended)
The wizard will not try to connect to any database. You will have to specify a database manually thorugh the `DATABASE_URL` environment variable. If you choose skip and did not set a `DATABASE_URL`, the configuration process will fail.
The wizard will not try to connect to any database. You will have to specify a database manually through the `DATABASE_URL` environment variable. If you choose skip and did not set a `DATABASE_URL`, the configuration process will fail.
You can set this `DATABASE_URL` parameter yourself to a PostgreSQL database URL.
@ -387,7 +387,7 @@ If you have a separate server that is terminating SSL and only forwarding/proxyi
### Skip (not recommended)
The installer will not set up an external web server for accessing. You will need to either install and set up a web server such as Apache2 or Nginx to function as the web server forwarding to our internal server listeing at `localhost:6000` by proxying.
The installer will not set up an external web server for accessing. You will need to either install and set up a web server such as Apache2 or Nginx to function as the web server forwarding to our internal server listening at `localhost:6000` by proxying.
Only choose this option if you have a local Apache2 installed that the OpenProject package may not control, or need to use a different web server such as Nginx. Please note that not all functionality (especially regarding Repositories) are supported on Nginx.

@ -102,7 +102,7 @@ options["claims"] = {
#### Non-essential claims
You may also request non-essential claims. In the example above this indicates that users should preferrably be authenticated using
You may also request non-essential claims. In the example above this indicates that users should preferably be authenticated using
those mechanisms but it's not strictly required. The login into OpenProject will then work even if none of the claims
are returned by the identity provider.

@ -22,7 +22,7 @@ This guide describes how to fix the data once this has happened.
Backup scripts are by default created via the [built in OpenProject command](../../operation/backing-up).
When not following the default, the database or the OpenProject server itself may have been backed up.
This guide only covers the proceedings for the the built in backup command.
But the reader might deduce the steps neccessary to restore accordingly for a custom backup from this guide.
But the reader might deduce the steps necessary to restore accordingly for a custom backup from this guide.
As a result of this step, a second database, not the database OpenProject is currently connecting to, will contain the data of the backup.
@ -42,7 +42,7 @@ $ openproject config:get DATABASE_URL
postgres://openproject:L0BuQvlagjmxdOl6785kqwsKnfCEx1dv@127.0.0.1:45432/openproject
```
### 1.2 Create auxillary database
### 1.2 Create auxiliary database
Using this connection string, the following command will create the database the backup will be restored to (named `openproject_backup` in this example):
@ -70,7 +70,7 @@ Example:
$ su postgres -c createdb -O openproject openproject_backup
```
### 1.3 Restore backup to auxillary database
### 1.3 Restore backup to auxiliary database
Next, that newly created database will receive the data from a backup file which typically can be found in `/var/db/openproject/backup`
@ -100,7 +100,7 @@ Example:
$ pg_restore -d "postgres://openproject:L0BuQvlagjmxdOl6785kqwsKnfCEx1dv@127.0.0.1:45432/openproject_backup" /var/db/openproject/backup/postgresql-dump-20191119210038.pgdump`
```
That command will restore the contents of the backup file into the auxillary database.
That command will restore the contents of the backup file into the auxiliary database.
## 2. Run the script to fix the database entries
@ -127,7 +127,7 @@ Done.
## 3. Cleanup
The database containing the backup data can be removed once the script has finished (again, **ensure to reference the auxillary database for the drop command**):
The database containing the backup data can be removed once the script has finished (again, **ensure to reference the auxiliary database for the drop command**):
```bash
$ psql "postgres://<dbusername>:<dbpassword>@<dbhost>:<dbport>/<dbname>" -c 'DROP DATABASE <new_dbname>'

@ -14,7 +14,7 @@ All the script needs is docker and the mysql command installed. It will start co
### Create a backup
First, you will need to create a backup to get the MySQL database dump. Please see our seperate guide on [Backing up](https://docs.openproject.org/installation-and-operations/operation/backing-up/). In a packaged installation, the following command will output a full backup to `/var/db/openproject/backup`:
First, you will need to create a backup to get the MySQL database dump. Please see our separate guide on [Backing up](https://docs.openproject.org/installation-and-operations/operation/backing-up/). In a packaged installation, the following command will output a full backup to `/var/db/openproject/backup`:
```bash
openproject run backup

@ -19,7 +19,7 @@ running the `openproject configure` command.
<div class="alert alert-info" role="alert">
Please note that the package-based installation uses different release channels for each MAJOR version of OpenProject. This means that if you want to switch from (e.g.) 9.x to 10.x, you will need to perform the steps described in the [installation section](../../installation/packaged) to update your package sources to point to the newer release channel. The rest of this section is only applicable if you want to upgrade a (e.g.) 10.x version to a 10.y vesion.
Please note that the package-based installation uses different release channels for each MAJOR version of OpenProject. This means that if you want to switch from (e.g.) 9.x to 10.x, you will need to perform the steps described in the [installation section](../../installation/packaged) to update your package sources to point to the newer release channel. The rest of this section is only applicable if you want to upgrade a (e.g.) 10.x version to a 10.y version.
</div>

@ -48,7 +48,7 @@ In the upper section, you have to specify the connection details of your LDAP se
**Allowing untrusted certifcates for LDAP connections**
**Allowing untrusted certificates for LDAP connections**
If you use `start_tls` , certificate details and host names will be verified on connections as recommended for security. In case you use a custom untrusted certificate authority (CA) that your LDAP is connecting to, you can place this CA in your system's trusted CA store if possible. For some distributions, you will need to specify this CA manually to OpenProject.

@ -19,8 +19,8 @@ To adapt email notification settings, go to Email and choose *Email notification
1. **Emission email address**. This email Address will be shown as the sender for the email notifications sent by OpenProject (for example, when a work package is changed).
2. Activate **blind carbon copy recipients** (bcc).
3. Define if the email should be formatted in **plain text** (no HTML).
4. Select the default notification options. The default notifcation can be adapted in the [user profile](../../../getting-started/my-account/#email-notifications).
5. Select for which **actions email notification should be sent**. You have the possibilty to check all or uncheck all at the top right.
4. Select the default notification options. The default notification can be adapted in the [user profile](../../../getting-started/my-account/#email-notifications).
5. Select for which **actions email notification should be sent**. You have the possibility to check all or uncheck all at the top right.
![System-admin-guide-emails](System-admin-guide-emails.png)

@ -10,7 +10,7 @@ keywords: plugins
The OpenProject configurations contains a certain amount of plugins which are listed under -> *Administration* -> *Plugins*.
We recommend to use the plugins as suggested in our deployement packages. You will get more detailed information (about current changes, author, etc.) if you follow the links.
We recommend to use the plugins as suggested in our deployment packages. You will get more detailed information (about current changes, author, etc.) if you follow the links.
![OpenProject plugins](image-20200124100220714.png)

@ -38,7 +38,7 @@ Show checkout instructions for Subversion and GIT.
## Referencing and fixing work packages in commit messages
1. **Define referencing keywords** for work packages in commit messages. Used to reference keywords used to link revisions to work packages.
2. Define **fixing keywords for work packages** in commit messages. Fixing keywords allow status or progress changes using certain keywords in commit messages, e.g. changing a work pacakge to closed and set to 100%.
2. Define **fixing keywords for work packages** in commit messages. Fixing keywords allow status or progress changes using certain keywords in commit messages, e.g. changing a work package to closed and set to 100%.
3. Define which **status will be applied** to a work package if a fixing word is used in a commit message.
4. Define which **percentage of done is applied** to a work package if a fixing word is used in a commit message for that work package.
5. **Enable time logging**. Activating this option enables [logging time to a work package ](../../../user-guide/time-and-costs/time-tracking/)via commit message.

@ -22,7 +22,7 @@ You can configure the following options for webhooks:
1. Choose a **name** identifying the webhook.
2. **Payload URL** defines the endpoint, called when the webhook is triggered.
3. Freely choose an additonal **description** to further identify the intent of the respective webhook.
3. Freely choose an additional **description** to further identify the intent of the respective webhook.
4. By defining a **Signature secret** you guarantee that the sender of the payload request is actually OpenProject. The client will then check this signature secret.
5. **Enable** if **the webhook** should be active.
6. **Set the events** for which the webhook should be activate, i.e. webhook for updating or creating projects or work packages, or for creating time entries.

@ -76,7 +76,7 @@ In a sprint, you can directly document necessary effort as story points. The ove
<div class="glossary">
**Story points** are definded as numbers assigned to a work package used to estimate (relatively) the size of the work.
**Story points** are defined as numbers assigned to a work package used to estimate (relatively) the size of the work.
</div>

@ -87,4 +87,4 @@ It is currently not possible to export or sync the calendar. You can however [ex
### Are holidays considered in the calendar?
Currently, the calendar does not consider weekends or holidays as non-working days, i.e. the end date for a task could e.g. be set on a Sunday. This is important for businesses that are working on weekends or holidays. Please note that we are currntly working on a feature for holidays and weekends that can be adjusted as needed.
Currently, the calendar does not consider weekends or holidays as non-working days, i.e. the end date for a task could e.g. be set on a Sunday. This is important for businesses that are working on weekends or holidays. Please note that we are currently working on a feature for holidays and weekends that can be adjusted as needed.

@ -109,7 +109,7 @@ To unwatch a forum in order to not be informed via e-mail about new messages and
### Unwatch a message
The same applys to **unwatch a message**. Just select the message first which you do not want to watch any longerand click the **Unwatch** button.
The same applies to **unwatch a message**. Just select the message first which you do not want to watch any longerand click the **Unwatch** button.
## Edit a forum message
@ -139,7 +139,7 @@ Enter a name and description for the new forum. Press the blue **Create** button
## Manage forums
If you wan to change the order of the forums in your project, want to edit a forum, or delete a form, go to the -> *Forums* overview list in your project.
If you want to change the order of the forums in your project, want to edit a forum, or delete a form, go to the -> *Forums* overview list in your project.
1. Click the **arrows (up or down) to change the order** of the forums and sort them differently in the forum list in your project.
2. Click the **edit icon to change the name or description** of your form.

@ -47,7 +47,7 @@ To **change the order of an item** in the Gantt chart, click the **drag and drop
### How to change the duration of an element in the Gantt chart?
To change the duration of a work package in the Gantt chart view, hover over the work package in the Gantt chart and use the little arrows on its ends to adjust the start date or finish date. This will shorten or prolong its duration.
To move a work package on the time line just click on it and drag and drop it to the desired point of time. This will change its startd and finish date.
To move a work package on the time line just click on it and drag and drop it to the desired point of time. This will change its start and finish date.
## Relations in the Gantt chart

@ -92,7 +92,7 @@ Copy and paste all data accordingly from your existing Excel list to this sheet.
**Download workpackages**: intitially downloads all work packages from the selected project (and query).
**Upload / update work packages**: makes changes to the work packges, e.g. adding new work packages or changing any information. This option needs to be chosen in order to initially import and existing Excel list.
**Upload / update work packages**: makes changes to the work packages, e.g. adding new work packages or changing any information. This option needs to be chosen in order to initially import and existing Excel list.
**Show chosen project**: Opens the settings to adapt URL, API key, project or query ID.
Congratulations! You can now synchronize your data between Excel and OpenProject.
@ -103,7 +103,7 @@ Congratulations! You can now synchronize your data between Excel and OpenProject
12. To synchronize hierarchies (Parent and child relations), insert the column **Parent** within the header of the Excel Sheet as described above (screen 10).
To add or edit a new parent-child relation, you have two possibilites:
To add or edit a new parent-child relation, you have two possibilities:
**A)** You can add a child to a work package when you enter 4 empty spaces (press 4x Shift) before typing the subject of the child work package.

@ -8,7 +8,7 @@ keywords: repository
---
# Manage a repository
<div class="glossary">**Repository** is definded as a document management system that allows users to manage files and folders via different version control system (SVN or Git).</div>
<div class="glossary">**Repository** is defined as a document management system that allows users to manage files and folders via different version control system (SVN or Git).</div>
You can integrate a SVN or GIT repository in a project in OpenProject and access it directly in the project via the module Repositories.
**Note**: Repositories can only be integrated for Community Edition and Enterprise Edition (self hosted) versions.

@ -21,7 +21,7 @@ keywords: svn, git, repository management
An important part of working on a project as a team is sharing files and source code. Keeping track of the latest versions can sometimes be a challenge. Therefore, OpenProject provides two types of version control systems (Git and Subversion) which – after being properly configured – can be used to store relevant data in the different projects.
In OpenProject you can view the files under *Repository*. Please keep in mind that from your OpenProject website you can only view or download the files. For commiting new files you need an SVN- or Git-client.
In OpenProject you can view the files under *Repository*. Please keep in mind that from your OpenProject website you can only view or download the files. For committing new files you need an SVN- or Git-client.
In order to be able to edit files and to upload the updated versions to repository, you need to check out your repository. The following steps assume you have configured your OpenProject repository to work with subversion (but many of the options are very similar or identical when using Git). Please check out the repository and save it locally through an SVN client of your choice.

@ -52,7 +52,7 @@ To edit a wiki page, click the **Edit** button on the wiki page details on the t
![edit-wiki-page](edit-wiki-page.png)
The text editor will be openend to make changes to the wiki page, as described above, how to [create a new wiki page](#create-a-new-wiki).
The text editor will be opened to make changes to the wiki page, as described above, how to [create a new wiki page](#create-a-new-wiki).
Do not forget to **Save** your changes after you finished editing the page.

@ -18,7 +18,7 @@ Starting with version 8.0.0, OpenProject features a quasi-WYSIWYG editor, powere
| Topic | Content |
| ------------------------------------------------------------ | -------------------------------------------------------- |
| [Basic formating](#basic-formatting) | Basic formatting elements in the WYSIWYG editor |
| [Basic formatting](#basic-formatting) | Basic formatting elements in the WYSIWYG editor |
| [Image handling](#image-handling) | How to add images in the WYSIWYG editor? |
| [Macros](#macros) | Available macros in the WYSIWYG editor |
| [Links to OpenProject resources](#links-to-openproject-resources) | How to link to resources like wikis, projects, meetings? |

@ -119,7 +119,7 @@ describe WorkPackages::CreateContract do
work_package.project = project
end
context 'if the user is set by the sytem and the user is the user the contract is evaluated for' do
context 'if the user is set by the system and the user is the user the contract is evaluated for' do
subject(:contract) { described_class.new(work_package, user, options: { changed_by_system: ['author_id'] }) }
it 'is valid' do

@ -516,7 +516,7 @@ describe AccountController, type: :controller do
post 'login', params: { username: admin.login, password: 'adminADMIN!' }
end
it 'should redirect ot the login page' do
it 'should redirect to the login page' do
expect(response).to redirect_to '/login'
end
end

@ -191,7 +191,7 @@ describe VersionsController, type: :controller do
end
describe '#create' do
context 'with vaild attributes' do
context 'with valid attributes' do
before do
login_as(user)
post :create, params: { project_id: project.id, version: { name: 'test_add_version' } }

@ -51,7 +51,7 @@ describe 'Lost password', type: :feature do
perform_enqueued_jobs
expect(ActionMailer::Base.deliveries.size).to eql 1
# mimick the user clicking on the link in the mail
# mimic the user clicking on the link in the mail
token = Token::Recovery.first
visit account_lost_password_path(token: token.value)

@ -29,7 +29,7 @@
require 'spec_helper'
describe 'Omniauth authentication', type: :feature do
# Running the tests inside docker changes the hostname. To accomodate that we changed
# Running the tests inside docker changes the hostname. To accommodate that we changed
# the Capybara app_host, however this change was not being reflected in the Rails host,
# causing the redirect checks to fail below.
def self.default_url_options

@ -157,7 +157,7 @@ feature 'Wiki menu items' do
end
# removing the menu item which is also the last wiki menu item
# removing the default wiki menu item programatically first
# removing the default wiki menu item programmatically first
MenuItems::WikiMenuItem.where(navigatable_id: project.wiki.id, name: "wiki").delete_all
visit project_wiki_path(project, other_wiki_page)

@ -146,7 +146,7 @@ describe 'Projects index page',
expect(page).to have_text(public_project.name)
expect(page).to have_text(project.name)
# Test visiblity of 'more' menu list items
# Test visibility of 'more' menu list items
item = page.first('tbody tr .icon-show-more-horizontal', visible: :all)
item.hover
item.click
@ -380,7 +380,7 @@ describe 'Projects index page',
expect(page).to have_text("ARCHIVED #{parent_project.name}")
expect(page).to have_text("ARCHIVED #{child_project.name}")
# Test visiblity of 'more' menu list items
# Test visibility of 'more' menu list items
projects_page.activate_menu_of(parent_project) do |menu|
expect(menu).to have_text('Unarchive')
expect(menu).to have_text('Delete')
@ -662,7 +662,7 @@ describe 'Projects index page',
cf_filter = page.find("li[filter-name='cf_#{list_custom_field.id}']")
within(cf_filter) do
# Query has two values for that filter, so it shoud show a 'multi select'.
# Query has two values for that filter, so it should show a 'multi select'.
expect(cf_filter.find(:select, 'value')).to be_multiple
expect(cf_filter)
.to have_select('value',
@ -769,7 +769,7 @@ describe 'Projects index page',
page.find('tbody tr').hover
expect(page).to have_selector('.icon-show-more-horizontal')
# Test visiblity of 'more' menu list items
# Test visibility of 'more' menu list items
page.find('tbody tr .icon-show-more-horizontal').click
menu = page.find('tbody tr .project-actions')
expect(menu).to have_text('Copy')
@ -787,7 +787,7 @@ describe 'Projects index page',
page.find('tbody tr').hover
expect(page).to have_selector('.icon-show-more-horizontal')
# Test visiblity of 'more' menu list items
# Test visibility of 'more' menu list items
page.find('tbody tr .icon-show-more-horizontal').click
menu = page.find('tbody tr .project-actions')
expect(menu).to have_text('New subproject')

@ -86,7 +86,7 @@ describe 'Create repository', type: :feature, js: true, selenium: true do
it 'should display one type' do
# There seems to be an issue with how the
# select is accessed after the async form loading
# Thus we explitly find it here to allow some wait
# Thus we explicitly find it here to allow some wait
# even though it is available in let
scm_vendor = find(scm_vendor_input_css)
expect(scm_vendor.value).to eq(vendor)

@ -67,7 +67,7 @@ feature 'user memberships through user page', type: :feature, js: true do
user_page.remove_from_project!(project.name)
user_page.expect_no_membership(project.name)
# Readd the user
# Re-add the user
user_page.add_to_project! project.name, as: %w(Manager Developer)
user_page.expect_project(project.name)

@ -117,7 +117,7 @@ RSpec.feature 'Work package timeline labels',
right: 'Type',
farRight: 'Status'
# Check overriden labels
# Check overridden labels
row = wp_timeline.timeline_row work_package.id
row.expect_labels left: user.name,
right: type.name.upcase,
@ -166,7 +166,7 @@ RSpec.feature 'Work package timeline labels',
right: 'Finish date',
farRight: 'Subject'
# Check overriden labels
# Check overridden labels
row = wp_timeline.timeline_row work_package.id
row.expect_labels left: today,
right: tomorrow,

@ -90,7 +90,7 @@ describe PaginationHelper, type: :helper do
expect(pagination).not_to have_selector('a', text: Regexp.new("^#{current_page}$"))
end
it 'should have an element for the curren page' do
it 'should have an element for the current page' do
expect(pagination).to have_selector('.pagination--item.-current',
text: Regexp.new("^#{current_page}$"))
end

@ -182,7 +182,7 @@ describe OpenProject::Configuration do
OpenProject::Configuration.load(env: 'test')
end
it 'should return the overriden the setting within the block' do
it 'should return the overridden the setting within the block' do
expect(OpenProject::Configuration['somesetting']).to eq('foo')
OpenProject::Configuration.with 'somesetting' => 'bar' do

@ -497,7 +497,7 @@ describe OpenProject::SCM::Adapters::Git do
cloned = "Author: Oliver Günther <mail@oliverguenther.de>"
# The strings returned by capture_out have escaped UTF-8 characters depending on
# wether we are working on a cloned or bare repository. I don't know why.
# whether we are working on a cloned or bare repository. I don't know why.
# It doesn't make a difference further down the road, though. So just check both.
expect(diff[1] == bare || diff[1] == cloned).to eq true
end

@ -60,7 +60,7 @@ describe OpenProject::Reminders::DueIssuesReminder do
FactoryBot.create(:work_package, due_date: Date.tomorrow, assigned_to: group, subject: 'some group issue')
end
it 'notifies the user once for WPs assigend to him and another for those assigned to the group' do
it 'notifies the user once for WPs assigned to him and another for those assigned to the group' do
expect(subject.notify_count).to be >= 2
expect(ActionMailer::Base.deliveries.count).to be >= 2

@ -643,7 +643,7 @@ JJ Abrams</textarea>
failed_login_count: 45)
end
it 'uses the human attibute name' do
it 'uses the human attribute name' do
expected_label_like(User.human_attribute_name(:name))
end

@ -314,7 +314,7 @@ describe Attachment, type: :model do
end
end
context 'with expiry time exeeding maximum' do
context 'with expiry time exceeding maximum' do
let(:url_options) { { expires_in: 1.year } }
it "uses the allowed max" do

@ -63,7 +63,7 @@ describe Principal, type: :model do
describe 'active' do
should_return_groups_and_users_if_active(:active_or_registered)
it 'should not return a registerd user' do
it 'should not return a registered user' do
user.status = User::STATUSES[:registered]
user.save!
@ -75,7 +75,7 @@ describe Principal, type: :model do
describe 'active_or_registered' do
should_return_groups_and_users_if_active(:active_or_registered)
it 'should return a registerd user' do
it 'should return a registered user' do
user.status = User::STATUSES[:registered]
user.save!
@ -98,7 +98,7 @@ describe Principal, type: :model do
should_return_groups_and_users_if_active(:active_or_registered_like, search)
it 'should return a registerd user' do
it 'should return a registered user' do
user.status = User::STATUSES[:registered]
user.save!

@ -82,7 +82,7 @@ describe WorkPackage, 'derived dates', type: :model do
let(:child_start_date) { nil }
let(:other_child_start_date) { nil }
it 'the derived_start_date is the minumum of the due dates' do
it 'the derived_start_date is the minimum of the due dates' do
expect(subject.derived_start_date).to eql child_due_date
end

@ -34,7 +34,7 @@ describe Rack::Deflater, type: :request do
let(:text) { 'text' }
it 'produces an identical eTag whether content is deflated or not' do
# Using the api_v3_paths.configuaration because of the endpoint's simplicity.
# Using the api_v3_paths.configuration because of the endpoint's simplicity.
# It could be any endpoint really.
get api_v3_paths.configuration

@ -239,7 +239,7 @@ describe ::API::V3::WorkPackageCollectionFromQueryService,
end
context 'with query.display_sums? being true' do
it 'has a struct containg the sums and the available custom fields' do
it 'has a struct containing the sums and the available custom fields' do
query.display_sums = true
custom_fields = [FactoryBot.build_stubbed(:text_wp_custom_field),

@ -408,7 +408,7 @@ describe Projects::CopyService, 'integration', type: :model do
expect(copied_order).to eq(original_order)
# Expect reference to the origianl work package
# Expect reference to the original work package
referenced = query.ordered_work_packages.detect { |ow| ow.work_package == work_package2 }
expect(referenced).to be_present
end

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save