Mercurial > hg > soundsoftware-site
comparison app/controllers/.svn/text-base/application_controller.rb.svn-base @ 14:1d32c0a0efbf
* Update to SVN trunk (revisions 3892-4040)
| author | Chris Cannam |
|---|---|
| date | Wed, 25 Aug 2010 16:30:24 +0100 |
| parents | 513646585e45 |
| children | 40f7cfd4df19 |
comparison
equal
deleted
inserted
replaced
| 4:9cc62779c13a | 14:1d32c0a0efbf |
|---|---|
| 199 end | 199 end |
| 200 | 200 |
| 201 def self.model_object(model) | 201 def self.model_object(model) |
| 202 write_inheritable_attribute('model_object', model) | 202 write_inheritable_attribute('model_object', model) |
| 203 end | 203 end |
| 204 | 204 |
| 205 # Filter for bulk issue operations | |
| 206 def find_issues | |
| 207 @issues = Issue.find_all_by_id(params[:id] || params[:ids]) | |
| 208 raise ActiveRecord::RecordNotFound if @issues.empty? | |
| 209 projects = @issues.collect(&:project).compact.uniq | |
| 210 if projects.size == 1 | |
| 211 @project = projects.first | |
| 212 else | |
| 213 # TODO: let users bulk edit/move/destroy issues from different projects | |
| 214 render_error 'Can not bulk edit/move/destroy issues from different projects' | |
| 215 return false | |
| 216 end | |
| 217 rescue ActiveRecord::RecordNotFound | |
| 218 render_404 | |
| 219 end | |
| 220 | |
| 205 # make sure that the user is a member of the project (or admin) if project is private | 221 # make sure that the user is a member of the project (or admin) if project is private |
| 206 # used as a before_filter for actions that do not require any particular permission on the project | 222 # used as a before_filter for actions that do not require any particular permission on the project |
| 207 def check_project_privacy | 223 def check_project_privacy |
| 208 if @project && @project.active? | 224 if @project && @project.active? |
| 209 if @project.is_public? || User.current.member_of?(@project) || User.current.admin? | 225 if @project.is_public? || User.current.member_of?(@project) || User.current.admin? |
| 214 else | 230 else |
| 215 @project = nil | 231 @project = nil |
| 216 render_404 | 232 render_404 |
| 217 false | 233 false |
| 218 end | 234 end |
| 235 end | |
| 236 | |
| 237 def back_url | |
| 238 params[:back_url] || request.env['HTTP_REFERER'] | |
| 219 end | 239 end |
| 220 | 240 |
| 221 def redirect_back_or_default(default) | 241 def redirect_back_or_default(default) |
| 222 back_url = CGI.unescape(params[:back_url].to_s) | 242 back_url = CGI.unescape(params[:back_url].to_s) |
| 223 if !back_url.blank? | 243 if !back_url.blank? |
| 236 end | 256 end |
| 237 | 257 |
| 238 def render_403 | 258 def render_403 |
| 239 @project = nil | 259 @project = nil |
| 240 respond_to do |format| | 260 respond_to do |format| |
| 241 format.html { render :template => "common/403", :layout => (request.xhr? ? false : 'base'), :status => 403 } | 261 format.html { render :template => "common/403", :layout => use_layout, :status => 403 } |
| 242 format.atom { head 403 } | 262 format.atom { head 403 } |
| 243 format.xml { head 403 } | 263 format.xml { head 403 } |
| 244 format.js { head 403 } | 264 format.js { head 403 } |
| 245 format.json { head 403 } | 265 format.json { head 403 } |
| 246 end | 266 end |
| 247 return false | 267 return false |
| 248 end | 268 end |
| 249 | 269 |
| 250 def render_404 | 270 def render_404 |
| 251 respond_to do |format| | 271 respond_to do |format| |
| 252 format.html { render :template => "common/404", :layout => !request.xhr?, :status => 404 } | 272 format.html { render :template => "common/404", :layout => use_layout, :status => 404 } |
| 253 format.atom { head 404 } | 273 format.atom { head 404 } |
| 254 format.xml { head 404 } | 274 format.xml { head 404 } |
| 255 format.js { head 404 } | 275 format.js { head 404 } |
| 256 format.json { head 404 } | 276 format.json { head 404 } |
| 257 end | 277 end |
| 260 | 280 |
| 261 def render_error(msg) | 281 def render_error(msg) |
| 262 respond_to do |format| | 282 respond_to do |format| |
| 263 format.html { | 283 format.html { |
| 264 flash.now[:error] = msg | 284 flash.now[:error] = msg |
| 265 render :text => '', :layout => !request.xhr?, :status => 500 | 285 render :text => '', :layout => use_layout, :status => 500 |
| 266 } | 286 } |
| 267 format.atom { head 500 } | 287 format.atom { head 500 } |
| 268 format.xml { head 500 } | 288 format.xml { head 500 } |
| 269 format.js { head 500 } | 289 format.js { head 500 } |
| 270 format.json { head 500 } | 290 format.json { head 500 } |
| 271 end | 291 end |
| 292 end | |
| 293 | |
| 294 # Picks which layout to use based on the request | |
| 295 # | |
| 296 # @return [boolean, string] name of the layout to use or false for no layout | |
| 297 def use_layout | |
| 298 request.xhr? ? false : 'base' | |
| 272 end | 299 end |
| 273 | 300 |
| 274 def invalid_authenticity_token | 301 def invalid_authenticity_token |
| 275 if api_request? | 302 if api_request? |
| 276 logger.error "Form authenticity token is missing or is invalid. API calls must include a proper Content-type header (text/xml or text/json)." | 303 logger.error "Form authenticity token is missing or is invalid. API calls must include a proper Content-type header (text/xml or text/json)." |
| 343 # Renders a warning flash if obj has unsaved attachments | 370 # Renders a warning flash if obj has unsaved attachments |
| 344 def render_attachment_warning_if_needed(obj) | 371 def render_attachment_warning_if_needed(obj) |
| 345 flash[:warning] = l(:warning_attachments_not_saved, obj.unsaved_attachments.size) if obj.unsaved_attachments.present? | 372 flash[:warning] = l(:warning_attachments_not_saved, obj.unsaved_attachments.size) if obj.unsaved_attachments.present? |
| 346 end | 373 end |
| 347 | 374 |
| 375 # Sets the `flash` notice or error based the number of issues that did not save | |
| 376 # | |
| 377 # @param [Array, Issue] issues all of the saved and unsaved Issues | |
| 378 # @param [Array, Integer] unsaved_issue_ids the issue ids that were not saved | |
| 379 def set_flash_from_bulk_issue_save(issues, unsaved_issue_ids) | |
| 380 if unsaved_issue_ids.empty? | |
| 381 flash[:notice] = l(:notice_successful_update) unless issues.empty? | |
| 382 else | |
| 383 flash[:error] = l(:notice_failed_to_save_issues, | |
| 384 :count => unsaved_issue_ids.size, | |
| 385 :total => issues.size, | |
| 386 :ids => '#' + unsaved_issue_ids.join(', #')) | |
| 387 end | |
| 388 end | |
| 389 | |
| 348 # Rescues an invalid query statement. Just in case... | 390 # Rescues an invalid query statement. Just in case... |
| 349 def query_statement_invalid(exception) | 391 def query_statement_invalid(exception) |
| 350 logger.error "Query::StatementInvalid: #{exception.message}" if logger | 392 logger.error "Query::StatementInvalid: #{exception.message}" if logger |
| 351 session.delete(:query) | 393 session.delete(:query) |
| 352 sort_clear if respond_to?(:sort_clear) | 394 sort_clear if respond_to?(:sort_clear) |
