From 1bf617f8f1bbb3fc0823e4253edc21098b170a83 Mon Sep 17 00:00:00 2001 From: bsag Date: Mon, 19 Mar 2007 09:14:55 +0000 Subject: [PATCH] Actions on the /todos/tag page are now displayed by context, as on the home page. If you don't have any incomplete actions with the specified tag, you'll get a message, but at the moment I can't seem to handle the error that occurs when the tag itself does not exist, so you get kicked back to the index page with a generic server error. Fixes #447. git-svn-id: http://www.rousette.org.uk/svn/tracks-repos/trunk@478 a4c988fc-2ded-0310-b66e-134b36920a42 --- tracks/app/controllers/todos_controller.rb | 27 ++- tracks/app/views/todos/tag.rhtml | 24 +- tracks/db/schema.rb | 270 ++++++++++----------- 3 files changed, 166 insertions(+), 155 deletions(-) diff --git a/tracks/app/controllers/todos_controller.rb b/tracks/app/controllers/todos_controller.rb index 20e508de..e837418d 100644 --- a/tracks/app/controllers/todos_controller.rb +++ b/tracks/app/controllers/todos_controller.rb @@ -239,15 +239,30 @@ class TodosController < ApplicationController # /todos/tag/[tag_name] shows all the actions tagged with tag_name # def tag + @tag = tag_name = params[:name] - tag_collection = Tag.find_by_name(tag_name).todos - if tag_collection.empty? - @todos = [] + + if Tag.find_by_name(tag_name).nil? + # TODO: This doesn't work - you get kicked back to the index + # with a generic "Error occured on the server error" + notify :error, "Tag \'#{@tag}\' does not exist", 2.0 + @not_done_todos = [] else - @todos = tag_collection.find(:all, :conditions => ['taggings.user_id = ? and state = ?', @user.id, 'active']) + tag_collection = Tag.find_by_name(tag_name).todos + @not_done_todos = tag_collection.find(:all, :conditions => ['taggings.user_id = ? and state = ?', @user.id, 'active']) end - @count = @todos.size unless @todos.empty? + @contexts = @user.contexts.find(:all, :include => [ :todos ]) + @contexts_to_show = @contexts.reject {|x| x.hide? } + + @page_title = "TRACKS::Tagged with \'#{@tag}\'" + # If you've set no_completed to zero, the completed items box + # isn't shown on the home page + max_completed = @user.prefs.show_number_completed + @done = @user.completed_todos.find(:all, :limit => max_completed, :include => [ :context, :project, :tags ]) unless max_completed == 0 + # Set count badge to number of items with this tag + @not_done_todos.empty? ? @count = 0 : @count = @not_done_todos.size + end private @@ -410,7 +425,7 @@ class TodosController < ApplicationController render end end - + def render_rss_feed lambda do render_rss_feed_for @todos, :feed => Todo.feed_options(@user), diff --git a/tracks/app/views/todos/tag.rhtml b/tracks/app/views/todos/tag.rhtml index 7e8f9b3b..2361fa15 100644 --- a/tracks/app/views/todos/tag.rhtml +++ b/tracks/app/views/todos/tag.rhtml @@ -1,19 +1,17 @@
- -
+
>

- All actions tagged with '<%= @tag %>' + No actions found

-
-
-

Currently there are no actions tagged with <%= @tag %>

-
- <%= render :partial => "todos/todo", :collection => @todos, :locals => { :parent_container_type => "tag" } %> -
-
- - - +

Currently there are no incomplete actions with the tag '<%= @tag %>', but the tag exists, so you may have completed actions with that tag.

