aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Gemfile1
-rw-r--r--Gemfile.lock2
-rw-r--r--app/controllers/admin_general_controller.rb1
-rw-r--r--app/controllers/request_controller.rb13
-rw-r--r--app/models/about_me_validator.rb2
-rw-r--r--app/models/censor_rule.rb2
-rw-r--r--app/models/change_email_validator.rb2
-rw-r--r--app/models/comment.rb2
-rw-r--r--app/models/contact_validator.rb2
-rw-r--r--app/models/exim_log.rb2
-rw-r--r--app/models/exim_log_done.rb2
-rw-r--r--app/models/foi_attachment.rb2
-rw-r--r--app/models/holiday.rb2
-rw-r--r--app/models/incoming_message.rb5
-rw-r--r--app/models/info_request.rb14
-rw-r--r--app/models/info_request_event.rb2
-rw-r--r--app/models/outgoing_message.rb2
-rw-r--r--app/models/post_redirect.rb2
-rw-r--r--app/models/profile_photo.rb2
-rw-r--r--app/models/public_body.rb2
-rw-r--r--app/models/purge_request.rb13
-rw-r--r--app/models/raw_email.rb2
-rw-r--r--app/models/request_mailer.rb2
-rw-r--r--app/models/track_thing.rb2
-rw-r--r--app/models/track_things_sent_email.rb2
-rw-r--r--app/models/user.rb5
-rw-r--r--app/models/user_info_request_sent_alert.rb2
-rw-r--r--app/views/admin_general/index.rhtml14
-rw-r--r--app/views/request/_sidebar.rhtml11
-rw-r--r--app/views/request/show.rhtml2
-rw-r--r--config/routes.rb1
-rw-r--r--db/migrate/114_add_attention_requested_flag_to_info_requests.rb13
-rw-r--r--public/stylesheets/main.css2
-rwxr-xr-xscript/annotate-models5
-rw-r--r--spec/controllers/request_controller_spec.rb41
35 files changed, 154 insertions, 27 deletions
diff --git a/Gemfile b/Gemfile
index 29319e41a..0a2e1f927 100644
--- a/Gemfile
+++ b/Gemfile
@@ -41,4 +41,5 @@ end
group :develop do
gem 'ruby-debug'
+ gem 'annotate'
end
diff --git a/Gemfile.lock b/Gemfile.lock
index f92be20a9..084ce19f3 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -17,6 +17,7 @@ GEM
activeresource (2.3.14)
activesupport (= 2.3.14)
activesupport (2.3.14)
+ annotate (2.4.0)
columnize (0.3.6)
fakeweb (1.3.0)
fast_gettext (0.6.1)
@@ -67,6 +68,7 @@ PLATFORMS
ruby
DEPENDENCIES
+ annotate
fakeweb
fast_gettext (>= 0.6.0)
gettext (>= 1.9.3)
diff --git a/app/controllers/admin_general_controller.rb b/app/controllers/admin_general_controller.rb
index 43ca4f093..c83ae0f37 100644
--- a/app/controllers/admin_general_controller.rb
+++ b/app/controllers/admin_general_controller.rb
@@ -30,6 +30,7 @@ class AdminGeneralController < AdminController
# Tasks to do
@requires_admin_requests = InfoRequest.find(:all, :select => '*, ' + InfoRequest.last_event_time_clause + ' as last_event_time', :conditions => ["described_state = 'requires_admin'"], :order => "last_event_time")
@error_message_requests = InfoRequest.find(:all, :select => '*, ' + InfoRequest.last_event_time_clause + ' as last_event_time', :conditions => ["described_state = 'error_message'"], :order => "last_event_time")
+ @attention_requests = InfoRequest.find(:all, :select => '*, ' + InfoRequest.last_event_time_clause + ' as last_event_time', :conditions => ["described_state = 'attention_requested'"], :order => "last_event_time")
@blank_contacts = PublicBody.find(:all, :conditions => ["request_email = ''"], :order => "updated_at")
@old_unclassified = InfoRequest.find_old_unclassified(:limit => 20,
:conditions => ["prominence = 'normal'"])
diff --git a/app/controllers/request_controller.rb b/app/controllers/request_controller.rb
index af142c530..94fbcde29 100644
--- a/app/controllers/request_controller.rb
+++ b/app/controllers/request_controller.rb
@@ -654,6 +654,19 @@ class RequestController < ApplicationController
end
end
+ def report_request
+ info_request = InfoRequest.find_by_url_title(params[:url_title])
+ if !info_request.attention_requested
+ info_request.set_described_state('attention_requested')
+ info_request.attention_requested = true # tells us if attention has ever been requested
+ info_request.save!
+ flash[:notice] = _("This request has been reported for administrator attention")
+ else
+ flash[:notice] = _("This request has already been reported for administrator attention")
+ end
+ redirect_to request_url(info_request)
+ end
+
# special caching code so mime types are handled right
around_filter :cache_attachments, :only => [ :get_attachment, :get_attachment_as_html ]
def cache_attachments
diff --git a/app/models/about_me_validator.rb b/app/models/about_me_validator.rb
index e24c5512c..67b81bc9c 100644
--- a/app/models/about_me_validator.rb
+++ b/app/models/about_me_validator.rb
@@ -1,5 +1,5 @@
# == Schema Information
-# Schema version: 95
+# Schema version: 114
#
# Table name: about_me_validators
#
diff --git a/app/models/censor_rule.rb b/app/models/censor_rule.rb
index 72b92d462..a477d2568 100644
--- a/app/models/censor_rule.rb
+++ b/app/models/censor_rule.rb
@@ -1,5 +1,5 @@
# == Schema Information
-# Schema version: 108
+# Schema version: 114
#
# Table name: censor_rules
#
diff --git a/app/models/change_email_validator.rb b/app/models/change_email_validator.rb
index 80db96c64..0395ab6d5 100644
--- a/app/models/change_email_validator.rb
+++ b/app/models/change_email_validator.rb
@@ -1,5 +1,5 @@
# == Schema Information
-# Schema version: 108
+# Schema version: 114
#
# Table name: change_email_validators
#
diff --git a/app/models/comment.rb b/app/models/comment.rb
index b3d5ba640..6edfaa24f 100644
--- a/app/models/comment.rb
+++ b/app/models/comment.rb
@@ -1,5 +1,5 @@
# == Schema Information
-# Schema version: 108
+# Schema version: 114
#
# Table name: comments
#
diff --git a/app/models/contact_validator.rb b/app/models/contact_validator.rb
index 0bc562835..a9748a739 100644
--- a/app/models/contact_validator.rb
+++ b/app/models/contact_validator.rb
@@ -1,5 +1,5 @@
# == Schema Information
-# Schema version: 95
+# Schema version: 114
#
# Table name: contact_validators
#
diff --git a/app/models/exim_log.rb b/app/models/exim_log.rb
index 2c6bea4f8..60faa7f0b 100644
--- a/app/models/exim_log.rb
+++ b/app/models/exim_log.rb
@@ -1,5 +1,5 @@
# == Schema Information
-# Schema version: 108
+# Schema version: 114
#
# Table name: exim_logs
#
diff --git a/app/models/exim_log_done.rb b/app/models/exim_log_done.rb
index b8a39033a..3cedc1379 100644
--- a/app/models/exim_log_done.rb
+++ b/app/models/exim_log_done.rb
@@ -1,5 +1,5 @@
# == Schema Information
-# Schema version: 95
+# Schema version: 114
#
# Table name: exim_log_dones
#
diff --git a/app/models/foi_attachment.rb b/app/models/foi_attachment.rb
index 1906b56db..f3e3d7e00 100644
--- a/app/models/foi_attachment.rb
+++ b/app/models/foi_attachment.rb
@@ -1,5 +1,5 @@
# == Schema Information
-# Schema version: 108
+# Schema version: 114
#
# Table name: foi_attachments
#
diff --git a/app/models/holiday.rb b/app/models/holiday.rb
index 1fa599c13..debd88dec 100644
--- a/app/models/holiday.rb
+++ b/app/models/holiday.rb
@@ -1,5 +1,5 @@
# == Schema Information
-# Schema version: 108
+# Schema version: 114
#
# Table name: holidays
#
diff --git a/app/models/incoming_message.rb b/app/models/incoming_message.rb
index 9dcd8c1bc..3f74423d0 100644
--- a/app/models/incoming_message.rb
+++ b/app/models/incoming_message.rb
@@ -1,5 +1,5 @@
# == Schema Information
-# Schema version: 108
+# Schema version: 114
#
# Table name: incoming_messages
#
@@ -11,12 +11,12 @@
# cached_attachment_text_clipped :text
# cached_main_body_text_folded :text
# cached_main_body_text_unfolded :text
-# sent_at :time
# subject :text
# mail_from_domain :text
# valid_to_reply_to :boolean
# last_parsed :datetime
# mail_from :text
+# sent_at :datetime
#
# encoding: UTF-8
@@ -1142,3 +1142,4 @@ class IncomingMessage < ActiveRecord::Base
end
+
diff --git a/app/models/info_request.rb b/app/models/info_request.rb
index 1e55f92ae..47398dabb 100644
--- a/app/models/info_request.rb
+++ b/app/models/info_request.rb
@@ -1,5 +1,5 @@
# == Schema Information
-# Schema version: 108
+# Schema version: 114
#
# Table name: info_requests
#
@@ -17,6 +17,7 @@
# allow_new_responses_from :string(255) default("anybody"), not null
# handle_rejected_responses :string(255) default("bounce"), not null
# idhash :string(255) not null
+# attention_requested :boolean default(FALSE)
#
@@ -88,7 +89,8 @@ class InfoRequest < ActiveRecord::Base
'internal_review',
'error_message',
'requires_admin',
- 'user_withdrawn'
+ 'user_withdrawn',
+ 'attention_requested'
]
if @@custom_states_loaded
states += InfoRequest.theme_extra_states
@@ -503,7 +505,7 @@ public
# states which require administrator action (hence email administrators
# when they are entered, and offer state change dialog to them)
def InfoRequest.requires_admin_states
- return ['requires_admin', 'error_message']
+ return ['requires_admin', 'error_message', 'attention_requested']
end
def requires_admin?
@@ -511,6 +513,9 @@ public
return false
end
+ def can_have_attention_requested?
+ end
+
# change status, including for last event for later historical purposes
def set_described_state(new_state)
ActiveRecord::Base.transaction do
@@ -803,6 +808,8 @@ public
_("Delivery error")
elsif status == 'requires_admin'
_("Unusual response.")
+ elsif status == 'attention_requested'
+ _("Reported for administrator attention.")
elsif status == 'user_withdrawn'
_("Withdrawn by the requester.")
else
@@ -1066,3 +1073,4 @@ public
end
end
end
+
diff --git a/app/models/info_request_event.rb b/app/models/info_request_event.rb
index dacd3223e..a410328b0 100644
--- a/app/models/info_request_event.rb
+++ b/app/models/info_request_event.rb
@@ -1,5 +1,5 @@
# == Schema Information
-# Schema version: 108
+# Schema version: 114
#
# Table name: info_request_events
#
diff --git a/app/models/outgoing_message.rb b/app/models/outgoing_message.rb
index c29cbb785..0ce1ee11c 100644
--- a/app/models/outgoing_message.rb
+++ b/app/models/outgoing_message.rb
@@ -1,5 +1,5 @@
# == Schema Information
-# Schema version: 108
+# Schema version: 114
#
# Table name: outgoing_messages
#
diff --git a/app/models/post_redirect.rb b/app/models/post_redirect.rb
index 2b636453f..f613fc58d 100644
--- a/app/models/post_redirect.rb
+++ b/app/models/post_redirect.rb
@@ -1,5 +1,5 @@
# == Schema Information
-# Schema version: 108
+# Schema version: 114
#
# Table name: post_redirects
#
diff --git a/app/models/profile_photo.rb b/app/models/profile_photo.rb
index 6c66d868a..72bfe954f 100644
--- a/app/models/profile_photo.rb
+++ b/app/models/profile_photo.rb
@@ -1,5 +1,5 @@
# == Schema Information
-# Schema version: 108
+# Schema version: 114
#
# Table name: profile_photos
#
diff --git a/app/models/public_body.rb b/app/models/public_body.rb
index ae902dac6..267b5d60c 100644
--- a/app/models/public_body.rb
+++ b/app/models/public_body.rb
@@ -1,5 +1,5 @@
# == Schema Information
-# Schema version: 95
+# Schema version: 114
#
# Table name: public_bodies
#
diff --git a/app/models/purge_request.rb b/app/models/purge_request.rb
index 088d5b84b..48a16f9e6 100644
--- a/app/models/purge_request.rb
+++ b/app/models/purge_request.rb
@@ -1,3 +1,15 @@
+# == Schema Information
+# Schema version: 114
+#
+# Table name: purge_requests
+#
+# id :integer not null, primary key
+# url :string(255)
+# created_at :datetime not null
+# model :string(255) not null
+# model_id :integer not null
+#
+
# models/purge_request.rb:
# A queue of URLs to purge
#
@@ -37,3 +49,4 @@ end
+
diff --git a/app/models/raw_email.rb b/app/models/raw_email.rb
index 29122e692..1466e5d9c 100644
--- a/app/models/raw_email.rb
+++ b/app/models/raw_email.rb
@@ -1,5 +1,5 @@
# == Schema Information
-# Schema version: 108
+# Schema version: 114
#
# Table name: raw_emails
#
diff --git a/app/models/request_mailer.rb b/app/models/request_mailer.rb
index e336111ee..ee6220a47 100644
--- a/app/models/request_mailer.rb
+++ b/app/models/request_mailer.rb
@@ -48,7 +48,7 @@ class RequestMailer < ApplicationMailer
def requires_admin(info_request)
@from = info_request.user.name_and_email
@recipients = contact_from_name_and_email
- @subject = _("FOI response requires admin - ") + info_request.title
+ @subject = _("FOI response requires admin ({{reason}}) - {{title}}", :reason => info_request.described_state, :title => info_request.title)
url = main_url(request_url(info_request))
admin_url = request_admin_url(info_request)
@body = {:info_request => info_request, :url => url, :admin_url => admin_url }
diff --git a/app/models/track_thing.rb b/app/models/track_thing.rb
index 446060279..f6a58189f 100644
--- a/app/models/track_thing.rb
+++ b/app/models/track_thing.rb
@@ -1,5 +1,5 @@
# == Schema Information
-# Schema version: 108
+# Schema version: 114
#
# Table name: track_things
#
diff --git a/app/models/track_things_sent_email.rb b/app/models/track_things_sent_email.rb
index 777339d75..24297f57b 100644
--- a/app/models/track_things_sent_email.rb
+++ b/app/models/track_things_sent_email.rb
@@ -1,5 +1,5 @@
# == Schema Information
-# Schema version: 108
+# Schema version: 114
#
# Table name: track_things_sent_emails
#
diff --git a/app/models/user.rb b/app/models/user.rb
index 4a7153b3f..57fce429c 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -1,5 +1,5 @@
# == Schema Information
-# Schema version: 108
+# Schema version: 114
#
# Table name: users
#
@@ -20,6 +20,8 @@
# email_bounced_at :datetime
# email_bounce_message :text default(""), not null
# no_limit :boolean default(FALSE), not null
+# receive_email_alerts :boolean default(TRUE), not null
+# user_similarity_id :integer
#
# models/user.rb:
@@ -441,3 +443,4 @@ class User < ActiveRecord::Base
end
end
+
diff --git a/app/models/user_info_request_sent_alert.rb b/app/models/user_info_request_sent_alert.rb
index 15cac515f..a97fd5d44 100644
--- a/app/models/user_info_request_sent_alert.rb
+++ b/app/models/user_info_request_sent_alert.rb
@@ -1,5 +1,5 @@
# == Schema Information
-# Schema version: 108
+# Schema version: 114
#
# Table name: user_info_request_sent_alerts
#
diff --git a/app/views/admin_general/index.rhtml b/app/views/admin_general/index.rhtml
index 1a4b8ba96..48bd7f694 100644
--- a/app/views/admin_general/index.rhtml
+++ b/app/views/admin_general/index.rhtml
@@ -46,6 +46,20 @@
</ul>
<% end %>
+<% if @attention_requests.size > 0 %>
+ <h3>Review requests which have been marked as requiring your attention by users (<%=@error_message_requests.size%> total)</h3>
+
+ <ul>
+ <% for @request in @attention_requests %>
+ <li>
+ <%= request_both_links(@request)%>
+ &ndash; <%=simple_date(@request.get_last_event.created_at)%>
+ </li>
+ <% end %>
+ </ul>
+<% end %>
+
+
<% if @requires_admin_requests.size > 0 %>
<h3>These require administrator attention (<%=@requires_admin_requests.size%> total)</h3>
diff --git a/app/views/request/_sidebar.rhtml b/app/views/request/_sidebar.rhtml
index 758387b09..c0708a36a 100644
--- a/app/views/request/_sidebar.rhtml
+++ b/app/views/request/_sidebar.rhtml
@@ -4,7 +4,16 @@
<% follower_count = TrackThing.count(:all, :conditions => ["info_request_id = ?", @info_request.id]) + 1 %>
<p><%= n_("There is %d person following this request", "There are %d people following this request", follower_count) % follower_count %></p>
<%= render :partial => 'track/tracking_links', :locals => { :track_thing => @track_thing, :own_request => @info_request.user == @user, :location => 'sidebar' } %>
-
+ <% if @info_request.described_state != "attention_requested" %>
+ <h2><%= _('Offensive? Unsuitable?') %></h2>
+ <% if @info_request.attention_requested %>
+ <p><%= ('The site administrators have reviewed this request and consider it to be suitable for the website.') %></p>
+ <% else %>
+ <p><%= _('Requests for personal information and vexatious requests are not considered valid for FOI purposes (<a href="/help/about">read more</a>).') %>
+ <p><%= ('If you believe this request is not suitable, you can report it for attention by the site administrators') %></p>
+ <%= link_to _("Report this request"), report_path, :class => "link_button_green" %>
+ <% end %>
+ <% end %>
<h2><%= _("Act on what you've learnt") %></h2>
<div class="act_link">
diff --git a/app/views/request/show.rhtml b/app/views/request/show.rhtml
index 611704ebe..036ef06dd 100644
--- a/app/views/request/show.rhtml
+++ b/app/views/request/show.rhtml
@@ -118,6 +118,8 @@
<% elsif @status == 'user_withdrawn' %>
<%= _('This request has been <strong>withdrawn</strong> by the person who made it.
There may be an explanation in the correspondence below.') %>
+ <% elsif @status == 'attention_requested' %>
+ <%= _('This request has been <strong>reported</strong> as needing administrator attention (perhaps because it is vexatious, or a request for personal information)') %>
<% else %>
<%= render :partial => 'general/custom_state_descriptions', :locals => { :status => @status } %>
<% end %>
diff --git a/config/routes.rb b/config/routes.rb
index 0ebd3dbc8..698752218 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -66,6 +66,7 @@ ActionController::Routing::Routes.draw do |map|
request.upload_response "/upload/request/:url_title", :action => 'upload_response'
request.download_entire_request '/request/:url_title/download', :action => 'download_entire_request'
+ request.report '/request/:url_title/report', :action => 'report_request'
end
diff --git a/db/migrate/114_add_attention_requested_flag_to_info_requests.rb b/db/migrate/114_add_attention_requested_flag_to_info_requests.rb
new file mode 100644
index 000000000..48c98e5a9
--- /dev/null
+++ b/db/migrate/114_add_attention_requested_flag_to_info_requests.rb
@@ -0,0 +1,13 @@
+require 'digest/sha1'
+
+class AddAttentionRequestedFlagToInfoRequests < ActiveRecord::Migration
+ def self.up
+ add_column :info_requests, :attention_requested, :boolean, :default => false
+ end
+ def self.down
+ remove_column :info_requests, :attention_requested
+ end
+end
+
+
+
diff --git a/public/stylesheets/main.css b/public/stylesheets/main.css
index 4b12a637a..0c2239409 100644
--- a/public/stylesheets/main.css
+++ b/public/stylesheets/main.css
@@ -311,7 +311,7 @@ color:#A68C2E;
background-image:url(../images/navimg/status-icons-fail.png);
}
-.icon_not_held {
+.icon_not_held, .icon_attention_requested {
background-image:url(/images/status-not-held.png);
color:#A68C2E;
}
diff --git a/script/annotate-models b/script/annotate-models
new file mode 100755
index 000000000..b6e01c010
--- /dev/null
+++ b/script/annotate-models
@@ -0,0 +1,5 @@
+#!/bin/bash
+#
+# annotates the models in app/ with schema information
+
+bundle exec annotate -m -p before --exclude tests,fixtures
diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb
index d52c8eaf4..c70284748 100644
--- a/spec/controllers/request_controller_spec.rb
+++ b/spec/controllers/request_controller_spec.rb
@@ -1845,3 +1845,44 @@ describe RequestController, "when showing similar requests" do
end
+describe RequestController, "when reporting a request" do
+ integrate_views
+
+ it "should mark a request as having been reported" do
+ ir = info_requests(:badger_request)
+ title = ir.url_title
+ get :show, :url_title => title
+ assigns[:info_request].attention_requested.should == false
+ get :report_request, :url_title => title
+ get :show, :url_title => title
+ assigns[:info_request].attention_requested.should == true
+ assigns[:info_request].described_state.should == "attention_requested"
+ end
+
+ it "should not allow a request to be reported twice" do
+ title = info_requests(:badger_request).url_title
+ get :report_request, :url_title => title
+ get :show, :url_title => title
+ response.body.should include("has been reported")
+ get :report_request, :url_title => title
+ get :show, :url_title => title
+ response.body.should include("has already been reported")
+ end
+
+ it "should let users know a request has been reported" do
+ title = info_requests(:badger_request).url_title
+ get :show, :url_title => title
+ response.body.should include("Offensive?")
+ get :report_request, :url_title => title
+ get :show, :url_title => title
+ response.body.should_not include("Offensive?")
+ response.body.should include("This request has been reported")
+ info_requests(:badger_request).set_described_state("successful")
+ get :show, :url_title => title
+ response.body.should_not include("This request has been reported")
+ response.body.should include("The site administrators have reviewed this request")
+ end
+
+end
+
+