Skip to content

Commit

Permalink
Rework user-interface for editing recurring tasks
Browse files Browse the repository at this point in the history
  • Loading branch information
wvengen committed May 8, 2015
1 parent a8a434e commit a00e7c9
Show file tree
Hide file tree
Showing 7 changed files with 79 additions and 58 deletions.
30 changes: 14 additions & 16 deletions app/controllers/tasks_controller.rb
@@ -1,21 +1,21 @@
# encoding: utf-8
class TasksController < ApplicationController
#auto_complete_for :user, :nick

def index
@non_group_tasks = Task.non_group.includes(assignments: :user)
@groups = Workgroup.includes(open_tasks: {assignments: :user})
end

def user
@unaccepted_tasks = Task.unaccepted_tasks_for(current_user)
@accepted_tasks = Task.accepted_tasks_for(current_user)
end

def new
@task = Task.new(current_user_id: current_user.id)
end

def create
@task = Task.new(params[:task])
if params[:periodic]
Expand All @@ -27,19 +27,17 @@ def create
render :template => "tasks/new"
end
end

def show
@task = Task.find(params[:id])
end

def edit
@task = Task.find(params[:id])
@periodic = !!params[:periodic]
@task.current_user_id = current_user.id
if @task.periodic?
flash.now[:alert] = I18n.t('tasks.edit.warning_periodic').html_safe
end
end

def update
@task = Task.find(params[:id])
task_group = @task.periodic_task_group
Expand All @@ -61,7 +59,7 @@ def update
render :template => "tasks/edit"
end
end

def destroy
task = Task.find(params[:id])
# Save user_ids to update apple statistics after destroy
Expand All @@ -76,7 +74,7 @@ def destroy

redirect_to tasks_url, :notice => I18n.t('tasks.destroy.notice')
end

# assign current_user to the task and set the assignment to "accepted"
# if there is already an assignment, only accepted will be set to true
def accept
Expand All @@ -88,23 +86,23 @@ def accept
end
redirect_to user_tasks_path, :notice => I18n.t('tasks.accept.notice')
end

# deletes assignment between current_user and given task
def reject
Task.find(params[:id]).users.delete(current_user)
redirect_to :action => "index"
end

def set_done
Task.find(params[:id]).update_attribute :done, true
redirect_to tasks_url, :notice => I18n.t('tasks.set_done.notice')
end

# Shows all tasks, which are already done
def archive
@tasks = Task.done.page(params[:page]).per(@per_page).order('tasks.updated_on DESC').includes(assignments: :user)
end

# shows workgroup (normal group) to edit weekly_tasks_template
def workgroup
@group = Group.find(params[:workgroup_id])
Expand Down
42 changes: 11 additions & 31 deletions app/views/tasks/_form.html.haml
@@ -1,31 +1,11 @@
- content_for :javascript do
:javascript
$(function() {
$("#task_user_list").tokenInput("#{users_path(:format => :json)}", {
crossDomain: false,
prePopulate: $("#task_user_list").data("pre"),
hintText: '#{escape_javascript(t('.search.hint'))}',
noResultText: '#{escape_javascript(t('.search.noresult'))}',
searchingText: '#{escape_javascript(t('.search.placeholder'))}',
theme: 'facebook'
});
});

- content_for :sidebar do
= render "shared/workgroup_members"

= simple_form_for @task do |f|
= f.hidden_field :current_user_id
= f.input :name
= f.input :description, as: :text, input_html: {rows: 10}
= f.input :duration, :as => :select, :collection => 1..3
= f.input :user_list, :as => :string, :input_html => { 'data-pre' => @task.users.map(&:token_attributes).to_json }
= f.input :required_users
= f.association :workgroup
= f.input :due_date, as: :date_picker
= f.input :done
.form-actions
= f.submit class: 'btn btn-primary'
- if @task.new_record? or @task.periodic?
= f.submit t('.submit.periodic'), name: 'periodic', class: 'btn'
= link_to t('ui.or_cancel'), :back
= form.hidden_field :current_user_id
= form.input :name
= form.input :description, as: :text, input_html: {rows: 10}
= form.input :duration, :as => :select, :collection => 1..3
- unless local_assigns[:periodic]
= form.input :user_list, :as => :string, :input_html => { 'data-pre' => form.object.users.map(&:token_attributes).to_json }
= form.input :required_users
= form.association :workgroup
= form.input :due_date, as: :date_picker
- unless local_assigns[:periodic]
= form.input :done
15 changes: 15 additions & 0 deletions app/views/tasks/_form_sidebar.html.haml
@@ -0,0 +1,15 @@
- content_for :javascript do
:javascript
$(function() {
$("#task_user_list").tokenInput("#{users_path(:format => :json)}", {
crossDomain: false,
prePopulate: $("#task_user_list").data("pre"),
hintText: '#{escape_javascript(t('.search.hint'))}',
noResultText: '#{escape_javascript(t('.search.noresult'))}',
searchingText: '#{escape_javascript(t('.search.placeholder'))}',
theme: 'facebook'
});
});