+
+ + <%= render :partial => "contexts/context", :collection => @contexts_to_show, + :locals => { :collapsible => true } %> + <% unless @done.nil? -%> + <%= render :partial => "todos/completed", + :locals => { :done => @done, :collapsible => true, :append_descriptor => nil } %> + <% end -%>
diff --git a/tracks/db/schema.rb b/tracks/db/schema.rb index 261979e3..30fe9b8b 100644 --- a/tracks/db/schema.rb +++ b/tracks/db/schema.rb @@ -1,136 +1,134 @@ -# This file is autogenerated. Instead of editing this file, please use the -# migrations feature of ActiveRecord to incrementally modify your database, and -# then regenerate this schema definition. - -ActiveRecord::Schema.define(:version => 30) do - - create_table "contexts", :force => true do |t| - t.column "name", :string, :default => "", :null => false - t.column "position", :integer, :null => false - t.column "hide", :boolean, :default => false - t.column "user_id", :integer, :default => 1 - t.column "created_at", :datetime - t.column "updated_at", :datetime - end - - add_index "contexts", ["user_id"], :name => "index_contexts_on_user_id" - add_index "contexts", ["user_id", "name"], :name => "index_contexts_on_user_id_and_name" - - create_table "notes", :force => true do |t| - t.column "user_id", :integer, :null => false - t.column "project_id", :integer, :null => false - t.column "body", :text - t.column "created_at", :datetime - t.column "updated_at", :datetime - end - - create_table "open_id_associations", :force => true do |t| - t.column "server_url", :binary - t.column "handle", :string - t.column "secret", :binary - t.column "issued", :integer - t.column "lifetime", :integer - t.column "assoc_type", :string - end - - create_table "open_id_nonces", :force => true do |t| - t.column "nonce", :string - t.column "created", :integer - end - - create_table "open_id_settings", :force => true do |t| - t.column "setting", :string - t.column "value", :binary - end - - create_table "preferences", :force => true do |t| - t.column "user_id", :integer, :null => false - t.column "date_format", :string, :limit => 40, :default => "%d/%m/%Y", :null => false - t.column "week_starts", :integer, :default => 0, :null => false - t.column "show_number_completed", :integer, :default => 5, :null => false - t.column "staleness_starts", :integer, :default => 7, :null => false - t.column "show_completed_projects_in_sidebar", :boolean, :default => true, :null => false - t.column "show_hidden_contexts_in_sidebar", :boolean, :default => true, :null => false - t.column "due_style", :integer, :default => 0, :null => false - t.column "admin_email", :string, :default => "butshesagirl@rousette.org.uk", :null => false - t.column "refresh", :integer, :default => 0, :null => false - t.column "verbose_action_descriptors", :boolean, :default => false, :null => false - t.column "show_hidden_projects_in_sidebar", :boolean, :default => true, :null => false - t.column "time_zone", :string, :default => "London", :null => false - t.column "show_project_on_todo_done", :boolean, :default => false, :null => false - t.column "title_date_format", :string, :default => "%A, %d %B %Y", :null => false - end - - add_index "preferences", ["user_id"], :name => "index_preferences_on_user_id" - - create_table "projects", :force => true do |t| - t.column "name", :string, :default => "", :null => false - t.column "position", :integer, :null => false - t.column "user_id", :integer, :default => 1 - t.column "description", :text - t.column "state", :string, :limit => 20, :default => "active", :null => false - t.column "created_at", :datetime - t.column "updated_at", :datetime - end - - add_index "projects", ["user_id"], :name => "index_projects_on_user_id" - add_index "projects", ["user_id", "name"], :name => "index_projects_on_user_id_and_name" - - create_table "sessions", :force => true do |t| - t.column "session_id", :string - t.column "data", :text - t.column "updated_at", :datetime - end - - add_index "sessions", ["session_id"], :name => "index_sessions_on_session_id" - - create_table "taggings", :force => true do |t| - t.column "taggable_id", :integer - t.column "tag_id", :integer - t.column "taggable_type", :string - t.column "user_id", :integer - end - - add_index "taggings", ["tag_id", "taggable_id", "taggable_type"], :name => "index_taggings_on_tag_id_and_taggable_id_and_taggable_type" - - create_table "tags", :force => true do |t| - t.column "name", :string - t.column "created_at", :datetime - t.column "updated_at", :datetime - end - - add_index "tags", ["name"], :name => "index_tags_on_name" - - create_table "todos", :force => true do |t| - t.column "context_id", :integer, :null => false - t.column "project_id", :integer - t.column "description", :string, :default => "", :null => false - t.column "notes", :text - t.column "created_at", :datetime - t.column "due", :date - t.column "completed_at", :datetime - t.column "user_id", :integer, :default => 1 - t.column "show_from", :date - t.column "state", :string, :limit => 20, :default => "immediate", :null => false - end - - add_index "todos", ["user_id", "state"], :name => "index_todos_on_user_id_and_state" - add_index "todos", ["user_id", "project_id"], :name => "index_todos_on_user_id_and_project_id" - add_index "todos", ["project_id"], :name => "index_todos_on_project_id" - add_index "todos", ["context_id"], :name => "index_todos_on_context_id" - add_index "todos", ["user_id", "context_id"], :name => "index_todos_on_user_id_and_context_id" - - create_table "users", :force => true do |t| - t.column "login", :string, :limit => 80, :default => "", :null => false - t.column "password", :string, :limit => 40, :default => "", :null => false - t.column "word", :string - t.column "is_admin", :boolean, :default => false, :null => false - t.column "first_name", :string - t.column "last_name", :string - t.column "auth_type", :string, :default => "database", :null => false - t.column "open_id_url", :string - end - - add_index "users", ["login"], :name => "index_users_on_login" - -end +# This file is autogenerated. Instead of editing this file, please use the +# migrations feature of ActiveRecord to incrementally modify your database, and +# then regenerate this schema definition. + +ActiveRecord::Schema.define(:version => 30) do + + create_table "contexts", :force => true do |t| + t.column "name", :string, :default => "", :null => false + t.column "position", :integer, :default => 0, :null => false + t.column "hide", :boolean, :default => false + t.column "user_id", :integer, :default => 1 + t.column "created_at", :datetime + t.column "updated_at", :datetime + end + + add_index "contexts", ["user_id", "name"], :name => "index_contexts_on_user_id_and_name" + + create_table "notes", :force => true do |t| + t.column "user_id", :integer, :default => 0, :null => false + t.column "project_id", :integer, :default => 0, :null => false + t.column "body", :text + t.column "created_at", :datetime + t.column "updated_at", :datetime + end + + create_table "open_id_associations", :force => true do |t| + t.column "server_url", :binary + t.column "handle", :string + t.column "secret", :binary + t.column "issued", :integer + t.column "lifetime", :integer + t.column "assoc_type", :string + end + + create_table "open_id_nonces", :force => true do |t| + t.column "nonce", :string + t.column "created", :integer + end + + create_table "open_id_settings", :force => true do |t| + t.column "setting", :string + t.column "value", :binary + end + + create_table "preferences", :force => true do |t| + t.column "user_id", :integer, :default => 0, :null => false + t.column "date_format", :string, :limit => 40, :default => "%d/%m/%Y", :null => false + t.column "week_starts", :integer, :default => 0, :null => false + t.column "show_number_completed", :integer, :default => 5, :null => false + t.column "staleness_starts", :integer, :default => 7, :null => false + t.column "show_completed_projects_in_sidebar", :boolean, :default => true, :null => false + t.column "show_hidden_contexts_in_sidebar", :boolean, :default => true, :null => false + t.column "due_style", :integer, :default => 0, :null => false + t.column "admin_email", :string, :default => "butshesagirl@rousette.org.uk", :null => false + t.column "refresh", :integer, :default => 0, :null => false + t.column "verbose_action_descriptors", :boolean, :default => false, :null => false + t.column "show_hidden_projects_in_sidebar", :boolean, :default => true, :null => false + t.column "time_zone", :string, :default => "London", :null => false + t.column "show_project_on_todo_done", :boolean, :default => false, :null => false + t.column "title_date_format", :string, :default => "%A, %d %B %Y", :null => false + end + + add_index "preferences", ["user_id"], :name => "index_preferences_on_user_id" + + create_table "projects", :force => true do |t| + t.column "name", :string, :default => "", :null => false + t.column "position", :integer, :default => 0, :null => false + t.column "user_id", :integer, :default => 1 + t.column "description", :text + t.column "state", :string, :limit => 20, :default => "active", :null => false + t.column "created_at", :datetime + t.column "updated_at", :datetime + end + + add_index "projects", ["user_id", "name"], :name => "index_projects_on_user_id_and_name" + + create_table "sessions", :force => true do |t| + t.column "session_id", :string + t.column "data", :text + t.column "updated_at", :datetime + end + + add_index "sessions", ["session_id"], :name => "sessions_session_id_index" + + create_table "taggings", :force => true do |t| + t.column "taggable_id", :integer + t.column "tag_id", :integer + t.column "taggable_type", :string + t.column "user_id", :integer + end + + add_index "taggings", ["tag_id", "taggable_id", "taggable_type"], :name => "index_taggings_on_tag_id_and_taggable_id_and_taggable_type" + + create_table "tags", :force => true do |t| + t.column "name", :string + t.column "created_at", :datetime + t.column "updated_at", :datetime + end + + add_index "tags", ["name"], :name => "index_tags_on_name" + + create_table "todos", :force => true do |t| + t.column "context_id", :integer, :default => 0, :null => false + t.column "project_id", :integer + t.column "description", :string, :default => "", :null => false + t.column "notes", :text + t.column "created_at", :datetime + t.column "due", :date + t.column "completed_at", :datetime + t.column "user_id", :integer, :default => 1 + t.column "show_from", :date + t.column "state", :string, :limit => 20, :default => "immediate", :null => false + end + + add_index "todos", ["user_id", "state"], :name => "index_todos_on_user_id_and_state" + add_index "todos", ["user_id", "project_id"], :name => "index_todos_on_user_id_and_project_id" + add_index "todos", ["project_id"], :name => "index_todos_on_project_id" + add_index "todos", ["context_id"], :name => "index_todos_on_context_id" + add_index "todos", ["user_id", "context_id"], :name => "index_todos_on_user_id_and_context_id" + + create_table "users", :force => true do |t| + t.column "login", :string, :limit => 80, :default => "", :null => false + t.column "password", :string, :limit => 40, :default => "", :null => false + t.column "word", :string + t.column "is_admin", :boolean, :default => false, :null => false + t.column "first_name", :string + t.column "last_name", :string + t.column "auth_type", :string, :default => "database", :null => false + t.column "open_id_url", :string + end + + add_index "users", ["login"], :name => "index_users_on_login" + +end