Commit 15c27192c0fa4e33188c3f6663362faca02df8af

Authored by Dmitriy Zaporozhets
2 parents d3d0775a d593c98f

Merge branch 'remove-wall'

Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>

Conflicts:
	CHANGELOG
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
... ... @@ -34,8 +34,6 @@ class Dispatcher
34 34 new Activities()
35 35 when 'projects:new', 'projects:edit'
36 36 new Project()
37   - when 'projects:walls:show'
38   - new Wall(project_id)
39 37 when 'projects:teams:members:index'
40 38 new TeamMembers()
41 39 when 'groups:members'
... ...
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
... ... @@ -109,8 +109,6 @@ module EventsHelper
109 109 "#{event.note_target_type} ##{truncate event.note_target_iid}"
110 110 end
111 111 end
112   - elsif event.wall_note?
113   - link_to 'wall', project_wall_path(event.project)
114 112 else
115 113 content_tag :strong do
116 114 "(deleted)"
... ...
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
... ... @@ -286,10 +286,6 @@ class Event &lt; ActiveRecord::Base
286 286 end.to_s
287 287 end
288 288  
289   - def wall_note?
290   - target.noteable_type.blank?
291   - end
292   -
293 289 def note_target_type
294 290 if target.noteable_type.present?
295 291 target.noteable_type.titleize
... ...
app/models/note.rb
... ... @@ -251,10 +251,6 @@ class Note &lt; 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 &lt; 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 &lt; 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 &lt; 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 &lt; 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 &lt; 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
... ... @@ -106,7 +106,6 @@ class NotificationService
106 106 # TODO: split on methods and refactor
107 107 #
108 108 def new_note(note)
109   - # ignore wall messages
110 109 return true unless note.noteable_type.present?
111 110  
112 111 # ignore gitlab service messages
... ...
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
... ... @@ -1,9 +0,0 @@
1   -New message on the project wall <%= @note.project %>
2   -
3   -<%= url_for(project_wall_url(@note.project, anchor: "note_#{@note.id}")) %>
4   -
5   -
6   -<%= @note.author_name %>
7   -
8   -<%= @note.note %>
9   -
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   - &nbsp;
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
... ... @@ -73,7 +73,6 @@ production: &amp;base
73 73 issues: true
74 74 merge_requests: true
75 75 wiki: true
76   - wall: false
77 76 snippets: false
78 77 visibility_level: "private" # can be "private" | "internal" | "public"
79 78  
... ...
config/initializers/1_settings.rb
... ... @@ -95,7 +95,6 @@ Settings.gitlab[&#39;default_projects_features&#39;] ||= {}
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
... ... @@ -48,7 +48,6 @@ You can use GFM in
48 48  
49 49 - commit messages
50 50 - comments
51   -- wall posts
52 51 - issues
53 52 - merge requests
54 53 - milestones
... ...
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 &quot;Internal Project Access&quot;, 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 &quot;Private Project Access&quot;, 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 &quot;Public Project Access&quot;, 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, &quot;routing&quot; 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)
... ...