Commit 15c27192c0fa4e33188c3f6663362faca02df8af
Exists in
spb-stable
and in
2 other branches
Merge branch 'remove-wall'
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> Conflicts: CHANGELOG
Showing
43 changed files
with
7 additions
and
530 deletions
Show diff stats
CHANGELOG
| ... | ... | @@ -34,6 +34,7 @@ v 7.0.0 |
| 34 | 34 | - Skip init script check on omnibus-gitlab |
| 35 | 35 | - Be more selective when killing stray Sidekiqs |
| 36 | 36 | - Check LDAP user filter during sign-in |
| 37 | + - Remove wall feature (no data loss - you can take it from database) | |
| 37 | 38 | |
| 38 | 39 | v 6.9.2 |
| 39 | 40 | - Revert the commit that broke the LDAP user filter | ... | ... |
app/assets/javascripts/dispatcher.js.coffee
app/assets/javascripts/wall.js.coffee
| ... | ... | @@ -1,85 +0,0 @@ |
| 1 | -class Wall | |
| 2 | - constructor: (project_id) -> | |
| 3 | - @project_id = project_id | |
| 4 | - @note_ids = [] | |
| 5 | - @getContent() | |
| 6 | - @initRefresh() | |
| 7 | - @initForm() | |
| 8 | - | |
| 9 | - # | |
| 10 | - # Gets an initial set of notes. | |
| 11 | - # | |
| 12 | - getContent: -> | |
| 13 | - Api.notes @project_id, (notes) => | |
| 14 | - $.each notes, (i, note) => | |
| 15 | - # render note if it not present in loaded list | |
| 16 | - # or skip if rendered | |
| 17 | - if $.inArray(note.id, @note_ids) == -1 | |
| 18 | - @note_ids.push(note.id) | |
| 19 | - @renderNote(note) | |
| 20 | - @scrollDown() | |
| 21 | - $("abbr.timeago").timeago() | |
| 22 | - | |
| 23 | - initRefresh: -> | |
| 24 | - setInterval => | |
| 25 | - @refresh() | |
| 26 | - , 10000 | |
| 27 | - | |
| 28 | - refresh: -> | |
| 29 | - @getContent() | |
| 30 | - | |
| 31 | - scrollDown: -> | |
| 32 | - notes = $('ul.notes') | |
| 33 | - $('body, html').scrollTop(notes.height()) | |
| 34 | - | |
| 35 | - initForm: -> | |
| 36 | - form = $('.wall-note-form') | |
| 37 | - form.find("#target_type").val('wall') | |
| 38 | - | |
| 39 | - form.on 'ajax:success', => | |
| 40 | - @refresh() | |
| 41 | - form.find(".js-note-text").val("").trigger("input") | |
| 42 | - | |
| 43 | - form.on 'ajax:complete', -> | |
| 44 | - form.find(".js-comment-button").removeAttr('disabled') | |
| 45 | - form.find(".js-comment-button").removeClass('disabled') | |
| 46 | - | |
| 47 | - form.on "click", ".js-choose-note-attachment-button", -> | |
| 48 | - form.find(".js-note-attachment-input").click() | |
| 49 | - | |
| 50 | - form.on "change", ".js-note-attachment-input", -> | |
| 51 | - filename = $(this).val().replace(/^.*[\\\/]/, '') | |
| 52 | - form.find(".js-attachment-filename").text(filename) | |
| 53 | - | |
| 54 | - form.find('.note_text').keydown (e) -> | |
| 55 | - if e.ctrlKey && e.keyCode == 13 | |
| 56 | - form.find('.js-comment-button').submit() | |
| 57 | - | |
| 58 | - form.show() | |
| 59 | - | |
| 60 | - renderNote: (note) -> | |
| 61 | - template = @noteTemplate() | |
| 62 | - template = template.replace('{{author_name}}', note.author.name) | |
| 63 | - template = template.replace(/{{created_at}}/g, note.created_at) | |
| 64 | - template = template.replace('{{text}}', simpleFormat(note.body)) | |
| 65 | - | |
| 66 | - if note.attachment | |
| 67 | - file = '<i class="icon-paper-clip"/><a href="' + gon.relative_url_root + '/files/note/' + note.id + '/' + note.attachment + '">' + note.attachment + '</a>' | |
| 68 | - else | |
| 69 | - file = '' | |
| 70 | - template = template.replace('{{file}}', file) | |
| 71 | - | |
| 72 | - | |
| 73 | - $('ul.notes').append(template) | |
| 74 | - | |
| 75 | - noteTemplate: -> | |
| 76 | - return '<li> | |
| 77 | - <strong class="wall-author">{{author_name}}</strong> | |
| 78 | - <span class="wall-text"> | |
| 79 | - {{text}} | |
| 80 | - <span class="wall-file">{{file}}</span> | |
| 81 | - </span> | |
| 82 | - <abbr class="timeago" title="{{created_at}}">{{created_at}}</abbr> | |
| 83 | - </li>' | |
| 84 | - | |
| 85 | -@Wall = Wall |
app/assets/stylesheets/sections/wall.scss
| ... | ... | @@ -1,55 +0,0 @@ |
| 1 | -.wall-page { | |
| 2 | - .wall-note-form { | |
| 3 | - @extend .col-md-12; | |
| 4 | - | |
| 5 | - margin: 0; | |
| 6 | - height: 140px; | |
| 7 | - background: #F9F9F9; | |
| 8 | - position: fixed; | |
| 9 | - bottom: 0px; | |
| 10 | - padding: 3px; | |
| 11 | - padding-bottom: 25px; | |
| 12 | - border: 1px solid #DDD; | |
| 13 | - } | |
| 14 | - | |
| 15 | - .notes { | |
| 16 | - margin-bottom: 160px; | |
| 17 | - background: #FFE; | |
| 18 | - border: 1px solid #EED; | |
| 19 | - | |
| 20 | - > li { | |
| 21 | - @extend .clearfix; | |
| 22 | - border-bottom: 1px solid #EED; | |
| 23 | - padding: 10px; | |
| 24 | - } | |
| 25 | - | |
| 26 | - .wall-author { | |
| 27 | - color: #666; | |
| 28 | - float: left; | |
| 29 | - font-size: 12px; | |
| 30 | - width: 120px; | |
| 31 | - text-overflow: ellipsis; | |
| 32 | - white-space: nowrap; | |
| 33 | - overflow: hidden; | |
| 34 | - } | |
| 35 | - | |
| 36 | - .wall-text { | |
| 37 | - border-left: 1px solid #CCC; | |
| 38 | - margin-left: 10px; | |
| 39 | - padding-left: 10px; | |
| 40 | - float: left; | |
| 41 | - width: 75%; | |
| 42 | - } | |
| 43 | - | |
| 44 | - .wall-file { | |
| 45 | - margin-left: 8px; | |
| 46 | - background: #EEE; | |
| 47 | - } | |
| 48 | - | |
| 49 | - abbr { | |
| 50 | - float: right; | |
| 51 | - color: #AAA; | |
| 52 | - border: none; | |
| 53 | - } | |
| 54 | - } | |
| 55 | -} |
app/controllers/projects/walls_controller.rb
| ... | ... | @@ -1,20 +0,0 @@ |
| 1 | -class Projects::WallsController < Projects::ApplicationController | |
| 2 | - before_filter :module_enabled | |
| 3 | - | |
| 4 | - respond_to :js, :html | |
| 5 | - | |
| 6 | - def show | |
| 7 | - @note = @project.notes.new | |
| 8 | - | |
| 9 | - respond_to do |format| | |
| 10 | - format.html | |
| 11 | - end | |
| 12 | - end | |
| 13 | - | |
| 14 | - protected | |
| 15 | - | |
| 16 | - def module_enabled | |
| 17 | - return render_404 unless @project.wall_enabled | |
| 18 | - end | |
| 19 | -end | |
| 20 | - |
app/helpers/events_helper.rb
app/helpers/projects_helper.rb
| ... | ... | @@ -139,7 +139,7 @@ module ProjectsHelper |
| 139 | 139 | nav_tabs << :settings |
| 140 | 140 | end |
| 141 | 141 | |
| 142 | - [:issues, :wiki, :wall, :snippets].each do |feature| | |
| 142 | + [:issues, :wiki, :snippets].each do |feature| | |
| 143 | 143 | nav_tabs << feature if project.send :"#{feature}_enabled" |
| 144 | 144 | end |
| 145 | 145 | ... | ... |
app/helpers/search_helper.rb
| ... | ... | @@ -61,7 +61,6 @@ module SearchHelper |
| 61 | 61 | { label: "#{prefix} - Milestones", url: project_milestones_path(@project) }, |
| 62 | 62 | { label: "#{prefix} - Snippets", url: project_snippets_path(@project) }, |
| 63 | 63 | { label: "#{prefix} - Team", url: project_team_index_path(@project) }, |
| 64 | - { label: "#{prefix} - Wall", url: project_wall_path(@project) }, | |
| 65 | 64 | { label: "#{prefix} - Wiki", url: project_wikis_path(@project) }, |
| 66 | 65 | ] |
| 67 | 66 | else | ... | ... |
app/mailers/emails/notes.rb
| ... | ... | @@ -32,14 +32,5 @@ module Emails |
| 32 | 32 | cc: recipient(recipient_id), |
| 33 | 33 | subject: subject("#{@merge_request.title} (##{@merge_request.iid})")) |
| 34 | 34 | end |
| 35 | - | |
| 36 | - def note_wall_email(recipient_id, note_id) | |
| 37 | - @note = Note.find(note_id) | |
| 38 | - @project = @note.project | |
| 39 | - @target_url = project_wall_url(@note.project, anchor: "note_#{@note.id}") | |
| 40 | - mail(from: sender(@note.author_id), | |
| 41 | - cc: recipient(recipient_id), | |
| 42 | - subject: subject("Note on wall")) | |
| 43 | - end | |
| 44 | 35 | end |
| 45 | 36 | end | ... | ... |
app/models/event.rb
app/models/note.rb
| ... | ... | @@ -251,10 +251,6 @@ class Note < ActiveRecord::Base |
| 251 | 251 | for_merge_request? && for_diff_line? |
| 252 | 252 | end |
| 253 | 253 | |
| 254 | - def for_wall? | |
| 255 | - noteable_type.blank? | |
| 256 | - end | |
| 257 | - | |
| 258 | 254 | # override to return commits, which are not active record |
| 259 | 255 | def noteable |
| 260 | 256 | if for_commit? |
| ... | ... | @@ -295,8 +291,6 @@ class Note < ActiveRecord::Base |
| 295 | 291 | def noteable_type_name |
| 296 | 292 | if noteable_type.present? |
| 297 | 293 | noteable_type.downcase |
| 298 | - else | |
| 299 | - "wall" | |
| 300 | 294 | end |
| 301 | 295 | end |
| 302 | 296 | ... | ... |
app/models/project.rb
| ... | ... | @@ -31,7 +31,6 @@ class Project < ActiveRecord::Base |
| 31 | 31 | |
| 32 | 32 | default_value_for :archived, false |
| 33 | 33 | default_value_for :issues_enabled, true |
| 34 | - default_value_for :wall_enabled, true | |
| 35 | 34 | default_value_for :merge_requests_enabled, true |
| 36 | 35 | default_value_for :wiki_enabled, true |
| 37 | 36 | default_value_for :snippets_enabled, true |
| ... | ... | @@ -39,7 +38,7 @@ class Project < ActiveRecord::Base |
| 39 | 38 | ActsAsTaggableOn.strict_case_match = true |
| 40 | 39 | |
| 41 | 40 | attr_accessible :name, :path, :description, :issues_tracker, :label_list, |
| 42 | - :issues_enabled, :wall_enabled, :merge_requests_enabled, :snippets_enabled, :issues_tracker_id, | |
| 41 | + :issues_enabled, :merge_requests_enabled, :snippets_enabled, :issues_tracker_id, | |
| 43 | 42 | :wiki_enabled, :visibility_level, :import_url, :last_activity_at, as: [:default, :admin] |
| 44 | 43 | |
| 45 | 44 | attr_accessible :namespace_id, :creator_id, as: :admin |
| ... | ... | @@ -98,7 +97,7 @@ class Project < ActiveRecord::Base |
| 98 | 97 | exclusion: { in: Gitlab::Blacklist.path }, |
| 99 | 98 | format: { with: Gitlab::Regex.path_regex, |
| 100 | 99 | message: "only letters, digits & '_' '-' '.' allowed. Letter or digit should be first" } |
| 101 | - validates :issues_enabled, :wall_enabled, :merge_requests_enabled, | |
| 100 | + validates :issues_enabled, :merge_requests_enabled, | |
| 102 | 101 | :wiki_enabled, inclusion: { in: [true, false] } |
| 103 | 102 | validates :issues_tracker_id, length: { maximum: 255 }, allow_blank: true |
| 104 | 103 | validates :namespace, presence: true | ... | ... |
app/observers/note_observer.rb
| ... | ... | @@ -3,12 +3,9 @@ class NoteObserver < BaseObserver |
| 3 | 3 | notification.new_note(note) |
| 4 | 4 | |
| 5 | 5 | # Skip system notes, like status changes and cross-references. |
| 6 | - # Skip wall notes to prevent spamming of dashboard | |
| 7 | - if note.noteable_type.present? && !note.system | |
| 6 | + unless note.system | |
| 8 | 7 | event_service.leave_note(note, note.author) |
| 9 | - end | |
| 10 | 8 | |
| 11 | - unless note.system? | |
| 12 | 9 | # Create a cross-reference note if this Note contains GFM that names an |
| 13 | 10 | # issue, merge request, or commit. |
| 14 | 11 | note.references.each do |mentioned| | ... | ... |
app/services/notification_service.rb
app/services/projects/create_service.rb
| ... | ... | @@ -19,7 +19,6 @@ module Projects |
| 19 | 19 | default_opts = { |
| 20 | 20 | issues_enabled: default_features.issues, |
| 21 | 21 | wiki_enabled: default_features.wiki, |
| 22 | - wall_enabled: default_features.wall, | |
| 23 | 22 | snippets_enabled: default_features.snippets, |
| 24 | 23 | merge_requests_enabled: default_features.merge_requests, |
| 25 | 24 | visibility_level: default_features.visibility_level | ... | ... |
app/views/layouts/nav/_project.html.haml
| ... | ... | @@ -36,10 +36,6 @@ |
| 36 | 36 | = nav_link(controller: :wikis) do |
| 37 | 37 | = link_to 'Wiki', project_wiki_path(@project, :home) |
| 38 | 38 | |
| 39 | - - if project_nav_tab? :wall | |
| 40 | - = nav_link(controller: :walls) do | |
| 41 | - = link_to 'Wall', project_wall_path(@project) | |
| 42 | - | |
| 43 | 39 | - if project_nav_tab? :snippets |
| 44 | 40 | = nav_link(controller: :snippets) do |
| 45 | 41 | = link_to 'Snippets', project_snippets_path(@project) | ... | ... |
app/views/notify/note_wall_email.html.haml
| ... | ... | @@ -1 +0,0 @@ |
| 1 | -= render 'note_message' |
app/views/notify/note_wall_email.text.erb
app/views/projects/edit.html.haml
| ... | ... | @@ -74,13 +74,6 @@ |
| 74 | 74 | %span.descr Pages for project documentation |
| 75 | 75 | |
| 76 | 76 | .form-group |
| 77 | - = f.label :wall_enabled, "Wall", class: 'control-label' | |
| 78 | - .col-sm-10 | |
| 79 | - .checkbox | |
| 80 | - = f.check_box :wall_enabled | |
| 81 | - %span.descr Simple chat system for broadcasting inside project | |
| 82 | - | |
| 83 | - .form-group | |
| 84 | 77 | = f.label :snippets_enabled, "Snippets", class: 'control-label' |
| 85 | 78 | .col-sm-10 |
| 86 | 79 | .checkbox | ... | ... |
app/views/projects/walls/show.html.haml
| ... | ... | @@ -1,23 +0,0 @@ |
| 1 | -%div.wall-page | |
| 2 | - %ul.notes | |
| 3 | - | |
| 4 | - - if can? current_user, :write_note, @project | |
| 5 | - .note-form-holder | |
| 6 | - = form_for [@project, @note], remote: true, html: { multipart: true, id: nil, class: "new_note wall-note-form" }, authenticity_token: true do |f| | |
| 7 | - = note_target_fields | |
| 8 | - .note_text_and_preview | |
| 9 | - = f.text_area :note, size: 255, class: 'note_text js-note-text js-gfm-input turn-on' | |
| 10 | - .note-form-actions | |
| 11 | - .buttons | |
| 12 | - = f.submit 'Add Comment', class: "btn comment-btn btn-grouped js-comment-button" | |
| 13 | - | |
| 14 | - .note-form-option | |
| 15 | - %a.choose-btn.btn.btn-small.js-choose-note-attachment-button | |
| 16 | - %i.icon-paper-clip | |
| 17 | - %span Choose File ... | |
| 18 | - | |
| 19 | - %span.file_name.js-attachment-filename File name... | |
| 20 | - = f.file_field :attachment, class: "js-note-attachment-input hidden" | |
| 21 | - | |
| 22 | - .hint.pull-right CTRL + Enter to send message | |
| 23 | - .clearfix |
config/gitlab.yml.example
config/initializers/1_settings.rb
| ... | ... | @@ -95,7 +95,6 @@ Settings.gitlab['default_projects_features'] ||= {} |
| 95 | 95 | Settings.gitlab.default_projects_features['issues'] = true if Settings.gitlab.default_projects_features['issues'].nil? |
| 96 | 96 | Settings.gitlab.default_projects_features['merge_requests'] = true if Settings.gitlab.default_projects_features['merge_requests'].nil? |
| 97 | 97 | Settings.gitlab.default_projects_features['wiki'] = true if Settings.gitlab.default_projects_features['wiki'].nil? |
| 98 | -Settings.gitlab.default_projects_features['wall'] = false if Settings.gitlab.default_projects_features['wall'].nil? | |
| 99 | 98 | Settings.gitlab.default_projects_features['snippets'] = false if Settings.gitlab.default_projects_features['snippets'].nil? |
| 100 | 99 | Settings.gitlab.default_projects_features['visibility_level'] = Settings.send(:verify_constant, Gitlab::VisibilityLevel, Settings.gitlab.default_projects_features['visibility_level'], Gitlab::VisibilityLevel::PRIVATE) |
| 101 | 100 | Settings.gitlab['repository_downloads_path'] = File.absolute_path(Settings.gitlab['repository_downloads_path'] || 'tmp/repositories', Rails.root) | ... | ... |
config/routes.rb
| ... | ... | @@ -209,12 +209,6 @@ Gitlab::Application.routes.draw do |
| 209 | 209 | end |
| 210 | 210 | end |
| 211 | 211 | |
| 212 | - resource :wall, only: [:show], constraints: {id: /\d+/} do | |
| 213 | - member do | |
| 214 | - get 'notes' | |
| 215 | - end | |
| 216 | - end | |
| 217 | - | |
| 218 | 212 | resource :repository, only: [:show] do |
| 219 | 213 | member do |
| 220 | 214 | get "stats" | ... | ... |
doc/api/notes.md
| 1 | 1 | # Notes |
| 2 | 2 | |
| 3 | -Notes can be wall notes or comments on snippets, issues or merge requests. | |
| 4 | - | |
| 5 | -## Wall | |
| 6 | - | |
| 7 | -### List project wall notes | |
| 8 | - | |
| 9 | -Get a list of project wall notes. | |
| 10 | - | |
| 11 | -``` | |
| 12 | -GET /projects/:id/notes | |
| 13 | -``` | |
| 14 | - | |
| 15 | -Parameters: | |
| 16 | - | |
| 17 | -+ `id` (required) - The ID of a project | |
| 18 | - | |
| 19 | -```json | |
| 20 | -[ | |
| 21 | - { | |
| 22 | - "id": 522, | |
| 23 | - "body": "The solution is rather tricky", | |
| 24 | - "attachment": null, | |
| 25 | - "author": { | |
| 26 | - "id": 1, | |
| 27 | - "username": "john_smith", | |
| 28 | - "email": "john@example.com", | |
| 29 | - "name": "John Smith", | |
| 30 | - "state": "active", | |
| 31 | - "created_at": "2012-05-23T08:00:58Z" | |
| 32 | - }, | |
| 33 | - "created_at": "2012-11-27T19:16:44Z" | |
| 34 | - } | |
| 35 | -] | |
| 36 | -``` | |
| 37 | - | |
| 38 | -### Get single wall note | |
| 39 | - | |
| 40 | -Returns a single wall note. | |
| 41 | - | |
| 42 | -``` | |
| 43 | -GET /projects/:id/notes/:note_id | |
| 44 | -``` | |
| 45 | - | |
| 46 | -Parameters: | |
| 47 | - | |
| 48 | -+ `id` (required) - The ID of a project | |
| 49 | -+ `note_id` (required) - The ID of a wall note | |
| 50 | - | |
| 51 | - | |
| 52 | -### Create new wall note | |
| 53 | - | |
| 54 | -Creates a new wall note. | |
| 55 | - | |
| 56 | -``` | |
| 57 | -POST /projects/:id/notes | |
| 58 | -``` | |
| 59 | - | |
| 60 | -Parameters: | |
| 61 | - | |
| 62 | -+ `id` (required) - The ID of a project | |
| 63 | -+ `body` (required) - The content of a note | |
| 64 | - | |
| 3 | +Notes are comments on snippets, issues or merge requests. | |
| 65 | 4 | |
| 66 | 5 | ## Issues |
| 67 | 6 | ... | ... |
doc/api/projects.md
| ... | ... | @@ -30,7 +30,6 @@ GET /projects |
| 30 | 30 | "path_with_namespace": "diaspora/diaspora-client", |
| 31 | 31 | "issues_enabled": true, |
| 32 | 32 | "merge_requests_enabled": true, |
| 33 | - "wall_enabled": false, | |
| 34 | 33 | "wiki_enabled": true, |
| 35 | 34 | "snippets_enabled": false, |
| 36 | 35 | "created_at": "2013-09-30T13: 46: 02Z", |
| ... | ... | @@ -66,7 +65,6 @@ GET /projects |
| 66 | 65 | "path_with_namespace": "brightbox/puppet", |
| 67 | 66 | "issues_enabled": true, |
| 68 | 67 | "merge_requests_enabled": true, |
| 69 | - "wall_enabled": false, | |
| 70 | 68 | "wiki_enabled": true, |
| 71 | 69 | "snippets_enabled": false, |
| 72 | 70 | "created_at": "2013-09-30T13:46:02Z", |
| ... | ... | @@ -136,7 +134,6 @@ Parameters: |
| 136 | 134 | "path_with_namespace": "diaspora/diaspora-project-site", |
| 137 | 135 | "issues_enabled": true, |
| 138 | 136 | "merge_requests_enabled": true, |
| 139 | - "wall_enabled": false, | |
| 140 | 137 | "wiki_enabled": true, |
| 141 | 138 | "snippets_enabled": false, |
| 142 | 139 | "created_at": "2013-09-30T13: 46: 02Z", |
| ... | ... | @@ -252,7 +249,6 @@ Parameters: |
| 252 | 249 | + `namespace_id` (optional) - namespace for the new project (defaults to user) |
| 253 | 250 | + `description` (optional) - short project description |
| 254 | 251 | + `issues_enabled` (optional) |
| 255 | -+ `wall_enabled` (optional) | |
| 256 | 252 | + `merge_requests_enabled` (optional) |
| 257 | 253 | + `wiki_enabled` (optional) |
| 258 | 254 | + `snippets_enabled` (optional) |
| ... | ... | @@ -276,7 +272,6 @@ Parameters: |
| 276 | 272 | + `description` (optional) - short project description |
| 277 | 273 | + `default_branch` (optional) - 'master' by default |
| 278 | 274 | + `issues_enabled` (optional) |
| 279 | -+ `wall_enabled` (optional) | |
| 280 | 275 | + `merge_requests_enabled` (optional) |
| 281 | 276 | + `wiki_enabled` (optional) |
| 282 | 277 | + `snippets_enabled` (optional) | ... | ... |
doc/markdown/markdown.md
doc/permissions/permissions.md
| ... | ... | @@ -13,7 +13,6 @@ If a user is a GitLab administrator they receive all permissions. |
| 13 | 13 | |---------------------------------------|---------|------------|-------------|----------|--------| |
| 14 | 14 | | Create new issue | ✓ | ✓ | ✓ | ✓ | ✓ | |
| 15 | 15 | | Leave comments | ✓ | ✓ | ✓ | ✓ | ✓ | |
| 16 | -| Write on project wall | ✓ | ✓ | ✓ | ✓ | ✓ | | |
| 17 | 16 | | Pull project code | | ✓ | ✓ | ✓ | ✓ | |
| 18 | 17 | | Download project | | ✓ | ✓ | ✓ | ✓ | |
| 19 | 18 | | Create code snippets | | ✓ | ✓ | ✓ | ✓ | | ... | ... |
doc/workflow/project_features.md
| ... | ... | @@ -26,12 +26,6 @@ This is a separate system for documentation, built right into GitLab. |
| 26 | 26 | |
| 27 | 27 | It is source controlled and is very convenient if you don't want to keep you documentation in your source code, but you do want to keep it in your GitLab project. |
| 28 | 28 | |
| 29 | -## Wall | |
| 30 | - | |
| 31 | -For simple, project specific conversations, the wall can be used. | |
| 32 | - | |
| 33 | -It's very lightweight and simple and works well if you're not interested in using issues, but still want to occasionally communicate within a project. | |
| 34 | - | |
| 35 | 29 | ## Snippets |
| 36 | 30 | |
| 37 | 31 | Snippets are little bits of code or text. | ... | ... |
features/project/active_tab.feature
| ... | ... | @@ -35,11 +35,6 @@ Feature: Project active tab |
| 35 | 35 | Then the active main tab should be Merge Requests |
| 36 | 36 | And no other main tabs should be active |
| 37 | 37 | |
| 38 | - Scenario: On Project Wall | |
| 39 | - Given I visit my project's wall page | |
| 40 | - Then the active main tab should be Wall | |
| 41 | - And no other main tabs should be active | |
| 42 | - | |
| 43 | 38 | Scenario: On Project Wiki |
| 44 | 39 | Given I visit my project's wiki page |
| 45 | 40 | Then the active main tab should be Wiki | ... | ... |
features/project/wall.feature
| ... | ... | @@ -1,16 +0,0 @@ |
| 1 | -Feature: Project Wall | |
| 2 | - In order to use Project Wall | |
| 3 | - A user should be able to read and write messages | |
| 4 | - | |
| 5 | - Background: | |
| 6 | - Given I sign in as a user | |
| 7 | - And I own project "Shop" | |
| 8 | - And I visit project "Shop" wall page | |
| 9 | - | |
| 10 | - @javascript | |
| 11 | - Scenario: Write comment | |
| 12 | - Given I write new comment "my special test message" | |
| 13 | - Then I should see project wall note "my special test message" | |
| 14 | - | |
| 15 | - Then I visit project "Shop" wall page | |
| 16 | - And I should see project wall note "my special test message" |
features/steps/project/wall.rb
| ... | ... | @@ -1,18 +0,0 @@ |
| 1 | -class ProjectWall < Spinach::FeatureSteps | |
| 2 | - include SharedAuthentication | |
| 3 | - include SharedProject | |
| 4 | - include SharedNote | |
| 5 | - include SharedPaths | |
| 6 | - | |
| 7 | - | |
| 8 | - Given 'I write new comment "my special test message"' do | |
| 9 | - within(".wall-note-form") do | |
| 10 | - fill_in "note[note]", with: "my special test message" | |
| 11 | - click_button "Add Comment" | |
| 12 | - end | |
| 13 | - end | |
| 14 | - | |
| 15 | - Then 'I should see project wall note "my special test message"' do | |
| 16 | - page.should have_content "my special test message" | |
| 17 | - end | |
| 18 | -end |
features/steps/shared/paths.rb
| ... | ... | @@ -204,10 +204,6 @@ module SharedPaths |
| 204 | 204 | visit project_merge_requests_path(@project) |
| 205 | 205 | end |
| 206 | 206 | |
| 207 | - step "I visit my project's wall page" do | |
| 208 | - visit project_wall_path(@project) | |
| 209 | - end | |
| 210 | - | |
| 211 | 207 | step "I visit my project's wiki page" do |
| 212 | 208 | visit project_wiki_path(@project, :home) |
| 213 | 209 | end |
| ... | ... | @@ -319,10 +315,6 @@ module SharedPaths |
| 319 | 315 | visit project_team_index_path(project) |
| 320 | 316 | end |
| 321 | 317 | |
| 322 | - step 'I visit project "Shop" wall page' do | |
| 323 | - visit project_wall_path(project) | |
| 324 | - end | |
| 325 | - | |
| 326 | 318 | step 'I visit project wiki page' do |
| 327 | 319 | visit project_wiki_path(@project, :home) |
| 328 | 320 | end | ... | ... |
lib/api/entities.rb
| ... | ... | @@ -48,7 +48,7 @@ module API |
| 48 | 48 | expose :owner, using: Entities::UserBasic, unless: ->(project, options) { project.group } |
| 49 | 49 | expose :name, :name_with_namespace |
| 50 | 50 | expose :path, :path_with_namespace |
| 51 | - expose :issues_enabled, :merge_requests_enabled, :wall_enabled, :wiki_enabled, :snippets_enabled, :created_at, :last_activity_at | |
| 51 | + expose :issues_enabled, :merge_requests_enabled, :wiki_enabled, :snippets_enabled, :created_at, :last_activity_at | |
| 52 | 52 | expose :namespace |
| 53 | 53 | expose :forked_from_project, using: Entities::ForkedFromProject, :if => lambda{ | project, options | project.forked? } |
| 54 | 54 | end | ... | ... |
lib/api/notes.rb
| ... | ... | @@ -6,55 +6,6 @@ module API |
| 6 | 6 | NOTEABLE_TYPES = [Issue, MergeRequest, Snippet] |
| 7 | 7 | |
| 8 | 8 | resource :projects do |
| 9 | - # Get a list of project wall notes | |
| 10 | - # | |
| 11 | - # Parameters: | |
| 12 | - # id (required) - The ID of a project | |
| 13 | - # Example Request: | |
| 14 | - # GET /projects/:id/notes | |
| 15 | - get ":id/notes" do | |
| 16 | - @notes = user_project.notes.common | |
| 17 | - | |
| 18 | - # Get recent notes if recent = true | |
| 19 | - @notes = @notes.order('id DESC') if params[:recent] | |
| 20 | - | |
| 21 | - present paginate(@notes), with: Entities::Note | |
| 22 | - end | |
| 23 | - | |
| 24 | - # Get a single project wall note | |
| 25 | - # | |
| 26 | - # Parameters: | |
| 27 | - # id (required) - The ID of a project | |
| 28 | - # note_id (required) - The ID of a note | |
| 29 | - # Example Request: | |
| 30 | - # GET /projects/:id/notes/:note_id | |
| 31 | - get ":id/notes/:note_id" do | |
| 32 | - @note = user_project.notes.common.find(params[:note_id]) | |
| 33 | - present @note, with: Entities::Note | |
| 34 | - end | |
| 35 | - | |
| 36 | - # Create a new project wall note | |
| 37 | - # | |
| 38 | - # Parameters: | |
| 39 | - # id (required) - The ID of a project | |
| 40 | - # body (required) - The content of a note | |
| 41 | - # Example Request: | |
| 42 | - # POST /projects/:id/notes | |
| 43 | - post ":id/notes" do | |
| 44 | - required_attributes! [:body] | |
| 45 | - | |
| 46 | - @note = user_project.notes.new(note: params[:body]) | |
| 47 | - @note.author = current_user | |
| 48 | - | |
| 49 | - if @note.save | |
| 50 | - present @note, with: Entities::Note | |
| 51 | - else | |
| 52 | - # :note is exposed as :body, but :note is set on error | |
| 53 | - bad_request!(:note) if @note.errors[:note].any? | |
| 54 | - not_found! | |
| 55 | - end | |
| 56 | - end | |
| 57 | - | |
| 58 | 9 | NOTEABLE_TYPES.each do |noteable_type| |
| 59 | 10 | noteables_str = noteable_type.to_s.underscore.pluralize |
| 60 | 11 | noteable_id_str = "#{noteable_type.to_s.underscore}_id" | ... | ... |
lib/api/projects.rb
| ... | ... | @@ -71,7 +71,6 @@ module API |
| 71 | 71 | # name (required) - name for new project |
| 72 | 72 | # description (optional) - short project description |
| 73 | 73 | # issues_enabled (optional) |
| 74 | - # wall_enabled (optional) | |
| 75 | 74 | # merge_requests_enabled (optional) |
| 76 | 75 | # wiki_enabled (optional) |
| 77 | 76 | # snippets_enabled (optional) |
| ... | ... | @@ -86,7 +85,6 @@ module API |
| 86 | 85 | :path, |
| 87 | 86 | :description, |
| 88 | 87 | :issues_enabled, |
| 89 | - :wall_enabled, | |
| 90 | 88 | :merge_requests_enabled, |
| 91 | 89 | :wiki_enabled, |
| 92 | 90 | :snippets_enabled, |
| ... | ... | @@ -114,7 +112,6 @@ module API |
| 114 | 112 | # description (optional) - short project description |
| 115 | 113 | # default_branch (optional) - 'master' by default |
| 116 | 114 | # issues_enabled (optional) |
| 117 | - # wall_enabled (optional) | |
| 118 | 115 | # merge_requests_enabled (optional) |
| 119 | 116 | # wiki_enabled (optional) |
| 120 | 117 | # snippets_enabled (optional) |
| ... | ... | @@ -129,7 +126,6 @@ module API |
| 129 | 126 | :description, |
| 130 | 127 | :default_branch, |
| 131 | 128 | :issues_enabled, |
| 132 | - :wall_enabled, | |
| 133 | 129 | :merge_requests_enabled, |
| 134 | 130 | :wiki_enabled, |
| 135 | 131 | :snippets_enabled, | ... | ... |
spec/features/security/project/internal_access_spec.rb
| ... | ... | @@ -87,17 +87,6 @@ describe "Internal Project Access", feature: true do |
| 87 | 87 | it { should be_denied_for :visitor } |
| 88 | 88 | end |
| 89 | 89 | |
| 90 | - describe "GET /:project_path/wall" do | |
| 91 | - subject { project_wall_path(project) } | |
| 92 | - | |
| 93 | - it { should be_allowed_for master } | |
| 94 | - it { should be_allowed_for reporter } | |
| 95 | - it { should be_allowed_for :admin } | |
| 96 | - it { should be_allowed_for guest } | |
| 97 | - it { should be_allowed_for :user } | |
| 98 | - it { should be_denied_for :visitor } | |
| 99 | - end | |
| 100 | - | |
| 101 | 90 | describe "GET /:project_path/blob" do |
| 102 | 91 | before do |
| 103 | 92 | commit = project.repository.commit | ... | ... |
spec/features/security/project/private_access_spec.rb
| ... | ... | @@ -87,17 +87,6 @@ describe "Private Project Access", feature: true do |
| 87 | 87 | it { should be_denied_for :visitor } |
| 88 | 88 | end |
| 89 | 89 | |
| 90 | - describe "GET /:project_path/wall" do | |
| 91 | - subject { project_wall_path(project) } | |
| 92 | - | |
| 93 | - it { should be_allowed_for master } | |
| 94 | - it { should be_allowed_for reporter } | |
| 95 | - it { should be_allowed_for :admin } | |
| 96 | - it { should be_denied_for guest } | |
| 97 | - it { should be_denied_for :user } | |
| 98 | - it { should be_denied_for :visitor } | |
| 99 | - end | |
| 100 | - | |
| 101 | 90 | describe "GET /:project_path/blob" do |
| 102 | 91 | before do |
| 103 | 92 | commit = project.repository.commit | ... | ... |
spec/features/security/project/public_access_spec.rb
| ... | ... | @@ -92,17 +92,6 @@ describe "Public Project Access", feature: true do |
| 92 | 92 | it { should be_denied_for :visitor } |
| 93 | 93 | end |
| 94 | 94 | |
| 95 | - describe "GET /:project_path/wall" do | |
| 96 | - subject { project_wall_path(project) } | |
| 97 | - | |
| 98 | - it { should be_allowed_for master } | |
| 99 | - it { should be_allowed_for reporter } | |
| 100 | - it { should be_allowed_for :admin } | |
| 101 | - it { should be_allowed_for guest } | |
| 102 | - it { should be_allowed_for :user } | |
| 103 | - it { should be_allowed_for :visitor } | |
| 104 | - end | |
| 105 | - | |
| 106 | 95 | describe "GET /:project_path/blob" do |
| 107 | 96 | before do |
| 108 | 97 | commit = project.repository.commit | ... | ... |
spec/mailers/notify_spec.rb
| ... | ... | @@ -410,22 +410,6 @@ describe Notify do |
| 410 | 410 | end |
| 411 | 411 | end |
| 412 | 412 | |
| 413 | - describe 'on a project wall' do | |
| 414 | - let(:note_on_the_wall_path) { project_wall_path(project, anchor: "note_#{note.id}") } | |
| 415 | - | |
| 416 | - subject { Notify.note_wall_email(recipient.id, note.id) } | |
| 417 | - | |
| 418 | - it_behaves_like 'a note email' | |
| 419 | - | |
| 420 | - it 'has the correct subject' do | |
| 421 | - should have_subject /#{project.name}/ | |
| 422 | - end | |
| 423 | - | |
| 424 | - it 'contains a link to the wall note' do | |
| 425 | - should have_body_text /#{note_on_the_wall_path}/ | |
| 426 | - end | |
| 427 | - end | |
| 428 | - | |
| 429 | 413 | describe 'on a commit' do |
| 430 | 414 | let(:commit) { project.repository.commit } |
| 431 | 415 | ... | ... |
spec/requests/api/notes_spec.rb
| ... | ... | @@ -13,58 +13,8 @@ describe API::API, api: true do |
| 13 | 13 | let!(:issue_note) { create(:note, noteable: issue, project: project, author: user) } |
| 14 | 14 | let!(:merge_request_note) { create(:note, noteable: merge_request, project: project, author: user) } |
| 15 | 15 | let!(:snippet_note) { create(:note, noteable: snippet, project: project, author: user) } |
| 16 | - let!(:wall_note) { create(:note, project: project, author: user) } | |
| 17 | 16 | before { project.team << [user, :reporter] } |
| 18 | 17 | |
| 19 | - describe "GET /projects/:id/notes" do | |
| 20 | - context "when unauthenticated" do | |
| 21 | - it "should return authentication error" do | |
| 22 | - get api("/projects/#{project.id}/notes") | |
| 23 | - response.status.should == 401 | |
| 24 | - end | |
| 25 | - end | |
| 26 | - | |
| 27 | - context "when authenticated" do | |
| 28 | - it "should return project wall notes" do | |
| 29 | - get api("/projects/#{project.id}/notes", user) | |
| 30 | - response.status.should == 200 | |
| 31 | - json_response.should be_an Array | |
| 32 | - json_response.first['body'].should == wall_note.note | |
| 33 | - end | |
| 34 | - end | |
| 35 | - end | |
| 36 | - | |
| 37 | - describe "GET /projects/:id/notes/:note_id" do | |
| 38 | - it "should return a wall note by id" do | |
| 39 | - get api("/projects/#{project.id}/notes/#{wall_note.id}", user) | |
| 40 | - response.status.should == 200 | |
| 41 | - json_response['body'].should == wall_note.note | |
| 42 | - end | |
| 43 | - | |
| 44 | - it "should return a 404 error if note not found" do | |
| 45 | - get api("/projects/#{project.id}/notes/123", user) | |
| 46 | - response.status.should == 404 | |
| 47 | - end | |
| 48 | - end | |
| 49 | - | |
| 50 | - describe "POST /projects/:id/notes" do | |
| 51 | - it "should create a new wall note" do | |
| 52 | - post api("/projects/#{project.id}/notes", user), body: 'hi!' | |
| 53 | - response.status.should == 201 | |
| 54 | - json_response['body'].should == 'hi!' | |
| 55 | - end | |
| 56 | - | |
| 57 | - it "should return 401 unauthorized error" do | |
| 58 | - post api("/projects/#{project.id}/notes") | |
| 59 | - response.status.should == 401 | |
| 60 | - end | |
| 61 | - | |
| 62 | - it "should return a 400 bad request if body is missing" do | |
| 63 | - post api("/projects/#{project.id}/notes", user) | |
| 64 | - response.status.should == 400 | |
| 65 | - end | |
| 66 | - end | |
| 67 | - | |
| 68 | 18 | describe "GET /projects/:id/noteable/:noteable_id/notes" do |
| 69 | 19 | context "when noteable is an Issue" do |
| 70 | 20 | it "should return an array of issue notes" do | ... | ... |
spec/requests/api/projects_spec.rb
| ... | ... | @@ -126,7 +126,6 @@ describe API::API, api: true do |
| 126 | 126 | project = attributes_for(:project, { |
| 127 | 127 | description: Faker::Lorem.sentence, |
| 128 | 128 | issues_enabled: false, |
| 129 | - wall_enabled: false, | |
| 130 | 129 | merge_requests_enabled: false, |
| 131 | 130 | wiki_enabled: false |
| 132 | 131 | }) |
| ... | ... | @@ -208,7 +207,6 @@ describe API::API, api: true do |
| 208 | 207 | project = attributes_for(:project, { |
| 209 | 208 | description: Faker::Lorem.sentence, |
| 210 | 209 | issues_enabled: false, |
| 211 | - wall_enabled: false, | |
| 212 | 210 | merge_requests_enabled: false, |
| 213 | 211 | wiki_enabled: false |
| 214 | 212 | }) | ... | ... |
spec/routing/project_routing_spec.rb
| ... | ... | @@ -56,7 +56,6 @@ end |
| 56 | 56 | # projects POST /projects(.:format) projects#create |
| 57 | 57 | # new_project GET /projects/new(.:format) projects#new |
| 58 | 58 | # fork_project POST /:id/fork(.:format) projects#fork |
| 59 | -# wall_project GET /:id/wall(.:format) projects#wall | |
| 60 | 59 | # files_project GET /:id/files(.:format) projects#files |
| 61 | 60 | # edit_project GET /:id/edit(.:format) projects#edit |
| 62 | 61 | # project GET /:id(.:format) projects#show |
| ... | ... | @@ -75,10 +74,6 @@ describe ProjectsController, "routing" do |
| 75 | 74 | post("/gitlab/gitlabhq/fork").should route_to('projects#fork', id: 'gitlab/gitlabhq') |
| 76 | 75 | end |
| 77 | 76 | |
| 78 | - it "to #wall" do | |
| 79 | - get("/gitlab/gitlabhq/wall").should route_to('projects/walls#show', project_id: 'gitlab/gitlabhq') | |
| 80 | - end | |
| 81 | - | |
| 82 | 77 | it "to #edit" do |
| 83 | 78 | get("/gitlab/gitlabhq/edit").should route_to('projects#edit', id: 'gitlab/gitlabhq') |
| 84 | 79 | end | ... | ... |
spec/services/projects/create_service_spec.rb
| ... | ... | @@ -65,7 +65,6 @@ describe Projects::CreateService do |
| 65 | 65 | @settings.stub(:issues) { true } |
| 66 | 66 | @settings.stub(:merge_requests) { true } |
| 67 | 67 | @settings.stub(:wiki) { true } |
| 68 | - @settings.stub(:wall) { true } | |
| 69 | 68 | @settings.stub(:snippets) { true } |
| 70 | 69 | stub_const("Settings", Class.new) |
| 71 | 70 | @restrictions = double("restrictions") |
| ... | ... | @@ -108,7 +107,6 @@ describe Projects::CreateService do |
| 108 | 107 | @settings.stub(:issues) { true } |
| 109 | 108 | @settings.stub(:merge_requests) { true } |
| 110 | 109 | @settings.stub(:wiki) { true } |
| 111 | - @settings.stub(:wall) { true } | |
| 112 | 110 | @settings.stub(:snippets) { true } |
| 113 | 111 | @settings.stub(:visibility_level) { Gitlab::VisibilityLevel::PRIVATE } |
| 114 | 112 | stub_const("Settings", Class.new) | ... | ... |