- content_for :sidebar do
= render "shared/workgroup_members"
16 changes: 14 additions & 2 deletions app/views/tasks/edit.haml
@@ -1,3 +1,15 @@
- title t('.title')
- title @periodic ? t('.title_periodic') : t('.title')

= render 'form'
- if @task.periodic? && !@periodic
.alert.alert-info= raw t('tasks.edit.warning_periodic')

= render 'form_sidebar'

= simple_form_for @task do |form|
= render 'form', form: form, periodic: @periodic
.form-actions
- if @periodic
= form.submit t('.submit_periodic'), name: 'periodic', class: 'btn btn-primary'
- else
= form.submit class: 'btn btn-primary'
= link_to t('ui.or_cancel'), :back
9 changes: 8 additions & 1 deletion app/views/tasks/new.haml
@@ -1,3 +1,10 @@
- title t('.title')

= render 'form'
= render 'form_sidebar'

= simple_form_for @task do |form|
= render 'form', form: form, periodic: nil
.form-actions
= form.submit class: 'btn btn-primary'
= form.submit t('.submit_periodic'), name: 'periodic', class: 'btn'
= link_to t('ui.or_cancel'), :back
16 changes: 11 additions & 5 deletions app/views/tasks/show.haml
Expand Up @@ -10,7 +10,7 @@
%dd= simple_format(@task.description)
- if @task.due_date.present?
%dt= heading_helper Task, :due_date
%dd
%dd
= format_date(@task.due_date)
- if @task.periodic?
%i.icon-repeat{title: t('tasks.repeated')}
Expand All @@ -30,8 +30,14 @@
- unless @task.done?
= link_to t('.mark_done'), set_done_task_path(@task), method: :post, class: 'btn'
= link_to t('ui.edit'), edit_task_path(@task), class: 'btn'
= link_to t('ui.delete'), task_path(@task), :method => :delete, :data => {:confirm => t('.confirm_delete_single')},
class: 'btn btn-danger'
- if @task.periodic?
= link_to t('.delete_group'), task_path(@task, periodic: true), method: :delete,
:data => {confirm: t('.confirm_delete_group')}, class: 'btn btn-danger'
= link_to edit_task_path(@task, periodic: true), class: 'btn' do
%i.icon.icon-repeat
= t('.edit_group')
= link_to t('ui.delete'), task_path(@task), method: :delete, class: 'btn btn-danger',
data: {confirm: @task.periodic? ? t('.confirm_delete_single_from_group') : t('.confirm_delete_single')}
- if @task.periodic?
= link_to task_path(@task, periodic: true), method: :delete, class: 'btn btn-danger',
data: {confirm: t('.confirm_delete_group')} do
%i.icon.icon-repeat
= t('.delete_group')
9 changes: 6 additions & 3 deletions config/locales/en.yml
Expand Up @@ -1624,15 +1624,15 @@ en:
notice: Task has been deleted
edit:
title: Edit task
title_periodic: Edit periodic task
submit_periodic: Save periodic task
warning_periodic: "<strong>Warning:</strong> This task is part of a group of <em>weekly tasks</em>. When saving it will be excluded from the group and it will be converted to a <em>regular task</em>."
error_not_found: No workgroup found
form:
search:
hint: Search for user
noresult: No user found
placeholder: Search ...
submit:
periodic: Save weekly task
index:
show_group_tasks: Show group tasks
title: Tasks
Expand All @@ -1653,15 +1653,18 @@ en:
new_task: Create new task
pages: Pages
new:
title: Create new tasks
title: Create new task
submit_periodic: Create periodic task
repeated: Task is repeated weekly
set_done:
notice: The state of the task has been updated
show:
accept_task: Accept task
confirm_delete_group: Really delete this and all subsequent tasks?
confirm_delete_single: Are you sure you want to delete the task?
confirm_delete_single_from_group: Are you sure you want to delete this task (and keep related periodic tasks)?
delete_group: Delete task and subsequent
edit_group: Edit periodic
hours: "%{count}h"
mark_done: Mark task as done
reject_task: Reject task
Expand Down

0 comments on commit a00e7c9

Please sign in to comment.