diff --git a/tracks/app/controllers/application.rb b/tracks/app/controllers/application.rb index e040795a..8f7ef3f4 100644 --- a/tracks/app/controllers/application.rb +++ b/tracks/app/controllers/application.rb @@ -66,6 +66,10 @@ class ApplicationController < ActionController::Base redirect_with_flash message, options end + def render_failure message, status = 404 + render :text => message, :status => status + end + private def get_current_user diff --git a/tracks/app/controllers/backend_controller.rb b/tracks/app/controllers/backend_controller.rb index 51ec3e1c..6507bfba 100644 --- a/tracks/app/controllers/backend_controller.rb +++ b/tracks/app/controllers/backend_controller.rb @@ -32,14 +32,14 @@ class BackendController < ApplicationController # Check whether the token in the URL matches the word in the User's table def check_token_against_user_word(username, token) @user = User.find_by_login( username ) - unless ( token == @user.word) - raise (InvalidToken, "Sorry, you don't have permission to perform this action.") + unless (token == @user.word) + raise(InvalidToken, "Sorry, you don't have permission to perform this action.") end end def check_context_belongs_to_user(context_id) unless @user.contexts.exists? context_id - raise (CannotAccessContext, "Cannot access a context that does not belong to this user.") + raise(CannotAccessContext, "Cannot access a context that does not belong to this user.") end end diff --git a/tracks/app/controllers/context_controller.rb b/tracks/app/controllers/context_controller.rb index c3ead4de..8ab6f991 100644 --- a/tracks/app/controllers/context_controller.rb +++ b/tracks/app/controllers/context_controller.rb @@ -32,14 +32,33 @@ class ContextController < ApplicationController @page_title = "TRACKS::Context: #{@context.name}" end - # Creates a new context via Ajax helpers + # Example XML usage: curl -H 'Accept: application/xml' -H 'Content-Type: application/xml' + # -u username:password + # -d 'new context_name' + # http://our.tracks.host/context/create # - def new_context + def create @context = @user.contexts.build - @context.attributes = params['context'] + params_are_invalid = true + if (params['context'] || (params['request'] && params['request']['context'])) + @context.attributes = params['context'] || params['request']['context'] + params_are_invalid = false + end @context.name = deurlize(@context.name) @saved = @context.save @context_not_done_counts = { @context.id => 0 } + respond_to do |wants| + wants.js + wants.xml do + if @context.new_record? && params_are_invalid + render_failure "Expected post format is xml like so: context name." + elsif @context.new_record? + render_failure @context.errors.full_messages.join(', ') + else + render :xml => @context.to_xml( :except => :user_id ) + end + end + end end # Called by a form button diff --git a/tracks/app/controllers/project_controller.rb b/tracks/app/controllers/project_controller.rb index ac6c0404..9f1bdfb8 100644 --- a/tracks/app/controllers/project_controller.rb +++ b/tracks/app/controllers/project_controller.rb @@ -56,12 +56,33 @@ class ProjectController < ApplicationController end end - def new_project + # Example XML usage: curl -H 'Accept: application/xml' -H 'Content-Type: application/xml' + # -u username:password + # -d 'new project_name' + # http://our.tracks.host/project/create + # + def create @project = @user.projects.build - @project.attributes = params['project'] + params_are_invalid = true + if (params['project'] || (params['request'] && params['request']['project'])) + @project.attributes = params['project'] || params['request']['project'] + params_are_invalid = false + end @project.name = deurlize(@project.name) @saved = @project.save @project_not_done_counts = { @project.id => 0 } + respond_to do |wants| + wants.js + wants.xml do + if @project.new_record? && params_are_invalid + render_failure "Expected post format is xml like so: project name." + elsif @project.new_record? + render_failure @project.errors.full_messages.join(', ') + else + render :xml => @project.to_xml( :except => :user_id ) + end + end + end end # Called by a form button diff --git a/tracks/app/controllers/todo_controller.rb b/tracks/app/controllers/todo_controller.rb index cfedb562..3002c3bd 100644 --- a/tracks/app/controllers/todo_controller.rb +++ b/tracks/app/controllers/todo_controller.rb @@ -47,16 +47,14 @@ class TodoController < ApplicationController end end - # Called by a form button - # Parameters from form fields are passed to create new action - # in the selected context. - def add_item + def create init @item = @user.todos.build - @item.attributes = params["todo"] + p = params['todo'] || params['request']['todo'] + @item.attributes = p if @item.due? - @item.due = parse_date_per_user_prefs(params["todo"]["due"]) + @item.due = parse_date_per_user_prefs(p["due"]) else @item.due = "" end @@ -70,7 +68,7 @@ class TodoController < ApplicationController init_todos @up_count = @todos.reject { |x| x.done? or x.context.hide? }.size.to_s end - render + render :action => 'create' end wants.xml { render :xml => @item.to_xml( :root => 'todo', :except => :user_id ) } end @@ -86,6 +84,10 @@ class TodoController < ApplicationController wants.xml { render :text => 'An error occurred on the server.' + $! } end end + + def add_item + create + end def edit init diff --git a/tracks/app/controllers/user_controller.rb b/tracks/app/controllers/user_controller.rb index 1e8d6e68..338825eb 100644 --- a/tracks/app/controllers/user_controller.rb +++ b/tracks/app/controllers/user_controller.rb @@ -18,7 +18,7 @@ class UserController < ApplicationController # Example usage: curl -H 'Accept: application/xml' -H 'Content-Type: application/xml' # -u admin:up2n0g00d # -d 'usernameabc123' - # http://our.tracks.host/cpa/create_user + # http://our.tracks.host/user/create # def create admin = User.find_admin @@ -108,11 +108,7 @@ class UserController < ApplicationController end private - - def render_failure message, status = 404 - render :text => message, :status => status - end - + def check_create_user_params return false unless params.has_key?(:request) return false unless params[:request].has_key?(:login) diff --git a/tracks/app/views/context/_context_listing.rhtml b/tracks/app/views/context/_context_listing.rhtml index 4dc2ae50..1cbb6ae2 100644 --- a/tracks/app/views/context/_context_listing.rhtml +++ b/tracks/app/views/context/_context_listing.rhtml @@ -41,7 +41,7 @@ <%= end_form_tag %> -<% if controller.action_name == 'new_context' %> +<% if controller.action_name == 'create' %> diff --git a/tracks/app/views/context/new_context.rjs b/tracks/app/views/context/create.rjs similarity index 100% rename from tracks/app/views/context/new_context.rjs rename to tracks/app/views/context/create.rjs diff --git a/tracks/app/views/context/list.rhtml b/tracks/app/views/context/list.rhtml index 39faec8c..3d31d992 100644 --- a/tracks/app/views/context/list.rhtml +++ b/tracks/app/views/context/list.rhtml @@ -16,7 +16,7 @@ Create new context » -<% if controller.action_name == 'new_project' %> +<% if controller.action_name == 'create' %> diff --git a/tracks/app/views/project/new_project.rjs b/tracks/app/views/project/create.rjs similarity index 100% rename from tracks/app/views/project/new_project.rjs rename to tracks/app/views/project/create.rjs diff --git a/tracks/app/views/project/list.rhtml b/tracks/app/views/project/list.rhtml index 5f53798c..b8c570bb 100644 --- a/tracks/app/views/project/list.rhtml +++ b/tracks/app/views/project/list.rhtml @@ -15,7 +15,7 @@ Create new project »